[기술면접] 운영체제 : 메모리 연속 할당 방식과 주소 바인딩

Alice·2023년 9월 13일
0

파일시스템에 존재하는 프로그램을 실행하면 메모리에 프로그램이 적재된다. 이것을 프로세스라 명칭한다. 프로세스를 메모리에 적재하는 방식에는 여러가지가 있다. 연속 할당 방식불연속 할당 방식이 있다. 이중 연속 할당 방식과 그에 해당하는 주소바인딩 방식을 알아보자.


연속 할당 방식

연속 할당 방식이란 프로세스를 물리적 메모리의 빈 공간에 순차적으로 적재한다는 것을 의미한다. 연속 할당 방식에는 고정 분할 방식가변 분할 방식이 존재한다.


고정 분할 방식

고정 분할 방식은 프로세스를 적재하기 이전에 미리 물리적 메모리를 고정된 크기로 분할하고, 빈 공간에 프로세스를 적재하는 방식이다. 따라서 프로세스의 크기가 분할된 공간보다 큰 경우, 프로세스를 적재할 수 없다. 따라서 수행 가능한 프로세스의 최대 크기가 제한된다.

외부조각 문제와 내부조각 문제

고정 분할 방식에는 내부 조각 문제외부 조각 문제가 발생한다. 외부 조각 문제는 메모리 상에 빈 공간이 있음에도, 프로세스의 크기가 빈 공간보다 크기때문에 적재하지 못하여 메모리 공간이 낭비되는 상황을 의미한다. 하지만 만약 빈 공간보다 작은 프로세스가 존재한다면 이를 적재할 수 있다.

내부 조각 문제는 프로세스의 크기보다 큰 메모리 공간을 프로세스에게 할당하여 남는 메모리 공간이 낭비되는 상황을 의미한다. 외부 조각 문제와 다르게 이 경우는 이미 해당 공간을 하나의 프로세스에게 준 것이기 때문에 크기가 작은 프로세스가 들어와도 메모리에 적재하는 것이 불가능하다.


가변 분할 방식

가변 분할 방식은 고정 분할 방식과 다르게, 프로세스의 크기와 갯수에 따라서 메모리 공간의 크기도 가변적으로 분할되는 방식이다. 프로세스의 크기보다 더 큰 메모리 공간을 할당할 이유는 없기 때문에 내부 조각 문제는 발생하지 않는다. 하지만 기존에 자리를 차지하고 실행중이던 프로세스가 종료되고 남은자리가 생기면서 메모리 상에 여러개의 빈 공간이 생긴다. 이렇게 생긴 여러개의 빈 공간에 어떤 프로세스를 적재할지 결정하는 문제를 동적 메모리 할당 문제 라고 한다.



동적 메모리 할당 방식에는 대표적으로 3가지 방법이 있다.

First-Fit 방식은 메모리 공간을 순차적으로 탐색하다가 프로세스의 크기보다 큰 공간을 발견하면, 가장 처음 발견된 공간에 프로세스를 적재한다. 이 과정에서 프로세스의 크기보다 훨씬 더 큰 공간에 적재되면 메모리 낭비가 발생한다.

Best-Fit 방식은 메모리 공간을 모두 탐색한 후, 프로세스의 크기보다 큰 공간들 중 가장 작은 공간에 프로세스를 적재한다. 메모리 공간을 모두 탐색해야되서 탐색 시간이 길다. 하지만 공간 효율성은 좋다.

Worst-Fit 방식은 메모리 공간을 모두 탐색한 후, 가장 커다란 공간에 프로세스를 적재하는 방식이다. 탐색시간도 길고 공간 효율성도 최악이다.

이중 속도와 공간을 모두 고려하였을때 First-Fit 이 평균적으로 가장 우수한 성능을 보인다고한다.



주소 바인딩

CPU 가 프로세스를 실행하는 경우 참조하는 주소는 프로세스의 논리적 주소다. 각 프로세스는 고유한 각자의 논리적 주소공간을 가진다. CPU 는 오로지 논리적 주소를 참조하며, 물리적 주소의 정보에 대해서는 모르고 알 필요조차 없다.


논리적 주소를 통해 물리적 주소를 알아내는 과정을 주소 바인딩이라 명칭한다. 해당 게시물에서는 메모리 연속할당 방식의 주소바인딩에 대해서 거론할 것이다. 주소 바인딩에는 크게 3가지 방식이 존재한다.

컴파일 타임 바인딩 은 프로그램 컴파일 시점에서 주소바인딩을 통해 물리메모리의 주소가 결정되는 방식이다. 이 방식에서는 실행중인 프로세스의 물리메모리 주소를 바꾸고싶다면, 다시 컴파일해야하는 번거로움이 있다.

로드 타임 바인딩 은 프로그램 실행 시점에서 물리메모리의 주소가 결정되는 방식이다. 이 경우 프로세스가 실행될 때마다 물리메모리 주소로 매핑해주는데, 매번 매핑을 새로해주면 시간이 오래걸린다는 단점이 존재한다.

런타임 바인딩 은 말 그대로 프로세스가 실행중인 경우에도 물리메모리의 주소를 변경할 수 있는 방식이다. 런타임 바인딩에서는 CPU 가 프로세스를 실행할 때마다 주소바인딩을 통해 물리메모리 주소에 접근한다. 이러한 과정에서 하드웨어의 도움을 받게되는데, 이 하드웨어의 이름은 MMU 다.


MMU

MMU 는 일반적으로 CPU 내부에 위치한다. MMU 주소바인딩은 Base 레지스터의 주소 + 논리 주소 연산을 통해 물리메모리 주소를 알아내는 방식이다. Base 레지스터에는 해당 프로세스가 적재된 물리메모리의 시작 주소가 저장되어있다. 여기에 프로세스의 독자적인 논리 주소 값을 더해주면 실제 물리메모리의 주소에 접근가능하다.

각 프로세스는 독자적인 논리 주소 공간을 가지기 때문에, Context Switching 이 발생하는 경우, Base 레지스터의 주소는 매번 초기화가 필요하다.

메모리 보안

이러한 MMU 주소 바인딩은 어떤 방식의 메모리 보안을 제공할까? 하나의 프로세스는 절대 다른 프로세스의 주소공간에 접근해서는 안된다. 보안을 제공하기 위해 Base 레지스터 말고도 Limit 레지스터라는 것을 사용한다. 해당 레지스터에는 프로세스의 크기가 들어있다. 따라서 해당 레지스터를 활용한 비교를 통해 올바른 메모리 주소에 접근하고 있는지를 파악할 수 있고, 범위를 넘어선다면 트랩을 발생시켜 프로세스를 강제 종료한다.

profile
SSAFY 11th

0개의 댓글