[운영체제] 메모리 관리

2025. 1. 29. 21:40·CS/OS

전공 수업 내용 정리 (문제 발생시 비공개합니다.)

 


메모리 관리

운영체제의 핵심 기능 중 하나인 메모리 관리는 프로세스가 실행되기 위해 필요한 메모리를 적절히 할당하고 관리하는 역할

1. 페이징 (Paging) = 분산적재

페이징은 프로세스의 주소 공간을 동일한 크기의 블록으로 나누어 메모리에 분산하여 적재하는 방법

  • 페이지(Page): 프로세스의 주소 공간을 동일한 크기의 블록으로 나눈 단위.
  • 프레임(Frame): 실제 물리적 메모리를 페이지와 동일한 크기로 나눈 블록.

특징

  • 외부 단편화 없음: 모든 페이지와 프레임의 크기가 동일하기 때문에 외부 단편화 문제가 발생하지 않음
  • 주소 변환 필요: 논리 주소를 물리 주소로 변환하기 위해 페이지 테이블을 사용해야함
  • 논리 주소 구조:
    • 페이지 번호 (p): 논리 주소에서 상위 비트로, 페이지 테이블에서 프레임 번호를 찾는 인덱스로 사용된다.
    • 오프셋 (d): 논리 주소에서 하위 비트로, 페이지 내의 특정 위치를 나타낸다.
  • 주소 변환 과정:
    1. 논리 주소에서 페이지 번호(p)와 오프셋(d)을 추출합니다.
    2. 페이지 테이블에서 페이지 번호(p)에 해당하는 프레임 번호를 가져옵니다.
    3. 물리 주소는 프레임 번호와 오프셋을 결합하여 계산됩니다.

장점

  • 외부 단편화가 발생하지 않음
  • 메모리 관리가 단순해짐.\

단점

  • 내부 단편화가 발생할 수 있다.
  • 추가적인 주소 변환 시간이 필요

2. 세그멘테이션 (Segmentation)

프로세스의 논리적 단위(코드, 데이터, 스택 등)를 가변적인 크기의 세그먼트로 나누어 메모리에 적재하는 방식

특징

  • 가변 크기 블록: 세그먼트의 크기는 각 세그먼트의 필요에 따라 다릅니다.
  • 주소 변환 필요: 세그먼트 테이블을 사용하여 논리 주소를 물리 주소로 변환합니다.
  • 논리 주소 구조:
    • 세그먼트 번호 (s): 세그먼트 테이블에서 해당 세그먼트의 시작 주소와 길이를 찾는 인덱스.
    • 오프셋 (d): 세그먼트 내의 특정 위치를 나타냅니다.
  • 주소 변환 과정:
    1. 논리 주소에서 세그먼트 번호(s)와 오프셋(d)을 추출합니다.
    2. 세그먼트 테이블에서 세그먼트 번호(s)에 해당하는 베이스 주소와 길이(limit)를 가져옵니다.
    3. 오프셋(d)이 세그먼트의 길이(limit)보다 크면 오류를 발생시킵니다.
    4. 물리 주소는 베이스 주소와 오프셋을 합하여 계산됩니다.

장점

  • 프로그램의 논리적 구조를 반영하므로 공유 및 보호에 유리
  • 메모리 사용의 유연성이 높다.

단점

  • 외부 단편화가 발생할 수 있다.
  • 복잡한 메모리 관리

3. 가상 메모리 (Virtual Memory)

실제 메모리(RAM)의 크기보다 큰 주소 공간을 프로세스에 제공하여 메모리 활용을 극대화한다.

특징

  • 프로세스의 일부분만 메모리에 적재: 전체 프로그램이 아닌 필요한 부분만 메모리에 로드합니다.
  • 메모리 효율성 향상: 여러 프로세스를 동시에 메모리에 적재할 수 있습니다.
  • 주소 공간 확장: 프로세스는 마치 더 큰 메모리를 사용하는 것처럼 동작합니다.

동작 방식

  • 필요한 데이터나 코드가 메모리에 없을 때 디스크에서 해당 페이지를 가져오는 방식으로 동작합니다.
  • 페이지 부재(page fault)가 발생하면 운영체제가 필요한 페이지를 메모리에 로드합니다.

4. 페치 정책 (Fetch Policy)

필요한 페이지나 세그먼트를 언제 메모리에 가져올지를 결정한다.

종류

  1. 요구 페이징 (Demand Paging)
    • 페이지가 실제로 필요할 때 메모리에 로드
    • 초기에는 페이지 부재가 빈번하지만 시간 경과에 따라 안정됨
    • 현재 대부분의 운영체제에서 사용되는 방식
  2. 선행 페이징 (Prepaging)
    • 예상되는 필요 페이지를 미리 메모리에 로드한다.
    • 예상이 맞으면 효율적이지만, 불필요한 페이지를 로드하면 오버헤드가 증가한다.

장단점

  • 요구 페이징
    • 장점: 메모리 사용을 최소화한다.
    • 단점: 초기 성능 저하가 발생할 수 있음
  • 선행 페이징
    • 장점: 페이지 부재 횟수를 줄일 수 있다
    • 단점: 잘못된 예측 시 성능 저하가 발생

5. 배치 정책 (Placement Policy)

메모리에서 새로운 페이지나 세그먼트를 어느 위치에 배치할지를 결정한다.

