CS/OS

[운영체제] Address Binding

F12:) 2023. 11. 28. 16:41

오늘은 Address Binding에 대해서 알아봅시다.

 

 

   Address Binding

Address Binding이란 logical 주소를 physical 주소로 변환하는 과정을 말합니다.

 

여기서 physical address는 실제 메모리 상의 주소를 의미하고, logical address는 CPU가 프로세스를 바라볼 때의 주소를 의미합니다. 가상 주소라고도 불립니다.

 

 

이러한 Address Binding에 있어서의 3가지 방식이 존재합니다. 이번 글에서는 이 3가지 방법에 대해서 다뤄봅시다.

 

 

   Address Binding at Compile time

첫 번째 방법은 컴파일 시점에 physical Address를 정하는 것입니다. 컴파일 시점에 Address Binding을 진행하게 되면, Logical Address의 개념이 존재하지 않습니다. 즉, Logical Address와 Physical Address가 동일하게 되는 것이죠.

 

하지만 이런 방식을 이용한다면, 프로세스를 재할당하는 경우에 문제가 됩니다. 프로세스를 재할당하면서 주소가 바뀌게 되므로 Address Binding을 다시 실행해야하죠.

 

 

compile time의 address binding의 과정을 확인해봅시다.

 

 

가장 먼저 소스코드를 토대로 컴파일을 거칩니다. 이러한 컴파일 과정에서 BA 즉, base address라는 변수를 기준으로 logical address가 생성됩니다. 하지만 지금 이 과정은 compile time의 address binding이므로 logical address와 physical address가 같아야합니다. 따라서, 이러한 것을 토대로 physical address로 변환하는 address binding을 진행합니다.

 

 

OS는 컴파일러에게 BA에 대한 정보를 줍니다. 사실 이미 이 과정에서 해당 프로세스가 어디에 배정될지 정한셈이 됩니다. BA를 받은 컴파일러는 logical address를 physical address로 바꿔줍니다.

 

컴파일러가 만든 실행 파일을 가지고 메모리에 로드된 프로세스의 모습입니다. 컴파일 시점에 결정된 주소에 잘 들어가게 됨을 알 수 있습니다.

 

이 방식은 앞서 설명한 것처럼 reallocation 과정에서 다시 주소를 계산해야하는 번거로움이 있으므로 이 방법은 쓰이지 않습니다.

 

 

 

   Address Binding at Load time

두 번째 방법은 프로세스를 메모리에 load하는 과정에서 주소를 계산하는 방식입니다. 즉, 메모리에 로드 되기 전까지는 logical address를 가지고 있다가 메모리에 로드될 때, 주소 계산 로직을 수행하여 각 instruction의 physical address를 계산하는 것입니다.

 

하지만 이러한 방식에도 단점이 존재합니다. memory management에서 수행되는 역할 중 하나인 reallocation 과정을 생각해봅시다.

메모리의 external fragment가 존재할 때, compaction을 진행하기 위해 우리는 프로세스들의 위치를 재정렬하는 reallocation 과정을 거쳐야합니다. 이러한 과정에서 프로세스들의 physical address가 변경됩니다. 

 

그러면 load 되는 시점에서 계산된 주소 계산 로직을 재실행하여야 합니다.

 

만약 코드가 100만줄이 있다고 한다면 이 계싼을 두 번 실행하는 것조차 부담이 됩니다. 따라서 이러한 load time에서 address binding도 사용하지 않습니다.

 

 

   Address Binding at Execution time

Execution time은 각 line의 instruction이 실행되기 직전까지 address binding 과정을 미룹니다. 해당 instruction을 수행하려고 할 때, 주소를 계산해서 physical address를 계산하는 것입니다.

 

 

Execution time에서는 위와 같은 상태로 메모리에 프로세스가 로드됩니다. BA 즉, base address에 대한 정보를 갖고 있고 ba를 이용해서 logical address를 저장하는 것이죠. 

 

여기서 한가지 조금 특이한 점이 존재합니다. 매 instruction을 실행할 때마다 주소를 더해주는 과정을 OS가 하지 않습니다. 이러한 과정이 빈번히 일어나고, 반복적이므로 소프트웨어로 해결하는 것이 아닌 CPU 내의 MMU(Memory Management Unit)라는 장치로 주소를 계산합니다.

 

따라서 주소 계산에는 하드웨어 자원을 사용한다는 것을 꼭 기억합시다.

 


이렇게 Address Binding에 대해서 알아봤습니다. 감사합니다.

'CS > OS' 카테고리의 다른 글

[운영체제] Virtual Memory  (1) 2023.12.08
[운영체제] Paging  (3) 2023.12.08
[운영체제] 메모리 관리 - Memory Partitioning  (4) 2023.11.27
[운영체제] RAID  (1) 2023.11.27
[운영체제] 디스크 스케쥴링  (1) 2023.11.12