한빛출판사 정성호 저 <쉽게 배우는 운영체제>를 참고하여 작성하였습니다.

1. 메모리 관리란?

 컴퓨터의 운영체제를 포함한 모든 응용 프로그램은 실행 되기 위해 메모리에 올라와야 한다. 이때 메모리의 작업 공간은 한정 되어 있으므로 메모리 공간을 잘 관리하는 것은 아주 중요한 문제이다. 메모리 관리응 메모리 관리자가 담당하는데, 메모리 관리자는 프로세스가 필요로 하는 데이터를 메모리로 언제 가져올지, 메모리의 어느 부분에 배정할지, 메모리의 공간이 부족할 때 어느 프로세스를 언제 내보내야 할 것인지를 결정한다.

2. 메모리 주소

1) 운영체제 영역과 사용자 영역

 메모리 영역은 운영체제 영역과 사용자 영역으로 나눌 수 있다. 운영체제 영역은 시스템을 관리하는 중요한 역할을 하므로, 사용자가 사용자 영역에만 접근하고 운영체제 영역에는 접근하지 못하도록 메모리를 관리해야 한다.

 

메모리

 위 예시 메모리에서는 0~100번지까지를 운영체제 영역으로, 101~400번지를 사용자 영역으로 사용하고 있다. 이때 사용자 프로세스는 101번지부터 적재되어야 할 것이다. 그러나 이러한 방식으로 배치를 하게 되면 운영체제 영역이 메모리를 더 필요로 할 때마다 사용자 영역의 시작 위치가 달라질 것이다. (예컨대 갑자기 운영체제 영역이 150번지까지 필요로 하면 사용자 영역의 시작 위치를 151번으로 바꾸어야 할 것이다.) 이러한 문제를 해결하기 위한 방법 중 메모리를 거꾸로 사용하는 방법이 있다. 즉 사용자 프로세스를 101번이 아닌 400번부터 시작하여 399번, 398번.. 과 같이 거꾸로 배치하는 것이다. 그러나 이 방법 역시 메모리를 거꾸로 사용하기 위해 주소를 변경하는 것이 번거롭다는 단점이 있다.

경계 레지스터

  사용자 영역이 운영체제 영역을 침범하지 않게 하기 위해서 경계 레지스터를 사용한다. 경계 레지스터는 CPU에 위치하며, 말 그대로 운영체제 영역과 사용자 영역의 경계 지점의 주소를 가진다. 메모리 관리자는 사용자가 작업을 요청할 때마다 경계 레지스터의 값을 넘어가지는 않는지 체크하고, 경계 레지스터의 값을 넘어갈 시 프로세스를 종료한다.

 

2) 절대주소와 상대주소

절대주소와 상대주소

 절대주소는 물리주소라고도 하는데, 메모리 관리자 입장에서 바라본 주소이다. 그러나 사용자 입장에서는 운영체제는 어차피 사용하지 못하는 공간이므로 절대주소를 사용할 필요 없이 사용자 영역의 시작점을 0으로 두고 주소를 세도 되는데 이를 상대주소라고 한다. 이때 절대 주소를 사용하는 공간을 절대 주소 공간이라하고 상대 주소를 사용하는 공간을 논리 주소 공간이라고 부른다.

 메모리에 접근할 때 절대 주소를 사용하면 바로 위치를 찾아 작업을 할 수 있지만, 상대 주소를 사용하면 상대주소를 절대주소로 변환하는 과정이 필요하다. 상대 주소를 절대 주소로 변환은 재배치 레지스터를 이용하여 이루어진다. 프로세스가 상대주소 100번지에 있는 데이터를 요청하면, cpu가 메모리 관리자에게 100번지에 있는 내용을 가져오라고 명령하고, 메로리 관리자는 운영체제가 끝나는 지점인 100번지를 상대주소 100번지에 더해 절대주소가 되는 200번지로 변환한다.

 

3. 메모리 오버레이와 스왑

메모리 오버레이와 스왑은 메모리에 한 번에 하나의 프로세스만 올리는 단순 메모리 구조에서 사용하는 개념이다. 메모리에 한 번에 여러 프로세스를 올릴 때 사용하는 개념인 메모리 분할 방식은 4번에서 본격적으로 알아볼 것이다.

 

1) 메모리 오버레이(memory overlay)

 프로그램의 크기가 클 때 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라서 가져오는 기법을 메모리 오버레이라고 한다. 전체 프로그램의 크기가 너무 커서 이를 모두 메모리에 올려 놓기 부담스러울 경우에 실행하는데 중요한 모듈만 올려놓고 나머지는 필요할 때마다 메모리에 가져와 사용하는 것이다. 메모리 오버레이를 사용하면 한정된 메모리보다 더 큰 프로그램도 실행할 수 있다.

 

2) 스왑(swap)

모듈 A를 메모리에서 내보내고 모듈 B를 메모리로 스왑인

  메모리 오버레이를 이용하면 전체 프로세스를 메모리에 올리지 않아도 실행이 가능하다고 하였다. 위 그림은 공통 모듈과 모듈 A, 모듈 B로 이루어진 프로세스를 메모리 오버레이를 이용하여 실행하는 장면이다. 모듈 A가 메모리에 올라와 있다가, 모듈 B를 사용하기 위해 모듈 A를 하드디스크로 내보내고 모듈 B를 메모리에 올린 것이다. 이때 쫓겨난 모듈A는 하드디스크의 스왑 영역으로 이동한다. 아직 프로세스의 작업이 끝나지 않았고, 언제 다시 사용할지 모르기 때문에 하드디스크의 아무 곳에나 놓지 않고 스왑 영역이라는 별도의 공간에 보관한다. 이때 스왑 영역에서 데이터를 가져오는 작업을 스왑인이라고 하며 스왑 메모리에서 스왑 역역으로 데이터를 내보내는 작업을 스왑 아웃이라고 한다.

 

