조성호 님의 "쉽게 배우는 운영체제" 책을 정리한 포스팅 입니다
1. 개요
메모리 관리의 복잡성
- 시분할 시스템에서는 여러 응용 프로세스가 동시에 메모리에 올라와 실행됨
- ➡️ 한정된 메모리를 여러 프로세스가 공유해야 하므로 메모리 관리가 복잡해짐
메모리 관리의 이중성
- 프로세스: 메모리를 독점적으로 사용하고 싶어함
- 메모리 관리자: 제한된 메모리를 최대한 효율적으로 분배하고 싶어함
2. 메모리 관리자
- 이러한 복잡한 메모리 관리를 메모리 관리 시스템(MMS)에서 담당함
정책
| 구분 | 관리 방식 |
| placement | - paging: 메모리를 같은 크기로 나누어 할당 - segmentation: 프로세스의 크기에 맞게 나누어 할당 |
| replacement | replacement algorithm: 메모리가 꽉 찼을 때, 어떤 프로세스를 내보낼지 결정하는 정책 |
관리 방식
| 구분 | 관리 방식 |
| 메모리 부족 | - 새로운 메모리 공간을 확보함 - 인접한 프로세스를 밀어냄 - 더 큰 메모리 공간으로 해당 프로세스를 이동시킴 |
| 빈 공간 발생 |
분산된 빈 공간을 합쳐 하나의 큰 공간으로 통합
|
과정
- fetch
- 실행할 프로세스와 필요한 데이터를 메모리에 로드
- placement
- 로드된 프로세스와 데이터를 메모리의 어느 위치에 배치할지 결정
- ✅ 메모리 영역을 어떻게 나누어 할당하느냐에 따라 메모리 관리의 복잡도와 효율성이 달라짐
- replacement
- 메모리가 가득 찬 상태에서 새로운 프로세스를 적재하기 위해 기존 프로세스를 제거하는 작업
3. 메모리 주소
32bit CPU vs 64bit CPU
- CPU가 한번에 처리 가능한 데이터 크기와 표현 가능한 메모리 주소 범위를 의미함
메모리 영역의 구분
| 구분 | 운영체제 영역 | 사용자 영역 |
| 정의 | 운영체제의 핵심 코드 및 데이터를 포함하는 메모리 영역 | 사용자 프로그램이나 애플리케이션 코드가 실행되는 메모리 영역 |
| 접근 권한 | 사용자 프로그램이 접근할 수 없음 (보호됨) | 사용자 프로그램만 접근 가능, 운영체제 영역에 접근 불가 |
| 보안 | 매우 중요하며 보안이 강화됨, 시스템 충돌 방지 | 보안 위협을 방지하기 위해 운영체제 영역에 접근 불가 |
| 목적 | 운영체제 기능을 수행하는 코드와 데이터를 관리 | 사용자 프로그램이 실행되며 결과를 처리하는 공간 |
| 예시 | 시스템 콜, 장치 드라이버, 메모리 관리 등 | 사용자가 작성한 애플리케이션, 웹 브라우저 등 |
CPU의 경계 레지스터
- 운영체제와 사용자 영역을 구분하는 역할
- ✅ 운영체제 영역의 시작과 끝 주소를 경계 레지스터에 설정함
- ✅ 사용자 프로그램이 메모리 영역에 접근할 때, CPU는 이 경계 레지스터를 참고하여 할당된 메모리 범위를 벗어나지 않도록 함
- ➡️ 메모리 보호 목적
절대 주소 vs 상대 주소
| 구분 | 절대 주소 | 상대 주소 |
| 정의 | 물리적인 주소, 하드웨어에서 바라본 실제 메모리 주소 | 논리적인 주소, 사용자 프로세스가 바라본 주소 |
| 사용자 입장 | 사용자에게 불편하고 위험, 매번 운영체제 영역을 확인해야 함 | 사용자에게 더 간편하고 유용, 0번지부터 시작하므로 편리 |
| 메모리 관리 | 메모리 관리자가 직접 관리, 운영체제에서 사용 | 메모리 관리자의 재배치 레지스터가 변환 작업 담당 |
| 장점 | 실제 하드웨어와의 일관성 있는 주소 지정 | 사용자에게 주소 계산이 단순하고 유연하게 처리됨 |
| 단점 | 사용자에게 복잡하고 위험, 운영체제 영역과의 구분 필요 | 메모리 관리자가 변환 과정을 관리해야 하므로 복잡함 |
예) 디스크 - 메모리
더보기
- 디스크에 저장된 프로그램은 상대 주소로 기록됩니다. (아직 어느 메모리 주소에 올라갈지 결정되지 않았기 때문)
- 프로그램이 메모리에 로드될 때, 상대 주소는 절대 주소로 변환됩니다.
- CPU는 절대 주소를 사용하여 명령을 실행합니다.
- 프로그램 종료 후 다시 디스크에 저장될 때는 상대 주소로 기록됩니다.
4. 메모리 할당 (단일 프로그래밍 환경)
메모리 오버레이
- 프로그램을 몇 개의 모듈로 나누고, 필요한 모듈만 메모리에 올려 실행하고 더 이상 필요 없는 모듈은 내보내는 방식
- ✅ PC가 어떤 모듈을 가져오거나 내보낼지 결정함
- ✅ 프로그램 일부만 메모리에 올라와도 실행이 가능함
- ➡️ 한정된 메모리에서 메모리보다 큰 프로그램의 실행이 가능함
스왑 영역
- 메모리가 부족할 때, 일시적으로 메모리에서 밀려난 프로세스를 저장장치에 보관하는 공간
- 메모리 관리자가 관리함
- ✅ 스왑 인: 스왑 영역에서 메모리로 데이터를 가져오는 작업
- ✅ 스왑 아웃: 메모리에서 스왑 영역으로 데이터를 내보내는 작업
5. 메모리 할당 (다중 프로그래밍 환경)
- 한 번에 여러 프로세스가 실행되는 구조의 메모리 관리
- 메모리 분할 방식에 따라 나뉨
가변 분할 방식 (세그멘테이션 기법)
- 프로세스의 크기에 맞게 메모리를 가변적으로 분할하여 할당
- 연속 메모리 할당
- ✅ 메모리 낭비 적음
- ⚠️ 관리 복잡
- ⚠️ 외부 단편화: 연속된 메모리 공간을 확보되지 못해 배치가 불가능하지만 낭비되는 공간 발생
표) 메모리 배치 방식
더보기
| 항목 | 설명 |
| 최초 배치 |
빈 공간에서 첫 번째로 발견된 공간에 프로세스를 배치 (단편화 고려 X)
|
| 최적 배치 |
빈 공간을 모두 확인하고, 가장 작은 공간에 프로세스를 배치
|
| 최악 배치 |
빈 공간을 모두 확인하고, 가장 큰 공간에 프로세스를 배치
|
해결 방법) 조각 모음
더보기
- 서로 떨어져 있는 여러 개의 빈 공간을 합치는 작업
- 이동할 프로세스의 동작이 일시 정지되고, 적당한 위치로 재배치됨
- 재배치 후, 프로세스가 다시 시작됨
고정 분할 방식 (페이징)
- 프로세스의 크기와 상관없이 메모리를 같은 크기로 나누는 것
- 비연속 메모리 할당
- ✅ 관리 쉬움 (조각 모음 할 필요 없음)
- ⚠️ 메모리 낭비 많음
- ⚠️ 내부 단편화: 일정하게 나뉜 메모리의 크기보다 작은 프로세스가 배치될 경우 낭비되는 공간 발생
'OS' 카테고리의 다른 글
| [쉽게 배우는 운영체제] 9. 가상 메모리 관리 (0) | 2024.12.13 |
|---|---|
| [쉽게 배우는 운영체제] 8. 가상 메모리의 기초 (0) | 2024.12.12 |
| [쉽게 배우는 운영체제] 6. 교착 상태 (1) | 2024.12.12 |
| [쉽게 배우는 운영체제] 5-1. 프로세스 동기화: 임계 영역 (0) | 2024.12.12 |
| [쉽게 배우는 운영체제] 4-2. CPU 스케줄링: 인터럽트 처리 (0) | 2024.12.12 |