운영체제

[OS] Demand paging

KyooDong 2020. 11. 26. 06:53
728x90

Demand Paging

Page : 논리적 메모리의 최소 단위

Frame : 물리적 메모리의 최소 단위

Demand Paging : 프로세스에서 사용할 메모리 페이지를 프로세스 생성 시에 모두 할당하지 않고, 필요할 때마다 동적으로 할당하는 기법

Swap-out : 메모리가 가득 차버려서 일시적으로 특정 페이지를 디스크로 보내버리는 것. 디스크에 백업하는 것이기에 느림

Swap-in : 디스크에 백업했던 페이지를 프로세스에서 요청해서 다시 메모리로 불러들이는 것

Page fault : 사용자가 요청한 페이지가 swap out 되었거나 아직 로딩되지 않아서 없는 경우

 

Page-fault 가 발생하면 해당 프로세스의 명령어 수행을 중지(Trap을 발생)시키고, 디스크에서 해당 페이지를 로딩한 뒤 명령어를 재시작해야함

Trap = Software interrupt

 

Demand paging 으로 인한 page table 의 변화 : valid bit 가 추가됨

Valid bit = 어떤 페이지가 Physical memory 에 실재한다면 1, 없다면 0을 갖는 bit

Page fault

프로세스가 어떤 페이지에 처음 접근하거나 swap out 된 페이지에 접근했을 때 해당 페이지가 논리적으로는 존재하나 실제 물리 메모리에 로딩되지 않은 경우를 말함

Page fault 발생 시 OS의 동작

  1. 요청한 메모리 페이지가 정당한 요청인지 확인

    1. 터무니 없는 메모리를 요청한 경우 : 내 메모리 한계는 4기가인데 1테라의 주소를 요청했다거나 하는 경우

    2. 해당 프로세스에서 접근할 수 없는 페이지를 요청한 경우 : 다른 프로세스 혹은 커널을 보호하기 위함 -> 해킹에 사용됨

  2. Page table 을 확인하여 Page fault 임을 확인함

  3. Trap 을 발생시켜 해당 명령어의 수행을 중지시킴 ( 이 때 그냥 대기하는게 아니라 다른 프로세스를 실행시킴 )

    1. 이 때 레지스터와 프로세스의 상태를 저장해둠 (재시작을 위하여)

  4. Physical memory 에서 가용한 Frame(= Free frame) 을 찾음

    1. 이 때 Free frame 이 없으면 swap 하여 Free frame 을 만듦

  5. 디스크로부터 데이터를 로딩하여 해당 Frame 에 저장함 (swap in)

    1. 저장을 완료하면 disk I/O subsystem 이 OS에게 interrupt 를 보내줌 ( 나 로딩 다 했다!! )

    2. 현재 실행중인 다른 프로세스와 그 레지스터 상태를 백업

    3. OS 는 interrupt 가 디스크로부터 왔음을 판단

  6. 페이지 테이블에 해당 페이지가 몇 번 프레임에 저장되었는지와 valid bit 를 1로 변경하여 저장

  7. 중지시켰던 명령어를 다시 실행

 

Demand paging 특징

  • Pure deamnd paging 은 잘 사용하지 않음

    • 프로세스 실행 시 페이지를 하나도 안주고 실행하면 초반에 Page fault 가 너무 자주 발생하여 성능이 저하됨

    • 따라서 프로세스의 일부를 상대적으로 빠른 swap 영역에 넣고 동적 로딩

  • Locality of reference(참조의 지역성)

    • 프로세스에서 필요로 하는 메모리는 서로 인접한 위치에 있을 확률이 높다는 의미인데

    • Demand paging 에 의해 페이지를 동적으로 로딩하더라도 이 특성 때문에 Page fault 가 그렇게 많이 발생하지 않기에 가능한 기법

 

Demand paging 성능

p 의 정의 : Page fault 가 날 확률.   0 <= p <= 1

EAT(Effective Access Time) = (1 - p) * memory_access_time + p * (page_fault_overhead_time + swap_page_out_time + swap_page_in_time)

예제

Memory access time = 200 nano sec

Average page-fault service time = 8 milli sec

EAT = (1 - p) 200 + p * (8,000,000) = 200 + 7,999,800 * p

 

10%의 성능이 감소할 수 있는 p 값을 구해보자. 기존의 Access time 이 200이였으니 목표 Access time = 220

200 + 7,999,800 * p = 220

7,999,800 * p = 20

p = 0.00000025