운영체제
Swapping 기법
멀티 프로그램, 편의성 등의 이유로 실제 메모리보다 더 많은 메모리가 필요하다
디스크에 있는 모든 프로세스의 페이지를 메모리에 올릴 수 없다
> 가상 메모리의 역할
- 모든 페이지들은 물리 메모리에 매핑되어야 한다
- 물리 메모리는 한정적이다
- 현재 사용하는 페이지만 올리는 것이 효율적이다
현재 사용하지 않는 페이지를 디스크로! Swapping
메모리가 한정적이니
스왑 공간
Swap space
- 실제 메모리에 올라가지 않은 페이지들을 위한 디스크 공간
- 두개의 operation
- Swap out
- 실제 메모리에서 swap space로 페이지를 옮긴다
- Swap in
- swap space에서 메모리로 페이지를 옮긴다
OS는 swap space에 있는 모든 페이지들의 디스크 주소
를 기억해야함
스왑 공간을 사용하면 실제 존재하는 메모리보다 더 많은 공간이 있는 것처럼 보임
- 언제 페이지들을 swap out 하는가?
- 어떤 페이지가 swap out되는가?
- 메모리에 페이지가 없으면 어떡하는가?
언제 페이지가 swap out?
- free 메모리 < low watermark(미리 정해놈)
- free 메모리가 high watermark와 같아질 때 까지 swap out을 한다
ex
low watermark = 2 high watermark = 3 free watermark = 1
free가 low보다 낮음 => swap out 2개 => free= high swap 멈춤
메모리에 페이지가 없으면?
페이지 폴트
-> 페이지가 swap in -> 페이지 있음
--
메모리가 참조되는 과정
- 가상주소에서 VPN을 추출 후 TLB에 정보가 있는지 검사
- hit
- miss
- 하드웨어는 페이지 테이블의 메모리 주소를 파악(PTBR 사용)
- VPN을 인덱스로 하여 PTE 추출
- PTE가 유효, 페이지가 물리 메모리에 존재한다면(present bit 이용)
- PTE에서 PFN추출 후 해당 정보 TLB에 갱신
- 명령어 재 실행
- TLB HIT
--
Present Bit
- 각 페이지 테이블은 present bit를 지닌다
- 1: 페이지는 실제 메모리에 있다
- 0: 페이지는 swap space에 있다
페이지 폴트 swap in
페이지 폴트가 일어나면
- OS의 페이지 폴트 핸들러는 페이지를 swap in 한다
- I/O작업(페이지 폴트) 시, 프로세스는 block 상태가 된다
- 페이지 폴트 처리시 OS는 다른 프로세스들을 실행할 수 있다
페이지 폴트가 발생하면 페이지 폴트 핸들러가 처리를 한다
- 요청된 페이지가 메모리에 없고, 디스크로 스왑되었다면?
- OS는 해당 페이지를 스왑공간에서 메모리로 스왑해온다
원하는 페이지의 위치를 어떻게 파악?
페이지의 스왑 공간상에서의 위치
를 페이지테이블에 저장
과정
1. 프로세스가 페이지 요청
1. present bit를 보니 해당 페이지가 swap space에 있음
2. page fault 발생
3. 해당 프로세스 block
- 폴트로 인한 exception이 발생했으니, 해당 page가 swap in될 때까지 blcok
- 다른 프로세스 작동
- 페이지 swap in
- PTE 업데이트
- 정상 실행
페이지 폴트 처리
- 가상주소에서 메모리 요청
- TLB 미스
- PTE 접근
- PTE가 유효하지만, 물리 메모리에 존재 X -> 페이지 폴트
- OS가 페이지가 어디있는지 스왑공간을 확인
- 스왑공간에서 페이지를 가져옴
- 페이지 테이블 갱신
- TLB 미스
- 페이지 테이블 참조해서..
- TLB 갱신
- TLB HIT
교체는 언제 일어나는가
OS는 메모리가 완전히 채워질 때까지 기다렸다가 다른 페이지를 위한 공간을 확보하기 위해 페이지를 대체한다.
비현실적
- OS는 항상 어느 정도의 여유 메모리 공간을 확보해야한다
OS는 high watermark(HW), low watermark(LW)를 이용해 페이지 swap에 사용한다.
이때 swap하는 백그라운드 스레드가 실행된다.
이를 스왑데몬, 페이지 데몬이라고 부른다
Swap Daemon, Page Daemon
- 여유공간이 LW보다 작다면, 백그라운드 스레드가 메모리를 비우려고 동작
- 스레드는 여유 페이지가 hw가 될 때까지 페이지들을 제거함
메모리 계층
- 메모리 계층
- 서로다른 용량, 성능의 메모리들을 구조화해 빠르고 용량이 큰 메모리를 가지는 것과 같은 일루전을 제공
- OS는 현재 수요가 많지 않은 주소 공간의 일부를 저장해야 한다.
cpu->레지스터->캐시->메인메모리->저장소