KOCW.이화여자대학교.반효경.운영체제
위 강의를 바탕으로 학습 및 정리했습니다
Virtual memory
Demand Paging
-
프로그램의 코드들은 대부분 방어적
-> 거의 대부분이 사용안됨
-> 모든 코드들을 메모리에 올리는건 비효율적
-
Demading paging을 사용하면 필요한 부분(코드)만 메모리에 올라감
-> I/O 양 감소, 물리적 메모리 사용량 감소
-> 현대 컴퓨터 환경(멀티 프로그램 환경)
-> 더 많은 사용자, 프로그램이 메모리에 올라갈 수 있음
-> 효율적, 더 빠른 응답 시간
Memory에 없는 Page의 page table
-
G,H 는 사용되지 않는 주소
-> invalid, Swap area엔 없음
-
물리적 메모리에 올라가지 않는 페이지(invalid)는 disk의 swap area에 내려가있음
-
disk에 있는 invalid 페이지 접근하려면 disk에서 가져와야함 (page fault : 사용하려는 코드 메모리에 없는 상황)
-> I/O작업
-> CPU 운영체제로 넘어감
Page Fault
Steps in Handling aPage Fault
- page fault의 빈도에 따라 처리 시간에 영향을 줌
- p : page fault 발생 비율
Free Frame 없는 경우
Page replacement
- victim 결정되면 디스크로 쫒아냄
- 근데 메모리에서 victim에 write가 발생된 경우
victim 쫒아낼 때 변경된 내용을 저장해줘야함
- write 없엇으면 그냥 쫒아내면 됨
Optimal Algorithm
-
page fault를 가장 적게 만드는 알고리즘
-
reference string 이미 알고있다는 가정하에
가능한 알고리즘
-> 실제 시스템에서 사용 불가 ㅜ
-
쫒아낼 때 가장 먼 미래에 참조될 페이지를 쫒아냄
이 뒤부턴 미래를 모르는 상태에서 운영하는 알고리즘
FIFO Algorithm
- 일반적으로 메모리 늘려주면 성능이 좋아져야 하는데
이놈은 메모리 늘려주면 page fault 더 많이 발생해서 성능이 나빠질 수도 있음
LRU Algorithm
- 메모리 관리에서 가장 많이 쓰이는 알고리즘
- 가장 오래전에 사용된거 쫒아냄
- 마지막 참조 시점만 봐서 이전 참조 기록을 보지 않음
-> 이전에 엄청 많이 사용했던거고 미래에도 엄청 사용할 페이지를 쫒아낼수도 있음
LFU Algorithm
- 참조 횟수가 가장 적은 페이지를 쫒아냄
- 이제 막 사용을 많이 하려는 페이지를 쫒아낼 수도 있는 단점 존재
LRU / LFU 예제
- LRU
- 마지막 참조 시점만 봐서 이전 참조 기록을 보지 않음
-> 이전에 엄청 많이 사용했던거고 미래에도 엄청 사용할 페이지를 쫒아낼수도 있음
- LFU
- 이제 막 사용을 많이 하려는 페이지를 쫒아낼 수도 있는 단점 존재
LRU / LFU 구현
- LRU
- 참조 시간 순서로 나열해서 관리 / 참조 될 때마다 맨 아래로
- 맨 위의 페이지가 가장 사용한지 오래된 거니까
맨 위 페이지 쫒아냄
-> 매번 victim을 결정하기 위해
시간을 비교해볼 필요가 없음
- LFU
- 사용횟수 만큼 나열하는 방식으로 구현하면 매번 비교가 필요함 (O(n))
-> heap을 이용해서 구현 (O(log n), 100번 비교에서 20~30 회로 줄어듬)
다양한 캐슁 환경
-
교체(replacement) 알고리즘은 다양한 환경에서 사용됨
-> 통칭 캐슁(빠른공간에 어떤 걸 저장하고 쫒아낼 것인가)
-
한정된 빠른공간 -> 예) 메모리
-
캐쉬 메모리가 메인 메모리보다 더 한정되고 빠른 공간
-
buffer caching
- 파일 시스템에서 한정된 빠른공간(디스크의 파일 시스템)에 보관해서
다음번에 다시 요청됐을 때 재사용을 빨리하기 위한 캐슁
-
하나의 컴퓨터 시스템 안에서 각 매체들의 속도차이를 완화하기 위해 사용
-
Web caching
- 웹 페이지를 읽어와서 브라우저에 띄울 때
첫트 후에 하드 디스크에 저장해놓고
같은 페이지를 다시 띄울 땐 멀리있는 서버에서 가져오는 것이 아닌 첫트에 받아놓은 내용을 바로 띄움
Paging System에서 LRU, LFU 가능한가?
Clock Algorithm
- 네모 : page
- 네모안의 값 : reference bit
- reference bit = 0 인 페이지를 쫒아냄
- reference bit = 0 인 페이지가 사용한지 가장 오래된 페이지는 아님
== LRU 근사
- 시계바늘이 돌아가면서 1을 만나서 0으로 바꾸고 넘어감
- 0을 만나면 쫒아냄
- 와중에 또 사용되면 1로 바뀜
즉, 바늘이 한바퀴 돌때까지 사용안된게 쫒아내짐
- modified bit
- page가 메모리 올라온 다음에 CPU가 write해서 수정하면 1이 됨
- 메모리 올라온 이후로 page가 수정되면 디스크에 수정된 걸 저장한 후 쫒아내야하기 때문에 사용
Page Frame의 Allocation
- 앞에서의 알고리즘들은 어떤 프로세스의 page인지 고려하지 않음
- Loop를 구성하는 프로세스 전용 page안주면 Loop돌 때마다 page fault가 발생할 것이기 때문에 어떤 프로세스인지에 대한 고려가 필요함
- Equal allocation
- Priority allocation
Global vs Local replacement
Thrashing Diagram
- x축 : 사용중인 프로그램 개수
- y축 : CPU사용률
- 뚝떨어지는 부분 Thrashing이 일어낫다 표현
- 프로그램 너무 많으면 각 프로세스에 할당 되는 메모리가 너무 작기 때문에
page fault가 계속 발생
-> CPU사용을 안하고 page fault 처리하는 상황만 발생해서 뚝떨어지는거
-> 근데 운영체제 입장에선 CPU가 놀고 있다고 판단하고 실행되는 프로세스 더 늘려도 된다 판단
-> 계속 I/O 작업만 하게되는 상황 반복
Thrashing
Working-Set Model
- Working Set을 이루는 page들에겐 무조건 메모리 보장해줌
- 나머지는 메모리 완전 반납하고 swap out
- 짜투리 공간받자고 메모리에 계속 남아있는 하남자 방식이 아님
Working-Set Algorithm
PFF Scheme
- PF 비율이 범위안에 들어오면 frame할당 멈춤
- 메모리에 올라와 있는 프로세스라도 비율 안에 있도록 관리
Page Size의 결정
-
page size 작으면 장점
-
page size 작으면 단점
- Page fault의 자주 발생
-> Dist transfer 효율 감소
- Locality의 문제
- Locality: 어떤 메모리가 사용되면 인접 위치가 사용될 확률이 높은 성질
- 당장 요청 안되는 걸 가져오면 좋음