운영체제

Address Translation, base and bound

땅콩콩 2023. 3. 27. 23:52
Address translation

virtual address는 mmu라는 하드웨어에 의해 physical address로 변환된다.(hardware-based address translation)

 

설명을 위한 가정

1. 모든 메모리는 연속된 공간이다.

2. virtual address가 갖는 address space의 크기도 physical address보다 작다.

3. 모든 프로세스가 갖는 주소공간의 크기가 같다.

 

virtual address space와 physical address

가상으로 존재하는 프로세스의 address space(좌)와 실제 물리적 메모리(우)

그림 속 프로세스의 address space에서는 코드가 oKB부터 들어있지만 물리적 메모리에서는 그와 다르게 32KB부터 시작한다.

다시 말해 프로그램이 메모리로 로딩되기 전, 기계어 코드를 생성할때 주소의 기준은 0이다. 그런데 메모리로 로딩할때는 기준이 32KB로 바뀌었다. 바로 주소가 재배치된 것이다. (relocation)

 

이러한 주소 재배치는 코드속의 절대값 주소를 모두 찾아서 전부 특정 offset을 더해주는 방법으로 일어날수도 있겠지만 운영체제는 복잡하게 할일이 많기 때문에 하드웨어의 도움을 받아 동적으로 재배치(dynamic relocation) 한다. 

 

따라서 하드디스크 속의 프로그램을 메모리로 로딩할때는 주소값들을 변환하지않고 virtual address값 그대로 올리고, 주소변환은 이후에 mmu라는 하드웨어 장치에 의해 동적으로 이루어진다.

 

그리고 이 동적재배치(dynamic relocation)는 base and bounds라는 이름으로도 불린다.

이유는 아래에서 살펴보도록 하겠다.

 

base and bounds (=dynamic relocation)

mmu라는 하드웨어를 통해 virtual address를 물리적 메모리 주소로 변환하는 과정에서,

virtual address의 address space를 한 덩어리로 보고 그 Base(기준값)과 Bound(크기, 범위) 두가지만 변환+체크하여 주소를 변환하는 방식을 base and bound라고 한다.

physical address = virtual address + base

하드웨어인 mmu안에는 base정보를 담을 수 있는 레지스터, bound정보를 담을 수 있는 레지스터, 스스로 덧셈을 할 수 있는 회로, bound안에 들어올 수 있는지를 스스로 비교할 수 있는 회로가 있어서 앞서 설명한 과정을 수행할 수 있다.

address space size(bound)가 4KB인 예를 들어보자.

virtual address가 0인데 physical address가 16KB라면 base는 16KB이라는 뜻이다.

그래서 0 > 16KB, 1KB > 17KB이 되고 3000 > 3000+16K(=3000+2^4*2^10) =19384가 된다.

그런데 4400은 변환하려고 보니 4400>4KB(4096)이어서 bound범위를 벗어나므로 out of bound fault가 되어 trap에 걸린다.

따라서 os의 trap handler로 진입하고 거기에서 trap을 처리하게 된다.

 

hardware의 도움

첫번째로는 위에서 설명한 것처럼 mmu라는 하드웨어의 도움을 받는다는 것,

두번째로는 cpu가 kernel mode(privileged mode), user mode 두개의 모드로 동작하는데 cpu안에서 cpu가 현재 어떤 모드인지를 저장하는 psw(processor status word)라는 레지스터가 있다는 것을 생각해볼 수 있다.

 

base and bound에 의한 주소변환(dynamic relocation)을 위한 하드웨어적 요구사항

1. cpu가 kernel mode, user mode로 분리되어 있어야 한다 

user program이 mmu의 base, bound값을 바꿀 수 있는 명령어를 실행할 수 있다면 protection이 불가해진다. 따라서 이것을 원천 차단하기 위해서 cpu가 kernel mode와 user mode 두개의 모드로 분리되어 실행되어야 한다.

 

2. base, bound register를 담을 수 있어야 한다.

 

3. base를 통해 virtual address를 변환할 능력, bound안에 들어오는지를 체크할 능력이 있어야 한다. 즉, 이것을 수행할 회로가 있어야 한다.

 

4. base, bound값을 갱신할 수 있는 특권 명령어가 필요하다. (privileged mode)

 

5. exception handler와 관련된 특권 명령어가 필요하다.

 

6. exception을 발생시킬 수 있어야 한다. (out of bound등.)

 

base and bound에 의한 주소변환(dynamic relocation)을 위한 OS적(소프트웨어적) 요구사항

1. 메모리 관리

  • process가 하드디스크에서 메모리로 탑재될 때, 메모리의 어느 공간에 탑재될지는 운영체제가 메모리 관리를 통해 배치해주어야 한다.
  • process가 종료되면 사용중이던 해당 memory공간을 정리해주어야 한다. (free list로 관리, kernel에서 메모리의 빈 공간을 리스트 형태로 관리하는 방법.)

2. base, bound 관리

context switching이 일어날 때, 주소변환정보(매핑정보)도 함께 교체되어야 한다.

 

3. Exception handling

exception이 발생했을 때, 하드웨어적으로 trap이 걸리면 trap handler에서 소프트웨어적으로 처리하는 과정을 운영체제가 담당한다.

 

base and bound값이 저장되는 시점

 

어떻게 생각하면 당연한 문제이지만 base, bound값이 저장되는 것은 처음 trap에 걸려 register값들이 kernel stack에 저장할 때가 아니다. base, bound값은 kernel 영역에서 protected하게 관리되어야 하는 부분이기 때문이다.

그래서 밑에 context switch를 위해 switch()함수를 호출하는 부분을 보면, pcb의 context에 값들을 저장할 때 base, bound값이 함께 저장되는 것을 볼 수 있다.

context switching이 일어날 때 base, bound값이 저장되고, 복원되어야 한다.

 

 

'운영체제' 카테고리의 다른 글

Free-Space Management  (0) 2023.03.28
Segmentation  (0) 2023.03.28
The abstraction: Address space  (0) 2023.03.27
Scheduling: Proportional Share  (0) 2023.03.21
Scheduling: The Multi-Level Feedback Queue (MLFQ)  (2) 2023.03.21