WIL/스터디

Virtual Memory

아크리미츠 2024. 8. 23. 16:34

가상메모리란 무엇인가?

물리 메모리(RAM)에 한계가 있기 때문에 이를 보완하기 위해 만든 것이 가상 메모리입니다. HDD나 SSD의 자원을 끌어다써서 메모리 공간을 추상화시켜 OS가 자신의 메모리가 마치 무한한 것처럼 사용할 수 있게 해줍니다.

 

1. 페이지

페이지는 가상 메모리에서의 기본 단위입니다. 운영 체제는 각 프로세스에 가상 메모리 공간을 제공하며, 이 가상 메모리 공간은 일정한 크기의 페이지로 나뉩니다. 페이지는 프로세스가 사용하는 메모리 블록을 의미하며, 가상 주소 공간에서 특정 범위의 주소를 나타냅니다.

2. 프레임

프레임은 물리 메모리(RAM)에서의 기본 단위입니다. 물리 메모리는 프레임이라는 고정된 크기의 블록으로 나누어져 있으며, 각 프레임은 가상 메모리의 페이지와 매핑됩니다.

3. 페이지 테이블

페이지 테이블은 가상 메모리 주소와 물리 메모리 주소를 매핑해서 RAM에 저장됩니다. 그래서 CPU가 메모리에 접근할 때, 페이지 테이블을 참조해서 해당 주소에 대응하는 물리 메모리 주소를 찾습니다. PintOS 주차에 SPT를 해시 구조로 만들어 직접 구현해 봤습니다.

4. 페이지 폴트

메모리 영역이 스택이라면 스택 영역을 초과했던가, 물리 메모리 주소가 없던가 작성이 금지된 페이지에 접근했던가, 유저 모드에서 커널 페이지에 접근했던가 하는 문제가 있으면 페이지 폴트가 발생하게 됩니다.

5. 스왑

물리적 메모리가 부족하면 현재 사용하지 않는 페이지를 보조 저장 장치로 Swap Out 시키고, 필요한 페이지를 Swap In 시킵니다. 이를 통해 메모리가 무한한 것처럼 사용할 수 있게 됩니다. Pintos 주차에 비트맵을 통해 현재 사용중인 페이지를 구분하여 Swap In/Out을 구현했습니다.

6. COW

시간이 남아 Extra 과제인 Copy on Write를 진행했었는데, 프로세스를 포크할 때, Read만 한다면 굳이 새로운 페이지를 만들 필요가 없으므로 부모와 같은 물리 페이지를 매핑만 해놓고 사용하다가 추후에 Write를 시도할 때 새로운 물리 페이지를 할당해 주는 기능이었습니다.

 

그런데 자식 프로세스를 종료할 때 PML4를 같이 파괴하게 되는 데, 이때 부모의 페이지를 수정한 적이 없다면 같은 물리 페이지를 참조하고 있기 때문에, 해당 kva를 파괴해버려서 부모가 접근했을 때 fault가 뜨는 문제가 발생했습니다.

 

그래서 처음에는 모든 pml4 삭제를 막고 OS를 종료할 때 pml4를 한번에 삭제하는 방식으로 해결했으나, 이는 OS가 종료되기 전에 메모리 누수가 계속 발생하기 때문에 근본적인 해결책이 아니라고 판단해서 이를 위해 여러가지 시도를 했습니다. 그러다가 마지막에 채택한 방식은 프로세스가 종료될 때 pml4의 destroy를 막고 pml4를 clear만 시켜서 kva의 연결만 끊은 상태로 만들어 재가용하게 돌려줬습니다. 그리고 나중에 OS가 종료될 때 kva를 destory 시켰습니다.

 

+ 가상메모리는 클수록 좋을까?

가상 메모리는 보조 저장 장치을 사용하기 때문에, 아무래도 RAM보다 성능이 현저히 낮습니다. 그러다보니 디스크에서 확보해둬야하는 공간이 커지기 때문에 낭비가 심해질 수 있습니다. 대신에 적당히 크다면 내 RAM이 수용할 수 있는 용량보다 더 많은 프로그램을 동시에 실행할 수 있습니다.

 

+ RAM이 용량이 거의 무한하면 가상메모리는 사용할 필요가 없을까?

메모리 확장기능은 필요 없어지겠지만, 프로세스간의 메모리 격리와 공유라던가 메모리를 효율적으로 관리하기 위해서, 그리고 레이지 로드를 위해서도 가상메모리는 사용을 해야합니다.

 

+ 가상메모리가 부족하면 어떤 문제가 발생할까?

프로세스가 응답 없음이 뜨거나 프로그램 실행을 실패할 수 있고, 시스템 반응이 느려집니다. 만약 가상 메모리가 꽉차서 시스템이 더 이상 아무것도 할 수 없다면 블루스크린이 뜰 것입니다.

'WIL > 스터디' 카테고리의 다른 글

인터넷 지식  (1) 2024.08.27
Thread & Process  (0) 2024.08.25
Malloc Lab  (0) 2024.08.25
Pintos Extra Questions  (0) 2024.08.22
Red-Black Tree Extra Questions  (0) 2024.08.21