-
[OS] 페이징 주소 변환과 페이지 테이블 엔트리운영체제 2023. 4. 29. 11:16728x90반응형
페이징 주소 변환과 페이지 테이블 엔트리 알아보기
지난 시간에 가상 메모리 관리를 위한 페이징에 대해서 공부했습니다. 페이징에 대해서 알아보려면 아래 포스팅을 참고하시면 됩니다.
페이징으로 가상 메모리 관리하기, 페이지 테이블, TLB
오늘은 페이징에서 주소 변환하는 방법과 페이지 테이블 엔트리라는 것을 공부해 볼겁니당. 🧐🍊 페이징에서의 주소 변환
페이징 시스템에서 모든 논리주소는 기본적으로 페이지 번호 page number와 변위 offset으로 이루어져 있습니다.
예를 들어, 32비트 주소인 경우 N비트가 페이지 번호라면 32-N비트는 변위로 이루어진 것이죠. 여기서 변위는 접근하려는 주소가 프레임의 시작 번지로부터 얼만큼 떨어져 있는지를 알기 위한 정보입니다.
즉, 논리 주소 <페이지 번호, 변위>는 페이지 테이블을 통해 물리 주소 <프레임 번호, 변위>로 변환되니다.
아래 사진을 보고 CPU가 5번 페이지, 변위 2 라는 논리주소 <5, 2>에 접근하고 싶어한다고 가정해봅시다.페이지 테이블을 보면 페이지 번호(논리주소)가 5번인 것은 현재 프레임 번호(물리주소) 1번에 있는 것을 알 수 있습니다. CPU는 1번 프레임 변위 2로, 10번지에 접근하게 됩니다. 1번 프레임이 8번지부터 시작하고 변위가 2이기 때문에 10번지에 접근하는 것입니다.
🍊 페이지 테이블 엔트리
페이지 테이블에서 각 행을 페이지 테이블 엔트리라고 합니다. 즉, 페이지 테이블 엔트리가 가진 정보는 페이지 번호와 프레임 번호인 것이죠. 그런데 사실은 이거 말고도 다른 중요한 정보를 가지고 있는데 대표적인 것이 유효비트, 보호비트, 참조비트, 수정비트입니다.
📍 유효 비트 valid bit
유효 비트는 현재 해당 페이지에 접근이 가능한지에 대한 여부를 알려줍니다. 일반적으로 프로세스를 이루는 모든 페이지가 메모리에 있지는 않아요. 일부 페이지는 스왑 영역(보조기억장치)에 있는 경우가 많습니다. 따라서 유효 비트는 현재 페이지가 보조기억장치에 있는지 메모리에 적재되어 있는지를 0과 1로 알려줍니다.
만약 유효 비트가 0인, 즉, 메모리에 적재되어 있지 않은 페이지로 접근하려고 하는 경우에는 페이지 폴트page fault라는 예외(Exception)가 발생합니다. 페이지 폴트에 대한 자세한 것은 다음 포스팅에서 다뤄볼게요.📍 보호 비트 protection bit
보호 비트는 말그대로 페이지를 보호하기 위한 것입니다. 해당 페이지가 읽기만 가능한지, 혹은 읽고 쓰기가 모두 가능한지에 대해서 0과 1로 알려줍니다.
보호 비트는 세 개의 비트 r|w|x 로도 구현합니다.읽기(Read) - r
쓰기(Write) - w
실행(eXecute) - x
예를 들어, 보호 비트가 100 이라면 해당 페이지는 읽기만 가능합니다. 보호 비트가 만약 110이라면 읽기와 쓰기만 가능하고 실행은 불가능한 페이지입니다. 보호 비트가 111일 경우에는 해당 페이지에서 읽기와 쓰기, 실행이 모두 가능함을 의미합니다.📍 참조 비트 reference bit
CPU가 이 페이지에 접근한 적이 있는지에 대한 여부를 알려주는 비트입니다. 페이지 적재 이후 CPU가 읽거나 쓴 적이 있다면 참조 비트가 1로 세팅됩니다.
📍 수정 비트 modified bit
수정 비트는 해당 페이지에 데이터를 쓴 적이 있는지 없는지 수정 여부를 알려줍니다. 더티 비트 dirty bit라고도 부릅니다. 변경된 적이 있으면 1, 없으면 0으로 세팅됩니다. 수정 비트가 있는 이유는 페이지가 보조기억장치로 스왑 아웃 될 때 변경이력이 있는 경우 그 변경된 값을 기록하는 작업이 추가되어야 하기 때문입니다.
여기까지 페이징에서 주소 변환하는 법과 페이지 테이블 엔트리를 알아봤습니당. 대부분의 전공서에서는 여기까지만 다루지만 실제 페이지 테이블 엔트리에는 이외에도 다양한 정보가 있어요. 그럼 다음 포스팅에서는 페이지 교체와 프레임 할당에 대해서 알아볼게요. 😀LIST'운영체제' 카테고리의 다른 글
[OS] 페이징으로 가상 메모리 관리하기, 페이지 테이블, TLB (0) 2023.04.23 [OS] 스와핑과 연속 메모리 할당, 외부 단편화 (0) 2023.04.16 [OS] 교착 상태(Deadlock) 해결 방법 _데드락 (0) 2023.04.09 [OS] 데드락(교착 상태)과 자원 할당 그래프 (0) 2023.04.08 [OS] Linux IPC 프로세스간 통신에 대해서 알아보자 (0) 2023.04.04