2022. 9. 30. 02:39ㆍTIL💡/OS
배경
기존에는 모든 프로세스를 메모리에 로드하고, 메모리 용량보다 더 큰 프로그램을 실행시킬 수 없었다.
하지만 실제로는 코드의 일부에서만 대부분의 시간을 사용하고, 프로세스는 특정 순간에는 항상 작은 양의 주소 공간을 사용했기 때문에 이러한 방식은 매우 비효율적이었다.
가상 메모리
는 이러한 물리적 메모리 크기의 한계를 극복하기 위해 나온 기술이다.
프로세스를 실행할 때 실행에 필요한 일부만 메모리에 로드하고 나머지는 디스크에 두는 것이다.
이를 통해 프로세스 전체가 물리적 메모리에 있는 것'처럼' 수행되는, 즉 물리적 메모리가 훨씬 많이 있는 것처럼보이게 된다.
결과적으로 메모리에 작은 양의 주소 공간만 있으면 충분히 프로세스를 수행할 수 있고, 그에 따라 더 많은 프로그램을 동시에 실행할 수 있게 된다.
이처럼 현재 필요한 page만 메모리에 올리는 것을 Demand Paging
이라고 한다.
프로세스마다 Page Table이 생성되어 페이징 기법을 이용해 프로세스의 페이지와 물리적 메모리를 매핑할 수 있다.
Page Table을 통해 물리적 frame의 인덱스 외에도, 엔트리에는 다양한 정보들이 담겨있다.
- P(Present bit or Valid/Invalid bit): 해당 페이지가 물리 메모리에 존재하는지 확인 가능
- R/W (Read/Write bit): 해당 페이지 read/write가 가능한지 여부
- U/S (User/Supervisor bit): 유저, 커널모드 중 어느 모드에서 접근 가능한지
- A(Access bit): replacement를 위해 활용
- D(Dirty bit): 페이지가 수정되었는지 확인 가능 → Delayed write와 관련
Demand Paging 과정
1. 하드웨어가 TLB(Translation Lookaside Buffer)를 확인한다.
2. TLB hit인 경우 곧바로 주소를 변환하고, TLB miss인 경우 page table을 확인한다.(→ 3)
3. page table의 valid-invalid bit가 valid로 되어있다면 주소를 변환하고, TLB에 page를 올린다. invalid하다면 pagefault가 발생한다. (→ 4)
4. page fault가 발생하면 MMU(Memory Management Unit)가 운영체제에 Trap을 걸고 커널 모드로 들어가서 page fault handler가 invoke된다.
5. 유효하지 않은 참조인 경우 프로세스를 종료시키고, 그렇지 않다면 빈 frame을 얻는다. 만약 빈 frame이 없다면 메모리에서 victim page을 선택하여 대체한다.(여기에서 다양한 Page Replacement Algorithm이 쓰인다.)
6. 운영체제는 참조된 page를 디스크에서 메모리로 로드(I/O)하고, disk I/O가 끝날 때까지 이 프로세스는 CPU를 빼앗긴다.
7. Disk I/O가 끝나면 page table이 업데이트되고 valid-invalid bit가 valid로 바뀐다. 그리고 ready queue에 프로세스를 넣어준다.
8. 프로세스가 CPU를 잡게 되면 다시 이어서 수행한다.
'TIL💡 > OS' 카테고리의 다른 글
[OS] 프로세스의 생성과 복사 (0) | 2022.10.11 |
---|---|
[OS] 프로세스의 구조 (0) | 2022.10.11 |
[OS] DMA(Direct Memory Access)이란? (0) | 2022.10.10 |
[OS] Interrupt(인터럽트) (0) | 2022.09.30 |
API와 SDK (0) | 2022.05.31 |