- Pintos와 그 내부 구조, 그리고 스레드 패키지에 익숙해졌으니, 이번에는 사용자 프로그램 실행을 가능하게 하는 부분을 다룰 차례
- 기본 코드에는 이미 사용자 프로그램을 로드하고 실행할 수 있는 기능이 있지만, 입출력(I/O)이나 상호작용은 아직 불가능. 이번 프로젝트에서는 시스템 콜을 구현하여 프로그램이 운영체제와 상호작용할 수 있게 할 것
- 이 과제는
userprog 디렉터리에서 작업하며, Pintos의 거의 모든 부분과도 상호작용하게됨
기본 사항
- Project 2는 Project 1 결과물 위에서 빌드
- Project 1의 코드가 직접적으로 Project 2의 코드에 영향을 주지는 않지만, Project 1의 테스트를 모두 통과해야함(단계적 프로젝트이므로)
추가 도전 과제(Optional Extra Challenge)
-
Project 2에는 선택적으로 구현할 수 있는 추가 도전 과제가 존재
해당 부분에는 제공되는 스켈레톤 코드가 없고, 테스트 케이스만 제공 → 따라서 설계와 구현은 전적으로 여러분의 몫
-
추가 요구사항을 제출하고 테스트하려면 userprog/Make.vars를 수정해야함
코드 수정 가능 범위
- 코드에
TODO가 없다고 해서 반드시 수정이 필요 없는 것은 아님
- Project 2에서는 테스트 코드만 제외하고, 다른 모든 소스 코드를 자유롭게 수정 가능
배경
지금까지 실행한 모든 코드는 운영체제 커널의 일부. 예를 들어, 지난 과제에서 실행한 테스트 코드도 모두 커널 내부에서 실행되었으며, 커널의 모든 권한을 사용했었음
그러나 이번 과제에서는 **사용자 프로그램(user program)**을 운영체제 위에서 실행. 이때는 상황이 달라짐 :
- 여러 개의 프로세스를 동시에 실행 가능해야 함
- 각 프로세스는 하나의 스레드만 가짐 (멀티스레드 프로세스는 지원하지 않음)
- 사용자 프로그램은 마치 자기 혼자 컴퓨터 전체를 쓰는 것처럼 착각해야 함
- 따라서 여러 프로세스를 실행할 때 운영체제가 메모리, 스케줄링 등을 관리하여 이런 착각이 유지되도록 해야 함