OS

[쉽게 배우는 운영체제] 7. 물리 메모리 관리

noahkim_ 2024. 12. 12. 19:20

조성호 님의 "쉽게 배우는 운영체제" 책을 정리한 포스팅 입니다


1. 개요

메모리 관리의 복잡성

  • 시분할 시스템에서는 여러 응용 프로세스가 동시에 메모리에 올라와 실행됨
  • ➡️ 한정된 메모리를 여러 프로세스가 공유해야 하므로 메모리 관리가 복잡해짐

 

메모리 관리의 이중성

  • 프로세스: 메모리를 독점적으로 사용하고 싶어함
  • 메모리 관리자: 제한된 메모리를 최대한 효율적으로 분배하고 싶어함

 

2. 메모리 관리자

  • 이러한 복잡한 메모리 관리를 메모리 관리 시스템(MMS)에서 담당함

 

정책

구분 관리 방식
placement - paging: 메모리를 같은 크기로 나누어 할당
- segmentation: 프로세스의 크기에 맞게 나누어 할당
replacement replacement algorithm: 메모리가 꽉 찼을 때, 어떤 프로세스를 내보낼지 결정하는 정책

 

관리 방식

구분 관리 방식
메모리 부족 - 새로운 메모리 공간을 확보함
- 인접한 프로세스를 밀어냄
- 더 큰 메모리 공간으로 해당 프로세스를 이동시킴
빈 공간 발생
분산된 빈 공간을 합쳐 하나의 큰 공간으로 통합

 

과정

  1. fetch
    • 실행할 프로세스와 필요한 데이터를 메모리에 로드
  2. placement
    • 로드된 프로세스와 데이터를 메모리의 어느 위치에 배치할지 결정
    • ✅ 메모리 영역을 어떻게 나누어 할당하느냐에 따라 메모리 관리의 복잡도와 효율성이 달라짐
  3.  replacement
    • 메모리가 가득 찬 상태에서 새로운 프로세스를 적재하기 위해 기존 프로세스를 제거하는 작업

 

3. 메모리 주소

32bit CPU vs 64bit CPU

  • CPU가 한번에 처리 가능한 데이터 크기와 표현 가능한 메모리 주소 범위를 의미함

 

메모리 영역의 구분

구분 운영체제 영역 사용자 영역
정의 운영체제의 핵심 코드 및 데이터를 포함하는 메모리 영역 사용자 프로그램이나 애플리케이션 코드가 실행되는 메모리 영역
접근 권한 사용자 프로그램이 접근할 수 없음 (보호됨) 사용자 프로그램만 접근 가능, 운영체제 영역에 접근 불가
보안 매우 중요하며 보안이 강화됨, 시스템 충돌 방지 보안 위협을 방지하기 위해 운영체제 영역에 접근 불가
목적 운영체제 기능을 수행하는 코드와 데이터를 관리 사용자 프로그램이 실행되며 결과를 처리하는 공간
예시 시스템 콜, 장치 드라이버, 메모리 관리 등 사용자가 작성한 애플리케이션, 웹 브라우저 등

 

CPU의 경계 레지스터
  • 운영체제와 사용자 영역을 구분하는 역할
  • ✅ 운영체제 영역의 시작과 끝 주소를 경계 레지스터에 설정함
  •  사용자 프로그램이 메모리 영역에 접근할 때, CPU는 이 경계 레지스터를 참고하여 할당된 메모리 범위를 벗어나지 않도록 함
  • ➡️ 메모리 보호 목적

 

절대 주소 vs 상대 주소

구분 절대 주소 상대 주소
정의 물리적인 주소, 하드웨어에서 바라본 실제 메모리 주소 논리적인 주소, 사용자 프로세스가 바라본 주소
사용자 입장 사용자에게 불편하고 위험, 매번 운영체제 영역을 확인해야 함 사용자에게 더 간편하고 유용, 0번지부터 시작하므로 편리
메모리 관리 메모리 관리자가 직접 관리, 운영체제에서 사용 메모리 관리자의 재배치 레지스터가 변환 작업 담당
장점 실제 하드웨어와의 일관성 있는 주소 지정 사용자에게 주소 계산이 단순하고 유연하게 처리됨
단점 사용자에게 복잡하고 위험, 운영체제 영역과의 구분 필요 메모리 관리자가 변환 과정을 관리해야 하므로 복잡함

 

예) 디스크 - 메모리

더보기
  • 디스크에 저장된 프로그램은 상대 주소로 기록됩니다. (아직 어느 메모리 주소에 올라갈지 결정되지 않았기 때문)
  • 프로그램이 메모리에 로드될 때, 상대 주소 절대 주소로 변환됩니다.
  • CPU 절대 주소를 사용하여 명령을 실행합니다.
  • 프로그램 종료 후 다시 디스크에 저장될 때는 상대 주소로 기록됩니다.

 

4. 메모리 할당 (단일 프로그래밍 환경)

메모리 오버레이

  • 프로그램을 몇 개의 모듈로 나누고, 필요한 모듈만 메모리에 올려 실행하고 더 이상 필요 없는 모듈은 내보내는 방식
  •  PC가 어떤 모듈을 가져오거나 내보낼지 결정함
  • ✅ 프로그램 일부만 메모리에 올라와도 실행이 가능함
  • ➡️ 한정된 메모리에서 메모리보다 큰 프로그램의 실행이 가능함

 

스왑 영역

  • 메모리가 부족할 때, 일시적으로 메모리에서 밀려난 프로세스를 저장장치에 보관하는 공간
  • 메모리 관리자가 관리함
  • ✅ 스왑 인: 스왑 영역에서 메모리로 데이터를 가져오는 작업
  •  스왑 아웃: 메모리에서 스왑 영역으로 데이터를 내보내는 작업

 

5. 메모리 할당 (다중 프로그래밍 환경)

  • 한 번에 여러 프로세스가 실행되는 구조의 메모리 관리
  • 메모리 분할 방식에 따라 나뉨

 

가변 분할 방식 (세그멘테이션 기법)

  • 프로세스의 크기에 맞게 메모리를 가변적으로 분할하여 할당
  • 연속 메모리 할당
  • ✅ 메모리 낭비 적음
  • ⚠️ 관리 복잡
  • ⚠️ 외부 단편화: 연속된 메모리 공간을 확보되지 못해 배치가 불가능하지만 낭비되는 공간 발생

 

표) 메모리 배치 방식

더보기
항목 설명
최초 배치
빈 공간에서 첫 번째로 발견된 공간에 프로세스를 배치 (단편화 고려 X)
최적 배치
빈 공간을 모두 확인하고, 가장 작은 공간에 프로세스를 배치
최악 배치
빈 공간을 모두 확인하고, 가장 큰 공간에 프로세스를 배치

 

해결 방법) 조각 모음

더보기
  • 서로 떨어져 있는 여러 개의 빈 공간을 합치는 작업
  • 이동할 프로세스의 동작이 일시 정지되고, 적당한 위치로 재배치됨
  • 재배치 후, 프로세스가 다시 시작됨

 

고정 분할 방식 (페이징)

  • 프로세스의 크기와 상관없이 메모리를 같은 크기로 나누는 것
  • 비연속 메모리 할당
  • ✅ 관리 쉬움 (조각 모음 할 필요 없음)
  • ⚠️ 메모리 낭비 많음
  • ⚠️ 내부 단편화: 일정하게 나뉜 메모리의 크기보다 작은 프로세스가 배치될 경우 낭비되는 공간 발생