조성호 님의 "쉽게 배우는 운영체제" 책을 정리한 포스팅 입니다
1. 개요
- 메모리의 크기는 컴퓨터마다 다름
- OS가 물리 메모리 크기에 의존한다면, 메모리 크기가 다른 환경에서는 프로그램이 정상적으로 동작하지 않을 수 있음
- 이를 해결하기 위해 가상 메모리 개념이 등장함
가상 메모리
- 물리 메모리의 실제 크기와 상관없이 프로세스에게 충분히 큰 메모리 공간을 제공하는 기술
- ➡️ 물리 메모리 크기, 실제 메모리 위치, 다른 프로세스 존재 등을 고려하지 않고 메모리를 사용할 수 있습니다
메모리 관리자
- 메모리 자원을 효율적으로 관리하고 프로세스들이 요구하는 메모리를 적절히 제어하는 역할
| 기능 | 설명 |
| 스왑 |
물리 메모리가 부족하면 스왑 영역으로 일부 데이터를 보냄.
|
| 동적 주소 변환 |
가상 주소를 물리 주소로 변환하여 실제 메모리 위치를 참조.
|
| 매핑 테이블 관리 |
가상 주소와 물리 주소를 일대일로 매핑하는 테이블을 관리.
|
2. 페이징 기법
- 고정 분할 방식을 이용한 가상 메모리 관리 기법
- 가상 메모리와 물리 메모리를 같은 같은 크기의 블록 단위로 나누어 관리
페이지 vs 프레임
| 구분 | 페이지 | 프레임 |
| 위치 | 가상 메모리 | 물리 메모리 |
| 크기 | 고정 크기 |
페이지와 동일한 크기.
|
| 번호 | 0번부터 시작 |
0번부터 시작
|
페이지 테이블
- 각 페이지가 어떤 프레임에 매핑되어 있는지 기록하는 테이블
PTBR
- 각 프로세스의 페이지 테이블의 시작 주소를 저장하는 레지스터
- 각 프로세스의 PCB에 저장됨
관리
- 프로세스마다 페이지 테이블을 운영함
- 페이지 테이블의 크기가 커지면 메모리 자원이 많이 필요함
- ✅ 페이지 테이블 용량이 커질수록, 실제 사용할 수 있는 영역이 줄어듬
- ➡️ 페이지 테이블의 크기를 적정하게 유지하는 것이 중요
페이지 테이블 관리 방식
| 매핑 방식 | 설명 | 장점 | 단점 |
| 직접 매핑 | 페이지 테이블 전체를 물리 메모리에 상주 | 빠른 주소 변환 | 메모리 사용량 큼 |
| 연관 매핑 | 페이지 테이블을 스왑 영역에 저장. 일부만 로드 | 메모리 효율적 |
주소 변환 속도 느림
|
| 집합-연관 매핑 | 페이지 테이블을 디렉토리로 나누어 관리 | 효율적 주소 변환 |
일부 페이지 테이블을 여전히 검색 필요
|
| 역매핑 | 물리 메모리 프레임 번호 기준으로 테이블 관리 | 하나의 테이블만 존재 |
전체 테이블 스캔이 필요할 수 있음
|
- 전체를 메모리에 관리할 경우와 일부를 스왑 영역에서 관리할 경우, 가상 주소를 물리 주소로 변환하는 방법이 달라짐
- 프레임이 스왑 영역에 있을 경우, invalid라고 표시됨
주소 변환
- 가상 주소 x번지가 어느 페이지에 해당하는지 찾기
- 페이지 테이블의 페이지 y로 가서 해당 페이지의 프레임 찾기
- 물리 메모리 프레임 y의 (x번지 % 페이지 크기) 번째 위치에 접근
3. 세그먼테이션 기법
- 프로세스의 크기에 따라 메모리를 분할
- 각 세그먼트가 자신에게 주어진 메모리 영역을 넘어가면 안됨 (limit 컬럼 사용)
- 스왑 영역을 사용할 경우 address 컬럼에 'I'로 표시함
주소 변환
- 가상 주소에 따른 물리 주소를 구함
- 해당 물리 주소에서 쓰고자 하는 데이터가 범위에 넘어가는지 검사
- 물리 주소에 접근하여 원하는 데이터를 읽거나 씀
4. 세그먼테이션 - 페이징 기법
세그먼테이션 테이블
- 페이지 테이블의 페이지들 중 권한 비트가 같은 공통된 정보를 모아 관리하는 테이블
권한 비트
- 페이지마다 접근 권한이 다름
- 페이지 테이블의 모든 행에는 권한 비트가 추가됨
- 메모리 관리자는 주소 변환이 이루어질 때마다 페이지 테이블의 권한 비트로 적절한 접근인지 확인함
중복된 권한 비트 문제 해결
- 인접한 페이지에는 권한이 같은 페이지가 많은데, 중복적인 값이 많아 메모리를 낭비하게 됨
- 이러한 문제를 해결하기 위해 세그먼테이션 테이블을 이용함
- 논리적 단위(세그먼트)로 메모리를 나누고, 각 세그먼트마다 하나의 권한 비트 집합을 적용함
5. 캐시 매핑 기법
- CPU 캐시와 RAM 사이에서 데이터를 효율적으로 교환하기 위해 사용하는 방법
태그
- 캐시에 저장된 데이터가 원래 메모리의 어느 위치에서 온 데이터인지 식별하는데 사용하는 식별자
종류
| 항목 | 직접 매핑 | 연관 매핑 |
집합-연관 매핑
|
| 블록 | 각 메모리 블록은 하나의 고정된 캐시 위치에 매핑 | 메모리 블록이 캐시 메모리 어느 위치에나 매핑됨 |
캐시를 집합으로 나누고 각 집합 내에서 연관 매핑 사용
|
| 태그 | 캐시의 블록 번호 | - |
각 집합에 자리를 가지도록 설정
|
| 블록 거리 | 메모리 블록에서 캐시로 올라올 때의 위치 정보 | - | - |
| 장점 | 캐시 히트나 캐시 미스를 빠르게 확인할 수 있음 | 캐시 충돌 적음 |
자리다툼 문제가 완화됨
|
| 단점 | 여러 메모리 블록이 같은 캐시 블록을 공유할 때 자리다툼 문제가 발생 | 캐시 검색이 느림 |
각 집합에서 직접 매핑을 사용하므로 자리다툼 문제를 완화하나 여전히 발생 가능
|
'OS' 카테고리의 다른 글
| [쉽게 배우는 운영체제] 11. 파일 시스템 (3) | 2024.12.14 |
|---|---|
| [쉽게 배우는 운영체제] 9. 가상 메모리 관리 (0) | 2024.12.13 |
| [쉽게 배우는 운영체제] 7. 물리 메모리 관리 (0) | 2024.12.12 |
| [쉽게 배우는 운영체제] 6. 교착 상태 (1) | 2024.12.12 |
| [쉽게 배우는 운영체제] 5-1. 프로세스 동기화: 임계 영역 (0) | 2024.12.12 |