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비트가 오프셋일 수 있음