•Compter Science
[OS/OSTEP] 20.vm-smalltables : 더 작은 테이블, 하이브리드 테이블, 멀티레벨페이지 #14
20.vm-smalltables # 시작하며 페이징의 문제점이 하나 더 생겼다. 페이지 테이블이 크면 많은 메모리 공간을 가져야하는데, 그 메모리 공간은 선형 페이지 테이블구조이기때문에 연속된 공간을 가져야한다. 또 많은 프로세스가 존재하기 때문에 페이지 테이블의 크기도 커진다. 이 문제를 이번장에서 해결해 보도록 하자 # 더 큰 페이지 페이지 테이블을 줄이기 위해서 어떻게 해야할까? PTE의 개수를 줄이면 될 것이다. 그걸 줄이기 위해서는 페이지 자체의 크기를 키우면 페이지의 개수가 줄어든다. 당연한 결과이다 가상주소 예를들어 8비트를 사용중이라면 offset을 사용하는 만큼 page를 표현하는 vpn의 몫은 작아진다. 그러나 페이지가 커지면 내부 단편화(internal fragmentation)문제..
[OS/OSTEP] 19.vm-tlb : 더 빠른 변환을 위한 TLB와 구조#13
19.vm-tlb # 시작하며 이전 포스팅에서 정리했던거와 같이 페이징(paging)은 메모리접근을 두번 더 해야하는 성능저하가 발생한다. 이 단점을 하드웨어의 도움을 받아서 성능향상을 일으킬 것이다. TLB(Translation Lookaside Buffer)가 바로 그 주인공이다. TLB는 MMU의 일부이다. 간단하게 말하면 페이지(page)를 캐싱하는 역할을 한다. # TLB의 기본 알고리즘 지금까지 사용했었던 선형 페이지 테이블과 하드웨어로 관리되는 TLB가 어떻게 주소변환을 빠르게 수행하기 위해서 작업하는지를 알 수 있는 제어 흐름 알고리즘이다. 가상주소에서부터 모든 것이 시작된다. 순서대로 코드를 읽어보자 가상주소에서 비트 마스킹을 통하여 VPN을 추출한다. 그리고 TLB에서 해당 VPN이 캐..
[OS/OSTEP] 18.vm-paging : 메모리 페이징,PFN과 VPN #12
18.vm-paging # 시작하며 어떻게 보면 지금 블로그에 운영체제에 대한 것을 조금 빡세게 정리하고 있다. 거의 이틀의 걸쳐서 중간고사의 범위를 모두 포스팅하는 것이 목적이고, 계획대로라면 오늘 새벽안에는 포스팅이 끝나야 한다. 어찌보면 OSTEP을 1회독을 하기 전 이 페이징 부분이 가장 헷갈렸다. 그래서 OSTEP을 처음부터 읽고자 했던 것이고 어찌저찌 열심히 2회독을 돌리며 포스팅하는 시점에서 다시 페이징 부분에 들어왔다. 나름 확실히 이해하고 있다고 생각하는데, 이번 회독때 또 어떤 모르는것이 나올지 살짝 궁금해진다. 시작에 앞서 가장 중요한 개념 중 하나는 8bit는 1byte라는 사실일거 같다. 별거 아닌데 잘 기억하고 있어보자 세그멘테이션은 나름 좋은 모습을 보이는거 같지만, 공간 자체..
[OS/OSTEP] 17.vm-freespace : 메모리 빈 공간 관리하기 #11
17.vm-freespace # 시작하며 앞선 장에서 보았듯 메모리 상에서 빈공간을 관리해야 하는 이유를 알게 됐다. 공간이 고정 크기의 단위로 나누어져 있을 경우에는 관리가 특히 쉽다. 고정 크기 단위의 리스트만 유지하면 된다. 그러나 공간이 가변크기 일때, 힙에서 malloc()과 free()로 공간을 사용 및 게허가거나, 세그멘테이션 정해진 크기의 물리메모리를 관리하지 않는 경우에는 외부 단편화(external fragment)가 발생한다. 앞에서 설명했지만 다시 설명해보자면, 메모리의 총 빈공간리스트의 크기는 충분하지만, 프로세스가 물리메모리에 부분부분 할당 돼 있기 때문에, 실제로 사용가능한 공간은 크지 않는 경우다. 위 그림에서 볼 수 있는 것 처럼 미사용 공간은 20이지만, 11의 공간을 사..
[OS/OSTEP] 16.vm-segmentation : 메모리 세그멘테이션 #10
16.vm-segmentation # 시작하며 동적재할당 기법을 활용하여 주소공간 전체를 메모리에 탑재하는 것을 공부했었다. 이 기법은 base - bound를 사용하여 사용하는 주소공간 전체를 물리메모리에 탑재시킨다. 그러나 몇가지 문제점이 발생했다. 먼저 스택과 힙 사이에는 사용하지 않은 꽤 큰 영역이 존재하는데, 이러한 공간에 유연하게 대처하지 못했다. 또 주소공간이 물리 메모리보다 큰 경우는 실행이 어렵다. 당연한 결과이다. 대용량 주소 공간을 어떻게 지원해야하는가에 대한 의문점이 제기된다. # 세그멘테이션 적용하기 : 베이스(base) / 바운드(bound)의 일반화 위 문제를 해결하기 위해 세그멘테이션(segmentation)이라는 새로운 기법이 등장한다. MMU안에는 하나의 베이스-바운드 쌍..
[OS/OSTEP] 15.vm-mechanism : 주소 변환의 원리, 동적 재배치(dynamic relocation) , 내부단편화 #9
중간 중간 뛰어 넘는 챕터가 존재하는데 어렵지 않다고 생각들거나 뛰어 넘어도 이해의 문제가 없기 때문에 뛰어 넘는다. 15.vm-mechanism # 시작하며 프로그램은 자신의 전용 메모리를 소유하고 그 안에 자신의 코드와 데이터가 있다는 환상을 만들어 주자. # 가정 지금까지 그러했듯 몇가지 가정을 둔다. 이러한 가정을 완화시키고 뒤에가서는 멀티레벨페이징 기법과 같은 것까지 접근 할 수 있다. 주소공간은 물리 메모리에 연속적으로 배치되어야 한다는 가정과 각 주소 공간의 크기는 같다는 가정을 한다. 조금 비현실적이다. x = x + 3은 아래와같은 주소 접근이 일어나면서 실행된다. 시스템 소프트웨어때 공부했던 그대로다. 지금 실행되는 저 프로그램의 관점에서는 주소공간은 0KB ~ 16KB의 주소를 가지고..