0. 전체 구조 파악
run 파라미터를 처리하는 부분을 찾아본다.
run 명령어는 사용자 프로그램을 실행시키기 위해 사용된다.run 명령어를 해석하는 부분에서 스레드를 생성하고 유저 프로그램을 로드하는 과정이 시작된다.1. 자식 프로세스 실행 제어 및 동기화 (Process Control & Synchronization)
2. 프로세스 인자 파싱 (Argument Parsing)
run echo arg1 arg2와 같은 명령어를 처리할 때 echo, arg1, arg2를 각각 분리해야 한다.❗️주의:64bit 아키텍쳐와 32 bit 아키텍쳐는 function call 하는 방식 자체가 다름
- 32bit: argument를 stack에 값까지 다 넣게 되어있음
- 64bit: argument를 레지스터에 넣음
3. 프로세스 생성 및 종료 (Process Creation and Termination)
fork(), exec(), wait() 등 시스템 콜을 구현하여 프로세스 생명 주기를 관리한다.추가 정보
- Hex dump로 실행 중인 프로그램의 데이터 분석 가능
- 유저가 prinft를 구현해야만 테스트 가능
- parent, child 프로세스 생성 중에 인터럽트가 발생해도 문제없도록 동기화 필요
Pintos의 인프라와 스레드 패키지에 익숙해졌다면 이제 사용자 프로그램을 실행할 수 있도록 시스템을 확장할 차례입니다. 기본 제공 코드는 이미 사용자 프로그램을 로드하고 실행하는 기능을 지원하지만, I/O나 상호작용은 아직 불가능합니다. 이번 프로젝트에서는 시스템 호출을 통해 사용자 프로그램이 운영체제와 상호작용할 수 있도록 구현해야 합니다.
이 과제는 userprog 디렉토리를 중심으로 작업하지만, Pintos의 거의 모든 다른 부분과도 상호작용하게 됩니다. 이 문서에서는 관련된 부분들을 설명합니다.
Project 2는 Project 1 위에서 구축되어야 하며, 비록 Project 1의 코드가 직접적으로 Project 2의 코드에 영향을 주지는 않지만, Project 1의 테스트 케이스들을 통과해야 합니다. 이는 단계적으로 완성해 나가는 프로젝트이기 때문입니다.
Project 2에는 추가 도전 과제가 있습니다. 이 구현은 선택 사항이며, 제공되는 스켈레톤 코드는 없고, 테스트 케이스만 제공됩니다. 설계는 전적으로 본인이 직접 해야 합니다. 추가 도전 과제를 제출하고 테스트하려면 userprog/Make.vars 파일을 수정해야 합니다.
TODO가 없다고 해서 코드 수정을 하지 않아도 된다는 의미는 아닙니다.