티스토리 뷰

● 디맨드 페이징

- 프로세스가 실행될 때 프로세스를 이루고 있는 코드 영역, 데이터 영역, 힙 영역, 스택 영역 등과 같은 모듈들이 모두 메모리에 올라와 실행된다고 생각할 수 있다.

- 그러나 실제로는 모든 모듈이 메모리에 올라오는 것은 아니고 필요한 모듈만 올라와서 실행된다.

- 도널드 커누스는 프로그램이 실행될 때 90%의 시간이 10%의 코드에서 보내진다는 법칙을 얘기했다.

- 이를 지역성 이론이라고 하는데 지역성에는 2가지가 있다.

1. 공간의 지역성 : 현재 위치에서 가까운 데이터에 접근할 확률이 높다.
2. 시간의 지역성 : 최근 접근했던 데이터가 오래 전에 접근했던 데이터보다 접근할 확률이 높다.

- 지역성 이론은 조만간 쓰일 데이터만 메모리에 올리고 당분간 필요하지 않을 것 같은 데이터는 스왑 영역으로 보내 성능을 향상시키는 이론이다.

- 디맨드 페이징은 쉽게 말해 조만간 필요할 것 같은 테이터는 메모리로 가져오고 쓰이지 않을 것 같은 데이터는 HDD 스왑영역으로 이동시키는 정책이다.(지역성 이론을 구현한 정책)

출처 - 인프런, 그림으로 쉽게 배우는 운영체제


메모리 계층 구조

- 메모리는 레지스터, 캐시, 메인 메모리(RAM), 보조저장장치(HDD, SSD)로 나눌 수 있다.

- 레지스터는 CPU 내에 존재하고 CPU의 한 사이클에 접근할 수 있어 매우 빠르다. 나머지 계층의 사이클은 아래와 같다.

- 즉, 메모리에 접근하는 시간이 보조저장장치로 갈수록 느려진다.(사이클이 클 수록 속도가 느리다.)

- 디멘드 페이징은 스왑 영역을 보조저장장치에 저장하는데 성능 향상을 위해선 스왑 영역으로 데이터를 이동시키는 것을 최소화 해야한다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제


페이지 테이블

- 가상 메모리 크기 = (물리 메모리 크기 + HDD 스왑 영역 크기)이다.

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

- 가상주소가 주어지면 메모리 관리자(MMU)는 페이지 테이블을 참조해 물리 메모리가 있는 프레임을 알아내거나 스왑 영역이 있는 위치를 알아내야 하는데 이를 위해 페이지 테이블에는 여러가지 비트가 있다.

- 이전 페이징 글에서 페이지 테이블의 한 row는 인덱스 & 프레임 넘버로 구성되어 있다고 했는데 실제로는 더 많은 정보(비트)들이 함께 담겨있다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

접근비트
- 페이지가 메모리에 올라온 후 데이터에 접근이 있었는지 알려주는 비트
- 메모리에 읽기나 실행 작업을 했다면 1로 바뀐다.

변경비트
- 페이지가 메모리에 올라온 후 데이터의 변경이 있었는지 알려주는 비트
- 메모리에 쓰기 작업을 했으면 1로 바뀐다.

유효비트
- 페이지가 물리 메모리에 있는지 알려주는 비트
- 1이면 페이지가 스왑영역에 / 0이면 물리 메모리에 있다는 의미

읽기/쓰기/실행 비트
- 권한 비트로 해당 메모리에 접근 권한이 있는지 검사하는 비트

디맨드 페이징 과정 

- 프로세스가 가상 메모리에 접근 요청을 했을 때 메모리 관리자는 페이지 테이블을 보고 물리 메모리의 프레임을 찾아낸다. 만약 물리 메모리에 프레임이 없다면 Page Fault라는 인터럽트를 발생시킨다.

- Page Fault가 발생하면 보조저장장치의 스왑 영역에 접근하게 되고 해당 프로세스는 대기 상태가 된다.

- 대기하는 동안 스왑 영역에 있는 데이터가 메모리에 올라가는 작업이 시작되고 해당 작업이 끝나면 대기 상태에 있던 프로세스는 다시 실행된다.

- 몇 가지 예시를 더 들어보겠다.


유효비트
- 페이지가 물리 메모리에 있는지 알려주는 비트
- 1이면 페이지가 스왑 영역에 / 0이면 물리 메모리에 있다는 의미

1. 스왑이 필요 없는 경우

 

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

- 프로세스가 페이지 0번을 요청한 상태 / 페이지 테이블의 0번 인덱스를 보면 (유효비트 = 0), (프레임 넘버 = 1)이다.

- 즉, 해당 주소가 물리 메모리의 1번 프레임에 있다는 의미이다.

- 따라서 물리 메모리에 있는 1번 프레임에 접근해 데이터를 참조한다.

 

2. 스왑 영역에 있는 데이터를 참조하는 경우

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

- 프로세스가 페이지 2번을 요청한 상태 / 페이지 테이블의 2번 인덱스를 보면 (유효비트 = 1), (프레임 넘버 = 2)이다.

- 즉, 필요한 페이지가 스왑 영역의 2번에 있다는 의미이며 이 경우 물리 메모리의 적절한 빈 공간을 찾는다.

- 빈 공간을 물리 메모리 3번 프레임이라고 했을 때 스왑 영역 2번에 저장된 C를 3번 프레임으로 가져오고 페이지 테이블에서 해당 row의 (유효비트 = 0), (프레임 넘버 = 3)으로 수정한다.

- 그 후 프로세스에게 데이터를 참조하게 해준다.

 

3. 물리 메모리가 꽉 찼을 때 스왑 영역에 있는 데이터를 참조하는 경우

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

- 프로세스가 페이지 1번을 요청한 상태 / 페이지 테이블의 1번 인덱스를 보면 (유효비트 = 1), (프레임 넘버 = 0)이다.

- 즉, 필요한 페이지가 스왑 영역의 0번에 있다는 의미이며 이 경우 물리 메모리의 적절한 빈 공간을 찾는다.

- 그러나 현재 물리 메모리에는 빈 공간이 없는 상태이다. 이 경우 물리 메모리에서 필요하지 않다고 판단되는 영역을 스왑 영역으로 옮긴다.

- 물리 메모리의 A가 필요하지 않다고 판단해 스왑 영역 3번으로 옮기려고 한다.

- 이 경우 페이지 테이블에서 A가 저장된 0번 인덱스의 (유효비트 = 1), (프레임 넘버 = 3)으로 수정한다.

- 이제 물리 메모리에 빈 공간이 생겼기에 스왑 영역 0번에 있는 B를 물리 메모리 1번으로 가져온다.

- 이후 페이지 테이블에서 B가 저장된 1번 인덱스의 (유효비트 = 0), (프레임 넘버 = 1)로 수정한다.

- 그 후 프로세스에게 데이터를 참조하게 해준다.

 

cf)

- 스왑인과 스왑아웃의 대상이 어떤게 적절한지는 운영체제가 판단한다.

- 이때 이 판단을 페이지 교체 알고리즘이라고 한다.

'CS > 운영체제' 카테고리의 다른 글

#41 페이지 교체정책  (0) 2023.07.16
#40 스레싱과 워킹셋  (0) 2023.07.14
#38 페이지드 세그멘테이션(배치정책)  (0) 2023.07.12
#37 페이징(배치정책)  (0) 2023.07.11
#36 파일과 디스크  (0) 2023.07.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함