4. 메모리 분할 방식

메모리 분할 방식에는 크게 가변 분할 방식과 고정 분할 방식이 있다.  이 둘은 메모리에 한 번에 여러 프로세스를 올릴 때 사용하는 개념으로, 가변 분할 방식은 프로세스의 크기에 따라 메모리를 나누는 것을 의미하며 고정 분할 방식은 프로세스의 크기와 상관 없이 메모리를 같은 크기로 나누는 것이다. 두 방법 모두 장단점이 존재한다.

 

1) 가변 분할 방식

가변 분할 방식

가변 분할 방식은 프로세스의 크기에 따라 메모리를 나누는 것이다. 따라서 첫번째 메모리를 보면 프로세스가 메모리에 빈 공간 없이 들어찬 것을 확인해볼 수 있다. 이렇게 프로세스를 한 덩어리로 처리하여 하나의 프로세스를 연속된 공간에 배치할 수 있다는 것이 가변 분할 방식의 장점이다.

 그런데 만약 몇몇 프로세스들이 작업을 마치고 메모리에서 빠져나가면 두번째 메모리와 같은 모습으로 변한다. 이런 식으로  가변 분할 방식에서 메모리에 빈 공간이 발생하는 것을 외부단편화라고 하는데, 이 경우 프로세스 B와 프로세스 D보다 큰 프로세스는 메모리에 들어올 수 없게 된다. 이 경우  조각 모음을 이용하여 문제를 해결한다. 조각 모음이란 외부 단편화로 발생한 작은 조각들을 모아서 하나의 큰 덩어리로 만드는 작업을 말한다. 만약 두번째 메모리와 같이 외부 단편화가 발생한 시점에서 조각모음을 시행하면 마지막 메모리와 같은 모습이 될 것이다.

 

cf) 메모리 배치 방식

가변 분할 방식에는 최초 배지, 최적 배치, 최악 배치, 버디 시스템이라는 배치 방식이 존재한다. 필요에 따라 다양한 메모리 배치 방식을 사용하여 메모리 효율성을 높이는 것이 중요하다.

① 최초 배치

 최초 배치는 프로세스를 메모리의 빈 공간에 배치 할 때 메모리에서 적재 가능한 공간을 순서대로 찾다가 첫 번째로 발견한 빈 공간에 프로세스를 배치하는 방법이다.

② 최적 배치

 최적 배치는 메모리의 빈 공간을 모두 확인한 후 메모리가 들어갈 수 있는 공간 중 가장 작은 공간에 프로세스를 배치하는 방법이다. 이 경우 딱 맞는 공간이 있다면 외부 단편화가 일어나지 않을 것이다.

③ 최악 배치

 최악 배치는 최적 배치와 반대로 빈 공간을 모두 확인한 후 가장 큰 공간에 프로세스를 배치하는 방법이다.이러한 방법을 빈 공간의 크기가 넉넉할 때 사용한다면 작은 조각을 만들어내지 않으므로 효과적일 수 있다.

 

2) 고정 분할 방식

고정 분할 방식

고정 분할 방식은 프로세스는 일정한 크기대로 메모리를 나누는 메모리 분할 방식이다. 만약 한 공간 안에 하나의 프로세스가 들어가지 않으면 다른 공간에 나누어 배치한다. 따라서 위 그림처럼 같은 프로세스 A라도 서로 떨어진 메모리 공간에 배치 될 수 있다. 메모리를 일정한 크기로 나누어 관리하기 때문에 조각 모음과 같은 부가적인 작업을 할 필요가 없다는 것이 고정 분할 방식의 장점이다.

 하지만 나누어진 공간보다 프로세스의 크기가 작은 경우 위처럼 내부 단편화가 발생하면서 공간이 낭비되기도 한다는 단점이 있다.

 

3) 버디 시스템

버디 시스템

  버디 시스템은 가변 분할 방식과 고정 분할 방식이 합쳐진 방법으로 프로세스의 크기에 맞게 메모리를 1/2로 자르고 프로세스를 메모리에 배치하는 방법이다. 나뉜 구역에는 프로세스가 한 개씩만 들어간다. 이 과정에서 나뉜 구역보다 프로세스의 크기가 작아 위 메모리 그림의 오른쪽 끝처럼 내부 단편화가 발생하기도 한다. 이 때, 프로세스가 종료되면 주변의 빈 조각끼리 합쳐져 하나의 큰 덩어리가 된다.

 버디 시스템은 가변 분할 방식과 달리 비슷한 조각이 서로 모여 있기 때문에 작은 조각을 합쳐 큰 덩어리를 만드는 것이 쉽다는 장점이 있다. 가변 분할 방식의 경우 여러 크기의 조각들이 중구난방으로 흩어져 있어 조각 모음을 위해 큰 덩어리를 옮겨야 할 때가 많으나 버디 시스템은 그렇지 않다. 즉 버디 시스템이 가변 분할 방식보다 메모리 공간 관리가 더 편리하다.

+ Recent posts