
지금까지 가상 주소 공간이 비현실적으로 작아서 모두 물리 메모리에 탑재가 가능한 것으로 가정하였다. 사실 실행 중인 프로세스의 전체 주소 공간이 메모리에 탑재된 것으로 가정하고 있었다. 이제 !! 가정을 없어지는 순간!!! 우리는 이를 위해서 메모리 계층에 레이어의 추가가 필요하다. 지금까지는 모든 페이지들이 물리 메모리에 존재하는 것을 가정하였다. 하지만 큰 주소 공간을 지원하기 위해서 운영체제는 주소 공간 중에 현재는 크게 필요하지 않는 메모리 일부를 보관해둘 공간이 필요하다. 보통 HDD, SDD가 이용된다. 한 가지 짚고 넘어가야하는 것, 왜 프로세스에게 굳이 큰 주소 공간을 제공해하는가? → 편리함과 사용 용이성, 주소 공간이 충분히 크면, 프로그램의 자료구조들을 위한 충분한 메모리 공간이 있는..

세그멘테이션을 사용하지 않고 페이지 테이블을 줄이는 방법을 생각해보자. 멀티 레벨 페이지 테이블은 선형 페이지 테이블을 트리 구조로 표현한다. → 매우 효율적이기 때문에 현대 시스템에서 사용되고 있다. 멀티 레벨 페이지의 기본 개념: 페이지 테이블을 페이지 크기의 단위로 나눈다. 페이지 테이블의 페이지가 유효하지 않는 항목만 있으면, 해당 페이지를 할당하지 않는다.(할당하지 않는다 → PTE를 만들지 않는다) 3.Page directory란 자료구조를 사용하여 페이지 테이블 각 페이지의 할당 여부와 위치를 파악한다. 페이지 디렉터리는 페이지 테이블을 구성하는 각 페이지의 존재 여부와 위치 정보를 가지고 있다. 좌측 그림은 전형적인 선형 페이지 테이블이다. 페이지 테이블의 중앙부에 해당하는 주소공간을 사용..

Bigger Pages 페이지 테이블의 크기를 간단하게 줄일 수 있는 방법이 한 가지 있다. 페이지 크기를 키우면 된다. 32비트 주소 공간에서, 이번에는 16KB 페이지를 가정해보자. 이 때 Offset은162^10 = 2^42^10 =2^14 즉, offset은 14bit가 필요하다. 자연스럽게 나머지 32-14= 18비트가 VPN을 표현하는데 사용한다. 이렇게 18비트의 VPN과 14비트의 offset을 갖게 된다. Page Table은 VPN수에 의해 정해진다. 각 PTE가 4byte이면 42^18 = 2^20byte = 1MB 즉, Page Table은 1MB가 된다. 기존 테이블 대비 크기가 1/4로 감소된다.( 테이블의 크기가 1/4로 감소한 것은 페이지 크기가 4배 증가했기 때문이다.) !..

Faster Translations(TLBs) Paging은 상당한 성능 저하를 가져올 수 있다. ↑은 프로세스 주소 공간을 작은 고정된 크기, page로 나누고 각 page의 실제 위치(mapping information)을 메모리에 저장한다. 그리고 mapping information을 저장하는 자료구조를 page table이라 한다. mapping intormaion을 저장을 위해 큰 memroy space를 요구된다. Address-translation cashe(Translation-lookaside buffer) TLB는 Memory-management unit, MMU의 일부이다. 자주 참조되는 가상 주소-실주소 변환정보를 저장하는 하드웨어 캐시이다. address-translation ch..

OS는 거의 모든 공간 문제를 해결할 때 두가지 방법이 있다. ↓ Segmetation 가변 크기의 조각들로 분할하는 것, 공간을 다양한 크기의 청크로 분할 할때 공간 자체가fragmented(단편화) 될 수 있고, 할당은 더 어려워진다. Paging 프로세스의 주소 공간을 고정 크기의 단위로 나눈다. 고정 크기의 단위를 page라 부른다. 이에 맞게 Phsycal Memory를 page frame이라고 불리고 고정 크기의 슬롯의 배열이라고 생각한다. 각각의 frame에 하나의 가상 메모리 페이지를 저장할 수 있다. 우리의 문제: Page를 사용하여 어떻게 Memory를 가상화할 수 있을까? 간단한 예제 및 개요 총 크기 64bite, 각 page는 16bite 페이지로 구성된 작은 주소 공간을 통해 이..

Free Space Management 새 주소 공간을 만들었더니 듬성 듬성 빈 공간이 생겼어!! Oh my god!! 지져스! 이 빈 공간을 정리를 하고 싶어! 어떻게? 할까..잘하면 돼!!! 모든 메모리 관리 시스템에 대한 근본적인 측면에 대한 논의, 바로 Free space management다! 이 장은 메모리 가상화와는 거리가 조금 멀다. 관리하고 있는 공간이 고정 크기의 단위로 나누어져있다면 관리가 쉽다. 그런 경우 고정 크기 단위의 리스트를 유지하고 클라이언트가 그 중 하나를 요청하면 첫 번째 항목을 반환하면 되기 때문이다. 하지만 그렇게 쉬우면 이 챕터를 하지 않았겠지? 빈 공간 관리가 더 어렵고 흥미로운 경우는 관리하는 공간이 가변-크기 빈공간의 집합으로 구성되어있는 경우다. 영문으로 v..

마치 구름이 낀 것 마냥 앞이 보이지 않는다. 가정: 프로세스 주소 공간 전체를 Memory에 loding했다. base, bound 레지스터로 OS는 Process를 Physcial Memory의 다른 부분으로 쉽게 재배치할 수 있다. Stack, Heap 사이에 사용되지 않는 큰 공간이 존재한다. not in use 공간 때문에 낭비가 심하다. Address Space공간이 Physcial Memory보다 큰 경우 실행이 매우 어렵다. Segmentation 대용량 주소 공간을 어떻게 자원할까? ↑ 4GB, 32GB bit 주소 공간을 상상해보자. 프로그램은 단지 수 MB만 사용함에도 불하고 주소 공간 전체에 메모리 LOAD 어떻게 할까? Basic idea: Instead of having just..

CPU Virtualization 부분에서, LDE(Limited direct execution) 기법에 대해 집중적으로 다룬다. CPU 가상화의 아이디어는 간단하다. → 대부분 프로그램은 하드웨어에서 직접 실행된다. But 프로세스가 System Call을 호출하러가나 Timer Interrupt 발생할 때 특정 순간에는 OS가 개입하여 Process issue가 발생하지 않도록 한다. OS는 약간의 hardware지원을 받아 efficient Virtualization을 제공하기 위해 실행 프로그램의 방해가 안 되도록한다. 중요한 순간에는 OS가 관여하여 하드웨어를 직접 제어한다. 현대 OS의 목표: efficiency, Control Virtualizing memory Virtualization을 ..