주소 변환 (Address Translation)
주소 변환은 가상 주소를 물리적 주소로 변환하는 과정을 말한다. 이는 메모리 가상화를 통해 운영체제가 메모리를 효율적으로 관리하고 보호할 수 있도록 하는 핵심 개념이다. 하드웨어와 운영체제가 협력하여 이 과정을 수행한다. 이 과정은 프로세스 보호, 메모리 효율성, 보안 등의 이유로 매우 중요하다.
메모리 가상화의 필요성
메모리 가상화는 다음과 같은 이유로 필요하다:
- 프로세스 보호: 각 프로세스가 독립적인 주소 공간을 가지므로, 프로세스 간의 메모리 충돌을 방지한다. 이는 프로세스가 다른 프로세스의 메모리 영역에 접근하는 것을 방지하여 시스템의 안정성을 높인다.
- 메모리 효율성: 실제 물리적 메모리보다 큰 가상 메모리 공간을 제공하여 메모리 사용을 최적화한다. 이는 프로세스가 물리적 메모리의 제약 없이 실행될 수 있게 한다.
- 보안: 각 프로세스가 다른 프로세스의 메모리에 접근하지 못하게 함으로써 보안을 강화한다. 이는 악의적인 프로세스가 다른 프로세스의 데이터를 침해하는 것을 방지한다.
논리 주소와 물리 주소
- 논리 주소 (Logical Address):
- 프로그램이 실행될 때 생성되는 주소이다. 프로세스마다 독립적인 주소 공간을 가지며, CPU가 직접 접근하는 주소이다. 논리 주소는 가상 주소라고도 불리며, 프로세스의 관점에서 사용되는 주소이다
- 물리 주소 (Physical Address):
- 실제 물리적 메모리(RAM)의 주소 공간이다. 가상 주소는 물리적 주소로 변환되어야 실제 메모리에 접근할 수 있다. 물리 주소는 하드웨어가 실제 메모리 셀에 접근하는 데 사용된다.
주소 변환이란?
주소 변환은 가상 주소를 물리적 주소로 변환하는 과정을 말한다. 이 과정은 CPU가 프로그램의 논리 주소를 실제 물리적 메모리 주소로 매핑하여 프로그램이 실행될 수 있도록 한다. 주소 변환을 통해 운영체제는 메모리의 효율적 사용과 프로세스 보호를 실현할 수 있다.
주소 변환 기법
주소 변환을 수행하기 위한 다양한 기법이 있다. 주요 기법으로는 동적 재배치와 메모리 관리 유닛(MMU)이 있다.
동적 재배치
동적 재배치는 프로그램이 실행 중일 때 운영체제가 프로그램의 메모리 위치를 변경할 수 있는 기법이다. 이를 통해 운영체제는 메모리를 효율적으로 관리하고, 메모리 단편화 문제를 해결할 수 있다. 예를 들어, 프로그램이 메모리에서 다른 위치로 이동하면 주소 변환을 통해 논리 주소를 새로운 물리 주소에 매핑할 수 있다.
(동적=런타임)
=> 프로세스가 실행 중인데 주소 체계 변환한다.
ㄴ> 물리 메모리 + 스왑 영역 프로세스가 사용하는 가상 주소 공간을 가상 주소 공간으로 변환
메모리 관리 유닛 (MMU)
메모리 관리 유닛(MMU)은 하드웨어 장치로, 가상 주소를 물리적 주소로 변환하는 작업을 수행한다. MMU는 다음과 같은 역할을 한다:
- 주소 매핑: 가상 주소를 물리적 주소로 매핑한다. 이는 페이지 테이블을 통해 이루어진다.
- 메모리 보호: 각 프로세스가 할당된 메모리 영역만 접근하도록 한다. MMU는 메모리 접근 권한을 확인하고 불법 접근을 차단한다.
- 캐시 관리: 메모리 접근 성능을 향상시키기 위해 캐시를 관리한다. 캐시된 데이터를 효율적으로 사용하여 메모리 접근 속도를 높인다.
운영체제의 메모리 가상화
운영체제는 메모리 가상화를 통해 프로세스가 자신의 독립적인 메모리 공간을 가지도록 한다. 이를 통해 프로세스 간의 간섭을 방지하고, 메모리를 효율적으로 사용할 수 있다. 운영체제가 메모리 가상화를 수행하는 주요 방식은 다음과 같다:
- 페이지 테이블 사용: 운영체제는 각 프로세스마다 페이지 테이블을 유지한다. 페이지 테이블은 가상 주소를 물리적 주소로 매핑하는 정보를 저장한다. 가상 주소가 페이지 번호와 페이지 오프셋으로 분해되고, 페이지 테이블을 통해 해당 페이지의 물리적 프레임 번호를 찾는다.
- 페이지 폴트 처리: 프로세스가 접근하려는 페이지가 물리적 메모리에 없는 경우, 페이지 폴트가 발생한다. 운영체제는 필요한 페이지를 디스크에서 메모리로 로드하고, 페이지 테이블을 업데이트한다. 그런 다음 프로세스가 계속 실행될 수 있도록 한다.
- 메모리 보호: 운영체제는 각 프로세스가 자신만의 독립된 주소 공간을 가지도록 하여, 다른 프로세스의 메모리에 접근하지 못하게 한다. 이는 메모리 침범을 방지하고, 시스템의 안정성을 높이는 데 기여한다.
- 스왑 공간 사용: 물리적 메모리가 부족할 경우, 운영체제는 사용하지 않는 페이지를 디스크의 스왑 공간으로 이동시킨다. 필요할 때 다시 메모리로 로드하여 사용한다.
운영체제가 개입해야 하는 상황
운영체제는 다음과 같은 상황에서 메모리 가상화 과정에 개입한다:
- 프로세스 생성 시: 새로운 프로세스가 생성될 때, 운영체제는 해당 프로세스의 페이지 테이블을 초기화하고 필요한 메모리 자원을 할당한다.
- 프로세스 전환 시: 컨텍스트 스위칭이 발생할 때, 운영체제는 현재 프로세스의 상태를 저장하고, 새로운 프로세스의 페이지 테이블을 로드한다.
- 페이지 폴트 발생 시: 프로세스가 접근하려는 페이지가 물리적 메모리에 없을 때, 운영체제는 페이지 폴트를 처리하여 필요한 페이지를 로드하고 페이지 테이블을 업데이트한다.
- 메모리 할당 및 해제 시: 프로세스가 동적으로 메모리를 할당하거나 해제할 때, 운영체제는 메모리 할당 요청을 처리하고, 메모리 관리 정보를 업데이트한다.
이러한 과정을 통해 운영체제는 메모리를 효율적으로 관리하고, 프로세스 간의 메모리 보호를 구현한다.
'CS' 카테고리의 다른 글
CS_운영체제_가상메모리 요구 페이징과 페이지 폴트 (1) | 2024.06.23 |
---|---|
CS_운영체제_PCB & Context Switching (0) | 2024.06.18 |
CS_운영체제_주소 공간과 가상 메모리 (0) | 2024.06.18 |
CS_운영체제_인터럽트 & 시스템콜 (0) | 2024.06.16 |
CS_운영체제_CPU 스케줄링 (2) | 2024.06.15 |