프로세스가 실행되기 위해서는 해당 프로그램이 물리적 메모리에 적재(Load) 되어야 하며, CPU는 프로세스 마다 독자적으로 갖는 '논리적 주소'에 근거해 명령을 실행한다.
- 물리적 주소 - 물리적 메모리에 실제로 적재되는 주소 공간
- 논리적 주소 - 프로그램이 메모리에 적재 되면 생성되는 프로세스의 독자적인 주소 공간
이를 위해 해당 논리적 주소가 물리적 메모리의 어느 위치에 대응되는지 확인해야 하며, 이렇게 논리적 주소를 물리적 주소에 연결시켜주는 작업을 '주소 바인딩' 이라 한다.
Address Binding
주소 바인딩 방식은 바인딩 되는 시점에 따라 아래와 같이 구분된다.
- Compile Time Binding
- Load Time Binding
- Run Time Binding (Execution Time Binding)
[Compile Time Binding]
컴파일러가 'Absolute Address' 라는 물리적 메모리의 고정된 주소를 생성하여 'Compile Time' 에 부여하는 방식으로 주소 변경이 필요하다면 재컴파일이 필요하다. [Compile Time Binding] 은 프로세스가 사용하는 논리적 주소와 물리적 주소가 동일하다.
[Compile Time Binding] 의 주의 사항은 주소가 고정되어 있기 때문에 메모리 상에 빈 공간이 다수 발생하 수 있어 비효율 적이고, 프로세스를 할당하려는 주소에 이미 다른 프로세스가 존재 할 수 있다는 점이다.
[Load Time Binding]
컴파일러가 'Relocatable Code' 를 생성한 경우에 가능한 주소 바인딩 방식으로 프로그램이 실행되는 시점에 'Loader' 가 물리적 메모리 주소를 부여하며, 프로그램이 종료될때 까지 주소가 고정된다.
* Relocatable Code - 프로세스가 메모리의 어느 위치에 할당될지 알 수 없는 경우 컴파일러가 생성하는 코드로 어느 위치에서나 실행될 수 있는 기계어 코드
* Loader - 사용자의 프로그램을 메모리에 적재시켜 주는 프로그램
[Load Time Binding] 의 주의 사항은 프로세스 내에 메모리를 참조하는 명령어의 주소를 변경해 주어야 하기 때문에 그 수가 많을 수록 로딩 시간이 길어진다는 점이다.
[Run Time Binding]
[주소 바인딩]
주소 바인딩은 'MMU (Memory Management Unit)' 이라는 하드웨어 장치로 구현되고, 이 장치는 2가지 레지스터를 통해 주소 변환을 수행한다.
- 기준 레지스터 - 현재 CPU 에서 실행중인 프로세스가 적재된 물리적 메모리 상의 시작 주소가 저장된 레지스터
- 한계 레지스터 - 현재 CPU 에서 실행중인 프로세스의 논리적 주소가 가질 수 있는 최대값이 저장된 레지스터

물리적 메모리 할당 방식
물리적 메모리의 할당 방식은 프로세스를 메모리에 적재하는 방식에 따라 '연속 할당' 과 '불연속 할당' 으로 나누어 지고, 다시 물리적 메모리의 분할 방식에 따라 '고정 분할' 과 '가변 분할' 방식으로 구분된다.

[연속 할당 vs 불연속 할당]
- 연속 할당 방식 : 하나의 프로세스를 물리적 메모리에 연속적으로 적재하는 방식

- 불연속 할당 방식 : 하나의 프로세스를 분할하여 물리적 메모리의 여러 위치에 적재하는 방식

[고정 분할 vs 가변 분할]
- 고정 분할 방식 : 물리적 메모리를 미리 입력된 개수만큼 영구적으로 분할하는 방식
(분할의 크기는 모두 동일할 수도 다를수도 있음)
'OS' 카테고리의 다른 글
| [OS] 프로세스 스케줄링(Process Scheduling) (0) | 2024.07.29 |
|---|---|
| [OS] 프로세스 (Process) (0) | 2024.07.26 |
| [OS] 5. 상호배제 (Mutual Exclusion) - 작성중 (0) | 2024.01.13 |
| [OS] 3. 프로세스 (Process) (0) | 2024.01.13 |
| [OS] 컴퓨터 시스템의 동작 (0) | 2024.01.13 |