ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 19. 가상 메모리
    운영체제/운영체제 정리 2020. 1. 30. 18:07

    가상 메모리는 물리 메모리의 크기 한계를 극복하기 위해 나오게 됐다.

     

    자신의 메인 메모리가 100mb 라고 가정해보자. 200mb 크기의 프로세스를 실행 할 수 있을까?

     

    못올릴것 같겠지만 올릴 수 있다!

     

    어떻게?

     

     

    Cpu와 메모리 보조기억장치가 있고 다시 100mb 에 200mb 프로그램을 올리는 상황을 가정해보자.

     

    생각해보면 200mb 이지만 모두 메모리에 올릴 필요가 없다. 프로그램 안에 지금 당장 안쓰는 루틴도

     

    많을 것. ( ex 파일이 안열릴 시에  필요한 오류 처리 등 )

     

    따라서 안그래도 적은 메모리에 처음부터 넣을 필요가 없는 것이다. 안 넣고 있다가 실제 그런 상황이 벌어지면

     

    올리면 되는 것이다.

     

    100mb 메모리에 50mb 프로그램 3개를 올리는 상황을 가정해보자. 

     

     각각의 프로그램은 필요한 부분만 페이징으로 잘라져서 메인 메모리로 올라 간다. 따라서 메인 메모리가

     

    작다 하더라도 충분히 가능하다. 

     

     

    즉 지금 요구되어 지는 페이지만 메모리에 올린다.

     

    demand page ( 요구 페이지 ) : 프로세스를 페이지 단위로 잘라서 올리는데 지금 당장 요구되는 페이지만

     

    메모리에 올리고 지금 당장 필요하지 않다면 backing store에 그대로 두는 것

     

     

    그러면 페이지 테이블은 어떻게 만들어야 할까? 프로세스가 context switching 될때마다 페이지 테이블도 달라질

     

    것 p1의 페이지 테이블을 보면 프레임 번호 0번에 들어있는 a와 3번에 들어있는 b만 가리키게 된다.

     

    올라오지 않는 페이지들은 valid bit 를 두어서 그 유효성을 검사하게 되는데 1은 유효하고 즉 올라와있고

     

    0은 올라오지 않은 것이다.

     

    자 이제 CPU가 이제 어떤 주소를 낼 것이고 그곳에 해당하는 페이지 테이블 엔트리의 내용이 a 나 b 라면 이미 메모리에

     

    있으니 주소 변환하여 실행하면 된다.

     

    그런데 valid bit가 0인 경우를 CPU가 가리키게 되면 어떻게 될까?

     

    실행을 할 수 없으므로 인터럽트 신호가 CPU로 가게 되고 CPU는 하던 일을 중지하고 OS의 오류처리 루틴 ( page fault

     

    routine) 으로 점프하게 된다. 이제 OS가 비어 있는 메모리 공간에 올리게 되고 valid bit는 1로 바뀌게 된다. 그리고 CPU

     

    는 정상적으로 주소  변환하여 실행할 수 있게  된다.

     

    즉 요구되어지면 그제서야 올라온다. 요구 페이징

     

    이 Demand Paging( 요구 페이징 ) 이 가상메모리 라고 할 수 있겠다. Demand paging을 하기 위해서는 그 중에 일부 

     

    즉 필요한 부분만 올라오기 때문에 valid bit가 추가된 페이지 테이블이 꼭 필요하다. 그리고 프로세스를 보관해줄

     

    backing store( = swap device) 역시 필요하다.  

     

     

    정리 )

     

     

    페이지 결함 ( = 페이지 부재)  

     

    - 접근하려는 페이지가 메모리에 없다 ( invalid )

     

    - Backing store 에서 해당 페이지를 가져온다.

     

    - Steps in handling a page fault

     

    페이지 fault가 일어나면 어떤 일이 일어 나는가

     

    CPu에 주소가 p 5 d 20 이라고 해보자 CPU가 5번째 페이지 테이블을 보니 invalid 로 되어있다. CPU로 인터럽트가

     

    걸리고 하던 일 중지 후 OS의 page fault routine 으로 점프한다. 이제 OS가 하드디스크를 돌면서 이에 해당하는 부분을

     

    메인메모리로 가져온다. ( 메모리에 여분이 있는 경우 ) 이제 페이지 테이블에 프레임 넘버를 등록하고  valid bit를 1로

     

    설정해준다. 그 후 실제로 메모리에 있는 값을 읽는다.

     

     

     

     

    용어

     

    pure demand paging vs prepaging

     

    pure demand paging : 진짜로 필요한 페이지 만 들고온다. 따라서 프로그램이 처음 시작할 적에는 아무런 페이지도 올

     

    리지않고 시작한다. 처음 시작하자 마자 페이지 fault가 일어나게 된다. 속도가 느리다는 단점이 있지만 메모리가

     

    많이 절약되는 장점이 있다.

     

    prepaging : 지금 당장 필요하지 않더라도 필요하다 생각되는 페이지들을 들고 온다. 메모리 낭비 but 속도는

     

    빠를 수 있다.

     

     

    Swapping  vs Demand paging

     

    스와핑은 메모리와 backing store을 내보내고 들여보낼때의 단위가 프로세스다 프로세스 전체를 내보내고 다시

     

    가져오게 된다.

     

    Demaing paging의 단위는 페이지 단위이다. 

     

     

     

     

     

     

     

     

     

     

     

     

Designed by Tistory.