[OS] Kaist Pintos project 3(VIRTUAL MEMORY) 후기

piopiop·2021년 5월 4일
0

OS

목록 보기
3/3

가상메모리란?

실제 물리메모리를 추상화해 각 프로세스에게 가상 주소를 제공하는 메모리 관리 기법을 말한다.

각 가상 주소들은 MMU(Memory Management Unit)에서 물리 주소로 변환되게 된다.

실제 물리 메모리는 OS가 알아서 관리해줄 것이기 때문에 각 프로세스들은 그냥 가상 메모리 공간만 생각하면 된다.

같은 데이터를 공유하는 것이 아니라면 각 프로세스의 동일한 가상 주소는 실제로는 다른 물리 주소를 가리키고 있다.

1.Memory Management

가상 주소에 데이터를 저장하게 되면 가상 주소와 그 가상 주소에 대응되는 물리 주소가 프로세스의 page table에 저장된다.

이후에 가상 주소에 저장된 데이터에 접근할 때는 page table에서 대응되는 물리 주소를 찾고 그 물리 주소에 접근해 데이터를 가져온다.
이때 대응되는 물리 주소가 없다면 앞으로도 자주 보게 될 page fault가 일어난다.

page fault가 일어났다면 SPT(Supplemental Page Table)에서 이 가상 주소에 대응하는 페이지를 찾는다.

(*SPT는 프로세스가 메모리에 올라갈 때 지금 당장 필요한 부분만 올리고 나머지는 그 데이터에 접근해 page fault가 일어날 때 올리는 Lazy Loading을 위해 필요한 table이다. SPT에는 가상 주소와 그 주소에 올라가야 할 데이터에 관한 정보가 저장되어있다.)

SPT에 대응되는 정보가 없다면 존재하지 않는 데이터에 접근한 것이기 때문에 에러가 발생하고, 대응되는 정보가 있다면 그 데이터를 물리 주소에 올려준다.

2.Stack Growth

스택 영역에서 page fault가 일어나면 스택을 늘려준다!
이때 스택 시작점의 주소와 스택의 크기를 고려해 스택 영역인지 확인을 잘 해주어야한다.

3.Memory Mapped Files

MMAP란 디스크의 저장되어있던 파일의 정보를 메모리에 올리는 System Call이다.
이때도 굳이 지금 사용하지 않을 데이터를 메모리에 올려 메모리를 낭비할 필요는 없기 때문에 lazy loading 방식으로 메모리에 올려준다.
MUNMAP은 메모리에 올라가있던 파일의 정보를 메모리에서 해제하는 것이다. 이때 파일의 변경 사항을 디스크에 저장되어 있는 파일에 적용해준다.

4.Swap In/Out

메모리는 한정적이다. 따라서 물리 메모리 공간이 가득 찼을 때 사용하지 않는 데이터들을 디스크로 이동시켜 물리 메모리에 사용 가능한 영역을 만들어줘야한다. 이 과정을 Disk Swapping이라 한다.

이때 Swap되는 데이터의 타입에 따라 필요한 과정이 다르다.
File type의 데이터는 그냥 Disk에 저장되어있는 file을 읽어 Swap In 하면 되고, Disk에 저장되어있는 file에 변경사항을 적용해 Swap Out 하면 된다.
Anon type의 데이터는 기존에 Disk에 저장되어있던 데이터들이 아니기 때문에 이 데이터가 Disk에 어느 영역에 저장되어있는지 확인할 수 있는 table(Swap Table)을 만들어 관리한다.
Swap In 될 때 데이터가 저장된 영역을 Swap Table에 저장하고, Swap Out 될 때 데이터가 저장된 영역에 접근해 데이터를 다시 꺼내온다.


미루고 미루던 pintos 3주차 후기를 드디어 작성했다.
다시 생각해봐도 참 말도 안되게 재밌으면서 열심히 정글에서 시간을 보낸 것 같다.
이제 준비는 마쳤으니까 진짜 개발자가 되는 일만 남았다!

profile
piopiop1178@gmail.com

0개의 댓글