pintos project 2
이게 핀토스구나 싶었다.
문제를 해결하기 전에는 어디가 문제인지 조차 몰라서 정말 막막했다.
자잘한 문제들도 많았지만 아주 크게 우리 팀을 괴롭힌 문제 위주로 기록하려한다.
로컬 환경에서 돌리면 알 수 없는 에러가 곳곳에서 터진다.
아직까지도 왜 로컬에서 돌리면 에러가 발생하는지 정확한 원인은 알아내지 못했다. 확실한 사실은 wsl에서 돌리면 kernel panic이 발생하는 문제들이 aws에서 돌리면 정상적으로 실행된다는 것이다.
system call을 통해서 리턴받은 값은 R.rax에 저장해놓아야한다.
사실 정말 당연한 얘기다ㅠㅠ 리턴값을 저장해놓지 않으면 이어지는 다음 명령을 진행할 때 rax에서 이전 함수의 리턴값을 가져와야하는데 문제가 생길 수 밖에 없다.
fork를 통해서 생성한 자식이 예외를 만나서 죽으면 죽었다는 사실을 부모에게 알려야한다.
이 부분을 고려하지 못해서 마지막 oom에서 한참 고생했다. 더 디테일한 부분에서 에러가 났긴 했지만 자식이 생성되지 못하고 에러를 반환한 경우와 자식이 생성됐지만 자식의 활동(do_fork)을 수행하다가 에러를 만나서 비정상적으로 죽었을 때 부모에게 알려야한다.
테스트 파일을 적극 활용하자
exec syscall을 구현할 때 테스트 파일을 열어보고 나서야 예상과 전혀 다른 흐름으로 테스트가 진행된다는 것을 알게되었다. 어떻게 구현할지 방향을 잡을 때 테스트 파일을 통해서 힌트를 얻는 과정이 도움이 많이 되는 것 같다.