분류 전체보기

    [OS/OSTEP] 22.vm-beyondphys-policy : 메모리 교체 정책 - LRU,FIFO,OPTIMAL,RANDOM,CLOCK #16

    [OS/OSTEP] 22.vm-beyondphys-policy : 메모리 교체 정책 - LRU,FIFO,OPTIMAL,RANDOM,CLOCK #16

    22.vm-beyondphys-policy # 시작하며 교체 정책의 핵심은 내보내도 될만한 페이지를 어떤 방식으로 선택하는 것인가이다. 생각보다 특이한 케이스들이 존재하고 공부하닥 랜덤이라는 방식이 어쩌면 가장 뛰어날 수 있다는 생각도 하게 됐다. 천천히 살펴보자 # 캐시 관리 페이지를 메모리와 디스크상에서 관리하면서 많이 쓰이는 페이지를 구별해내는 이 과정 또한 캐싱의 한 과정이라고 볼 수 있다. 캐싱의 모든 목적은 캐싱 된 것을 가장 많이 사용하게 해야한다. 그래야지 성능 향상이 있다. 지금의 문제에서는 디스크에서 가져오는 페이지를 최소화 해야한다. 즉 캐시 히트 횟수를 늘리는 것이다. 이 hit/miss 횟수를 안다면 평균 메모리 접근 시간(average memory access time, AMAT..

    [OS/OSTEP] 21.vm-beyondphys : 스왑공간(swap space), 메모리스왑 - 메커니즘 #15

    [OS/OSTEP] 21.vm-beyondphys : 스왑공간(swap space), 메모리스왑 - 메커니즘 #15

    21.vm-beyondphys # 시작하며 지금까지의 전제는 주소공간(가상공간)의 크기가 비현실적으로 작아서 모두 물리메모리에 탑재가 가능한 상황이었다. 그러나 실제로는 다수의 프로세스들이 메모리를 사용하고 있다. 그리고 큰 주소공간(가상공간)을 지원하기 위해서는 현재는 사용되지 않는 것들에 대해서는 디스크에 보관해줘야 이 문제를 해결 할 수 있다. 그러나 하드디스크는 매우 느리다. 하드디스크에서 메모리공간으로 올리는거 자체가 많은 자원을 소모하기 때문에 신중해야 한다. 스왑공간(swap space)를 추가하여 큰 가상 메모리가 있는 것처럼 환상을 심어줄 수있다. # 스왑 공간 ( swap space) 가장 먼저 디스크에 페이지들을 저장할 수 있는 일정 공간을 확보해야한다. 이러한 공간을 스왑 공간( s..

    [OS/OSTEP] 20.vm-smalltables : 더 작은 테이블, 하이브리드 테이블, 멀티레벨페이지 #14

    [OS/OSTEP] 20.vm-smalltables : 더 작은 테이블, 하이브리드 테이블, 멀티레벨페이지 #14

    20.vm-smalltables # 시작하며 페이징의 문제점이 하나 더 생겼다. 페이지 테이블이 크면 많은 메모리 공간을 가져야하는데, 그 메모리 공간은 선형 페이지 테이블구조이기때문에 연속된 공간을 가져야한다. 또 많은 프로세스가 존재하기 때문에 페이지 테이블의 크기도 커진다. 이 문제를 이번장에서 해결해 보도록 하자 # 더 큰 페이지 페이지 테이블을 줄이기 위해서 어떻게 해야할까? PTE의 개수를 줄이면 될 것이다. 그걸 줄이기 위해서는 페이지 자체의 크기를 키우면 페이지의 개수가 줄어든다. 당연한 결과이다 가상주소 예를들어 8비트를 사용중이라면 offset을 사용하는 만큼 page를 표현하는 vpn의 몫은 작아진다. 그러나 페이지가 커지면 내부 단편화(internal fragmentation)문제..

    [OS/OSTEP] 19.vm-tlb : 더 빠른 변환을 위한 TLB와 구조#13

    [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

    [OS/OSTEP] 18.vm-paging : 메모리 페이징,PFN과 VPN #12

    18.vm-paging # 시작하며 어떻게 보면 지금 블로그에 운영체제에 대한 것을 조금 빡세게 정리하고 있다. 거의 이틀의 걸쳐서 중간고사의 범위를 모두 포스팅하는 것이 목적이고, 계획대로라면 오늘 새벽안에는 포스팅이 끝나야 한다. 어찌보면 OSTEP을 1회독을 하기 전 이 페이징 부분이 가장 헷갈렸다. 그래서 OSTEP을 처음부터 읽고자 했던 것이고 어찌저찌 열심히 2회독을 돌리며 포스팅하는 시점에서 다시 페이징 부분에 들어왔다. 나름 확실히 이해하고 있다고 생각하는데, 이번 회독때 또 어떤 모르는것이 나올지 살짝 궁금해진다. 시작에 앞서 가장 중요한 개념 중 하나는 8bit는 1byte라는 사실일거 같다. 별거 아닌데 잘 기억하고 있어보자 세그멘테이션은 나름 좋은 모습을 보이는거 같지만, 공간 자체..

    [OS/OSTEP] 17.vm-freespace : 메모리 빈 공간 관리하기 #11

    [OS/OSTEP] 17.vm-freespace : 메모리 빈 공간 관리하기 #11

    17.vm-freespace # 시작하며 앞선 장에서 보았듯 메모리 상에서 빈공간을 관리해야 하는 이유를 알게 됐다. 공간이 고정 크기의 단위로 나누어져 있을 경우에는 관리가 특히 쉽다. 고정 크기 단위의 리스트만 유지하면 된다. 그러나 공간이 가변크기 일때, 힙에서 malloc()과 free()로 공간을 사용 및 게허가거나, 세그멘테이션 정해진 크기의 물리메모리를 관리하지 않는 경우에는 외부 단편화(external fragment)가 발생한다. 앞에서 설명했지만 다시 설명해보자면, 메모리의 총 빈공간리스트의 크기는 충분하지만, 프로세스가 물리메모리에 부분부분 할당 돼 있기 때문에, 실제로 사용가능한 공간은 크지 않는 경우다. 위 그림에서 볼 수 있는 것 처럼 미사용 공간은 20이지만, 11의 공간을 사..