Virtual Memory
멀티 프로그래밍을 위해서는 여러 개의 프로세스들을 동시에 메모리에 올려두어야 한다. 가상 메모리 기법은 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법으로, 말 그대로 없는 것을 있는 것처럼 보이게 하는 기술이다.
하나의 프로그램은 실질적으로 사용하는 메모리가 그리 많지 않다. 따라서 프로그램을 실행할 때, 프로그램 전체를 메모리에 올리지 않고 일부분만 올림으로써 더 많은 프로그램을 메모리에 올릴 수 있는 것이다. -> 결국 이 역시도 리소스를 최대한 쥐어짜내기 위함이다.
물리적인 메모리의 주소 변환은 운영체제가 관여하지 않는다.
하지만 virtual memory 부분은 운영체제가 전적으로 관여한다.
이 챕터에서 다루는 내용은 Paging 기법을 사용한다고 가정한다.
실제로도 대부분의 시스템은 Paging 기법을 사용하고 있다.
Demand Paging
실제로 필요할 때 페이지를 메모리에 올리는 기법이다.
Paging 기법은 프로그램이 실행될 때 그 프로세스를 구성하는 주소 공간의 페이지를 한꺼번에 메모리에 올리는 것이 아니라, Demand Paging 기법을 사용해서 요청된 페이지만 메모리에 적재하는 것이다.
Damand Paging 기법을 사용함으로써,
- I/O 양의 감소 - 프로그램에서 빈번히 사용되는 공간은 지극히 제한적이다. 좋은 SW는 특별한 예외 상황에 대한 대비를 해 놓는데, 그런 잘 사용되지 않는 부분을 올리지 않고 필요한 부분만 올림으로써 I/O 양을 줄일 수 있다.
- Memory 사용량 감소
- 빠른 응답 시간
- 더 많은 사용자 수용
와 같은 이점이 있다.
Valid/invalid bit의 사용
Invalid - 사용되지 않는 주소 영역인 경우나 페이지가 물리적 메모리에 없는 경우를 의미한다.
처음에는 모든 page entry가 invalid로 초기화되어 있다.
주소 변환 시에 invalid bit이 set 되어 있으면 page fault
가 발생한다.
Page Fault
invalid page를 접근하면 MMU가 trap을 발생시키게 되고 (page fault trap), CPU가 운영체제에게로 넘어간다. (Kernel mode)
Kernel mode에서 page fault handler(프로그램)가 호출된다.
다음과 같은 순서로 page fault를 처리한다.
- 잘못된 요청(e.g bad address, protection violation)인 경우에는 abort 한다.
- 빈 페이지 프레임을 얻는다. (없으면 뺏어온다: replace)
- 해당 페이지를 디스크에서 메모리로 읽어온다.
- disk I/O가 끝나기까지 이 프로세스는 CPU를 preempt 당한다.(block 상태로)
- Disk read가 끝나면 page tables entry에 기록하고, valid bit를 갱신한다.
- ready queue에 프로세스를 넣는다.
- 이 프로세스가 CPU를 잡고 다시 running 상태가 된다.
- 중단되었던 인스트럭션을 재개한다.
Free frame이 없는 경우
빈 프레임이 없는 경우, 기존에 있는 페이지를 쫓아내야(victim) 한다. -> Page replacement
이 때는 곧바로 사용되지 않을 페이지를 쫓아내는 것이 좋다.
동일한 페이지가 여러 번 메모리에서 쫓겨났다가 다시 로드된다면 오버헤드가 클 것이다.
Replacement Algorithm
쫓아낼 페이지 프레임을 결정하는 알고리즘이다.
page-fault rate를 최소화하는 것이 목표이다.
주어진 page reference string에 대해 page fault를 얼마나 내는지를 계산해서 알고리즘의 성능을 평가한다.
reference string의 예
1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
본 포스팅은 이화여대 반효경 교수님의 강의와 경북대 탁병철 교수님의 강의를 토대로 작성한 글입니다.
'Computer Science > 운영체제' 카테고리의 다른 글
[운영체제] CH9. Virtual Memory(3) (0) | 2020.09.23 |
---|---|
[운영체제] CH9. Virtual Memory(2) (0) | 2020.09.23 |
[운영체제] CH8. Memory Management(4) (0) | 2020.08.23 |
[운영체제] CH8. Memory Management(3) (0) | 2020.08.22 |
[운영체제] CH8. Memory Management(2) (0) | 2020.08.20 |