[회고록] Kaist-PintOS Project 2: User Program

emplam27·2021년 2월 18일
0

프로젝트

목록 보기
4/5

학사측의 요청으로 코드는 공개하지 않습니다!

21.02.04 ~ 21.02.17

Kaist-PintOS 중 User Program 프로젝트의 Argument Passing, User Memory, System Call을 구현하는 프로젝트였습니다. OS가 어떻게 프로그램을 실행하는지 알 수 있는 시간이었습니다.


어려웠던점

  1. 여러가지 상황에서 많은 예외들이 발생하고, 그 예외들을 꼼꼼히 체크하는 것이 어려웠습니다. 여러가지 테스트 케이스들에서 제공하는 예외들뿐만 아니라 추가적으로 케이스를 생각해 내는 일이 생각보다 쉽지 않았습니다. 몇시간동안 디버깅하던 작업이 한가지 예외처리로 해결한 경우가 종종 있었습니다.

  2. 커널영역과 유저영역, 각각의 스택과 모드, 메모리와 페이지, 레지스터 등 직접적인 하드웨어 지식이 많이 필요했습니다. 함수로 전달되는 인자들이 어떻게 스택에 저장되는지, 레지스터에 저장되는지 등과 더불어 시스템콜에서 해줘야 할 일이 굉장히 많구나를 알게된 시간이었습니다.


배운점과 성과

  1. fork와 같이 반환값이 여러개인 특이하고 중요한 개념을 알 수 있는 시간이었고, 이로 인해서 발생하는 여러가지 상황들을 해결하며 많은 공부를 하게된 것 같습니다. 테스트 케이스들을 해결하면서 하나하나 부족한 부분들을 보완해나가는 경험이 실제 프로그래밍을 하는 경험과 유사할 것 같다는 생각을 하였습니다.

  2. OS의 가장 중요한 역할인 프로그램을 실행하는 과정에 대해 알게된 시간이었습니다. 시스템콜의 역할과 컨텍스트 스위칭으로 커널모드와 유저모드를 넘어가는 과정까지 공부하면서 OS의 정수를 공부한 기분이었습니다. 해당 부분은 개발자가 되어서도 끝까지 가져가야할 중요한 개념임을 많이 느낀 시간이었습니다.


앞으로 해보고 싶은 공부

깊은 부분까지 알기 위해서는 직접직인 하드웨어 공부가 필요함을 느꼈습니다. 기회가 된다면 기본적인 어셈블리어와 레지스터에 대해 공부하는 시간을 가져볼까 합니다.

profile
내가 다시 보고 싶은 글이어야 남들도 보고 싶은 글이라 생각하며 작성합니다. 공부한 내용들을 건강하게 공유하며 함께 성장하고자 합니다😊😊

0개의 댓글