본문 바로가기

CS/[OS]Operating System(OS 운영체제)

(8)
[OS]Demand Paging 우리는 왜 virtual memory 가상메모리를 사용해야 하는 것인가? 우리가 program을 실행할 때는 program 전체가 동시에 필요하지 않다. 만약에 program을 실행할 때 main memory에 program의 모두를 올리게 되면 문제점이 main memory 보다 사이즈가 큰 프로그램을 돌려야 한다고 했을 때 돌리지 못한다. 결국 main memory에 프로그램 전부를 올리는 것이 아닌 일부만 올려놓는 방법을 사용하는데 이렇게 발전된 것이 바로 virtual memory인 것이다. physical memory에 분리하여 user logical memory의 개념으로 사용하게 됨으로서 physical memory의 크기에 상관 없이 program을 작성할 수 있게 되었다. 정리하자면 프로..
[OS]Inverted Page Table 모든 process는 page table을 가지고 있다. page table을 다시 복기해보면 virtual address 가 physical memory의 어디에 있는지 알려주는 table이다. 이렇게 Process 마다 page table을 만들게 되면 process가 많아질 수록 table 수도 많아지고 그럼 메모리 사용량도 많아지게 될 것이다. 또한 invalid한 page 마저 가지고 있게 되며 memory issue가 발생하는 것을 지금까지 확인했다. 그렇다면 반대로 physical memory에 직접 어떤 process가 사용하는지에 대한 정보를 저장하는 것이 효율적이지 않을까? 라는 아이디어에서 나온 방법이 Inverted Page table이다. inverted page table의 방법..
[OS] multi-level page tables (2) 지금까지는 two-level page table을 보았는데 그 이상의 level의 경우는 어떻게 되는 것인지 알아보자 level이 계속해서 늘어나게 되는 경우는 logical address space 크기가 클 수록 page 단위로 잘랐을 때도 여전히 크기가 크고 사용되지 않는 부분이 많게 되면 level을 더 늘리게 된다. -three level page table 위와 같은 경우는 VPN이 21 bit이다 보니 2^21개의 entry를 가지게 되고 page table만 해도 2^23바이트 8MB의 크기가 되므로 너무 크다는 문제가 있다. page size가 512바이트이고 한 entry 크기가 4바이트이니 512/4 = 128(2^7)개의 entry를 한 페이지당 갖고 있는 것이다. 즉 한 페이지는..
[OS]Multi-level Page Tables (1) page table이 너무 크고 invalid region에 대해 메모리가 낭비되는 부분이 있었다. 이것을 해결하기 위한 방법으로 이전에 보았던 것이 hybrid 방법, segment, paging을 섞어서 사용하는 것이었다. 하지만 이것 또한 heap 영역에서의 낭비되는 메모리가 문제가 되었다. 그렇다면 또 다른 방법으로 무엇이 있을까? 바로page table을 또다시 paging 해보는 방법이 있다. multi-level page table이라고 한다. page table이 있다고 하면 이를 다시 page 단위로 잘라본다. 해당 page 중에 valid 한 page 영역을 track 하기 위한 또다른 page table을 만드는데 그것을 'page directory'라고 한다. page directo..
[OS] Paging : Smaller Tables 지금까지 살펴본 것을 다시 복기 해보자. 각 프로세스 마다 page table이 하나씩 존재하는데, page table이 크기가 너무 커서 메모리에 존재 그 page table에 매번 접근 하자니 memory에 두번 access 하는 것이 되어 overhead 가 커지게 되는 문제가 생겼다. 이를 해결하기 위해 TLB를 만들어 cache 처럼 사용하자는 아이디어를 지금까지 살펴 보았다. 32-bit address space 를 가정해보자. 4KB 크기의 page와 4 byte page table entry 라고 했을 때 아래 그림과 같다. 먼저 4KB = 2^12이므로 offset에 해당하는 bit 수가 12개 이고 나머지 20 bit에 해당하는 부분이 VPN을 나타내게 된다. 즉 page table e..
[OS] TLBs : Faster Translations-Issues 이번에는 TLB Issue 에 대해서 알아보자 ISSUE 1 : TLB sharing 만약 process 두개가 TLB를 공유한다고 해보자. 두 프로세스의 VPN 값이 모두 10으로 동일 한데 PFN은 각각 100 170으로 다르다. 그렇다면 동일한 TLB에 다음과 같이 저장 되어 있다면 VPN만 보고서는 PFN 값을 구별할 수 없게 되는데 그럼 어떻게 둘을 구분 지어야 하는가에 대한 문제가 발생하게 된다. 이를 해결하기 위해서 context switching 일어날 때마다 TLB를 초기화 시키는 방법이 있을 것이다. 하지만 이 방법은 언젠가 다시 context switching 돼서 돌아올텐데 TLB가 매번 초기화 되어 있을 것이므로 바람직한 방법은 아닐 것이다. 다른방법으로 해결하는 것이 Addres..
[OS] TLBs : Faster Translations - HW-managed/SW-managed TLB Miss가 일어났을 때 어떻게 처리를 하는가? 누군가 Page table을 읽어서 VPN + PFN을 TLB에 넣어주는 역할이 필요하다. 그렇디면 이것을 누가 해주느냐 바로 HW가 처리 해주는 경우와 SW가 처리해 주는 경우 두가지가 있다. 먼저 HW가 처리해 주는 경우를 살펴 보자. Hardware-managed TLB(mostly on CISC machine) 이 경우에는 먼저 (1) HW가 page table이 memory의 어디에 위치해 있는지 알고 있어야 하고, (2) 그것들의 exact format도 미리 알고 있어야 한다. 그것들을 알고 있다면 page table에 접근하여 hw가 직접 내용을 decoding 하여 PFN을 extract하고 PFN에 대해 mapping 하여 TLB에 ..
[OS] TLBs : Paging(Faster Translations) process 마다 page table이 존재 하는데 이는 Main memory에 저장되어 있다.(table의 크기가 커서) 모든 data/instruction의 access는 두번의 memory access 가 필요 한데 하나는 page table 접근, 다른 하나는 Data/instruction 접근이다. 이렇게 매번 두번씩 메모리 접근이 수행되면 Overhead가 매우 커진다는 문제가 있다. 그럼 이를 해결할 수 있는 방법이 뭐가 있을까? HW의 도움을 받을 수 있는 방법이 있다. MMU안에 special fast-lookup hardware cache를 이용하는 것이다. 이를 associative memory 또는 Translation look-aside buffers(TLBs)라고 한다. 즉 아..