[운영체제] 가상 메모리
페이징 기반 메모리 관리
· 프로세스의 모든 메모리 참조는 논리주소이며, 이 주소는 수행시간에 물리주소로 변환됨
☞ 한 프로세스가 그 수행 과정에서 스와핑을 통해 다시 메모리에 적재될 때, 그 이전과 다른 위치에 적재될 수 있음을 의미 -> 재배치 · 한 프로세스의 주소공간은 페이지로 분할될 수 있고, 프로세스 수행 중 이 페이지들은 메모리의 연속된 영역에 위치할 필요가 없음
☞ 프로세스가 수행될 때 페이지 테이블을 활용해 동적으로 주소를 변환함으로써 가능케 함
● 만약 두 특성이 만족된다면, 수행 시간에 프로세스의 모든 페이지(혹은 세그먼트)가 주기억장치에 적재되어 있을 필요가 없음 !
프로세스의 일부 페이지 적재 후 실행 방법
- 운영체제는 초기에 수행될 프로세스의 코드와 데이터가 포함되도록 몇 개의 페이지만 메모리에 적재(적재집합)
☞ 프로세스가 적재집합에 포함된 논리 주소를 참조하며 실행되는 동안은 그 실행이 순조로움
☞ CPU는 페이지 테이블을 이용하여 프로세스의 논리 주소가 적재집합에 포함되어 있는지 판단할 수 있어야 함
만약 메모리에 적재되지 않은 논리 주소가 참조될 경우
1) CPU는 메모리 폴트(memory access fault) 인터럽트를 발생시킴
2) 운영체제는 인터럽트 당한 프로세스를 블록상태로 전환시키고
3) 운영체제는 참조된 논리 주소를 포함하는 페이지를 메모리에 적재하도록 디스크 입출력을 요청함
4) 해당하는 페이지가 메모리에 적재되면 블록된 프로세스를 준비상태로 전환시킴
● 프로그래머는 디스크 상에 할당된 훨씬 큰 잠재적 메모리를 갖게 되고, 이를 가상 메모리(virtual memory)라 함
가상 메모리 개념 - 프로세스의 일부 페이지 적재 후 실행의 2가지 의미
- 보다 많은 프로세스를 메모리에 유지할 수 있음 ☞ CPU 활용도가 높아짐
- 메모리 크기보다 큰 프로세스를 실행할 수 있음 ☞ 프로그램의 크기가 실 메모리 공간 크기 제약에서 벗어날 수 있음
‣ 반입 정책
각 페이지를 언제 물리 메모리로 적재할지 결정하는 정책
- 요구페이징
· 해당 페이지에 포함된 하나의 논리주소가 참조되었을 때 적재함
· 프로세스 수행 시작 초기에 많은 페이지 폴트가 발생함
· 참조의 지역성에 의해 시간이 지나면 페이지 폴트 횟수가 떨어짐
· 대부분의 운영체제에서 사용함
- 선반입(prepaging)
· 페이지 폴트에 의해 요구된 페이지 이외의 페이지들도 적재함
☞ 한 프로세스의 페이지들이 보조기억장치에 연속적으로 저장되어 있을 경우 그들을 한꺼번에 반입하는 것이 효율적임, 탐색시간, 회전지연시간을 줄이기 위한 방안
· 프로그램 수행을 시작할 때나 페이지 폴트 발생 시 적용할 수 있음
· 선반입의 비용이 해당 페이지 폴트를 처리하는 비용보다 작다면 사용할 만함
‣ 교체 정책
· 새로운 페이지를 반입하기 위해 현재 물리 메모리에 적재되어 있는 페이지들 중 어떤 페이지를 교체할 것인지 결정
· 정책의 목표) 가까운 미래에 참조될 가능성이 가장 적은 페이지를 교체하여야 함
페이지 교체 정책
① 최적(optimal)
② FIFO(first-in first-out)
③ LRU(least recently used)
④ 클록(clock)
① 최적(optimal) 정책
· 미래에 가장 오랫동안 참조되지 않을 페이지를 교체함
· 가장 적은 페이지 폴트를 발생시킴
② FIFO(first-in first-out) 정책
· 가장 오래 전에 물리 메모리로 반입된 페이지를 교체함
· 순환 버퍼상의 라운드-로빈 방식으로 제거 구현이 쉬움
· 가장 오래 있었던 페이지는 많은 경우에 프로그램 수행 과정 내내 집중적으로 이용되는 코드나 데이터 영역일 수 있음
③ LRU(least recently used) 정책
· 가장 오랜 동안 참조되지 않은 물리 메모리 상의 페이지를 교체함
· 최적정책에 근접한 성능을 보임
· 구현이 어렵고 큰 오버헤드를 발생시킴
☞ 페이지마다 최종 참조시간을 유지시키는 방법
☞ 페이지 번호를 갖는 스택(stack)을 유지하는 방법
④ 클록(clock) 정책
- 페이지를 적재한 프레임들이 환형으로 배치되어 있다고 간주하고, 첫 교체후보를 가리키는 포인터를 설정
- FIFO와 LRU를 섞은 알고리즘 - 2차 기회 알고리즘으로 불리기도 함
- 프레임당 1비트의 참조 비트(reference bit/used bit) 사용
· 프레임을 원형 큐로 연결하여 관리
· 페이지가 참조될 때마다 프레임의 참조 비트를 1로 설정
- 희생 프레임 선택
· 포인터에서 시작하여 시계방향으로 원형 큐를 따라 이동
☞ 참조 비트가 0이면, 그 프레임을 희생 프레임으로 선택
☞ 참조 비트가 1이면, 0으로 바꾸고 다음 프레임으로 이동
☞ 한 바퀴를 돌게 되면 처음 프레임 선택