오늘까지 이론공부를 하고 내일부터 구현을 시작하기로했다. 하지만 보면 볼수록 늪에 빠지는 느낌이고 감을 잡기가 어려워서 저녁식사 이후 바로 구현을 하려했다.
우리 팀은 git book순서에 따라 하기로 했는데, 첫 시작은 Memory management로 supplementa_page_table_init()
부터 만들어야 한다. 이는 먼저 보충 페이지 테이블을 어떤 자료구조로 구현할지 정하는 것으로, process.c의 init_d()
나 __do_fork()
에서 프로세스를 만들 때 사용된다.
vm을 구현하기 위해서 1, 2주차에 구현했던 코드를 그대로 들고와서 사용하면 된다. 하지만 말처럼 쉽지 않았다. 먼저, 팀이 섞였기에 누구의 코드를 base로 잡고 구현할지 정해야했고, 친구한명의 도커, 형은 aws(t2.large), 나는 asw(t2.micro)였는데, 모두 같은 코드임에도 나만 multi-oom이 fail이였다.
후에 코드를 보니 process_fork
에 sema_up()
이 빠져있었다.
if(child->exit_status == TID_ERROR){
sema_up(&child->exit_sema); // 추가
return TID_ERROR;
}
다른 사람들이 된게 신기하다.. 메모리 크기나 설정별로 결과가 달라지는걸 새삼 느꼈다.
그래도 미미한 차이일 줄 알았는데(복잡도차이 정도?) 아예 결과가 달라버리니 어이가 없으면서도 모르고 넘겼으면 후에 문제가 생겼을 때 더욱 대처하기 어려웠을 것이라 생각하니 다행이였다.
잠시 자택주변에 갈 일이 생겨서 주말에 본가에 들릴 예정이다. 예상치 못한 일이라 팀원들에게 양해를 구하고 자택에서 구현을 하기로 했다.