메모리에는 주소가 매겨진다.
1. 논리적인 주소(Logical address = virtual address)
- 프로세스마다 독립적으로 가지는 주소 공간
- 각 프로세스마다 0번지부터 시작
- cpu가 보는 주소는 logical address!!
2. 물리적인 주소(Physical address)
- 메모리에 실제 올라가는 위치
*주소 바인딩: 주소를 결정하는 것
symbolic address -> logical address -> physical address
(*symbolic address : 프로그래머 입장에서는 숫자로 된 주소를 사용하는 게 아니라 참조변수를 사용함. 이를 의미)
logical address 에서 physical address 시점이 언제인가??
주소 바인딩(Address Binding)
1. Compile time binding
- 물리적 메모리 주소가 컴파일 시 알려짐
- 컴파일 당시에 정해져서 고정되기 때문에 절대코드라고 함.(absolute code)
- 주소를 다시 매기기 위해서는 재컴파일해야 함.
2. Load time binding
-Loader의 책임하에 물리적 메모리 주소 부여
- 컴파일러가 재배치가능코드(relocatable binding)를 생성한 경우 가능
3. Execution time binding(=Run time binding)
- 수행이 시작된 이후 프로세스의 메모리 상 위치를 옮길 수 이음.
- cpu가 주소 참조할 때마다 binding점검
- 하드웨어적인 지원이 필요(ex. MMU)
compile time binding은 컴파일 시점에 논리적 주소로 물리적인 주소를 결정한다. 이는 현재에는 많이 쓰이지 않는 방법이다. load time binding은 논리적 주소가 정해진 이후 실행시에 물리적 주소로 가능한 주소부터 binding하는 것이고, run time binding은 실행시에 주소가 정해지며 실행 도중에 물리적 주소가 변경될 수 있다. 지금의 컴퓨터 시스템은 run time binding을 지원한다.
주소변환용 하드웨어인 MMU는 run time binding에서 필요하다.
MMU에는 relocation register와 limit register가 필요하다. cpu가 논리주소 346을 요청할 때, 물리적 주소의 14000부터 346을 더한 위치까지를 알려주면 된다. relocation register는 실제 물리적 주소의 시작점을 의미하고, limit register는 프로그램의 최대 메모리 위치를 알려주기 위함이다. 만약 limit를 넘어가는 메모리 주소를 요청할 경우 trap이 결려서 운영체제로부터 abort당할수도 있다.
프로세스를 메모리에서 하드디스크로 쫒아내는 것을 swap out! 중기 스케줄러에 의해 행해지고, 메모리에 많은 프로세스가 올라와 있으면 성능이 떨어지기 때문에 cpu우선순위가 낮은 순서대로 swap out시킨다.
compile time binding이나 load time binding은 같은 위치로 swap in 되야 하는 반면, run time binding은 다른 영역에 올라올 수 있기 때문에 효율적이라고 볼 수 있다.
ㄷ* Linking: 여러군데에 존재하는 컴파일 파일들을 하나의 실행 파일로 묶는 과정
최근에는 불연속할당으로 물리적 주소를 사용한다.
고정 분할 방식은 프로그램 크기가 분할된 크기와 맞지 않을 경우, 외부 조각과 내부조각과 같이 사용되지 않는 공간이 생긴다는 문제가 있고, 가변분할 방식 역시 연속적으로 할당되기 때문에 수행이 끝나고 빈 공간이 생겨도 크기가 맞지 않는다면 역시 사용되지 않는다는 문제점이 있다.
*Hole: 가용 메모리 공간 - 크기가 맞지 않아 비어있는 홀을 의미. 운영체제는 hole 정보를 유지하여 할당시켜야 함.
best fit과 worst fit은 모든 hole을 탐색해야 하기 때문에 first fit보다 시간이 더 걸릴 수 있다.
차지하는 프로세스들을 한 방향으로 밀어 hole들을 모으는 방법인 compaction도 있다. 그러나 실행중인 프로세스들의 바인딩과 연결되 문제이기 때문에 비용이 많이 드는 작업이므로 복잡하다. run time binding이 지원되야 compaction이 지원될 수 있다.
때문에 일부의 프로세스만 이동시켜 일부분의 hole을 compaction하기도 한다.
ㅊ최근 대다수의 프로세스 영역 할당 기법은 불연속 할당 기법으로 크게 Paging과 Segmentation으로 나뉜다.
'운영체제' 카테고리의 다른 글
Memory Management3 (0) | 2021.06.30 |
---|---|
Memory Management2 (0) | 2021.06.29 |
Deadlock (0) | 2021.06.29 |
Process Synchronization (0) | 2021.06.28 |
CPU Scheduling (0) | 2021.06.28 |