조성호 님의 "쉽게 배우는 운영체제" 책을 정리한 포스팅 입니다
1. 개요
메모리 관리의 복잡성
CPU
- 메모리의 내용을 가져오거나, 작업 결과를 메모리에 저장하기 위해 MAR을 사용함
- MAR에 필요한 메모리 주소를 넣으면 데이터를 가져오거나 기록할 수 있음
시분할 시스템
- 모든 응용 프로그램이 메모리에 올라와 실행되므로 메모리 관리가 복잡함
메모리 관리의 이중성
- 프로세스 입장에서는 메모리를 독차지하려 하고, 메모리 관리자 입장에서는 되도록 효율적으로 쓰고싶어 하는 것
메모리 관리자
- 이러한 복잡한 메모리 관리는 메모리 관리 시스템(MMS)에서 담당함
관리법
- 메모리가 부족할 경우, 새로운 공간을 확보
- 옆의 프로세스를 밀어냄
- 더 큰 공간으로 해당 프로세스를 옮겨줌
- 빈 공간이 생기면
- 합쳐서 하나의 큰 공간을 만듬
과정
- fetch
- 프로세스와 데이터를 메모리에 로드
- placement
- 가져온 프로세스와 데이터를 메모리의 어느 부분에 올려놓을지 결정
- 어떻게 메모리 구역을 나누어 할당할지에 따라 메모리 관리의 복잡성이 달라짐
- 정책
- paging: 메모리를 같은 크기로 자르는 것
- segmentation: 프로세스의 크기에 맞게 자르는 것
- replacement
- 꽉 차있는 메모리에 새로운 프로세스를 가져오기 위해 오래된 프로세스를 내보내는 작업
- 정책
- replacement algorithm: 메모리가 꽉 찼을 때, 어떤 프로세스를 내보낼지 결정하는 정책
2. 메모리 주소
32bit CPU vs 64bit CPU
- 레지스터의 크기
- CPU가 한번에 다룰 수 있는 데이터의 최대 크기를 의미함
- 메모리 주소 공간 크기가 결정됨
메모리 영역의 구분
운영체제 영역과 사용자 영역
구분 | 운영체제 영역 | 사용자 영역 |
정의 | 운영체제의 핵심 코드 및 데이터를 포함하는 메모리 영역 | 사용자 프로그램이나 애플리케이션 코드가 실행되는 메모리 영역 |
내용 | 커널 코드, 시스템 콜, 드라이버, 메모리 관리 데이터 등 | 사용자 프로그램, 애플리케이션 코드, 사용자 데이터 등 |
접근 권한 | 사용자 프로그램이 접근할 수 없음 (보호됨) | 사용자 프로그램만 접근 가능, 운영체제 영역에 접근 불가 |
보안 | 매우 중요하며 보안이 강화됨, 시스템 충돌 방지 | 보안 위협을 방지하기 위해 운영체제 영역에 접근 불가 |
목적 | 운영체제 기능을 수행하는 코드와 데이터를 관리 | 사용자 프로그램이 실행되며 결과를 처리하는 공간 |
예시 | 시스템 콜, 장치 드라이버, 메모리 관리 등 | 사용자가 작성한 애플리케이션, 웹 브라우저 등 |
CPU의 경계 레지스터
- 경계 레지스터는 메모리 보호 기능을 담당 (운영체제와 사용자 영역을 구분하는 역할)
- 운영체제 영역의 시작과 끝 주소를 경계 레지스터에 설정함
- 사용자 프로그램이 메모리 영역에 접근할 때, CPU는 이 경계 레지스터를 참고하여 할당된 메모리 범위를 벗어나지 않도록 체크함
절대 주소 vs 상대 주소
구분 | 절대 주소 | 상대 주소 |
정의 | 물리적인 주소, 하드웨어에서 바라본 실제 메모리 주소 | 논리적인 주소, 사용자 프로세스가 바라본 주소 |
주소 공간 | 실제 RAM에 있는 물리적인 메모리 주소 공간 | 사용자 프로세스 입장에서의 주소 공간 (0번지부터 시작) |
사용자 입장 | 사용자에게 불편하고 위험, 매번 운영체제 영역을 확인해야 함 | 사용자에게 더 간편하고 유용, 0번지부터 시작하므로 편리 |
메모리 관리 | 메모리 관리자가 직접 관리, 운영체제에서 사용 | 메모리 관리자의 재배치 레지스터가 변환 작업 담당 |
주소 변환 | 운영체제나 하드웨어가 직접 관리하는 실제 물리적 주소 | 메모리 관리자나 CPU가 절대 주소로 변환하여 사용 |
장점 | 실제 하드웨어와의 일관성 있는 주소 지정 | 사용자에게 주소 계산이 단순하고 유연하게 처리됨 |
단점 | 사용자에게 복잡하고 위험, 운영체제 영역과의 구분 필요 | 메모리 관리자가 변환 과정을 관리해야 하므로 복잡함 |
예
- 디스크에 저장된 프로그램은 상대 주소로 기록됩니다.
- 프로그램이 메모리에 로드될 때, 상대 주소는 절대 주소로 변환됩니다.
- CPU는 절대 주소를 사용하여 명령을 실행합니다.
- 프로그램 종료 후 다시 디스크에 저장될 때는 상대 주소로 기록됩니다.
3. 메모리 할당 (단일 프로그래밍 환경)
메모리 오버레이
- 메모리 크기보다 프로그램 크기가 더 클 경우, 적당한 크기로 잘라서 가져오는 기법
- 프로그램을 몇 개의 모듈로 나누고, 필요할 때마다 모듈을 메모리에 가져와 사용
- PC에서 어떤 모듈을 가져오거나 내보낼지 결정함
장점
- 한정된 메모리에서 메모리보다 큰 프로그램의 실행이 가능함
- 프로그램 전체가 아니라 일부만 메모리에 올라와도 실행이 가능함
스왑 영역
- 메모리가 모자라서 잠시 내쫓은 프로세스들을 모아두는 공간 (저장장치)
- 메모리 관리자가 관리함
동작
- 스왑 인: 스왑 영역에서 메모리로 데이터를 가져오는 작업
- 스왑 아웃: 메모리에서 스왑 영역으로 데이터를 내보내는 작업
4. 메모리 할당 (다중 프로그래밍 환경)
- 한 번에 여러 프로세스가 실행되는 구조의 메모리 관리
- 메모리 분할 방식에 따라 나뉨
가변 분할 방식 (세그멘테이션 기법)
- 연속 메모리 할당
- 프로세스의 크기에 따라 메모리를 나눔
메모리 배치 방식
항목 | 설명 |
최초 배치 |
- 빈 공간에서 첫 번째로 발견된 공간에 프로세스를 배치 (단편화 고려 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 |