주소 변환(Address translation)
주소 변환은 프로그램이 사용하는 가상 주소를 실제 물리 메모리 상의 주소로 매핑하는 과정을 의미한다.
주소 변환은 하드웨어적으로 이루어지며 프로세서가 메모리 참조 명령어를 수행할 때마다 발생한다.
운영 체제는 메모리 관리자 역할을 수행하며 물리 메모리의 할당 및 회수, 가상 주소 공간과 물리 주소 공간의 매핑 등을 담당한다.
이를 위해 운영 체제는 메모리의 사용 현황을 파악하고 있어야 하며 프로세스 간의 메모리 보호와 공유를 적절히 제어해야 한다.
동적 재배치(Dynamic Relocation)
동적 재배치는 프로세스의 주소 공간을 실행 시간에 동적으로 물리 메모리 상의 다른 위치로 이동할 수 있게 해주는 기술로 이를 통해 운영 체제는 메모리 관리를 보다 유연하게 할 수 있으며 메모리 단편화 문제를 해결할 수 있다.
현대에는 페이징이나 세그먼테이션 등의 발전된 메모리 관리 기법이 사용되고 있지만, 초기에는 동적 재비치 기법이 사용되었다.
동적 재배치를 구현하기 위해 CPU에는 Base Register와 Bound Register라는 두 개의 하드웨어 레지스터가 사용된다.
베이스와 바운드 레지스터를 활용한 주소 변환 및 메모리 보호 기능은 현대의 메모리 관리 기법에서도 중요한 역할을 담당하고 있기 때문에 이를 이해함으로 메모리 관리와 보호의 기본 원리를 파악할 수 있다.
베이스 레지스터(Base Register)
베이스 레지스터는 프로세스의 주소 공간이 실제 물리 메모리 상의 위치한 시작 주소를 저장하는 레지스터이다.
주소 변환 과정에서 프로세스가 생성한 가상 주소에 베이스 레지스터 값을 더하여 실제 물리 주소를 계산한다.
이를 통해 프로세스는 가상 주소 0번지에서 시작하는 것처럼 인식하지만, 실제로는 물리 메모리의 다른 영역에 위치할 수 있다.
그림과 같이 3개의 프로세스 P1, P2, P3는 모두 0번의 가상 주소에서 시작하지만 실제 물리 메모리에서는 서로 다른 영역에 위치하고 있다.
프로세스의 가상 주소와 베이스 레지스터 값을 더하여 실제 물리 주소를 계산하기 때문에 베이스 레지스터 값을 변경함으로써 프로세스의 주소 공간을 물리 메모리 상의 다른 위치로 이동시킬 수 있다.
바운드 레지스터(Bound Register)
바운드 레지스터는 프로세스의 주소 공간 크기 또는 주소 공간의 마지막 주소를 저장하는 레지스터이다.
하드웨어는 프로세스가 생성한 가상 주소가 바운드 레지스터에 저장된 범위 내에 있는지 확인하여 메모리 보호 기능을 수행한다.
만약 가상 주소가 바운드 레지스터에 저장된 범위를 벗어나면 하드웨어는 예외를 발생시켜 운영 체제에 알린다.
이를 통해 프로세스가 자신의 주소 공간 외부의 메모리 영역에 접근하는 것을 방지하여 메모리 보호를 강화한다.
주소 변환 과정
프로세스가 생성한 가상 주소에 베이스 레지스터 값을 더하여 실제 물리 주소를 계산한다.
계산된 물리 주소가 바운드 레지스터 값의 범위 내에 있는지 확인한다.
물리 주소가 유효한 범위 내에 있다면 해당 주소의 메모리에 접근할 수 있도록 허용한다.
만약 물리 주소가 바운드 레지스터 값의 범위를 벗어난다면 하드웨어는 예외를 발생시켜 운영 체제에 알린다.
동적 재배치 과정
운영 체제는 필요에 따라 프로세스의 주소 공간을 물리 메모리 상의 다른 영역으로 이동시킬 수 있다.
주소 공간을 이동시킬 때 운영 체제는 해당 프로세스의 베이스 레지스터 값을 변경하여 새로운 물리 메모리 영역을 가리키도록 한다.
또한 바운드 레지스터 값도 새로운 주소 공간 크기에 맞게 조정한다.
프로세스의 상태 정보를 저장하는 자료구조인 PCB에 변경된 베이스와 바운드 레지스터 값을 저장한다.
프로세스가 다시 실행될 때 PCB에 저장된 베이스와 바운드 레지스터 값이 CPU의 레지스터에 로드되어 프로세스는 새로운 물리 메모리 영역에서 실행된다.
메모리 관리 장치(MMU, Memory Management Unit)
주소 변환과 메모리 보호 기능은 CPU 내부의 하드웨어 컴포넌트인 메모리 관리 장치(MMU)에 의해 수행된다.
메모리 관리 장치가 관리하는 메모리 영역을 RAM과 swap 영역을 합친 크기를 최대 용량으로 생각한다.
메모리 관리 장치는 베이스 레지스터와 바운드 레지스터를 활용하여 가상 주소를 물리 주소로 변환하고 변환된 주소가 유효한 범위 내에 있는지 검사한다.
이 과정은 하드웨어적으로 이루어지므로 소프트웨어 오버헤드 없이 빠르게 처리할 수 있다.
메모리 관리 장치는 주소 변환 테이블(매핑 테이블)을 관리하여 가상 주소와 물리 주소 간의 매핑 정보를 저장한다.
주소 변환 테이블은 운영 체제에 의해 설정되며 메모리 관리 장치는 이를 참조하여 주소 변환을 수행한다.
메모리 관리 장치의 매핑 테이블은 세그멘테이션과 페이징에서도 똑같은 역할을 한다.
동적 재비치 기술을 사용하면 운영 체제는 프로세스의 주소 공간을 물리 메모리 상의 임의의 위치로 이동시킬 수 있으므로 메모리 관리의 유연성이 향상된다. 이를 통해 메모리 단편화 문제를 완화하고 메모리 사용 효율을 높일 수 있다.
베이스 레지스터와 바운드 레지스터를 활용한 주소 변환 및 메모리 보호 기능은 프로세스 간의 메모리 침범을 방지하여 시스템의 안정성과 보안성을 강화한다.
각 프로세스는 주소 공간 내에서만 메모리에 접근할 수 있으며 다른 프로세스의 메모리 영역에는 접근할 수 없다.
운영체제 이슈
베이스와 바운드 레지스터 방식의 가상 메모리 구현을 위해서 운영 체제가 반드시 개입되어야 하는 중요한 시점이 존재한다.
- 프로세스 생성 시
- 운영체제는 새로운 프로세스의 주소 공간을 할당할 물리 메모리 영역을 찾아야 한다.
- 운영 체제는 물리 메모리를 슬롯의 배열로 관리하며 각 슬롯의 사용 여부를 추적한다.
- 운영 체제는 빈 슬롯을 검색하여 해당 영역을 프로세스의 주소 공간으로 할당하고 사용 중으로 표시한다.
- 프로세스 종료 시
- 운영 체제는 종료된 프로세스가 사용하던 메모리 영역을 회수하여 다른 프로세스나 운영 체제가 사용할 수 있게 한다.
- 프로세스가 정상적으로 종료되거나 강제로 종료될 때 운영 체제는 해당 프로세스의 메모리 영역을 빈 공간 리스트에 반환하고 관련 자료구조를 정리한다.
- 컨택스트 스위칭 발생 시
- CPU에는 한 쌍의 베이스-바운드 레지스터만 존재하므로 실행 중인 프로세스마다 다른 값을 가져야 한다.
- 운영 체제는 프로세스 전환 시 현재 프로세스의 베이스와 바운드 레지스터 값을 저장하고 새로운 프로세스의 값으로 설정해야 한다.
- 이 값들은 PCB에 저장되며 운영 체제는 PCB에서 읽어와 CPU 레지스터에 로드한다.
- 메모리 보호 위반
- 운영 체제는 부팅 시 특권 명령어를 사용하여 예외 핸들러를 설치한다.
- 프로세스가 할당된 주소 공간 밖의 메모리에 접근하려 할 경우 CPU는 예외를 발생시킨다.
- 운영 체제는 이 예외를 처리하여 해당 프로세스를 종료하거나 적절한 조치를 취한다.
참고 자료
널널한 개발자(유튜브) - https://www.youtube.com/watch?v=-jlzaslp-w4&list=PLXvgR_grOs1DGFOeD792kHlRml0PhCe9l&index=23
'CS > OS' 카테고리의 다른 글
운영체제 - 요구 페이징 (0) | 2024.07.02 |
---|---|
운영체제 - 페이징과 세그먼테이션 (0) | 2024.07.02 |
운영체제 - 주소 공간과 가상 메모리 (0) | 2024.06.30 |
운영체제 - PCB와 Context Switching (0) | 2024.06.27 |
운영체제 - 시스템 콜 (0) | 2024.06.26 |