운영체제#8

LeeMir, 12 April 2021

3강 - Memory Management(이어서)


No Memory Abstraction
  • Real Memory System
  • 주소가 미리 정해져있었으므로 컴파일러는 주소를 기준으로 컴파일
  • 0번 Address부터 OS(vector table), User Program, Driver 순서
  • Address Space
  • 모든 Program의 Address를 0부터 시작하듯 프로그램을 짜기 위해 0 ~ MAX(prog.)에 Base Register를 더해서 사용한다.
  • Fixed Partitioning을 이용해 Memory를 사용하는 방법
    • 한 Partition만 붐비는 문제가 있을 수 있음
    • Partition보다 작은 Program만 실행할 수 있음, 남은 빈 공간에 대해 메모리 낭비 문제
  • Dynamic Partitioning을 지속하면 Process가 배치된 사이에 빈 공간이 존재(Memory Fragmentation, 메모리 단편화)
  • Memory Allocate 방법
    • First Fit
    • Best Fit
    • Next Fit
    • Worst Fit
  • Solutions for Fragmentation
    • Coalescing
      • Program이 Memory를 반납(free)할 때 인접 unused 블록과 합쳐서 통합한 빈공간을 만듦
    • Compaction
      • 자잘한 빈공간을 하나로 합치고 사용중인 Program끼리 인접하게 만듦
      • Dynamic Program Relocation이 가능해야함
      • 부하가 큼
      • Optimal Compaction을 찾는 게 어려움
  • Swapping
    • Process를 HDD에 Swap In, Swap Out을 하면서 더 많은 Process를 실행할 수 있음
    • 메모리 효율성을 높일 수 있음
    • 한 Process에서 메모리가 부족해 다른 Process를 Swap Out할 수도 있음
  • Overlay
    • Memory에 Program에 있는 모든 함수를 한 번에 적재하는 것이 아니라, 그때그때 필요한 함수를 불러서 적재함
    • RAM보다 더 큰 Program을 실행할 수 있음
  • Memory Management
    • Bit map
      • Memory 상에서 빈 공간을 0, 사용중인 공간을 1로 나타내어 관리
    • Linked Lists
      • Process를 반납(free)해 빈 공간이 생겼을 때, 인접해있는 빈공간과 병합하게 함
Virtual Memory
  • Physical적 Memory는 유한, Logical적 Memory는 무한이라고 가정
  • 64비트 CPU에서는 2^(64)의 공간을 사용
    • 가상 메모리는 이 공간을 한 프로세스에서 다 사용한다고 가정
    • 사실 2^(52) 정도
  • Process가 생각하는 Virtual Address Space는 Physical Space(DRAM)보다 클 수 있음
  • Paging
    • 가상 주소 공간(VAS)을 임의의 크기들의 페이지로 나눈 후 주소를 Page Number와 Page Offset으로 표기
    • Physical Memory를 임의의 크기들의 Frame으로 나누고 주소를 Frame Number와 Frame Offset으로 표기
      • Page의 크기와 Frame의 크기는 같아야 함
    • 일부 Page는 DRAM의 Frame에 적재, 나머지 Page는 Disk의 Swap 영역에 있음
      • Virtual Address는 연속적이지만 DRAM의 Physical Address는 연속적이지 않을 수 있음
    • Page Table Flags
      • valid bit
        • valid bit가 1이면 frame으로 변환, 0이면 page fault를 일으켜 interrupt 발생
      • protection bit
        • read bit와 write bit와 execution bit존재
        • exe bit가 0인데 실행하려고 하면 interrupt 발생
          • 바이러스를 예방할 수 있음
        • copy on write
          • 두 프로세스가 같은 메모리(frame)에 sharing하는데 한 프로세스가 write를 해야할 때
          • 처음에는 둘 다 Read Only로 실행(read bit = 1, write bit = 0)
          • write를 해야하는 명령어를 읽었는데 write bit는 0이므로 protection fault으로 interrupt 발생
            • 프로그램의 오류가 아니라 copy on write 때문에 발생한 상황이라면 main memory에 frame을 추가로 하나 할당해서 내용을 복사한 후 그곳을 가리키게 함
      • referenced bit
        • 최근에 사용했던 Page인지 여부를 표시하는 bit
      • modified bit(dirty bit)
        • page가 main memory에 적재된 후 바뀌었는 지 여부를 표시하는 bit
        • main memory에서 out될 때 바뀐 내용이 있으면 그 내용을 disk에 덮어씌워야하므로 표시
          • dirty bit가 0이면 그냥 그 frame은 버리면 됨
    • 일일이 Page Table에 접근해서 Virtual Address를 Physical Address로 변환하면 메모리 효율이 두 배로 떨어지는 문제 발생
      • Translation Lookaside Buffer
        • Key와 Value 형태로 p와 f가 매칭되어있음
        • Virtual Address를 Physical Address로 순식간에 변환할 수 있어 처리속도 향상
          • 속도가 Real Memory System에 근접함
        • TLB에 없으면 그 때는 어쩔 수 없이 Page Table에 접근해야함
        • TLB의 크기는 제한되어있으나, Hit rate는 꽤 높음
          • Program은 Locality한 특징이 있어 한번 부른 주소의 근처 주소를 부를 가능성이 높기 때문
          • 따라서 처음에는 Page Table에 접근하면서 TLB를 채워야 함
        • 문맥교환 발생 시 TLB는 초기화 됨
        • Physical Address로 바꾼 후 바로 DRAM으로 접근하지 않고, Cache Memory에 먼저 접근해서 있는 지 확인해 봄
        • TLB에는 Page Table Flags도 저장되어 있음
    • 외부 단편화 문제는 해결하였고, 내부 단편화 문제는 여전히 존재
    • VAS가 크면 Page Table도 많은 영역을 써야 함