728x90
Virtual address
- virtual address space : 프로세스 내의 주소 표현을 논리적으로 나타냄
- 0으로 시작하여 연속적으로 표현
- demand paging
- 프로세스의 필요한 페이지만 필요할 때 할당하는 것
- I/O가 덜 필요하거나 아예 쓸 필요가 없음
- page fault
- logical memory에서 page table 접근 시 invalid한 경우
- 다른 page table을 참조하게 되는 경우
- demand paging 단계
- 레지스터와 프로세스 상태 저장
- page fault로 인한 인터럽트 여부 확인
- page table의 valid 여부, page 위치 확인
- 저장소에서 frame으로 read 요청
- 요청을 큐에 할당
- 장치의 seek/latency time동안 대기
- page를 free frame으로 전송
- 대기 중일 때는 CPU는 다른 사용자에게 할당
- demand paging 시의 EAT
- 주된 동작 : 인터럽트 서비스, page read, process restart
- page fault rate p를 가정 (p=0 : no page fault)
- EAT = (1 - p) * 메모리 접근 + p * (page fault overhead + swap In + swap Out)
Copy on Write
- 프로세스 fork 시 부모 - 자식 프로세스가 같은 page를 공유하게 하는 것
- 자식 프로세스 생성 시에는 프로세스 공간을 복사하지 않음
- 한 쪽의 프로세스가 write 동작 시 page 복사가 일어남
- page replace
- page의 과한 할당을 방지
- page overhead를 줄이기 위한 modify(dirty) bit 사용 - 수정된 page만 write
Page replace
- 제한된 메모리 상의 process 할당 시 page 전환이 필요
- 여유 공간이 없을 경우 page를 전환하여야 함
- page replace 단계
- page 할당이 필요할 때, free frame을 탐색
- free frame이 없을 경우, 제거될 frame(victim frame)을 선택
- victim frame은 저장소로 swap out / 필요 데이터는 그 자리로 swap in
- replace algorithm
- frame - allocation : 프로세스당 프레임을 얼마나 할당할지, 어떤 프레임을 재할당할지
- page - replacement : page fault rate를 최소한으로 하도록
- reference string : 접근한 page 기록을 저장하여 replace 알고리즘에 사용
- FIFO
- 가장 먼저 들어온 page를 replace
- page fault는 10번 발생 (처음부터 계속 page가 없어 replace함)
- belady's anomaly : frame 수가 늘어나면 오히려 page fault가 많아질 수 있음
- Optimal algorithm
- 가장 오래 사용될 페이지는 유지
- Least Recently Used(LRU)
- 가장 사용되지 않은 데이터를 교체
- 미래를 예측하는 Optimal과 달리 과거 데이터를 활용
- second chance algorithm
- FIFO와 유사
- reference bit가 0이면 교체
- reference bit가 1이면 0으로 변경
- enhanced second chance
- (reference, modify)로 2개 bit 할당
- (0, 0) : replace
- (0, 1) : replace 전에 메모리 write
- (1, 0), (1, 1) : 다음 접근 시 replace
- ex. (1, 1) > (0, 1) > (0, 0) - 3번의 반복을 통해 victim frame이 됨
Buddy System

- allocater를 이용한 메모리 할당
- Slab : 1개 이상의 연속된 page
- 캐시는 하나 이상의 Slab로 구성
- prepaging
- page fault 방지를 위해 미리 page 할당
- program 구조
- 2차원 array int[a, b]를 가정
- 각 row에는 page가 저장됨
- 위 코드는 col마다 접근하기 때문에 a * b번의 page fault가 발생하나, 아래 코드는 page fault가 row 개수만큼만 발생
for(j=0;j<a;j++)
for(i=;i<b;i++)
data[i, j]=0
for(i=;i<b;i++)
for(j=0;j<a;j++)
data[i, j]=0
- I/O Interlock
- 프로세스가 I/O 장치를 접근할 때, 해당 프로세스가 swap되는 경우
- 프로세스는 물리적 주소가 할당되기 전이지만, 데이터는 여전히 입력되어야 하는 상태가 됨
- 이로 인한 문제를 방지하기 위해 프로세스의 해당 page를 swap되지 못하도록 함 (Pinning)
728x90