-
[OS] Demand paging운영체제 2020. 11. 26. 06:53728x90
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의 동작
-
요청한 메모리 페이지가 정당한 요청인지 확인
-
터무니 없는 메모리를 요청한 경우 : 내 메모리 한계는 4기가인데 1테라의 주소를 요청했다거나 하는 경우
-
해당 프로세스에서 접근할 수 없는 페이지를 요청한 경우 : 다른 프로세스 혹은 커널을 보호하기 위함 -> 해킹에 사용됨
-
Page table 을 확인하여 Page fault 임을 확인함
-
Trap 을 발생시켜 해당 명령어의 수행을 중지시킴 ( 이 때 그냥 대기하는게 아니라 다른 프로세스를 실행시킴 )
-
이 때 레지스터와 프로세스의 상태를 저장해둠 (재시작을 위하여)
-
Physical memory 에서 가용한 Frame(= Free frame) 을 찾음
-
이 때 Free frame 이 없으면 swap 하여 Free frame 을 만듦
-
디스크로부터 데이터를 로딩하여 해당 Frame 에 저장함 (swap in)
-
저장을 완료하면 disk I/O subsystem 이 OS에게 interrupt 를 보내줌 ( 나 로딩 다 했다!! )
-
현재 실행중인 다른 프로세스와 그 레지스터 상태를 백업
-
OS 는 interrupt 가 디스크로부터 왔음을 판단
-
페이지 테이블에 해당 페이지가 몇 번 프레임에 저장되었는지와 valid bit 를 1로 변경하여 저장
-
중지시켰던 명령어를 다시 실행
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 -