<정리할 것>
1. 가상 메모리와 페이징 시스템
2. 요구 페이징과 페이지 폴트
3. MMU와 TLB
가상 메모리(Virtual Memory System)
- 메모리가 실제 메모리(물리 메모리)보다 많아 보이게 하는 기술로, 프로레스가 여러 개라도 실제 특정 시점에
사용하는 메모리는 작다는 점에 착안한 것 - 실제 각 프로세스마다 충분한 메모리를 할당하기에는 메모리 크기가 한계가 있어 나온 게 가상 메모리
- 프로세스는 가상 주소를 사용하고, 실제 해당 주소에서 데이터를 읽고/쓸 때만 물리 주소로 바꿔준다 (가상주소는 프로세스가 참조하는 주소이고, 물리 주소는 실제 메모리 주소이다)
- 프로세스 간 공간 분리로, 프로세스 이슈가 전체 시스템에 영향을 주지 않음
페이징 시스템(paging system)
- 크기가 동일한 페이지로 가상 주소 공간과 이에 매칭하는 물리 주소 공간을 관리
- 동일한 크기의 페이지를 기반으로 가상 주소와 물리 주소를 매핑하는 방식을 사용
- 가상 주소는 가상 메모리 페이지(p)와 p 안에서 참조하는 변위(d)로 계산되어 특정 주소를 가리킨다
- 프로세스 생성시, 페이지 테이블 정보가 생성된다. PCB 등에서 해당 페이지 테이블 접근 가능하고, 관련 정보는 물리 메모리에 적재한다. 프로세스 구동 시, 해당 페이지 테이블 base 주소가 CR3 레지스터에 저장된다. CPU가 가상 주소 접근 시, MMU가 페이지 테이블 base 주소를 접근해서 물리 주소를 가져온다
1. 해당 프로세스에서 특정 가상 주소 접근을 시도한다
2. 해당 프로세스의 page table에 해당 가상 주소(v = (p, d))가 포함된 page 번호를 확인한다
3. 해당 페이지가 물리 메모리에 있으면 해당 페이지의 첫 부분을 가리키는 물리 주소(p`)를 페이지 테이블에서 알아낸다
4. 해당 페이지의 첫 부분을 가리키는 물리 주소에 변위 값을 더해서 가상 주소에 해당하는 물리 주소(p` + d)를 접근한다
요구 페이징(Demand Paging)
- <-> 선행 페이징(anticipatory paging or prepaging) : 미리 프로세스 관련 모든 데이터를 메모리에 올려놓고 실행
- 프로세스는 모든 데이터를 메모리로 적재하지 않고, 실행 중 필요한 시점에만 메모리로 적재하는 기법
- CPU가 요청할 때 프로세스의 데이터를 메모리에 올리는 것을 의미한다 (즉, 처음부터 모든 데이터를 메모리로 적재하지는 않음)
- 더 이상 필요하지 않은 페이지 프레임은 다시 저장매체에 저장한다 (페이지 교체)
페이지 폴트(page fault)
- 어떤 페이지에 접근하려고 했을 때 해당 페이지가 물리 메모리에 부재할 때 뜨는 인터럽트
- 페이지 폴트가 발생하면 OS가 이를 해결한 뒤(해당 페이지를 물리 메모리에 올림) 다시 동일한 명령을 수행하는 식으로 동작
- 스레싱(Thrashing) : 반복적으로 페이지 폴트가 발생해서 과도하게 페이지 교체 작업이 일어나
실제로는 아무 일도 하지 못하는 상황
MMU(Memory Management Unit)
- CPU에 코드 실행 시 가상 주소 메모리 접근이 필요할 때 해당 주소를 물리 주소 값으로 변환하는 하드웨어 장치
- 하드웨어 장치를 이용해야 주소 변환이 빠르기 때문에 MMU라는 별도 장치를 두는 것이다!!!!!
TLB (Translation Lookaside Buffer)
- 페이지 정보 캐쉬
- 가상 메모리 주소를 물리적 주소로 변환하는 속도를 높이기 위해 사용하는 캐시로, 최근에 일어난 가상 메모리와 물리 주소의 변환 테이블을 저장해둠
- CPU가 가상 주소를 가지고 메모리에 접근하려고 할 때, 우선은 TLB에 접근하여 가상 주소에 해당되는 물리 주소를 찾음
- 만약 TLB에 매핑이 존재하지 않는다면, MMU가 페이지 테이블에서 해당되는 물리 주소로 변환한 후 메모리에 접근하게 됨
'CS > OS' 카테고리의 다른 글
[OS] CPU Protection Ring (0) | 2023.08.17 |
---|---|
[OS] 커널(Kernel)과 쉘(Shell) (0) | 2023.08.17 |
[OS] 파일 시스템과 inode (0) | 2022.09.29 |
[OS] 스레드/멀티 스레드/동기화/뮤텍스와 세마포어 (0) | 2022.09.29 |
[OS] 프로세스/컨텍스트 스위칭/IPC (0) | 2022.09.29 |