OS

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

noahkim_ 2024. 12. 12. 19:20

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


1. 개요

메모리 관리의 복잡성

CPU
  • 메모리의 내용을 가져오거나, 작업 결과를 메모리에 저장하기 위해 MAR을 사용함
  • MAR에 필요한 메모리 주소를 넣으면 데이터를 가져오거나 기록할 수 있음

 

시분할 시스템
  • 모든 응용 프로그램이 메모리에 올라와 실행되므로 메모리 관리가 복잡함

 

메모리 관리의 이중성

  • 프로세스 입장에서는 메모리를 독차지하려 하고, 메모리 관리자 입장에서는 되도록 효율적으로 쓰고싶어 하는 것

 

메모리 관리자

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

 

관리법
  • 메모리가 부족할 경우, 새로운 공간을 확보
    • 옆의 프로세스를 밀어냄
    • 더 큰 공간으로 해당 프로세스를 옮겨줌
  • 빈 공간이 생기면
    • 합쳐서 하나의 큰 공간을 만듬

 

과정
  1. fetch
    • 프로세스와 데이터를 메모리에 로드
  2. placement
    • 가져온 프로세스와 데이터를 메모리의 어느 부분에 올려놓을지 결정
    • 어떻게 메모리 구역을 나누어 할당할지에 따라 메모리 관리의 복잡성이 달라짐
    • 정책
      • paging: 메모리를 같은 크기로 자르는 것
      • segmentation: 프로세스의 크기에 맞게 자르는 것
  3. replacement
    • 꽉 차있는 메모리에 새로운 프로세스를 가져오기 위해 오래된 프로세스를 내보내는 작업
    • 정책
      • replacement algorithm: 메모리가 꽉 찼을 때, 어떤 프로세스를 내보낼지 결정하는 정책

 

2. 메모리 주소

32bit CPU vs 64bit CPU

  • 레지스터의 크기
  • CPU가 한번에 다룰 수 있는 데이터의 최대 크기를 의미함
  • 메모리 주소 공간 크기가 결정됨

 

메모리 영역의 구분

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

 

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

 

절대 주소 vs 상대 주소

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

 

  • 디스크에 저장된 프로그램은 상대 주소로 기록됩니다.
  • 프로그램이 메모리에 로드될 때, 상대 주소절대 주소로 변환됩니다.
  • CPU절대 주소를 사용하여 명령을 실행합니다.
  • 프로그램 종료 후 다시 디스크에 저장될 때는 상대 주소로 기록됩니다.

 

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

메모리 오버레이

  • 메모리 크기보다 프로그램 크기가 더 클 경우, 적당한 크기로 잘라서 가져오는 기법
  • 프로그램을 몇 개의 모듈로 나누고, 필요할 때마다 모듈을 메모리에 가져와 사용
    • PC에서 어떤 모듈을 가져오거나 내보낼지 결정함

 

장점
  • 한정된 메모리에서 메모리보다 큰 프로그램의 실행이 가능함
  • 프로그램 전체가 아니라 일부만 메모리에 올라와도 실행이 가능함

 

스왑 영역

  • 메모리가 모자라서 잠시 내쫓은 프로세스들을 모아두는 공간 (저장장치)
  • 메모리 관리자가 관리함

 

동작
  • 스왑 인: 스왑 영역에서 메모리로 데이터를 가져오는 작업
  • 스왑 아웃: 메모리에서 스왑 영역으로 데이터를 내보내는 작업

 

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

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

 

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

  • 연속 메모리 할당
  • 프로세스의 크기에 따라 메모리를 나눔

 

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

 

단점
  • 관리 복잡
    • 부가적인 작업 필요 (메모리 통합)
  • 외부 단편화
    • 연속된 메모리가 확보되지 않아 배치할 수 없어 낭비되는 부분이 발생하는 현상
    • 이를 해결하기 위해 메모리 배치 방식이나 조각 모음을 사용함

 

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

 

고정 분할 방식 (페이징)

  • 프로세스의 크기와 상관없이 메모리를 같은 크기로 나누는 것

 

장점
  • 관리 쉬움
  • 조각 모음 할 필요 없음

 

단점
  • 비연속 메모리 할당
  • 내부 단편화 발생 (낭비되는 메모리 발생)
    • 일정하게 나뉜 메모리의 크기보다 작은 프로세스가 배치될 경우 낭비되는 공간 발생
    • 조각 모음을 할 수 없고, 남은 공간을 다른 프로세스에 배정할 수 없음