스스로 부족한 것을 채우기 위한 학습 기록입니다. 부족함을 알고 채워나가려 노력하고 있습니다. 피드백은 언제나 환영합니다.😺
해당 포스팅은 참고란의 블로그와 동영상의 내용이 많이 참고되어 작성 되었습니다.
컴파일러가 동작하는 과정에서 코드들의 주소를 준다. 이 때 코드의 메서드와 변수들을 심볼릭 주소, 컴파일러가 변환 시킨 숫자주소를 논리 주소라고 한다.
논리 주소를 가상 주소라고도 하고 논리 주소에 숫자를 붙여서 만든 주소를 물리 주소라고 한다.
동작하고 있는 프로세스는 가상 주소만 보며 동작하는데 이때 실제 데이터는 가상 메모리에 있지 않고 물리메모리에 있다.
실제 데이터를 처리하기 위해서는 가상 주소에서 물리 주소로의 변환 과정이 필요한데 이 때 가상 주소를 물리 주소로 변환하는 page table을 사용한다. 또한 MMU(Memory Management Unit)이 가상주소를 물리주소로 변환하는 일을 수행한다.
요약
1. 현대 메모리는 Paging을 베이스로 한 기법을 채택
2. 하드 디스크를 Swap area로 활용한다
3. MMU, TLB 같은 하드웨어의 지원을 받아 page table을 확인핟고 메모리를 참조한다.
물리메모리 + Swap 공간 = 가상 메모리
-> 결국 Swap 공간에서 Page를 꺼내려면 OS의 도움이 필요함.
Page fault: TLB에 없는 페이지를 찾을 때는 OS가 하드디스크가 swap 공간에서 Page를 가져오고 TLB에도 등록한다(valid bit와 같이)
물리 메모리의 frame이 가득차게 되면 기존 frame을 차지한 page 중 하나를 내쫓게 됨. 이를 Page replacement라고 한다.
어떤 page를 replace할지는 OS가 결정. 이 때 Clock Algorithm을 사용하는데 가장 오랫동안 참조되지 않은 페이지는 찾아낼 수 없지만 가장 최근에 참조된 페이지는 피할 수 있다. Reference Bit을 Page table에 추가하고 page table에 dirty bit을 추가함.-> 하드디스크에 변경사항을 반영하고 Page table에 기록하는 것 모두 OS가 함.
Thrashing: 메모리만 일을 하고 CPU는 놀고 있을 때 OS가 프로세스를 추가.
Thrashing을 해결하기 위해 Working-set Algorithm과 Page Falut Frequency Algorithm(줄여서 PFF)을 사용한다.
Working-set Algorithm은 대부분의 프로세스가 일정한 페이지만 집중적으로 참조한다는 것을 참고하여 특정시간동안 참조되는 페이지의 개수를 파악하고 그 페이지 수만큼 프레임이 확보되면 그 때 페이지들을 메모리에 올린다.
PFF는 Page Falut 퍼센트에 상한과 하한을 둬서 상한선을 넘으면 지급하는 프레임의 개수를 늘리고 하한을 넘으면 줄인다. 남는 프레임이 없으면 프로세스 단위로 페이지들을 통째로 쫓아낸다.
https://www.youtube.com/watch?v=qxmdX449z1U
https://wogh8732.tistory.com/395