현대 시스템에서의 중요성

  • 현대적인 시스템에서는 페이징을 많이 사용하고, 프레임의 크기가 동일하므로 배치 정책은 큰 의미가 없다.
  • 외부 단편화 문제가 없어서 주로 세그멘테이션에서 중요하게 고려된다.

6. 교체 정책 (Replacement Policy)

메모리가 가득 차서 새로운 페이지나 세그먼트를 적재할 공간이 없을 때, 어떤 것을 메모리에서 제거할지 결정한다.

필요성

  • 제한된 메모리 공간에서 여러 프로세스를 효율적으로 관리하기 위해 필요하다.
  • 시스템 성능에 직접적인 영향을 미칩니다.

일반적인 접근 방식

  • 가까운 미래에 사용되지 않을 페이지를 교체: 이상적이지만 미래를 알 수 없으므로 과거의 메모리 사용 패턴을 기반으로 예측한다.

주요 알고리즘

  1. 최적 교체 알고리즘 (Optimal Replacement Algorithm)
    • 정의: 이론적으로 가장 적은 페이지 부재를 발생시키는 알고리즘으로, 앞으로 가장 오랫동안 사용되지 않을 페이지를 교체한다.
    • 한계: 미래를 정확히 예측해야 하므로 실제 구현은 불가능하며, 성능 평가의 기준으로 사용된다.
  2. 선입선출 (FIFO: First-In First-Out)
    • 정의: 메모리에 가장 먼저 들어온 페이지를 교체
    • 장점: 구현이 간단하다.
    • 단점:
      • 벨라디의 모순 현상: 프레임 수를 늘렸는데도 불구하고 페이지 부재가 증가하는 현상이 발생할 수 있다.
      • 사용 빈도를 고려하지 않다.
  3. 최소 최근 사용 (LRU: Least Recently Used)
    • 정의: 가장 오랫동안 사용되지 않은 페이지를 교체한다.
    • 장점:
      • 실제 사용 패턴을 반영하여 성능이 우수하다.
      • 벨라디의 모순 현상이 발생하지 않는다.
    • 단점:
      • 구현이 복잡하고, 메모리 참조마다 시간 정보를 저장해야 하므로 오버헤드가 큰다.
  4. 클록 알고리즘 (Clock Algorithm, Second Chance)
    • 정의: 페이지마다 한 개의 레퍼런스 비트를 사용하여 최근 사용 여부를 판단하는 알고리즘
    • 동작 방식:
      1. 페이지들이 원형(환형)으로 연결되어 있습니다.
      2. 포인터가 가리키는 페이지의 레퍼런스 비트를 확인합니다.
      3. 레퍼런스 비트가 0이면 해당 페이지를 교체합니다.
      4. 레퍼런스 비트가 1이면 0으로 리셋하고 포인터를 이동합니다.
      5. 교체할 페이지를 찾을 때까지 이 과정을 반복합니다.
    • 장점:
      • LRU에 비해 구현이 간단하고 오버헤드가 적다.
    • 단점:
      • 모든 페이지의 레퍼런스 비트가 1인 경우 포인터가 전체를 한 바퀴 돌아야 하므로 지연이 발생할 수 있다.
      • 정확한 LRU를 반영하지 못한다.
저작자표시 비영리 동일조건

'CS > OS' 카테고리의 다른 글

[운영체제] 동기화  (0) 2025.01.29
[운영체제] 스레드  (0) 2025.01.29
[운영체제] 프로세스 스케줄링  (0) 2025.01.28
[운영체제] 프로세스 관리  (0) 2025.01.28
[운영체제] 프로세스  (0) 2025.01.28
'CS/OS' 카테고리의 다른 글
  • [운영체제] 동기화
  • [운영체제] 스레드
  • [운영체제] 프로세스 스케줄링
  • [운영체제] 프로세스 관리
abyss-s
abyss-s
프론트엔드 공부합니다.
  • abyss-s
    abyss-s의 블로그입니다.
    abyss-s
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • Web (16)
        • JavaScript (6)
        • TypeScript (1)
        • React (5)
        • Vue (0)
        • Storybook (1)
        • Next.js (1)
      • Backend & Infra (8)
        • Database (3)
        • Node.js (2)
        • SpringBoot (1)
      • PS (71)
      • CS (30)
        • OS (13)
        • Structure & Algorithm (5)
        • Network (10)
        • 정보처리기사 (2)
      • Language (18)
        • OOP (1)
        • JAVA (13)
        • C++ (4)
      • Activities (12)
        • 멋쟁이 사자처럼 (2)
        • OSSCA (3)
        • LG U+ URECA (3)
        • Project (2)
      • AI (0)
      • Git & Github (5)
      • Notion (1)
      • IT (4)
      • Statistics (11)
      • Book (4)
      • Diary (1)
      • Game (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
    • 백준
    • 트위터
  • 공지사항

    • abyss-s의 티스토리에 오신 것을 환영합니다.
  • 인기 글

  • 태그

    BAEKJOON
    C++
    백준
    파이썬
    네트워크
    React
    통계학
    생활코딩
    DP
    BFS
    OS
    JavaScript
    Python
    코드트리
    Java
    자바기반응용프로그래밍
    운영체제
    자바스크립트
    github
    그리디
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
abyss-s
[운영체제] 메모리 관리
상단으로

티스토리툴바