포시코딩

[운영체제] 7. Memory Management (4) 본문

CS (Computer Science)

[운영체제] 7. Memory Management (4)

포시 2023. 5. 17. 08:44
728x90

키워드

multilevel paging, valid-invalid bit, protection bit, inverted page table, shared page, segmentation

 

Multilevel Paging and Performance

  • Address space가 더 커지면 다단계 페이지 테이블이 필요
  • 각 단계의 페이지 테이블이 메모리에 존재하므로 logical address의 physical address 변환에 
    더 많은 메모리 접근 필요
  • TLB를 통해 메모리 접근 시간을 줄일 수 있음
  • 4단계 페이지 테이블을 사용하는 경우
    • 메모리 접근 시간이 100ns, TLB 접근 시간이 20ns이고 TLB hit ratio가 98%인 경우
    • effective memory access time
      = 0.98 * 120 + 0.02 * 520
      = 128 nanoseconds
    • 결과적으로 주소 변환을 위해 28ns만 소요

 

Valid(v) / Invalid(i) Bit in a Page Table

  • Page는 5까지 있고 Page 6, 7은 사용하지 않는 페이지지만 page table의 6, 7번 entry에 존재한다.
    프로그램의 주소 공간이 가질 수 있는 maximum size 만큼 page table entry가 생겨야 하기 때문
  • table이라는 자료구조 특성상 위에서부터 index를 통해 접근해야 하기 때문

Valid-Invalid bit

  • 사용되지는 않기 때문에 Invalid(i)로 표시되고 있음
    0으로 표시되있다고 페이지에 대한 정보가 없다는게 아니라(0번지를 나타내는 것일 수도 있기 때문에)
    v, i인지에 따라 여부가 나뉨
  • Invalid에는 두가지 의미가 있다.
    • 프로세스가 그 주소 부분을 사용하지 않는 경우
    • 해당 페이지가 물리적인 메모리에 올라와 있지 않고 swap area에 있는 경우

Protection bit

  • page에 대한 접근 권한 (read/write/read-only)
  • 즉, 연산에 대한 권한을 표시하기 위한 bit

 

Inverted Page Table

page table의 문제

  • 이전에 설명한 page table은 많은 용량을 차지한다는 문제가 있었다. 
  • 모든 process별로 그 logical address에 대응하는 모든 page에 대해 page table entry가 존재
  • 대응하는 page가 메모리에 있든 아니든 간에 page table에는 entry로 존재
  • 공간 오버헤드가 큼

Inverted page table

  • 원래의 page table을 통한 주소 변환을 역발상으로 뒤집어 놓은 모습
  • page frame 하나당 page table에 하나의 entry를 둔 것(system-wide)
  • 각 page table entry는 각각의 물리적 메모리의 page frame이 담고 있는 내용 표시
    (process-id, process의 logical address)
  • page table의 공간을 줄이고자 위함
  • 테이블 전체를 탐색해야 하는 단점이 있기 때문에
    병렬적으로 동시에 검색할 수 있게 associative register 사용(expensive)

 

Shared Page

Shared code

  • Re-entrant Code(=Pure code)라고도 부른다.
  • 여러 프로세스가 공유할 수 있는 code 부분을 같은 물리적인 메모리 frame으로 mapping 해주는 기법
  • (조건 1) read-only로 하여 프로세스 간에 하나의 code만 메모리에 올림
    ex) text editors, compilers, window systems
  • (조건 2) Shared code는 모든 프로세스의 logical address space에서 동일한 위치에 있어야 한다.
    쉽게 말해서 동일한 logical address에 위치해야 함
    -> 컴파일된 코드 안에는 logical address가 적혀있기 때문

Private code and data

  • 각 프로세스들은 독자적으로 메모리에 올림
  • private data는 logical address space의 아무곳에 와도 무방

 

Segmentation

  • 프로세스를 구성하는 주소 공간을 의미 단위로 쪼개는 방법
  • 프로그램은 의미 단위인 여러 개의 segment로 구성
    • 작게는 프로그램을 구성하는 함수 하나하나를 세그먼트로 정의
    • 크게는 프로그램 전체를 하나의 세그먼트로 정의 가능
    • 일반적으로는 code, data, stack 부분이 하나씩의 세그먼트로 정의된다.
  • 세그먼트 크기가 다 다르기 때문에 어디에서 시작 되는지 바이트 단위 주소로 매겨져야 하는지가
    페이징 기법과의 차이점

 

Segmentation Architecture

Protection

  • 각 세그먼트 별로 protection bit가 있음
  • Each entry
    • Valid bit = 0 -> illegal segment
    • read / write / execution 권한 bit

Sharing

  • shared segment
  • same segment number
  • * segment는 의미 단위이기 때문에 공유(sharing)와 보안(protection)에 있어 paging보다 훨씬 효과적

Allocation

  • first fit / best fit
  • external fragmentation(외부 조각) 발생
  • * segment의 길이가 동일하지 않으므로 가변분할 방식에서와 동일한 문제점들이 발생

 

Segmentation with Paging

  • pure segmentation과의 차이점
    • segment-table entry가 segment의 base address를 가지고 있는 것이 아니라 
      segment를 구성하는 page table의 base address를 가지고 있음
  • 먼저 segment에 대한 주소 변환 진행 -> 각 프로그램이 가지고 있는 논리 주소는 segment 번호와 offset으로 구성됨
  • STBR에 있는 segment table 시작 위치를 찾아 가면 해당 segment에 대한 주소 변환 정보를 얻을 수 있음
  • 메모리에 올라갈 때 page로 쪼개져서 올라감
    -> allocation 문제가 생기지 않는 장점 존재
  • segment는 page 개수의 배수로 구성
  • segment 하나가 여러 개의 page로 구성되기 때문에 segment 당 page table 존재
    -> 프로세스 당 page table이 존재하는 것과 대조
728x90