• [운영체제] 단편화와 페이징 기법

    2021. 9. 9.

    by. KimBangg

    머릿말 🖋

     

    이전 글에서 메모리 바인딩에 관련된 글을 작성 하였습니다.

    이 때, 런타임(=실행 시간) 바인딩을 하면 연속 할당을 한다고 이야기 드렸는데요. 이를 통해 발생하는 문제와 해결 방법에 대해 알아보겠습니다.

     

     

     

      

    외부 단편화 ( External Fragmentation )

     

    연속 할당을 하는 경우, 프로세스를 연속적으로 적재합니다. 당연히 사용이 완료되면, 제거도 하겠죠 :D

    이 때, 2번 순서의 2-5 프로세스 사이의 하나의 큰~~ 빈 공간이 생겨버렸죠 ! 이를 Hole이라고 표현합니다.\

     

    아래와 같이 운이 좋게, 9번과 10번 프로세스가 들어가고 끝나면 문제가 없겠지만! 저런 Hole이 여러 개가 발생되면 어떨까요?

    그리고 저런 Hole은 합치면 하나의 프로세스가 들어갈 수 있다면 그 공간이 아깝지 않을까요?

     

    우리는 이렇게 여러 개의 Hole이 발생하여, 합치면 공간을 낼 수 있지만 연속적 할당 때문에 공간이 낭비되는 경우를 외부단편화라고 합니다.

     

     

     

     

    - 메모리 압축 ( Memory Compaction )

     

    위에서 언급했던 것처럼 하나로 모은다면 다른 프로세스를 위한 자리를 내줄 수 있지 않을까? 하는 생각으로 메모리 압축 이라는 개념이 탄생 했습니다.

     

    혹시 듣자마자 느껴지는 생각이 있을까요? 저는 보자마자 굉장히 어려울 것 같다는 느낌을 받았습니다.

    여러 프로세스를 임시 공간에 저장하고, 남은 공간들만을 합친다..? 이렇게만 이야기해도 벌써 복잡하죠! 그래서 앞선 개발자분들은 이를 채택 하지는 않았다고 합니다..!

     

     

     

     

     

    - 페이징 기법 ( Paging )

     

    위에서 언급했던 외부 단편화는 있는 그대로의 프로세스를 "연속적"으로 배치 함에 따라 발생하는 문제였습니다.

    이 때, 만약 프로세스를 나눠서 저장할 수 있다면 어떨까? 라는 생각으로 만들어진 것이 바로바로바로 페이징 기법입니다.

     

    페이징은 논리적 메모리를 똑같은 크기로 나누어 맵핑을 함으로써 외부 단편화는 해결이 되는 반면에, 프로세스가 페이지 단위로 나누어 떨어지지 않는 경우 내부 단편화가 발생이 됩니다.

     

    예를 들어서 46 크기의 프로세스가 10 크기의 페이지로 나뉘어 저장된다면, 마지막 페이지의 4크기는 낭비가 되겠죠? :D 

     

     

     

       

    - 페이지 테이블 ( Page Table )

     

    여러 개로 나뉘어져있는 페이지를 통해, 어떻게 프로세스가 온전히 작동할 수 있을까요?

    그것은 바로 페이지 테이블을 이용한 맵핑이 되어 있기 때문입니다!

     

    아래의 그림과 같이 페이지 0번은 1번 공간에 저장 되어있고, 페이지 1번은 4번에 저장이 되어있습니다. 이렇게 맵핑을 하면 하나의 메모리로 적재되는 것과 같이 Linear하게 작동 할 수 있겠쥬? 😆

     

    단점으로는 각 프로세스마다 이런 페이지 테이블을 저장 해야 하기 때문에, 메모리에 부담을 줄 수 있고, 테이블에 접근하는 횟수가 늘어나며오버헤드가 발생할 수 있습니다.

     

        

     

     

    -TLB ( Translation Lookaside Buffer )

     

    TLB는 쉽게 말해서 Page Table에 대한 Cache 이고, 이는 MMU 내부에 존재합니다.

    TLB 내부에 찾고자 하는 페이지 정보가 있으면(=hit) 물리적 주소를 리턴해주고,  없으면 (= miss) 페이지 테이블을 탐색합니다.

     

     

     

     

     

     

    마치며 🤟🏻

     

    메모리는 책상, 하드디스크는 서랍 이라고 생각을 해주시면 좋을 것 같은데요. 책상은 공간의 제약이 있기에 이를 효과적으로 정리 해야하지만, 보통 서랍에는 막 넣어두고 끄내서 사용하죠? :D

     

    그래서 우리는 여태까지! 효과적으로 책상을 사용 하는 법에 대해 다루었다고 생각을 하시면 좋을 것 같습니다.

    긴 글 읽어주셔서 감사하고 [ 코멘트 ] 는 항상 환영입니다. 🙆🏻‍♂️

     

     

     

      

      

    출처 📚

     

    Operating System Concepts 10th ( => 공룡책 )

    댓글