운영체제#10

LeeMir, 26 April 2021

3강 - Memory Management(이어서)


Page Size
  • Page Size는 CPU 설계자가 결정
  • Overhead : Page Table 때문에 낭비되는 부분
    • s/p : 각 프로세스에 필요한 페이지 수
    • e : Page Table의 Entry Size
    • p/2 : Internal Fragmentation으로 낭비되는 공간
    • Overhead = se/p + p/2
Separate Instruction and Data Spaces
  • 64비트 CPU가 나오기 전, 32비트를 사용했을 때 32비트는 너무 적었음
    • 32비트 영역을 둘로 나눠서 Instruction Space와 Data Space로 나눠서 Address Space를 두배로 사용
  • CPU는 암묵적으로 Instruction Space인지 Data Space인지 구분할 수 있는 Rule이 있었음
Sharing Page Table
  • 두 개의 Page Table에서 Physical Memory의 같은 Frame을 가리켜 공유할 수 있음
  • 운영체제에서는 주로 COPY-ON-WRITE 기법을 사용하기 때문에, 공유할 때에는 읽기 권한만 부여해 같은 Frame을 공유함
    • 한 프로세스가 수정을 해야한다면, 다른 새로운 Frame을 가리키면서 충돌을 방지
  • Shared Libraries
    • Process 1은 36K번째 Page부터, Process 2는 12K번째 Page부터 Library를 호출했는데 어떻게 Main Memory(Physical Memory)의 동일한 영역을 가리킬 수 있을까
      • 절대적인 주소가 아니라, PC(Program Counter)를 기준으로 같은 크기로 할당함
Memory Mapped File(MMap)
  • 현대 OS에서 많이 쓰는 Memory Access 기법
  • Disk로부터 File을 Physical Memory에 넣고, Process 1과 Process 2의 Virtual Memory의 빈 공간에서 Physical Memory와 Mapping해 마치 Process 본인의 데이터인 것처럼 사용
  • 버퍼링을 여러 번하지 않아도 돼서 성능 향상
Cleaning Policy
  • Page Fault에 대비해 OS에서는 빈 Frame을 만들어놓고 유지해야함
  • 주기적으로 Dirty Page(Modified Page)를 미리 쫓아냄
  • Two-Handed Clock
    • Page Replacement Policy에서, Ref. Bit를 검사할 때 Page가 너무 많으면 한 개의 Hand로는 한 바퀴를 도는 데 너무 오래 걸림
    • Front-Hand가 Ref. Bit가 1이면 0으로 만들고 0이면 쫓아내면서 지나감
    • 그 후 Back-Hand가 같은 방법으로 지나감
Virtual Memory Interface
  • Message Passing
  • Distributed Shared Memory
    • Machine A와 Machine B가 네트워크로 연결되어 있음
Page Fault Handling
Intruction Backup
  • 하나의 Instruction이 처음 실행된다면 Opcode마다, Operand마다 무수한 Page Fault가 일어날 수 있음
Page Lock
  • Lock Bit : 이 Page는 교체하면 안되는 중요한 Page라고 명시
Backing Store
  • Page Table 중 valid bit가 0인 Page에는 Disk의 어느 영역에 이 Data가 있는지 주소를 작성하는 시스템도 존재
  • 대부분의 시스템에서는 주로 Disk Map을 사용함
Separation of Policy and Mechanism
  • Fault Handler나 MMU handler 같은 Mecahnism은 Kernel Space에 두는 반면, External pager는 User Space에 둬서 Policy를 쉽게 변경할 수 있도록 함
Segmentation
  • Segment

    • Symbol Table
    • Code(Source Text)
    • Constants
    • Parse Tree
    • Call Stack(Data)
  • 몇번째 Segment의 몇번째 Offset인지로 호출

  • 각각의 Segment 크기는 가변적임

    • 그러나 이 점은 단점으로 작용함