가상메모리(virtual memory system)
실제 각 프로세스마다 충분한 메모리를 할당하기에는 메모리 크기가 한계가 있기 때문에 가상 메모리는 여러 프로세스 동시 실행 시스템에서 반드시 필요하다.
ex ) 메모리가 4gb라고 할 때 한 프로세스가 한번에 4GB를 전부 사용하지 않기 때문에 일부만 메모리에 올려둔다.
이 때 실제 메모리 주소를 물리 주소라고 하고, 프로세스가 참조하는 주소를 가상 주소라고 한다.
가상주소와 물리주소를 계속 변환하다보니 시간이 오래걸려서 주소를 변환해주는 하드웨어 장치인 MMU(Memory Management Unit)를 사용한다.
: cpu -> virtual address -> mmu - physical address -> memory
페이징 시스템
페이징 : 크기가 동일한 페이지로 가상 주소 공간과 이에 매칭하는 물리 주소 공간을 관리, 하드웨어 지원이 필요, 리눅스에서는 4kb로 페이징, 페이지 번호를 기반으로 가상 주소, 물리주소 매핑 정보를 기록, 사용
프로세스의 PCB(제어 블록)에 PageTable 구조체를 가리키는 주소가 들어있고, PageTable에는 가상 주소와 물리 주소간 매핑 정보가 있다.
페이징 시스템 구조
- page(frame) : 고정된 크기의 block = 4KB
- paging system : 가상주소 v = (p, d)
p : 가상 메모리 페이지
d : p안에서 참조하는 위치
ex ) 페이지 크기가 4kb일 때, 가상 주소의 0비트에서 11비트가 변위(d)를 나타내고, 12비트 이상이 페이지 번호가 된다.
PageTable
- 물리 주소에 있는 페이지 번호와 해당 페이지의 첫 물리 주소 정보를 매핑한 표
- 페이징 시스템 동작 : 해당 프로세스에서 특정 가상 주소에 접근 하기 위해
1 ) 해당 프로세스의 페이지 테이블에 해당 가상 주소가 포함된 페이지 번호가 있는지 확인 후
2 ) 페이지 번호가 있으면 이 페이지가 매핑된 첫 물리주소(p')를 알 수 있다. 실제 물리주소는(p'+d)
페이징 시스템과 MMU
CPU는 가상 주소 접근시 MMU 하드웨어 장치를 통해 물리 메모리에 접근하는데 프로세스 생성시, 페이지 테이블 정보를 생성한다.
- PCB 등에서 해당 페이지 테이블에 접근이 가능하고, 관련 정보는 물리 메모리에 적재할 수 있다.
- 프로세스 구동시, 해당 페이지 테이블 베이스 주소가 별도 레지스터에 저장된다.
- CPU가 가상 주소 접근시 MMU가 페이지 테이블 베이스 주소를 접근해서 매핑하여 가져옴
다중 단계 페이징 시스템
- 32bit 시스템에서 4kb페이지를 위한 페이징 시스템은 하위 12bit는 오프셋, 상위 20bit가 페이징 번호이므로 2의 20승 개의 페이지 정보가 필요함
- 페이징 정보를 단계를 나누어 생성함으로써, 필요없는 페이지는 생성하지 않으면 공간 절약이 가능하다
* 페이지 번호를 나타내는 bit를 구분해서 단계를 나눔
* MMU와 TLB
- 2, 3에서 시간이 많이 걸리므로 이를 줄이기 위해서 TLB가 나옴
- 저장된 물리 주소가 있는지 TLB에서 확인해봄
페이징 시스템과 공유 메모리
: 프로세스간 동일한 물리 주소를 가리킬 수 있음(공간 절약, 메모리 할당 시간 절약)
- 커널에서 공간이 중복적으로 들어가더라도 결국 가리키는 물리주소가 같을 수 있음
- 물리 주소에 데이터 수정 시도시, 물리 주소를 복사할 수 있음
요구 페이징
: 프로세스 모드 데이터를 메모리로 적재하지 않고, 실행 중 필요한 시점에서만 메모리로 적재함
- 선행 페이징의 반대개념
- 더 이상 필요하지 않은 데이터는 저장 매체에 저장
페이지 폴트
: 어떤 페이지가 실제 물리 메모리에 없을 때 일어나느 인터럽트, 운영체제가 페이지 폴트가 일어나면 해당 페이지를 물리 메모리에 올림
* 페이지 폴트가 자주 일어나면? 실행되기 전에 해당 페이지를 물리 메모리에 올려야해서 시간이 오래걸림
* 페이지 폴트가 안 일어나게 하려면 ? 향후 실행, 참조될 코드, 데이터를 미리 물리 메모리에 올려야함(예측할 수 있을까?)
페이지 교체 알고리즘
- FIFO
- OPT(최적페이지 교체 알고리즘- 일반 OS에서는 구현 불가)
- 페이지 스왑 알고리즘(NUR-참조, 수정을 둬서 최근에 사용하지 않은 페이지부터 교체하는 기법)
- 페이지 교체 알고리즘(LRU) : 가장 오래전에 사용한 페이지를 교체
스레싱
: 반복적으로 페이지 폴트가 발생해서, 과도하게 페이지 교체 작업이 일어나 실제로는 아무일도 하지 못하는 상황
세그멘테이션 기법
: 가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할, 페이징 기법에서는 가상 메모리를 같은 크기의 블록으로 분할함
* 세그먼트 가상주소 v = (s, d) s는 세그먼트 번호, d는 블록 내 세그먼트의 변위
※ 패스트캠퍼스 [컴퓨터 전공자 따라잡기 온라인 완주바] 강의를 참고하여 작성하였습니다.
'Computer Science > 운영체제' 카테고리의 다른 글
13. 부팅 (0) | 2022.08.22 |
---|---|
12. 파일시스템 (0) | 2022.08.22 |
10.Thread (0) | 2021.12.14 |
09. 프로세스와 IPC (0) | 2021.08.01 |
08. 프로세스와 Context Switching (0) | 2021.08.01 |