ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 운영체제 06
    쾌락없는 책임 (공부)/운영체제 2021. 5. 27. 16:33
    반응형

    본 포스트는 '신용현'교수님의 운영체제 강의를 듣고

    이해, 정리한 내용들을 올린 포스트입니다.

    - 강의자료는 올리지 않습니다.


    Paging

     이전에 한 연속 할당의 경우 메모리 효율도가 떨어지기 때문에 나온 기법입니다. 프로세스를 일정한 크기로 나누며 그 단위가 Page가 됩니다. 그래서 실행시 첫 페이지를 메모리로 부른 뒤 나머지 페이지는 디스크에 두고 필요시 불러서 사용하게 됩니다. 그리고 페이지마다 연결하는 방법이 있어 메모리에 흩어져 있어도 프로세스가 실행가능하다는 장점이 있습니다.

    프로세스의 페이지 페이지 테이블 메모리
    P1 1 1 0  
    P2 2 2 1 P1
    P3 3 4 2 P2
      ...   3  
      (페이지 번호) (메모리 주소) 4 P3

     또한 여러 프로세스에서 같은 페이지를 사용한다고 했을 시 메모리에는 같은 페이지 1개만 올라가면 되기 때문에 메모리를 많이 절약할 수 있습니다. (shared page)

     

     추가적으로 각 페이지에 비트를 추가해 권한을 구별가능하게 할 수 있어 Protection도 용이합니다.

    장점 단점
    - 메모리의 물리적 공간보다 크게 사용하는 효과
    (요구되는 페이지만 올라오기 때문)
     -프로세스간 페이지 공유 가능
    - 각 페이지별 접근 지정 가능
    - 시간 / 공간적인 Overhead
    (때문에 아래 내용으로 보완해야 한다)

    Paging 단점 개선하기

     

    1. 시간적인 Overhead

     페이징의 경우 일단 페이지 테이블(항상 메모리에 있음)을 사용해서 주소를 찾아야 합니다. 따라서 모든 Data, Instruction들은 2번의 메모리 접근이 필요합니다. 이걸 TLB로 개선을 하는 것입니다.

     TLB는 실제 페이지 테이블 중 최근 값들을 저장하며 메모리보다 조금 더 빠른 버퍼입니다. 최근 사용된 페이지들을 저장함으로서 속도를 조금 높이자는 이야기입니다. 때문에 페이징을 하는 시간의 기댓값은 아래와 같습니다.

     

    ( 1 + t )a + ( 2 + t)( 1 - a ) = 2 + t - a

    t : TLB를 보는 시간,  a : TLB에 있을 확률, 1 : 메모리 접근 시간

     

    2. 공간적인 Overhead

     페이지 테이블도 메모리의 주소 공간을 차지하고 있습니다. 만약 32bit의 프로세서라면 메모리는 4GB까지 가능하며 (2^32 = 4gb) 각 페이지가 4kb라고 하면 100만개가 가능한 정도입니다. 그리고 주소의 크기는 32bit라서 100만개를 저장하기 위해서 4MB의 추가 공간이 필요하게 되죠. 그리고 이 테이블을 위한 공간은 프로세스마다 필요하게 됩니다. 이를 개선하기 위해서 Hierarchical Page Table, 계층적 페이지 테이블 / Hashed page table / Inverted page table을 사용하게 됩니다.

     

    2-1. Hierarchical Page Table

     계층적 테이블에서 가장 간단한 형태인 Two level page table의 경우 페이지 테이블을 위한 테이블을 하나 더 만드는 것입니다. 각 프로세스별 페이제 테이블을 디스크에 두고 이것들을 참조하는 페이지 테이블을 메모리에 두는 것입니다. 그리고 필요한 테이블만 메모리에 올려 사용하는 것입니다. Two-level외에도 3단계도 있습니다.

     

    2-2. Hashed Page Table

     여러 페이지가 같은 페이지 번호를 가지게 되는데 이 번호에 각 페이지들이 체인으로 되어 있습니다 (Linked list 형태) 그리고 이 체인을 따라가 해당 페이지를 탐색하게 됩니다.

     

    2-3. Inverted Page Table

     원래 페이지마다 1개의 entry를 가지게 됩니다. 그런데 프로세스가 많아지면 페이지 테이블이 너무 커집니다. 실제로는 사용한 페이지만을 사용하고 있기 때문에 page table entry를 페이지 프레임마다 준다는 개념입니다. 추가적으로 프로세스의 id를 넣어 구분을 하게 됩니다. 이러면 시스템 전체적으로 페이지 테이블을 1개만 가져도 된다는 장점이 있습니다.

     

     

    Segmentation

    페이지와는 조금 다른 개념으로 페이지는 일정 크기지만 세그먼트는 논리적인 단위로 크기가 서로 다릅니다. 논리적인 단위로 자르기 때문에 코드, 스택, 힙, 데이터 등으로 나뉘게 됩니다.

     세그먼트 테이블에는 메모리에서 시작 주소와 길이가 적혀 있습니다. 아래 두 레지스터에는 빈번하게 사용하는 세그먼트들의 정보를 저장하게 됩니다.

       - STBR (Segement-table base register) : 시작 주소 보관

       - STLR (Segement-table length register) : 길이 보관

     

    세그먼트를 사용하는 경우 세그먼트 단위로 protect 지정이 가능하며 코드 공유도 세그먼트 단위입니다. 대신 길이가 너무 다양해 메모리에 어떻게 할당할지가 중요하게 작용합니다.

    반응형

    '쾌락없는 책임 (공부) > 운영체제' 카테고리의 다른 글

    운영체제 08  (0) 2021.06.08
    운영체제 07  (0) 2021.05.27
    운영체제 05  (0) 2021.05.19
    운영체제 04  (0) 2021.05.19
    운영체제 03  (0) 2021.04.10

    댓글

Designed by Tistory.