본문 바로가기

ComputerScience/Operating System

OS - 8.2 Virtual Memory

728x90

1. Segmentation

- 이전의 memory management chapter에서 segmentation을 다루었다.

- 프로세스를 동적인 크기의 segment들로 나누어서 메모리에 할당하는 방식이고 이를 관리하기위해 segment table을 사용한다고 했다.

- 이번 장에서 자세하게 주소 변환 과정을 살펴보자.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

- 먼저 가상주소의 seg#로 segment table을 찾아 가서 메인 메모리 위에 올라와 있는 해당 segment의 실제 시작 주소를 찾는다.

- 여기에 offset(segment의 시작 주소로부터 떨어진 거리)을 더해서 실제 물리 주소를 계산한다.

2. Translation in Segmentation/Paging System

- segment table에서 각 segment의 base address와 length를 가지고 있기 때문에 메모리 영역의 protection과 sharing이 용이하다.

- 이런 장점이 paging에서의 단점을 보완하기 때문에 두 시스템을 결합해서 실제 메모리 관리에 사용한다.

- 즉 프로세스에게 page들을 할당해주면 segment들로 프로그램을 쪼개서 할당받은 page를 사용한다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

- 프로세스 A, B, C가 각각 segment들이고 base address(세그먼트의 시작주소)와 length(세그먼트의 길이)를 가지고 segment영역을 벗어나는 일을 막는다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

- 가장 먼저 seg#로 해당 segment table의 entry를 찾는다.

- segment base를 꺼내면 이어서 그 page table entry를 찾는다.

- frame number를 꺼내면 최종적으로 offset과 결합하여 실제 page frame에 접근할 수 있게 된다.

3. Fetch Policy

- page에 접근하고자 하는데 해당 page가 메인 메모리에 없다면 디스크로부터 메모리로 page가 swapping이 되어야 한다고 했다.

- 이 과정은 i/o interrupt가 수행되는 작업이기 때문에 매우 느린 작업이다.

- 따라서 pc의 성능을 높이기 위해서는 page fault로 인한 swapping을 줄여야한다.

- 운영체제 마다 채택하는 정책이 다르지만 몇가지 대표적인 정책을 살펴보자.

*Demand Paging

- page fault가 발생했을 때 해당 page만 메인 메모리에 load한다.

- 초기에는 fault가 계속 발생할 수 있지만 나중에는 점점 많은 페이지가 메모리에 올라오게 되면서 지역성을 활용하여 fault rate을 낮출 수 있다.

*Prepaging

- page fault가 발생하면 해당 page와 더불어 주변 page까지 같이 가져온다.

4. Replacement Algorithm

- 페이지를 메모리에 올리기로 했으면 어디다 둘 것인지? 고민해야할 차례이다.

- 만약 메모리를 이미 다른 프로세스들이 점유하고 있다면 누구와 교체해야할지?의 문제도 생긴다.

- 이때 최대한 당분간 안쓰일 것 같은 프로세스와 교체를 하는 것이 swapping을 줄여 성능에 기여할 수 있을 것이다.

- 한편으로는 절대 메인메모리 공간을 내주면 안되는 프로세스들도 있을 것이다. 이런 프로세스에 대해서는 frame lock을 해서 secondary memory로 나가는 상황을 막을 수 있다.

- 또한 page 교체가 이루어질때 교체 대상을 같은 프로세스에게 할당된 page들로 할 것인지?(local) 혹은 메모리 전체의 page를 대상으로 할 것인지?(global)로 replcement scope를 구분할 수 있다.

https://www.unf.edu/public/cop4610/ree/Notes/PPT/PPT8E/

- 페이지 참조 요청이 들어오는 순서대로 메모리의 상태를 나타낸 그림이다.

- OPT는 optimal case로 page fault가 3번으로 가장 적게 발생하는 최적의 경우를 나타낸다.

- 대표적인 세가지 알고리즘을 비교해보자.

*Lest Recently Used(LRU)

- page교체가 이루어질 때 가장 오랫동안 참조되지 않은 page를 내보내는 것이다.

- 이를 구현하기 위해서는 page마다 가장 최근에 참조된 시간 정보를 가지고 있어야 할 것이다.

- 위의 그림을 살펴보자. 최초로 5번 page의 접근이 요청되었을 때 메모리에 올라와 있는 1,2,3번 페이지 중에 가장 오랫동안 참조하지 않은 3번을 내보내는 것이다.

*First in First out(FIFO)

- 가장 오랫동안 메모리에 있었던 페이지를 교체 1순위로 한다.

*Clock Policy

- 각 프로세스마다 공평하게 돌아가면서 메모리를 비워주는 것이다.

- 그림을 살펴보자. 2, 3, 1페이지가 순서대로 swapping이 필요할 때 자리를 비워주고 다시 3,1이 순서대로 나가주고 5, 2, 4가 순서대로 자리를 비워준다.

- 모든 프로세스가 공평하게 메모리를 양보하게 된다. 

5. Page Buffering

- page replacement에서 새로 들어온 프로세스에게 자리를 내어주고 메모리를 빠져나오는 page를 victim이라고 한다.

- 나중에 이 victim이 된 page가 다시 메모리 공간을 점유할 때를 대비해서 buffer에 두는 것이다.

- swap in, swap out은 상당히 오래 걸리는 작업이기 때문에 성능을 높이기 위해서 buffering을 활용하는 것이다.

728x90
반응형