나만의 작은 도서관
[OS] 페이지(Page) 본문
페이지(Page)란?
가상 메모리 시스템에서는 메모리를 블록으로 나누어 관리한다. 이때 메모리 블록을 고정된 크기로 나누어 관리한다면, 메모리 블록을 "페이지"라고 부른다. (서로 다른 크기로 나누어 관리하면 "세그멘테이션(Segmentation)"이라고 한다.)
물리 메모리의 페이지, 프레임(Frame)
페이지 개념은 물리 메모리에도 존재한다. 단어의 혼동을 피하기 위해 물리 메모리에서의 페이지는 프레임(Frame)이라 부른다. (그냥 물리 페이지라 부르기도 한다)
페이지 사용법
프로세스는 프레임 단위로 나눠져서 메모리(RAM)에 적재된다. OS는 프로세스가 사용하는 가상 주소 공간을 페이지 단위로 관리하고, 페이지와 프레임을 매핑하여 데이터에 접근할 수 있도록 한다. (일반적으로, 페이지와 프레임은 일대일로 매핑된다.)
페이지 테이블
- 페이지와 물리 메모리(프레임)의 매핑 정보는 “페이지 테이블”에 저장되어 있다. 페이지 테이블은 각 프로세스마다 독립적으로 존재한다.
- 만약 페이지 테이블에 찾는 페이지의 매핑 정보가 없어 조회에 실패했다면(Page Fault, 페이지 폴트), OS는 디스크(SSD/HDD)에서 페이지를 가져와 메모리에 적재한다.
페이지 크기
- 페이지 크기의 기본값은 4KB.
- 페이지 크기가 커질수록 메모리 낭비(내부 단편화)가 많아지고, 페이지 교체 비용이 증가하는 대신,
- 페이지 테이블 크기가 작아지고, TLB 적중률(TLB Hit)이 올라간다.
페이지 크기가 커지면 같은 메모리를 더 적은 페이지 개수로 구분되며, "TLB 엔트리 개수(=페이지 테이블 원소 개수)가 고정이라면" 더 많은 데이터를 TLB에 저장하므로 TLB 적중률이 올라가는 것이다.
페이징(Paging)
페이징은 컴퓨터의 메모리 관리 기법으로, 간단히 말해서 페이지 단위로 메모리를 나눠서 관리하는 것을 말한다.
페이징을 하는 이유
- 외부 단편화 해결
- 기존 문제점: 메모리 할당과 해제를 반복하면서 작은 크기의 빈 공간(hole)들이 생긴다. 이때 만약 프로세스 전체를 연속적인 메모리로 적재하려고 한다면, 프로세스 메모리를 연속적으로 담을 메모리 공간이 없어 할당하지 못하는 외부 단편화가 발생한다.
- 해결: 페이징 시, 프로세스를 페이지 단위로 쪼갠 다음 각 페이지를 메모리에 할당하면 된다. 페이지들은 연속적일 필요가 없기 때문에 충분한 메모리 공간만 있다면 외부 단편화는 발생하지 않는다. (단, 내부 단편화는 발생한다.)
내부 단편화, 외부 단편화에 대한 자세한 내용은 여기를 참조
- 가상 메모리 지원 → RAM 크기보다 큰 프로그램 실행 가능
- 기존 문제점: 프로그램 전체를 메모리(RAM)에 적재해야 한다면, 메모리보다 큰 프로그램은 적재할 수가 없다.
- 해결: 페이징 시, 사용자가 필요로 하는 페이지만 메모리에 적재하고, 나머지는 디스크에 저장해 둠으로써 RAM보다 큰 프로그램도 실행할 수 있게 된다.
- 프로세스 주소 공간 보호(메모리 보호)
- 페이징 시, 각 프로세스는 자신의 페이지 테이블을 통해서만 메모리에 접근하므로, 페이지 테이블에 존재하지 않는 페이지에는 접근할 수 없다. (페이지 테이블은 OS가 관리하며, 공유 페이지가 아닌 이상 다른 프로세스의 페이지에 대한 PTE를 추가하지 않는다.)
- 만약 프로세스가 허용되지 않은 페이지에 접근하려 한다면(ex. 다른 프로세스 페이지 접근, 보호 비트에 위반되는 메모리 접근 등), OS가 페이지 폴트(Page Fault)나 접근 오류를 발생시켜 메모리를 보호할 수 있다.
보호 비트(Protection Bits)
메모리는 페이지 단위로 메모리 접근 권한 레벨이 설정된다. 예를 들어서, 프로세스 A가 페이지 X에 대해 읽기 권한만 주어졌다면, 프로세스 A는 페이지 X에 포함된 모든 데이터는 읽기만 가능하다.
페이지 테이블의 각 행, 즉, 페이지 테이블 엔트리(PTE, Page Table Entry)에는 이 프로세스가 해당 페이지에 대한 접근 권한 레벨을 정의하는 "보호 비트"가 존재한다.
보호 비트 예시
- 가상 페이지 번호 0x1000: 읽기 O 쓰기 O 실행 X
- 가상 페이지 번호 0x2000: 읽기 O 쓰기 X 실행 X (읽기 전용)
- 가상 페이지 번호 0x3000: 읽기 X 쓰기 X 실행 O (코드 전용)
'Common > CS-일반' 카테고리의 다른 글
[OS] 내부 단편화, 외부 단편화 (0) | 2025.03.10 |
---|---|
[OS] 가상 주소(Virtual Address) (0) | 2025.03.10 |
[OS] 프로세스의 메모리 구조 (0) | 2025.02.19 |
프레임워크란? (+라이브러리와의 차이점) (1) | 2024.11.26 |
컴퓨터 구조 #2. 메모리(Memory) (0) | 2024.07.10 |