프로세스가 실행되기 위해서는 해당 프로그램이 물리적 메모리에 적재되어 있어야 한다.

하지만 프로세스는 물리적 메모리가 적재되어있는 주소 외에 별도로 논리적주소, 혹은 가상주소를 가지고 있는데 어떻게 논리적 주소가 물리적주소와 매핑(mapping)되고 또 물리적메모리를 어떻게 할당하는지도 알아보자.

 

먼저 메모리에 적재되는 물리적 메모리리의 주소와 프로세스의 논리적주소를 연결시켜주는 작업을 

주소 바인딩(address binding) 이라고 한다. 

주소바인딩은 프로그램이 적재되는 물리적 메모리의 주소가 언제 결정되느냐에 따라 세가지로 분류할 수 있다.

먼저, 물리적 메모리 주소가 프로그램을 컴파일할 때에 결정되는 주소 바인딩방식을 컴파일타임 바인딩(Compile time binding) 이라고한다. 프로그램이 절대주소로 적재된다는 뜻에서 절대코드를 생성하는 바인딩 방식이라고도 한다.

다만 프로그램이 올라가있는 물리적 메모리의 위치를 변경하고자 할때는 컴파일을 다시해야한다는 수고가 발생한다.

 

두번째로 프로그램의 실행이 시작될때에 물리적 메모리주소가 결정되는 주소 바인딩 방식을 로드타임 바인딩(Load time binding) 이라고 한다. 이방식에는 로더의 책임하에 물리적 메모리 주소가 부여되며  프로그램이 종료될때까지 물리적 메모리상의 위치가 고정된다.

로더란 사용자 프로그램을 메모리에 적재시키는 프로그램을 말한다.

로드타임 바인딩은 컴파일러가 재배치 가능 코드를 생성한 경우에 가능한 주소 바인딩 방식이다.

 

세번째로 실행시간 바인딩(Execution time binding)은 프로그램이 실행을 한 후에도 물리적 메모리 상의 주소가 변경될 수 있는 방식이다.

이 방식에서는 CPU가 주소를 참조할 때마다 해당 데이터가 물리적 메모리의 어느 위치에 존재하는지 주소 매핑 테이블을 이용해 바인딩을 점검해야한다. 또 기준레시스터와 한계레지스터를 포함해 MNU(Memory Management Unit)의 지원이 뒷받침 되어야한다.

 

 

 

 

 

 

 

<물리적 메모리의 할당 방식>

 

물리적 메모리는 운영체제의 영역과 사용자 프로세스의 영역으로 나뉜다. 그중, 우리가 살펴봐야 할것은 사용자 프로세스 영역에서, 어떻게 프로세스가 메모리에 올라가는지, 그 관리기법에 대해 알아보자.

 

 

Memory Allocation 방식

 

연속 할당 방식은 프로세스를 물리적 메모리의 연속적 공간에 올리는 방식이다.

연속할당방식에서는 물리적 메모리를 분할하여 하나의 분할에 하나의 프로세스가 적재되도록 한다.

 

또 이때 분할방식에 따라 고정분할방식과 가변분할방식이 있는데, 고정분할방식을 사용하면 프로세스크기가 분할된 크기보다 크거나 작을때 조각이 발생한다. 따라서 공간의 낭비가 발생되는 것이다.

 이에 비해 가변분할방식은 적어도 내부조각(프로세스크기가 분할크기보다 작아서 생기는 조각)은 발생하지 않지만, 프로세스를 메모리에 올릴때 여러 공간들중 할당을 해야하는 문제가 발생한다(dynamic storage-allocation problem).

 

따라서 가장 최적의 방법으로는 가용공간을 살펴보며 프로세스와 가장 가까운 크기의 분할공간을 채택하는 최적 적합 방법이 효과적이나 경우에따라 가용공간중 먼저찾아지는 최초 적합 방법을 따르기도한다.

 

불연속 할당 기법에는 프로세스가 물리적 메모리의 여러위치에 분산되어 올라갈 수 있는 메모리 관리 기법이다.

페이징 기법, 세그먼테이션 기법, 두가지를 혼용하는 페이지드 세그먼테이션 기법이 존재한다.

 

 

 

 

 

운영체제 - 메모리 관리

메모리 주소 바인딩 > 프로세스가 실행되기 위해서는 프로그램이 물리적 메모리에 적재되어 있어야 한다. 또한, cpu가 기계어 명령을 수행하기 위해 논리적 주소를 통해 메모리 참조를 하게 되면

velog.io