Search
💬

[운영체제] Paging

Tags
CS
Date
2024/07/17
Key
그러니까 프로세스가 실행될 때 메모리를 할당하고,
할당된 메모리의 크기와 위치(주소)를 프로세스가 기억해야 하는데,
프로세스가 기억하는 주소는 논리 주소고 실제 메모리 주소는 물리 주소라는 거지?
그리고 이 논리 주소와 메모리 주소를 기록하는 게 페이지고?
운영체제 내부에 페이지 관리 시스템이 올라가 있다고 함
운영체제 페이지
운영체제의 메모리 관리 기법
프로세스의 주소 공간을 일정한 크기로 나눈 단위
물리 메모리와 프로세스가 사용하는 논리 메모리 사이의 매핑을 효율적으로 관리
페이지 테이블
논리 주소를 물리 주소로 변환하는 데 사용
== 페이지 번호를 물리 프레임 번호로 변환하는 데 사용
페이지 번호 == 페이지 번호에서 물리 프레임 번호
오프셋 == 해당 페이지 내의 위치 지정
각 프로세스는 자신의 페이지 테이블을 가짐
논리 페이지 번호와 물리 프레임 번호가 저장됨
논리 주소: | P | d | | 페이지 번호 | 페이지 내 오프셋 | |---|-------------| 페이지 테이블: +------+-----------------+ | 페이지 번호 | 물리 프레임 번호 | +------+-----------------+ | 0 | 5 | | 1 | 2 | | 2 | 9 | | ... | ... | +------+-----------------+ 예제: 논리 주소: 0x1234 (16진수) 페이지 크기: 4KB (2^12) 논리 주소 0x1234를 이진수로 변환: 0001 0010 0011 0100 페이지 번호: 상위 4비트 = 0001 (페이지 테이블의 1번 엔트리) 오프셋: 하위 12비트 = 0010 0011 0100 (페이지 내 오프셋) 페이지 테이블에서 페이지 번호 1의 물리 프레임 번호를 찾음: 물리 프레임 번호 = 2 물리 주소 = 물리 프레임 번호 * 페이지 크기 + 오프셋 = 2 * 4KB + 0x0234 = 0x2000 + 0x0234 = 0x2234
Markdown
복사
페이지 크기
운영체제와 하드웨어에 의해 정해짐(4KB, 8KB)
동일한 크기의 페이지 단위로 나누면 메모리 관리가 간단해짐, 내부 단편화 문제를 줄임
메모리 관리 간단해짐:
고정된 크기 만큼만 처리하면 됨(크기 조정 안 해도 됨),
논리→물리 주소로 변환할 때 페이지 크기가 일정하기 때문에 주소의 특정 비트만 확인하면 페이지 번호랑 오프셋 구분 가능,
외부 단편화 문제 해결: 다양한 크기의 메모리 블록이 할당되고 해제되면서 발생하는 문제
페이지 테이블에 각 페이지의 시작 주소와 매핑 정보를 저장해야 하는데, 페이지 크기가 일정하면 페이지 번호와 오프셋을 쉽게 계산 가능
균일한 메모리 접근 시간
페이지 폴트
프로세스가 접근하려는 페이지가 물리 메모리에 없을때 발생하는 이벤트
발생 시: 페이지를 디스크에서 물리 메모리로 로드 후 프로세스의 실행 재개
외부 단편화(External Fragmentation)
메모리 공간을 할당하고 해제하는 과정에서, 사용되지 않는 작은 메모리 블록들이 생겨나 전체적인 메모리 사용 효율을 떨어뜨리는 현상
가변 크기의 메모리 블록 할당할 때 발생
남는 작은 빈 공간 생김
해결 방법
메모리 압축 (Memory Compaction): 메모리 압축은 사용 중인 메모리 블록을 한쪽으로 몰아서 연속된 큰 빈 공간을 만드는 방법입니다. 하지만 이는 오버헤드가 크고, 실시간 시스템에서는 사용하기 어렵습니다.
페이징 (Paging): 고정 크기의 페이지로 메모리를 나누어 외부 단편화를 줄입니다.
세그멘테이션 (Segmentation): 논리적 단위로 메모리를 나누어 사용자가 필요로 하는 크기만큼 할당합니다.
내부 단편화
메모리 블록이 고정 크기로 할당될 때, 실제로 필요한 메모리보다 더 큰 블록이 할당되어 사용되지 않는 메모리 공간이 발생하는 현상
해결 방법
적응형 메모리 할당 (Buddy System): 메모리 블록을 2의 거듭제곱 크기로 나누어, 요청된 메모리 크기에 맞추어 할당하는 방법입니다. 이는 내부 단편화를 줄이는 데 효과적입니다.
세분화된 고정 크기 할당: 다양한 크기의 고정 블록을 사용하여, 필요한 메모리에 더 가까운 크기의 블록을 할당합니다.
메모리 풀 (Memory Pool): 특정 크기의 메모리 블록을 미리 할당해두고, 필요한 블록을 재사용합니다.
그러면 페이지 기법은 내부 프래그멘테이션 문제가 발생할 듯?
⇒ 혼합 메모리 할당 기법(페이징, 세그멘테이션 혼합 사용)
세그멘테이션: 논리적인 메모리 할당 단위를 사용해 내부 단편화를 줄임
논리 주소, 물리 주소
물리 주소: 실제 메모리(RAM)의 주소
논리 주소: 프로세스가 인식하는 메모리 주소
페이지 번호(Page Number, P):
논리 주소의 상위 비트로, 페이지 테이블의 몇 번째 엔트리인지를 나타냄
논리 주소가 16비트라고 가정하면, 상위 4비트가 페이지 번호일 수 있음
오프셋(Offset, d)
논리 주소의 하위 비트로, 해당 페이지 내에서의 위치
16비트 논리 주소에서 하위 12비트가 오프셋일 수 있음