-
11일차 - Memory Management(2)CS지식/운영체제 2021. 5. 7. 23:31
오늘은 저번 시간에 이어 메모리 관리에 대한 공부를 했다.
메모리 관리를 위한 기법들을 배우고 저번 시간에 배우지 못한 부분인 multi paging과 segmentation에 대해 배웠다.
1. Two-level Page Table
앞 시간에 Paging 기법에 대해서 배웠다. 프로세스를 동일한 크기인 page로 나누어 필요한 부분만 메모리에 올려 사용하는 기법이다.
그러면 two-level page table은 무엇이고 왜 나온 것일까?
two-level page table은 말 그대로 page table을 2개 사용하여 paging기법을 구현한 것이다.
기존 paging기법은 하나의 page table을 사용하여 논리적 주소를 물리적 주소로 변환하여 메모리에 접근하는 방식인데
2개의 page table을 사용하여 2번의 변환을 거쳐 접근하고 page table 양이 늘어 메모리를 더 사용하여 비효율적이라고
보일 수 있다.
하지만 굳이 2개를 사용한 이유가 있다.
그 이유는 공간의 낭비를 줄이기 위해서 사용한다.
어떻게 page table의 개수가 늘었는데 공간의 낭비를 줄이는 것일까?
기존의 paging기법에서는 프로세스가 가상메모리의 공간을 전부 사용하지 않아도 page로 나누어진다.
즉, 사용하지 않는 공간(빈 공간)이 page로 나뉘어지고 이 부분도 page table에 저장된다.
예를 들어 우리가 32bit 주소체계를 사용 시에 2^32바이트, 4GB의 주소공간이 프로세스마다 존재한다.
이 주소공간을 page size가 4KB인 page로 자르게 되면 백만개의 page가 생기고 page table entry가 백만개가 된다는 것이다.
프로세스마다 page table이 존재해야하므로 물리적 메모리를 사용하는 비중이 매우 클 것이다.
만약, two-level page table을 사용하게 된다면 공간을 사용하지 않는 부분에 대해서는 page table이 생기지 않아
공간의 낭비를 줄일 수 있는 것이다.
2. Multiple paging
mulitple paging은 다수의 page table을 두어 주소변환을 하는 것으로 주소공간이 더 커지면 다단계 페이지 테이블이 필요하다.
페이지 테이블이 많아지면 더 많은 메모리 접근이 필요한데 이 부분은 TLB를 통해 시간을 줄일 수 있다.
여기서 추가적인 기능 2가지를 배울 수 있었다.
- memory protection
메모리 접근 관리를 위해 page table의 entry마다 정보를 알 수 있는 bit를 추가적으로 둔다.
1) protection bit
page에 대한 접근 권한(read/write/read-only)을 알려주는 것으로 메모리에 접근 권한을 막기 보다는 연산에 대한 접근 권한을 알려주는 것이다.
예를 들어 주소공간에서 코드영역은 내용이 바뀌면 안되므로 read-only여야하고 데이터나 스택영역은 새로운 내용을 수정하거나 추가할 수 있으므로 read와 wirte권한이 가능하다.
2) vaild-invaild bit
vaild bit는 해당 주소의 frame에 그 프로세스를 구성하는 유효한 내용이 있음을 의미한다.
invaild bt는 해당주소의 frame에 유효한 내용이 없음을 의미한다.
여기서 내용이 없는 경우는 프로세스가 그 주소부분을 사용하지 않거나 해당 페이지가 메모리에 올라와 있지 않고 swap area에 있는 경우이다.
3. Inverted Page Table
앞에서 two-level page table이 나온 이유를 설명하면서 기존의 page table은 용량이 크다고 설명했다.
큰 이유를 더 자세히 설명해보면 ① 모든 프로세스별로 그 논리적 주소에 대응하는 모든 page에 대해 page table entry가 존재하고 ② 대응하는 page가 메모리에 있든 없는 간에 page table에는 entry로 존재하기 때문이다.
inverted page table은 기존에 page번호를 가지고 프레임의 위치를 알아낸 것을 역발상하여 만든 것이다.
프레임하나 당 page table에 하나의 entry를 만드는 것이다.
즉, page table은 첫 번째 프레임에 어떠한 페이지가 있는지 저장되고 두 번째 프레임, 세 번째 프레임... 순서대로 page table에 entry로 저장된다.
page table에는 process-id와 process의 logical address가 entry로 저장된다.
이렇게 된다면 기존에는 index접근으로 page table을 통해 주소변환이 쉬웠지만
inverted page table을 사용하게 되면 전체를 탐색해야하기 때문에 시간이 오래걸리는 단점이 존재한다.
이 단점을 보완하기 위해 associative register를 사용하여 병렬적으로 처리하게 해주기도 한다.
4. shared page
예를 들어, 프로세스 3개가 존재하는데 이 프로세스가 같은 코드로 동작한다고 생각해보자.
기존의 paging을 하게 되면 3개의 프로세스에 대해 page table이 각각 같은 크기로 존재하여 메모리에 올라가게 될 것이다.
메모리에 같은 정보를 가진 것이 여러 개가 올라와 있는 것은 공간적으로 비효율적이다.
이러한 것을 방지하기 위해 shared page가 도입되었다.
프로세스가 같은 코드를 사용하면 공유가 가능하다면 shared code로 하여 하나만 물리적 메모리에 올리는 것이다.
shared page를 구현하기 위해서는 2가지 조건이 있다.
1) read-only권한으로하여 프로세스 간에 하나의 code만 메모리에 올린다.
2) shared code는 모든 프로세스의 logical adress space에서 동일한 위치에 있어야 한다.
5. Segmentation
앞에서는 noncontiguous allocation 중 하나인 paging에 대해서 배웠고 지금부터 또 다른 noncontiguous allocation으로 sementaion에 대해 설명해보겠다.
segmetation은 프로세스 주소공간을 의미 단위인 segment로 자른 것이다.
작게는 프로세스를 구성하는 함수 하나하나를 세그멘트로 정의하고
크게는 프로세스 전체를 하나의 세그멘트로 정의하기도 한다.
일반적으로는 code, data, stack 부분이 하나씩의 세그멘트로 정의된다.
segmentation을 구현하기위해서는 무엇이 필요할까?
먼저, 주소 변환을 위해 참고되는 segment table이 필요하다.
segment table의 entry는 base와 limit라는 정보를 가지고 있다.
base는 세그멘트가 물리적 메모리의 어디에 위치한지 물리적 주소의 시작위치를 알려준다.
limit는 세크멘트의 길이를 알려준다.
레지스터는 물리적 메모리에서의 segment table의 위치 정보를 가지는 STBR과 프로그램이 사용하는 세그멘트의 수를 알려주는 STLR이 있다.
segmentation은 paging과 달리 의미 단위로 쪼개지기 때문에 공유(sharing)와 보안(protection)에 있어 훨씬 효과적이다.
하지만 의미 단위로 쪼개지다보니 세그멘트의 크기가 각자 다를 수 있어 외부조각이 발생해 hole이 생길 수 있다.
또한, 세그멘트가 적합한 메모리의 위치에 올라갈 수 있도록 allocation(first fit, best fit)이 구현되어야하는 단점이 존재한다.
'CS지식 > 운영체제' 카테고리의 다른 글
13일차 - File System (0) 2021.05.13 12일차 - Virtual Memory (0) 2021.05.10 10일차 - Memory Management(1) (0) 2021.05.04 9일차 - Deadlock(교착상태) (0) 2021.05.01 8일차 - Process Syncronization(2) (0) 2021.04.28