학사 나부랭이
Operating System - Memory management 본문
메모리의 주소는 크게 두 가지로 나눌 수 있는데 먼저 Logical address(virtual address)는 프로세스마다 독립적으로 가지는 주소 공간이라서 각 프로세스마다 0번지부터 시작해요. CPU가 참조하는 주소이죠. 그리고 Physical address는 메인 메모리에 실제로 올라가는 위치죠.
이런 프로세스들이 실제로 할당받을 물리 주소는 address binding으로 결정되어요.
주소 바인딩에는 몇 가지 종류가 있어요.
Compile time binding
컴파일할 때 물리 주소가 결정되는 주소 바인딩이에요. 프로그램의 물리 주소를 바꾸고 싶으면 다시 컴파일해야 하죠.
Load time binding
프로그램의 실행이 시작될 때 물리 주소가 결정되어요. 로더가 메모리 주소를 부여하고 프로그램이 종료될 때까지 물리 주소가 고정되죠.
Run time binding
프로그램이 실행한 후에도 물리 주소가 변경될 수 있는 바인딩 방식이에요. CPU가 주소를 참조할 때마다 해당 데이터가 어디에 위치하는지 Address mapping table을 이용해 바인딩을 점검해요. 주소 매핑 테이블뿐만 아니라 base/limit 레지스터와 MMU 등의 하드웨어적인 지원이 필요하죠.
Memory Management Unit
논리 주소를 물리 주소로 매핑해주는 CPU 코어 안에 탑재된 하드웨어 장치예요. 재배치 레지스터에는 현재 CPU에서 수행 중인 프로세스의 물리 메모리 시작 주소가 저장되어있어요. CPU가 논리 주소 346에 있는 데이터를 요청하면 재배치 레지스터에 저장된 물리 시작 주소 14000과 논리 주소를 더해서 실제 메모리의 14346에 있는 데이터를 들고 와요. 여기서 limit 레지스터의 값과 비교해서 혹시 모를 다른 프로세스 영역의 침범을 체크해요. 만약 침범했다면 trap 인터럽트를 발생시키고 이를 처리하기 위해 memory protection fault를 발생시켜요. 운영체제로 제어권을 넘겨요. MMU 기법에서 Context switching이 일어나면 그때마다 재배치 레지스터의 값을 해당 프로세스에 맞게 재설정을 해야겠죠?
'Dot-Gabi > Operating System' 카테고리의 다른 글
Operating System - Registry (0) | 2021.05.14 |
---|---|
Operating System - Boot loader (0) | 2021.05.14 |
Operating System - Compile to execute (0) | 2021.04.06 |
Operating System - Memory (0) | 2021.04.02 |
Operating System - Kernel (0) | 2021.04.02 |