[pintOS] Project 3 : Virtual Memory

정우성·2021년 3월 27일
0

pintOS

목록 보기
3/3
post-thumbnail

What I did?

가상메모리의 가상이 왜 가상인지 깨닫게 됐다.
유저로 살아오면서 운영체제에게 제대로 속았다.
다시한번 운영체제의 transparent한 속성에 대해서 감탄을 했다.

1. Memory Magagement (ex. demaning paging)

  • 메모리는 한정적이다. 하지만 유저는, 정확히 프로세스는 메모리가 한정적인 것을 알게 해서는 안된다. 가상 메모리는 존재하지 않았다. 그렇기 때문에 "가상"메모리가 먼저 존재하고 이를 메모리에 넣는 것은 아이러니한 순서다.
    운영체제는 메모리의 일부를 프로세스에게 커널 영역과 유저 영역으로 할당 시켜준다. 좀 더 정확하게는 영역을 주는 것이 아니라 주소 범위를 주는 것이라고 생각한다. 유저 프로세스는 본인에게 부여받은 주소 범위 내에서 해당 주소에 값을 저장한다고 믿으면서 살아간다. 실제로는 그렇지 않다. 이 주소는 "가상"주소이고, "가상"주소공간이다.

  • OS는 어떻게 받아들이나? 프로세스가 해당 주소로 접근을 하면, 페이지 테이블이 메모리에 할당됐는지 확인한다. 이를 메모리에 할당 된 것을 보고 HIT 했다고 하고 이 HIT에 실패하면 그동안 많이 봤던 page fault가 발생했다고 한다.

  • 해당 주소공간의 비트 크기에 따라서 페이지의 크기를 결정할 수 있다.
    32 bit에서 4KB의 페이지 크기가 나오는 이유는 다음과 같다.
    32 bit 중 20bit를 주소를 나타내는데, 12 bit를 offset을 관리하는데 사용한다.
    이 때 12bit로는 (2^2) * (2^10) = 4 KB 크기의 페이지를 관리할 수 있다.
    그렇기 때문에 운영체제는 페이지 단위로 메모리를 관리한다.

2. Anonymous Page

  • 기존에 파일에 있지 않고(file mapping 되지 않고), 프로그래밍 도중 생성된 녀석들은 이름이 없다. 우리는 anonymous page라고 부른다. 이 친구들은 파일로부터 태어난 녀석들이 아니다. 이후에 RAM에서 disk로 돌아가는 순간에 이 녀석들은 disk와 처음 조우하게 될 것이다.

3. Stack Growth

  • 스택과 힙은 자란다고 배웠고 이 중 힙은 동적할당 된다고 배웠다. 스택은 프로그래밍 중에 자동으로 쌓이고 빠진다고 알고 있었다. 그렇다면 페이지 할당도 자동으로 됐을것이다. 나는 운영체제다. 유저가 알고 있던 "자동으로"를 해야하는 것이다.

  • OS마다 Stack 영역이 존재한다. Stack의 페이지 할당은 해당 영역의 page fault가 등장하면 할당하는 방식으로 진행된다. 대단한 녀석이다.

4. Memory Mapped File

  • 이 녀석들은 file 인데, memory에 바로 mapping 시킨 녀석들이다.

  • 이 녀석들을 조작하기 위해서 메모리 상에서 조작했다면, 바로 disk에 해당 변화를 써주지 않는다. 디스크는 멀고 느리다. 운영체제는 현명하고 효율적인 생각만 한다.

  • 결국 이들이 disk로 돌아가는 순간에 한꺼번에 disk에 쓴다는 것을 쉽게 유추할 수 있다.

5. Swap In / Out

  • RAM은 충분하지 않다. 그러면 우리는 RAM을 효율적으로 사용해야하고, RAM에 있던 페이지를 disk에 넣고 빼는 과정이 필수 불가결하다.

  • 이 과정을 Swap In / Out 이라고한다 disk에는 별도의 Swap disk가 존재한다. 이때, 무기명 페이지들은 swap disk로 들어가서 대기하지만, 파일로 존재했던 페이지들은 기존 store 공간에 변경된 채로 쓰여져서 잠시 대기(영원히 저장될 수도..)하고 있는다.

What I Feel ?

프로젝트 3주차를 진행하다가 임시저장되어있던 핀토스의 글을 마무리 지어보았다. 핀토스를 통해서 나는 내가 좋아하는 것을 깊게 파고 드는 것을 즐거워 한다는 것을 다시 느꼈다. 이 때, 내가 좋아하는 것은 결국 배우고 싶어하는 것이더라. 배우면서 강해진다는 것을 느끼는 것. 그것이 내가 좋아하는 것이라는 사실을 느꼈다.

4학년이 되기 전까지 나는 나를 궁금하면 알아보고 해결하는 것을 좋아하는 사람이라고 생각했다. 그러다 4학년 때, 졸업 프로젝트를 하면서는 파고드는 것에 흥미가 없는 사람이고, 결국 공부를 싫어하고 얕게만 알려고 하는 사람이다 라는 결론을 내렸다. 그 때 나 스스로를 약한 사람이면서 멋없는 사람이라고 단정지었고 괴로움을 많이 느꼈다.

이곳에서 나는 나를 다시 보기 시작했다. 내가 좋아하는 것이 있다. 알고 싶고 궁금하다. 그리고 이것이 호기심에 그치지 않음을 확인했다. 보다 깊게 알기 위해서 굵은 전공 서적과 원서를 읽는다. 계속해서 이 즐거움을 느끼고 싶다.

profile
정글맨

0개의 댓글