-
[ 운영체제 ] 6. 가상메모리 와 페이징CS/운영체제 2021. 10. 3. 16:05
전 포스팅 "4. 메모리 구조" 에서 유닉스 계열의 운영체제에서는 프로세스당 4GB 의 메모리를 할당한다고 했다. 그러나 보통 8GB , 16GB 를 사용하는 우리가 아주 많은 프로세스를 돌릴 수 있는 원리는 무엇인가?
이에 대한 해답이 가상메모리에 있다.
1. 가상메모리란?
: 메모리가 실제 메모리 보다 많아 보이게 하는 기술
- 프로세스의 모든 데이터가 당장 필요하지 않는다
- 프로세스 구조에 데이터들은 가상 주소로 매팽되고, 실제 해당 주소에서 데이터를 실행(읽고 / 쓸때) 만 물리 주소로 바꾸어 주면 된다.
- CPU (program counter 레지스터) 에는 가상 메모리 주소가 저장되고 이를 사용할때 물리주소 데이터를 전달받아 처리한다.
MMU (Memory Management Unit): CPU에 코드 실행시 , 가상 주소 메모리에 접근하고 해당 주소의 물리 주소값으로 변환하여 CPU 에게 제공하는 하드웨어 장치
2. 페이징 시스템
- paging: 크기가 동일한 page로 가상 공관과 이에 매핑되는 물리주소 공간을 관리하는 것
- page(page frame) : 고정된 동일한 크기의 block
- page table : 프로세스 PCB에 Page Table 구조체를 가리키는 주소가 있고 이 PageTgable 에는 물리 메모리에 있는 page frame 번호와 해당 페이지의 첫 물리 주소 정보를 메ㅠㅣㅇ한 표이다.
예를 들어 리눅스에서 4kb 로 paging 하고 page Table 에 해당 정보를 기록 /사용한다.
P : 가상 메모리의 Page 번호
d : P 안에서 참조하는 위치 (변위 , offset )
- CPU 에서 가상 주소의 실행을 통해 데이터를 요청하게됨
- Page tabe 에 해당 가상 주소와 그 Page 번호 (P) 가 있는지 확인한다.
- page 번호 가 존재하고 이와 매핑된 첫 물리 주소인 P' 를 알아낸다.
- P' 로 주터 변위 만큼을 더해 실제 물리주소를 구해낸다.
- CPU로 해당 주소를 전달한다.
만약 메핑된 물리주소가 없다면 페이지 폴트가 발생한다.
3. 요구 페이징 Demandin paging
- 프로세스의 모든 데이터를 메로리로 적재하지 않고 , 실행 중 필요한 시점에서만 메모리로 적재함
- 미리 모든 프로세스 관련 데이터를 메모리에 올리는 선행 페이징과 반대개념
- 더 이상 필요하지 않는 페이지는 다시 저장 매체 저장 (페이징 교체 일고리즘 필요)
4. 페이지 부재(Page Fault)
- CPU 에서 접근하려는 페이지가 물리 메모리에 없는 경우 발생하는 하나의 인터럽트이다.
- 페이지 폴트는 많은 리소스 낭비를 유발하므로 이를 최소화 할수 있는 페이지 교체 정책이 필요함
- FIFO , LRU(Least Recently Used : 가장 오래전에 사용된 페이지 교체) , LFU ...
5. 정리
CPU가 가상 메모리 주소를 MMU에 요청하면 MMU는 TLB에 최근에 프로세스에서 그 가상 메모리 주소와 물리 메모리 주소를 매핑한 적이 있는지 찾아보고 있다면 그 물리 메모리 주소로 변환하고, 없다면 CR3 레지스터에 있는 값을 이용해서 그 프로세스 의 page table에 있는 값과 매핑을 시켜서 그 물리 메모리 주소로 변환한다. 이 때 만약 요구 페이징 시스템에 의해서 아직 물리 메모리 주소와 매핑이 되지 않았다면 (valid-invalid 값 확인해서 i라면), 페이지 폴트 인터럽트가 일어나게 되고 그때가 돼서야 필요한 페이지가 물리 메모리에 올려지고 page table이 업데이트가 된다. 이후 물리 메모리 주소에 접근하여 데이터를 전달하게 된다.
'CS > 운영체제' 카테고리의 다른 글
운영체제 (0) 2022.10.10 [ 운영체제 ] 5. 스레드 와 프로세스 (0) 2021.09.28 [ 운영체제 ] 4. 메모리 구조 , PC , SP (0) 2021.09.23 [운영체제 ] 3. 인터럽트 , 컨텍스트 스위칭 (0) 2021.09.20 [운영체제 ] 2. 프로세스 상태와 스케줄링 알고리즘 (0) 2021.09.18