가상 메모리(Virtual Memory)
가상 메모리는 물리 메모리 크기의 한계를 극복하기 위해 나온 기술이다. 즉, 물리 메모리보다 큰 프로세스를 수행하기 위해 가상 메모리를 사용한다. 실제 프로그램들을 살펴보면 많은 경우에 프로그램 전체가 메모리에 늘 올라와 있어야 하는 것은 아니라는 것을 알 수 있다. 오류 처리 코드, 옵션, 사용 되지 않는 배열 등은 실질적으로 거의 발생하지 않는다. 프로세스는 실행에 필요한 부분만 메모리에 올림으로써 메인 메모리에 올라가는 프로세스의 크기를 줄일 수 있다.
요구 페이징(Demand Paging)
필요한 페이지만 적재하는 방법을 요구 페이징(Demand Paging)이라고 하며 가상 메모리 시스템에서 가장 일반적으로 사용된다(가상 메모리를 만드는 방법은 두가지가 있지만 대부분 요구 페이징을 사용하므로 가상 메모리와 요구 페이지를 같은 용어로 사용하는 경우가 많다). 요구 페이징을 사용하면 프로그램을 실행 중 필요할 때만 페이지가 적재된다. 따라서 접근되지 않는 페이지는 물리 메모리로 적재되지 않는다. 이는 메모리가 더 효율적으로 사용되게 한다.
프로세스가 실행되는 동안 일부 페이지는 메모리에 있고 일부는 보조저장장치에 있다. 이를 구별하기 위해 valid-invalid비트 기법을 사용한다. 페이지 테이블에 1비트를 추가하여 페이지가 메모리에 있다면 valid, 없다면 invalid로 표시하는 것이다.
만약, 프로세스가 메모리에 올라와 있지 않은 페이지에 접근하려고 하면 페이지 테이블이 invalid로 표시되어 있으므로 페이지 폴트(page fault)가 일어난다. 아래 그림은 페이지 폴트를 처리하는 과정을 나타냈다.
1. 내부 테이블(주로 PCB)을 검사하여 그 메모리 참조(reference)가 유효한지 확인한다.
2. 만약 무효한 페이지에 대한 참조라면 그 프로세스는 중단된다. 유효한 참조인데 페이지가 아직 메모리에 올라오지 않았다면(invalid), 보조장치로부터 가져온다.
3. 빈 공간, 즉 가용 프레임(free frame)을 찾는다.
4. 해당 페이지를 비어있는 프레임에 할당한다.
5. 페이지 테이블과 내부 테이블을 갱신한다. (valid하다고 표시)
6. 다시 명령어로 돌아가서 실행한다.
Pure Demanding Paging
처음부터 모든 페이지를 적재시키지 않고 CPU가 요구할 때 페이지를 적재하는 방법이다. 즉, 어떤 페이지가 필요해지기 전에는 결코 그 페이지를 메모리로 적재하지 않는 방법이다. 메모리에 페이지가 하나도 안 올라와 있기 때문에 프로그램을 실행하자마자 page fault가 발생한다. Pure Demanding Paging은 메모리를 최대한 효율적으로 사용할 수 있다. 하지만 시작부터 page fault가 발생하므로 속도면에서 느리다.
Prepaging
Prepaging은 pure demanding paging과 반대되는 개념이다. 프로그램을 실행할 때 필요할 것이라 판단되는 페이지를 미리 올리는 것이다. page fault가 발생할 확률이 적으므로 속도면에서 빠르지만, 미리 올라간 페이지를 사용하지 않는다면 메모리가 낭비된다.
요구 페이징의 성능
유효 접근 시간 = ( 1-p ) * ma + p * 페이지 폴트 시간
p: 페이지 폴트 확률 ( \( 0<=p<=1\) )
ma: 메모리 접근 시간
'운영체제' 카테고리의 다른 글
[운영체제] 페이지 교체 (Page replacement) (0) | 2021.10.20 |
---|---|
[운영체제] 페이징(Paging), TLB (0) | 2021.09.27 |
[운영체제] 연속 메모리 할당 (0) | 2021.09.22 |
[운영체제] 교착상태 (Deadlock, 데드락) (0) | 2021.09.14 |
[운영체제] 동기화 도구들 (뮤텍스, 세마포어, 모니터) (0) | 2021.09.08 |