관리 메뉴

fatalite

OS - Virtual Memory 본문

컴퓨터 공학/Operating System 운영체제

OS - Virtual Memory

fataliteforu 2022. 12. 7. 15:24

Virtual Memory

이전의 메모리의 경우, 램 크기에 한정되었다. 

그러나 프로세스의 크기가 꼭 램 크기에 맞으리란 보장이 없다는 것을 알 수 있다.

이를 위해 필요한 페이지만 메모리에 올려놓고, 필요하지 않으면 저장 공간에 넣어둔다.

넣었다가 빼는 걸 Swap-in, Swap-out이라고 한다. 

 

만약 프로세스에서, 이 페이지가 없다는 것을 알게 되면,

일단 페이지 테이블을 조사해서 해당 페이지가 in-valid인지 확인한다

만약 in-valid라면, 운영체제한테 Trap을 건다.

그러면 운영체제는 일단 멈춰서 프로세스 정보, 레지스터 등을 저장한다.

이후에는 저장장치에서 해당 페이지를 가져온다. 

운영체제는 가용가능 프레임을 가지고 있는데, 만약 할당이 가능하면 이를 넣는다. 

아, 그리고 시작할때 전체 이미지를 스왑 공간에 올려놓거나 한다.

그리고 fork()를 하면, 바로 가용 프레임에서 찾는게 아니라, 일단 페이지를 같이쓰다가 exec() 이후에 나눠쓰게된다.

...

만약 가용가능 프레임이 없다면, 희생될(Victim) 페이지를 골라야한다.

이러한 페이지를 고르기 위한 여러가지 알고리즘이 존재한다.

첫번째로 FIFO는, 자주 사용되는 페이지를 교체할 수 있기 때문에 효율이 낮다.

 

이론적으로는, 가장 쓰이지 않는 페이지를 교체하는 것이 가장 최적이다.

이를 최적 교체 방법이라고 한다. 그러나 전에 그랬듯이, 이 가장쓰이지 않는다는 것을 알수가 없다는 것이다.

 

그래서 Least-Recently-Used 알고리즘을 사용한다.

이는 최소로 사용된 페이지를 교체하는 알고리즘이다.

이를 알기 위해서는 또 다른 하드웨어의 지원이 필요한데, 가산기(계수가, 시간 재는 것)과 

이다..변경 비트의 사용이다. 

 

페이지 할당은 모두 똑같이 할당하거나, 크기에 따라 비례하는 방식이 존재한다. 후자가 효율적인 걸 직관적으로 알 수 있다. 그리고 가용할 페이지를 찾는 과정을, 해당 프로세스 내에서 찾는 것을 local, 이 외를 global이라고 한다.

 

global이 보통 더 좋다고 알려져 있다. 

 

만약, 그런데, 프로세스에 할당된 페이지(프레임) 수가 너무 작다면, 계속해서 페이지 폴트가 일어날 것이다.

이와 같이 페이징으로 인해 느려지는 현상을 스래싱Trashing 이라고 한다. 

 

Trashing을 막기 위해서는 프레임 할당을 적당히 잘해야한다. 

일단, 전체적으로는 가용 프레임이 일정량이상 없다면 Reaper로 죽일걸 찾을 수 있다. 

특정 프로세스의 가용 프레임은, 지역성 모델을 바탕으로 작업 집합을 사용한다. 

작업 집합의 크기를 최소로 할당하는 것이다. 

 

....

 

지역성 모델

'컴퓨터 공학 > Operating System 운영체제' 카테고리의 다른 글

Operating System - Mass Storage  (0) 2022.12.11
OS - Security 보안  (0) 2022.12.10
OS - File System  (0) 2022.12.10
OS - Memory Management  (0) 2022.12.07