이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

[Operating System] Demand Paging

  • 2025.06.03 23:06
  • Computer Science/Operating System
반응형

 

 

 

가상 메모리를 구현하는 방법으로는 Paging과 Segmentaion 두 가지가 있다.

모두 프로세스를 쪼개서 보조기억장치의 Virtual Address Space에 넣고, 필요한 부분만 가져오는 방식이다.

 

Segmentation은 실행 속도가 느리니 현대 운영체제에서는 Demand Paging 방식을 사용하니.. 가상 메모리를 사용한다고 하면 그냥 Demand Paging 방식을 사용하는구나~ 라고 생각하자. 

 

Demand Paging은 실행하는데 필요한 페이지만 메모리에 가져오고 그때그때 필요한 페이지를 동적으로 가져오는 방식으로 작동한다.

프로세스마다 Page Table을 만들어 논리적인 순서와 실제 메모리에서의 순서를 매핑하고 프로세스를 구성하는 Page가 현재 메모리에 올라왔는지 아닌지, 올라왔다면 어떤 Frame에 들어가 있는지를 기록한다. 

 

 

 

 

좌측과 우측은 보조기억장치에 저장된 가상 주소 공간이고, 중앙은 메인 메모리로 A와 B의 일부가 저장된다.

가상 주소 공간에서 kernel code 는 실체 없이 가리키는 역할만 수행하고, stack data 은 실제로 저장된다.

 

보조기억장치, 메모리에 저장되는 모든 영역은 Page 단위로 분할되어있고, Page는 4KB 크기를 가진다.

 

 

 

 

먼저 페이지 번호를 사용해 Page Table에게 Frame Number를 쿼리한다.

가져온 Frame Number와 가장 주소의 Offset을 조합해 메모리의 내 위치를 찾아간다. 

 

Page Table도 메모리에 올라와 있는 자료구조이고, 메모리의 몇 번지부터 몇 번지까지 해당 Page Table이 위치하고 있는지 알아야 한다. 

프로세스의 PCB에는 Page Table의 위치가 저장되고, 주소 변환을 위해서는 PCB를 읽어야 한다.

 

PCB는 메모리에 올라와 있는 정보이기에.. 읽으려면 Memory Access를 수행해야 하는데, 이 작업의 오버헤드가 좀 크다 -_-

 

그러니 매번 PCB를 읽어오지 말고 주소 변환 작업으로 Context Switch가 발생할 때 PCB에 저장된 Page Table의 위치를 CPU 내부의 Page Table Base Register에 저장해 불필요한 Memory Access를 줄인다. 

 

 

 

 

 

프로세스는 자신만의 고유한 Page Table을 가지고, Page Table을 구성하는 가장 작은 단위를 Page Table Entry라고 부른다.

Logical Address의 구조와 Page Table Entry의 구조가 다름!!!!!

 

Page Table Entry은 4바이트로 구성되고, 4바이트 중 20비트는 Frame Number를 저장한다.

 

Page의 크기는 4KB로, 4096바이트이다. 

즉, 하나의 Page에는 주소가 4096개 저장된다.

 

4096개의 주소가 있으니 이 주소를 표시하려면 12비트가 필요하다. (2^12)

Page 내부에서 서로 다른 위치를 표현하는건 offset이고, offset을 위해 12비트를 사용하니 나머지 32비트 중 나머지 20비트를 Page Number를 저장할 때 사용한다. 

 

어차피 주소 변환 과정에서 Page Number는 Frame Number로 바뀌게 되고, 두 번호는 같다.

Page Table Entry에서 20비트를 Frame Number로 저장하면 12비트가 남는데, 이 12비트는 Page 정보를 기록할 때 사용한다.

 

 

 

 

P - present(valid) 비트로 Page가 메모리에 올라와 있는지를 알려준다. (있으면 1 없으면 0)

M - modify(dirty) 비트로 보조기억장치에 있던 페이지가 메모리에 들어오고 수정됐음을 알려준다.

R - reference(use) 비트로 Page가 메모리에 올라온 후 실제로 사용됐는지를 알려준다.

U - usermode 비트로 Page가 User Context에 해당하는 Page인지 알려준다. 

W - writable 비트로 Page가 쓰기가 가능한 상태인지를 알려준다.

COW - Copy-On-Write 비트로 Page가 COW 모드인지 알려준다. (부모와 공유하는지 알려준다)

 

가상 주소 공간으로부터 필요한 Page를 메모리로 가져오는데, 메모리가 꽉 차서 빈 Frame이 없다면 Swap Out 해야 한다.

Swap Out 과정은 보조기억장치로 Write 하는 작업을 포함하는데, 그 Page가 메모리에 올라오고 수정되지 않았다면 메모리에 저장된 상태와 보조기억장치에 저장된 상태가 같으니 불필요한 Write 작업을 하지 않아도 된다. 이 때 M 비트를 사용한다.

 

 

 

 

 

세 가지 프로세스가 Editor라는 하나의 프로그램을 사용한다고 해 보자. (메모장 프로그램에 대한 인스턴스를 3개 띄웠다)

 

ed 1~3 은 메모장의 code 부분인데, 메모리에 같은 code를 3개 올리는건 너무 비효율적이다.

이 프로세스에서 독립적으로 작동해야 하는 부분은 실제로 사용자가 입력한 입력이고, 그 데이터는 data영역에 저장된다.

 

각 프로세스의 Page Table이 메모리의 같은 영역을 가리키게 하면 code를 공유해서 사용할 수 있다.

이 때 공유는 Shared Memory와는 전혀 다르다. 여기서의 공유는 운영체제가 알아서 처리한다. 

 

 

반응형
저작자표시 (새창열림)

'Computer Science > Operating System' 카테고리의 다른 글

[Operating System] Page Replacement  (0) 2025.06.05
[Operating System] Multi-Level Page Table  (1) 2025.06.04
[Operating System] Paging / Segmentation  (0) 2025.06.03
[Operating System] Memory Management  (0) 2025.05.17
[Operating System] Disk Scheduling  (0) 2025.05.13

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Operating System] Page Replacement

    [Operating System] Page Replacement

    2025.06.05
  • [Operating System] Multi-Level Page Table

    [Operating System] Multi-Level Page Table

    2025.06.04
  • [Operating System] Paging / Segmentation

    [Operating System] Paging / Segmentation

    2025.06.03
  • [Operating System] Memory Management

    [Operating System] Memory Management

    2025.05.17
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (679) N
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (142)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (17)
    • 👥 모각코 (10)
    • 💬 기록 (8) N
    • 📚 공부 (6)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바