페이징 시스템의 하드웨어 구조와 원리
16비트 논리적 주소
IBM 370의 논리적 주소 (32비트)
페이지 테이블을 이용한 물리적 주소 변환 예
8바이트 페이지와 64바이트 메모리 페이징 예
다중 단계 페이징 시스템의 구조와 원리
원리
- 논리적 주소가 클수록 물리적 주소로 변환하는 과정에서 필요한 페이지 테이블 크기도 증가 하므로 메모리에 더 큰 적재 공간 필요
다중 단계 페이징 시스템 예 : VAX와 윈도우 NT는 2단계, 스팍SPARC은 3단계, 모토로라Motorola 68030은 4단계 페이징 시스템 사용
2단계 페이징 시스템의 구조
페이지 테이블의 구현
페이지 테이블과 페이지 테이블 항목
페이지 테이블 관리 방법
- 전용 레지스터 사용
- 레지스터는 효율적으로 페이징 주소를 변환하려고 초고속 논리회로로 설계
- 메모리의 모든 액세스는 페이징 테이블 정보로 수행하므로 효율성을 중요하게 고려해야 함. 레지스터를 사용하여 페이지 테이블을 구현할 때는 페이지 테이블 항목이 적으면 좋은데, 쉽게 관리 가능.
- 대부분의 컴퓨터는 페이지 테이블이 매우 커서 레지스터로 구현하기에 부적합
- 대개 페이지 테이블 메모리에 두고 페이지 테이블 기준 레지스터PTBR, Page Table Base Register로 페이지 테이블 지시
- 페이지 테이블을 메모리에 두면 레지스터 값 하나를 바꿔서 페이지 테이블 변경할 수 있어 문맥 교환 시간이 감소
- 실제 문맥 교환은 메모리 정보를 모두 교환해야 하나, 페이지 테이블 기준 레지스터는 단순히 레지스터 값을 바꿔서 문맥 교환과 똑같은 효과. 메모리 액세스 시간이 문제
- 페이지 테이블 항목과 워드를 위한 메모리 액세스가 필요, 이 액세스 때문에 속도가 느려진다는 문제 발생 발생
- 연관 레지스터나 변환 우선참조 버퍼TLB, Translation Look-aside Buffer를 이용하여 해결 가능
- 연관 레지스터를 이용하여 논리적 주소를 물리적 주소로 변환하는 방법
- 직접 매핑direct mapping으로 주소 변환
- 연관 매핑associative mapping으로 주소 변환
- 연관·직접 매핑을 결합한 주소 변환
직접 매핑으로 주소 변환
- 메모리나 캐시에 완전한 페이지 테이블을 유지
- 프로세스의 메모리를 구성하는 모든 페이지 항목이 페이지 테이블에 있음
- 직접 매핑으로 주소를 변환하는 과정
- 레지스터만 변경해도 페이지 테이블 변경 가능
- 사용자 메모리 위치에 액세스하는 데 시간 소요(해결하는 방법으로 연관 레지스터 또는 보조예비기억장치라고 하는 특별히 작은 하드웨어 메모리 사용)
연관 매핑으로 주소 변환
- 논리적 주소를 프로세서의 페이지 번호와 프로세서에 대응하는 프레임 번호가 있는 연관 레지스터의 집합으로 표현
- 각 레지스터는 키와 값으로 구성. 연관 레지스터에 항목을 추가하면, 동시에 모든 키와 비교하여 해당 항목을 찾아 이에 대응하는 값 출력
- 매우 빠르게 검색 가능, 하드웨어가 무척 비싸다는 단점
- 시스템에 모든 프로세스의 페이지 테이블 항목을 저장할 만큼 크기가 충분한 연관 레지스터를 갖추기 곤란
- 물론 페이지 테이블 기준 레지스터 필요없음
- 순수 연관 매핑으로 주소를 변환하는 과정
연관·직접 매핑을 결합한 주소 변환
- 연관·직접 매핑을 혼용하기도 함
- 최근에 사용한 페이지만 연관 레지스터에 유지하고, 연관 레지스터에 해당 페이지가 없을 때만 직접 매핑하는 방법 제안
- 프로세스가 메모리의 정보를 균일하게 액세스하는 것이 아니라 많이 참조한 것을 또 참조하는 경향이 있다는 '지역성'을 적절히 활용
- 페이지 번호를 연관 레지스터에서 발견하는 비율을 적중률이라고 함
- 유효 접근시간은 ❶과 같다. 메모리 액세스 시간은 26.6% 더 늦어져 750나노초에서 950 나노초로 바뀌며, 적중률이 90%일 때 유효 접근시간은 ❷처럼 계산 가능
연관·직접 매핑으로 주소를 변환하는 과정
공유 페이지
공유 페이지의 개념
- 페이징 시스템의 장점인 시분할 환경에서 중요한 공통 코드 공유
- 페이징 시스템에서는 프로세스를 메모리에 연속적으로 할당할 필요가 없기 때문에 여러 프로세스가 메모리 공유 가능
- 다른 프로세스는 메모리의 같은 페이지(지역)를 단순히 가리키도록 해야하며, 공유 라이브러리 코드에도 사용 가능
- 공유 코드는 재진입을 허용하므로 재진입 코드reentrant code 또는 순수 코드pure code라고 함
- 오직 읽을 수만 있으며 스스로 수정하지는 못함.
- 프로세스들은 재진입 코드에서 데이터 항목 지정할 수 없으며 수행 도중 변하지 않음(2개 또는 그 이상의 프로세스가 동시에 같은 코드 수행 가능)
- 스레드가 텍스트와 메모리를 공유하는 방법과 비슷
- 프로세스에서 논리적 주소 공간의 다른 부분에 나타날 수 있음. 이때 공유 코드는 모든 프로세스에서 논리적 주소 공간의 동일한 위치에 나타나야 함
- 페이징에서 공유 코드
- 공유 코드 예
페이징에서 보호
페이지 테이블에 보호 비트를 추가하여 페이지 보호
'전공 > 운영체제' 카테고리의 다른 글
Ch08. 가상 메모리의 기초_04)세그먼테이션-페이징 혼용 기법 (1) | 2023.06.10 |
---|---|
Ch08. 가상 메모리의 기초_03)세그먼테이션 기법 (0) | 2023.06.09 |
Ch08. 가상 메모리의 기초_02)페이징 기법(1) (1) | 2023.06.08 |
Ch08. 가상 메모리의 기초_01)가상 메모리의 개요 (0) | 2023.05.21 |
[심화]Ch07. 물리 메모리 관리_05)컴파일과 메모리 관리 (0) | 2023.05.20 |
댓글