sw 사관학교 정글 2

PintOS - Project3 - Virtual Memory

가상 메모리에 대한 이해 가상 메모리 영역은 실제 물리메모리 크기에 비해 매우 크다. 실제로 핀토스는 x86-64기반이라 64비트 체계를 사용하는데, 주소표현에는 총 48bit를 사용한다. 즉 가상메모리의 최대 크기는 2^48 = 256TB에 달한다는 것을 알 수 있다. 그런데 놀랍게도 현재 핀토스에게 단 20MB만의 물리메모리를 할당했는데도 불구하고 프로그램이 잘 돌아간다. 아래의 그림은 핀토스에서 가상 메모리(왼쪽)와 실제 물리 메모리(오른쪽)를 나타낸 모식도이다. 가상메모리 덕분에 유저(프로그램)는 마치 자신이 대용량의 사적인 메모리를 가지고 있다고 착각하고 있다. 그러나 실제로는 유저들마다 유저영역이 존재하고, 혼자서 메모리를 무한정 사용하지도 않는다. CPU는 MMU에게 가상주소를 전달하고 물리..

PintOS - Project2 - UserProgram

열흘동안 PintOS project2를 구현었다. 이 과정에서 특별히 어려웠거나 중요하다고 생각하는 부분을 간단히 소개하겠다. 1. System Call이 호출되는 과정 우리는 userprog/syscall.c에서 system call handler와 여러 system call함수들을 구현하여 시스템콜이 돌아가도록 만들었다. 처음에는 system call 함수가 호출되면 곧바로 내가 만든 함수가 호출된다고 생각했지만 그게 아니었다. 가장 처음은 lib/user/syscall.c에 있는 함수가 호출된다. 예를들어 fork()를 호출하면 우리가 만든 userprog/syscall.c에 있는 fork()함수가 곧바로 호출되는 것이 아니라 lib/user/syscall에 있는 fork()함수가 호출된다. 이 함..