ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OS] Demand paging
    운영체제 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

     

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

    [OS] Page replacement  (0) 2020.11.26
    [OS] COW(Copy On Write)  (0) 2020.11.26
    [OS] 가상메모리 주소공간과 MMU  (0) 2020.11.26
    [OS] OS 페이징 기법  (0) 2020.10.22
    [OS] 운영체제와 메모리  (0) 2020.10.22

    댓글

Designed by Tistory.