<가상 메모리(Virtual Memory)>
: 기존에는 프로세스 전체를 메모리에 로드했는데, 프로세스가 코드의 일부분에서만 시간을 사용하여 차지한 메모리보다 더 작은 부분을 사용했기 때문에 비효율적이었고 메모리 용량보다 더 큰 프로그램은 실행시킬 수 없었습니다. 가상 메모리는 프로세스를 실행할 때 필요한 일부 메모리만 로드하고 나머지는 보조기억장치에 둬서 이런 물리적 메모리 크기의 한계를 극복합니다.
가상 메모리를 통해 프로세스는 전체가 물리적 메모리에 있는 것처럼 보이되, 작은 양의 메모리를 차지하며 프로세스를 수행할 수 있게 되었고, 더 많은 프로그램을 동시에 실행할 수 있게 되었습니다.
<Demand Paging>
: 현재 필요한 page에만 메모리를 올리는 것입니다. CPU 이용률과 처리율이 높아지고, 더 많은 사용자를 수용할 수 있습니다.
* valid-invalid bit : page table에서 해당 page가 메모리에 있는지를 나타냅니다. bit가 invalid면 page가 물리적 메모리에 없다는 것을 의미합니다.
* 처음에는 모든 page entry를 invalid로 초기화합니다.
* 주소 변환할 때 bit가 invalid로 되어있으면 page fault 오류를 발생시킵니다.
아래는 주소를 변환하는 과정입니다.
* TLB(Translation Look-aside Buffer) : CPU는 메인 메모리에 2번 접근(page table에 접근, page table을 기반으로 한 실제 메모리에 접근)해야 원하는 데이터를 얻을 수 있는데, 이런 접근을 줄이고자 나온게 TLB입니다. 하드웨어적으로 지원하며, 최근에 읽은 page table을 임시 저장하는 cache 역할을 합니다.
1. 하드웨어가 TLB를 확인합니다.
2. TLB 를 탐색합니다.
- TLB hit(캐싱해둔 TLB 있음) -> 바로 물리적 주소에 접근 -> 끝!
- TLB miss => page table 확인 -> 3번
3. page table의 valid-invalid bit를 확인합니다.
- valid -> 주소를 변환하여 TLB에 page를 올림 -> 끝!
- invalid -> page fault 발생 -> 4번
4. MMU(Memory Management Unit)가 운영체제에 Trap을 걸고, 커널 모드가 되어 page fault handler를 invoke 합니다.
5. 유효하지 않은 참조면 프로세스를 종료시키고, 유효하다면 빈 page frame을 얻습니다. 빈 page frame이 없으면 메모리에서 victim page를 선택해서 대체합니다.
6. 운영체제는 참조된 page를 디스크에서 메모리로 로드(I/O)하고, 프로세스는 disk I/O가 끝날 때까지 CPU를 뺏긴 상태로 있습니다.
7. disk I/O가 끝나면 page table이 업데이트되고, valid-invalid bit가 valid로 바뀝니다. 이후 ready queue에 프로세스를 넣어줍니다.
8. 프로세스가 CPU를 사용하게 되면 이어서 수행합니다.
5번에서 어떤 frame의 victim page를 대체할지를 정해야하는데, 다음 포스팅에서 이에 대한 알고리즘들을 알아보겠습니다.
'[Computer Science] > [운영체제(OS)]' 카테고리의 다른 글
[운영체제(OS)] 10-3) Thrashing (0) | 2023.03.24 |
---|---|
[운영체제(OS)] 10-2) Page Replacement Algorithm (0) | 2023.03.23 |
[운영체제(OS)] 9-4) 페이징(Paging) (0) | 2023.03.21 |
[운영체제(OS)] 9-3) 연속 메모리 할당과 단편화 (0) | 2023.03.08 |
[운영체제(OS)] 9-2) Static Linking vs. Dynamic Linking(shared Library) (0) | 2023.03.07 |