운영체제#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을 찾는 게 어려움
- Coalescing
- 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)해 빈 공간이 생겼을 때, 인접해있는 빈공간과 병합하게 함
- Bit map
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은 버리면 됨
- valid bit
- 일일이 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도 저장되어 있음
- Translation Lookaside Buffer
- 외부 단편화 문제는 해결하였고, 내부 단편화 문제는 여전히 존재
- VAS가 크면 Page Table도 많은 영역을 써야 함