ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20. 페이지 교체
    운영체제/운영체제 정리 2020. 2. 2. 16:46

    가상 메모리를 사용하면 최대크기는 하드디스크의 크기 만큼 으로 CPU를 속이는 것이 가능하다.

     

     

    유효 접근 시간

     

    : CPU가 어떤 주소를 낼 때 운이 좋다면 해당 페이지가 메모리에 있기에 페이지 테이블을 거쳐서 빠르게 읽을 수 있지만

     

    어떤 내용은 메인 메모리에 없을 것이고 Interrupt후 OS 인터럽트 루틴으로 점프 후 디스크에 있는 내용을 메모리

     

    에 다시 올리고 valid bit 와 프레임 번호 설정등 많을 일을 거쳐야 한다. 따라서 CPU가 어떤 주소를 내면 어떤 주소는 빨

     

    리 읽혀질 것이고 어떤 주소는 느리게 읽혀질 것이다. 그렇다면 평균 적으로는 얼마일까? ( = 유효 접근 시간 )

     

     

    P : page fault rate = 페이지 부재가 일어날 확률 

     

    유효 접근 시간 : (1 - P)*Tm  + P * Tp

     

    즉 (페이지 부재가 일어나지 않을 확률 * 메모리에서 읽어오는 시간) + (페이지부재 확률 * 페이지 부재시 일어나는 시간)

     

    Tp의 주요 시간은 하드디스크에서 페이지를 가져오기 위해 읽는 시간이다.

     

     

    하드디스크의 구조 :

     

    원판에 자성물질이 발라져있고 코일을 위에 둬서 ( 디스크 헤더) 코일에 전기를 흐르면 n극 s극을 흐르며

     

    값을 저장한다. 읽을 적에는 원판이 빠른 시간으로 회전하면 n극 s극을 지나면서 코일에 전기를 유도. 이 유도를 통해서

     

    내용을 읽어낸다.

     

     

    seek time : 헤더를 움직여서 안쪽으로 넣어야한다. 우리가 원하는 트랙으로 옮기는 것

     

    rotational delay : 헤더를 옮겨도 쭉 돌려서 헤더 밑까지 옮겨야 한다.

     

    transfer time : 해당되는 내용이 읽혀진다.

     

    제일 시간이 오래 걸리는 곳은 seek time 이 되겠다.

     

     

    이렇게 Page fault 가 일어나면 시간이 너무 오래 걸리기 때문에 최대한 부재가 일어나지 않도록 해야 한다.

     

    아니면 하드디스크를  플래쉬 메모리 등으로 두어서 seek time을 없애는 방법도 있겠다.

     

     

     

    현실적으로는 어떨까?

     

    Locality of reference

    - 여기서의 reference는 Cpu가 참조하는 주소를 말한다. CPu가 참조하는 주소는 지역에 모여져 있다는 뜻이다.

    우리가 캐쉬 메모리를 쓰는 이유와 같다.  메모리 접근은 시간적, 공간적으로 지역성을 가진다.

     

    시간적인 지역성은 CPu가 메모리의 한 부분을 읽었다면 그 후에도 그 부분을 읽는다는 뜻. 반복문이 많기 때문이다.

    페이지 fault가 일어나서 한번 메모리로 가져오면 반복해도 fault는 일어나지 않을 것

     

    공간적인 지역성은 지금 1000번지를 읽었다면 다음은 1000번지 부근을 읽을 것이다. 컴퓨터 명령 길이는 4byte 라 본다면 1004 1008등 그 인접한 구역을 읽기 때문이다.

     

    따라서 page fault가 일어날 적에 그 주소만 들고 오는게 아니라 그 인근에 것을 모두 블록 단위로 가져온다면

    처음에 page fault가 일어나도 블록 단위로 가져왔기에 그 이후로 page fault가 매우 줄어들 것 ( 추후에 )

     

    이렇게 P값은 일반적으로 낮지만 한번 page fault에 소요되는 시간은 길기에 HDD대신 SSD등을 쓸 수도 있겠다.

     

     

     

    페이지 교체 ( Page ReplaceMent )

    Demand Paging 이란 메인 메모리에 다 올리는 것이 아닌 필요한 부분만 올리는 것이라 하였다. 처음에는 메인 메모리

     

    가 비어있지만 필요에 따라 페이지 단위로 프로세스들이 올라오게 되고 언젠가는 메모리가 꽉 차게 될 것이다. 이 경

     

    우를 생각해보자.  

    어느 한놈을 쫒아내서 backing store로 몰아내야 빈자리가 생기고 필요한 프로세스를 넣을 수 있을 것이다.

     

    즉 어떤 페이지는 backing store로 몰아내고 ( page-out)

     

    그 빈 공간으로 페이지를 가져온다 ( page-in)

     

     

    victim page :빈 자리를 위해 쫓아낸 페이지

     

     

    그렇다면 어떤 페이지를 몰아 낼 것인가?

     

    메인 메모리에 올라있는 내용은 CPu가 읽는 경우도 있지만 쓰는 경우도 있다. 하드디스크로 보낼 때는 기록을 해야할까?

     

    읽기만 했다면 원래 하드디스크에 있는 한 프로세스의 페이지를 올린 것이니 기록하지 않아도 되지만 CPu에서 실행되다

     

    가 메모리에 내용이 바뀌었다면 backing store 로 보낼 때 write를 해야 한다. 따라서 기왕이면 write를 안하는 즉

     

    modified 가 안된 페이지를 내리는게 좋겠다.

     

    따라서 modified가 됐는지 안됐는지 알 수 있도록 페이지 테이블에 한 비트를 더 달아주자.

     

     

    즉 modified가 0이라면 CPu가 읽었는데 바꾸진 않았다는 뜻이된다. 그렇기 때문에 modified가 안됬다는 뜻

     

    Modified bit가 1이라면 victim page 가 되었을때 하드 디스크에 적어주어야 한다.

     

     

     

    아까 말햇듯 기왕이면 i/o 시간을 절약하기 위해 ( 쓰는 시간 ) modify 되지 않은 페이지를 victim 으로 선택하자

     

     

    이제 modified 안된 page 중에 어느 것을 선택해야 할까?

     

     

    1. Random 으로 선택

     

    2. FIFO  ( First-in First-out) 비어있는 메인 메모리에 p1의 첫 페이지가 올라 왔을 것이다. 이 페이지를 내리는 것

     

    3.  OPT ( Optimal )

     

    4. LRU ( Least-Recentlty-Used)

     

    용어 :

     

    Page reference String : 페이지 참조 열

     

    예를 들어 CPU가 내는 주소가 100 101 102 432 612 103 104 611 612번지 순서로 읽는다. Paging 을 생각해보면

     

    100번지를 내었을때 그 주소는 결국 F와 D로 나뉘어 지고 해당 페이지가 메모리에 몇번지 있는가 로 나타

     

    내기 때문에 바이트 주소가 중요한 것이 아니라 페이지 단위가 중요하다. 

     

    Page size가 100 바이트라면 (프레임 역시 100 바이트 단위 )

     

    100번지의 프레임 번호는 1 , 101 도 d가 1이지 프레임 번호는 1 그리고 432번지는 4 612번지는 6이 될것이다.

     

    따라서 페이지 번호  (프레임 번호) = 1 1 1 4 6 1 1 6 6

     

    1번째 페이지를 읽는데 fault가 일어나면 메모리로 해당 페이지를 가져왔을 것.

     

    이제 연속되어지는 번호들은 fault가 일어나지 않으므로 1 4 6 1 6으로 나타낼 수 있다.

     

    이어지는 숫자를 스킵하고 넘어가는 것을 Page refrence string = 1 4 6 1 6 이라고 한다.

     

     

     

     

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

    22. 프레임 할당  (0) 2020.02.17
    21. 페이지 교체 알고리즘  (0) 2020.02.04
    19. 가상 메모리  (0) 2020.01.30
    18. 세그먼테이션 (Segmentation)  (0) 2020.01.27
    17. 내부 단편화와 페이지 테이블  (0) 2020.01.20
Designed by Tistory.