[OS] Kaist Pintos project 2(USER PROGRAMS) 후기

piopiop·2021년 2월 18일
0

OS

목록 보기
2/3

1. Argument Passing

유저 프로그램을 실행하기 위해서는 cmd line에서 실행할 프로그램의 이름과 인자들을 parsing 하고 레지스터와 스택에 passing 해야한다.
argc와 argv의 시작 주소를 스택에 쌓았었는데 제대로 실행이 되지 않았다.
스택에 쌓는 대신 rdi와 rsi에 넣어야 한다는 것을 뒤늦게 알게 되었고 문제를 해결할 수 있었다.

2. User Memory

유저는 커널 영역에 직접 접근할 수 없다. 따라서 유저가 접근하려고 하는 영역이 유저 영역인지 커널 영역인지 확인을 해야한다.

3. System Calls

유저는 커널 영역에 직접 접근할 수 없다. 하지만 유저가 커널의 기능이 필요한 상황이 있을 수 있다.(파일을 열때, fork를 할 때 등) 이때 유저 프로그램이 커널 기능을 사용할 수 있도록 하는 것이 system call이다.
exit, halt, wait, fork 등의 system call을 구현하는데 수많은 어셈블리어들과 마주쳐 어려움이 있었다.
이제 어셈블리어를 약간 이해할 수 있는 정도가 되었는데 좀 더 공부가 필요하다고 느꼈다.


중간중간 돌려볼 수 있는 테스트가 없었던 것이 가장 힘들었던 것 같다.
제대로 하고 있다는 확신 없이 반 이상을 구현하고 나서야 테스트 케이스들을 돌려볼 수 있었는데 그래도 무사히 마칠 수 있어서 다행이다.

어떻게든 구현은 했지만 아직도 개념적으로 많이 부족하다고 느낀다. 어떻게 보완할 수 있을지는 고민이다.

profile
piopiop1178@gmail.com

0개의 댓글