크래프톤 정글에 입소한 지 어느덧 15주 차가 되었다. 블로그에 글을 쓰는 것은 2주 만인 것 같다. 그동안 많은 일이 있었다. 나만무 프로젝트를 시작하기에 앞서 팀 리더를 뽑고 팀원을 매칭하는 것 이 14주 차의 일이었다면 15주 차는 아이디어를 선정하고 기획을 하고 발표를 하는 등 프로젝트의 시작에 대한 것들을 수행하는 주였다.팀리더가 되다.팀의 리더가 되었다. 사실 엄청난 비전이 있어서 그런 것은 아니었다. 다만 내가 주도적으로 팀을 이끌고 목표를 달성하는 것이 내가 끌려서 목표를 달성하는 것보다는 의미 있다고 생각을 하기 때문이었다.한 주가 지나고 든 생각은 "팀리더? 해보지 뭐!" 이런 생각을 하던 나를 제발 누가 멈춰줬으면 좋았을 것 같다는 것이다. 너무 힘이 든다. 물론 함께 하는 팀원들과..
이 전 포스팅까지 VM 과제에서 구현하라고 과제로 준 기능들을 구현을 완료했다. 하지만 User Program처럼 ALL PASS를 받을 수는 없었다. VM에서 ALL PASS를 받기 위해서는 Extra 과제인 Copy-On-Write 기능을 구현해야 ALL PASS를 받을 수 있다. 지금부터 Copy-On-Write가 무엇인지 알아보고 구현해 보겠다.Copy-On-Write 란?우리가 이 전까지 구현한 fork 와 VM 기능들은 fork가 일어날 때 부모를 복사한다. user program까지에서는 부모의 FD 정도를 복사하는 느낌이었다. 하지만 VM에서는 부모의 페이지를 복사하면서 새로운 프레임에 할당을 했다. 이 말은 부모와 자식이 내용상 같은 페이지와 프레임을 생성한 것이고 물리 메모리에 같은 데..
이제 남은 구현은 Swap In/Out 이 남았다. 메모리 스와핑은 물리 메모리의 활용을 극대화하기 위한 메모리 회수기법이다. 메인 메모리의 프레임들이 모두 할당되면 시스템은 유저 프로그램이 요청하는 메모리 할당 요청을 더 이상 처리할 수 없다. 이에 대한 해결 방법은 현재 사용되지 않고 있는 메모리 프레임들을 디스크로 스왑 아웃 하는 것이다. 이는 일부 메모리 자원들을 해제시켜서 다른 애플리케이션들이 이 자원들을 사용할 수 있게 해 준다.메모리는 고갈되었는데 메모리 할당 요청을 받았다는 것을 운영체제가 감지하면 swap 디스크로 퇴서(evict)시킬 페이지를 골라낸다. 그리고 메모리 프레임의 상태를 동일하게 디스크에 복사해 둔다.(스왑 아웃), 프로세스가 스왑 아웃된 페이지에 접근하려고 할 때, 운영체..
프로젝트 2에서 스택은 USER_STACK에서 시작하는 단일 페이지였다. 프로그램은 4KB로 제한하여 실행했다. 이제 스택이 크기를 초과하면 필요에 따라 추가 페이지를 할당한다.추가 페이지는 스택에 접근하는 경우에만 할당한다. 스택에 접근하는 경우와 아닌 경우를 구별해야 한다.User program은 스택 포인터 아래의 스택에 쓸 경우 버그가 발생하는데, 이는 일반적인 실제 OS가 스택의 데이터를 수정하는 시그널을 전달하기 위해 프로세스를 언제든지 중단할 수 있기 때문이다. 하지만 x86-64 PUSH 명령어는 스택 포인터를 조정하기 전에 접근 권한을 검사하므로, 스택 포인터 아래 8바이트에 대해서 Page Fault를 발생시킬 수 있다.구현 목표User Program의 스택 포인터의 현재 값을 얻을 수..