
🎯 1. 키워드 공부
🎯 2. 테스트 케이스
108 of 141 passed
진행률 : 50%
끝나지 않을 것 같던 정글도 Pintos 를 지나서 이제 나만무 하나만을 남겨두고 있네요.
처음 알고리즘 문제를 풀 때만 해도 5달이 엄청 길다고 생각했는데 벌써 얼마남지 않았습니다.
이번 VM은 좀..어려워서 Stack Grow 까지 밖에 구현하지 못했고 mmap에 대가리 박다 가 그냥 마지막 날이 되버렸네요.. 이제 Pintos 끝나면 LLM 해제되니까 정글 선배들의 블로그와 LLM을 번갈아 사용하면서, 나머지 테스트케이스들도 따로 공부해야겠습니다. 그래도..예쁘게 웃어넘길래 ^^!
저번 User Program에 이어서 이번에는 VM 면접 질문입니다.
2주동안 열심히 만들었던 VM을 생각하며 질문에 대답해보아요
가상 메모리의 개념은 멀티 프로그래밍 (CPU코어는 실제로 한 번에 하나의 인스트럭션만 실행하지만 마치 프로그램을 동시에 실행하는 것처럼 보이는 것 ) 기법에서 나온 개념인데요.
프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법입니다. 만약 가상메모리가 없다면 물리 메모리의 크기보다 큰 프로그램은 실행할수가 없어요.
가상메모리를 사용하게 되면
단점으로는 물리메모리에서 바로 구동시키는 것 보다는 속도가 느리다는 단점이 있어요.
그리고 구현도 좀 어렵습니다..!
요구 페이징은 프로그램이 실행될 때, 프로그램 전체를 물리 메모리에 적재하는 대신 필요할때만 물리메모리에 적재하는 방법이예요.
우리가 Pintos의 lazy_loading 함수를 구현했던 거 기억나시나요?
VM_UNINIT타입으로 페이지를 초기화하고 실제로 그 가상주소영역이 호출될 때만 초기화 함수를 통해 Page와 Frame을 매핑시켜줬었죠. 그게 바로 요구페이징 방식입니다!
그때 그때 필요한 페이지가 물리 메모리에 없는 상황을 페이지 부재(Page Fault)라고 하는데요!
페이지 폴트가 일어났을 때, 필요한 페이지를 물리 메모리에 할당해줘야 하지만 물리 메모리가 모두 사용중이라 더 이상 할당하지 못하는 상황에서 페이지 교체가 일어나요.
물리메모리의 프레임 중 하나를 골라서 스왑디스크에 넣고
스왑디스크에서 필요한 프레임을 물리메모리에 할당해줍니다.
FIFO - 가장 오래된 페이지를 교체한다.
LFU - 가장 사용빈도가 적은 페이지를 교체한다.
등 다양한 알고리즘이 있습니다.
쓰레싱이 뭐냐면용.
필요한 페이지가 물리 메모리에 없을 때 페이지폴트가 일어나고 필요한 페이지를 교체해주는 페이지 교체작업이 일어나는데요.
페이지 폴트가 과도하게 일어나서 CPU가 실제 프로그램을 실행하는 시간보다 페이지 교체에 더 많은 시간을 소비하는 상황을 쓰레싱이라고 해요.
전체 시스템 성능이 급격하게 저하되죠.
프로세스를 과하게 많이 실행하거나, RAM 용량이 부족하거나 혹은 우리가 페이지 교체 알고리즘을 적절히 짜주지 못했다면 일어날 수 있어요.
간단하게 4가지 정도만 정리해봤는데요.
제가 미처구현하지 못한 mmap이나 swap에서 질문이 나올수도 있어서 과정이 끝나고나면 따로 공부해보려고 해요.
다들 화이팅입니다.