단, 프로젝트 기간 전에 소스 코드가 변경될 가능성이 있으므로, 레포지토리를 복제해 두는 것을 추천합니다. 템플릿 코드를 변경할 경우, 여러분은 코드를 쉽게 템플릿과 동기화할 수 있습니다. 절대로 퍼블릭 포크를 생성하지 마십시오. 프로젝트 기간 중에는 템플릿 코드에 치명적인 버그가 발견되지 않는 한 소스 코드를 변경하지 않을 것입니다.
소스 코드를 가져온 후, Pintos 루트 디렉토리에서 아래 명령어를 실행하여 환경을 설정하십시오:
$ source ./activate
`$ source ./activate`
홈 디렉터리의 .bashrc 파일에 이 명령어를 추가하는 것이 좋습니다. 그렇지 않으면, 매번 로그인할 때마다 이 명령어를 입력해야 합니다.
...
...
@@ -21,27 +21,27 @@ $ source ./activate
디렉토리 안의 내용을 확인해 봅시다. pintos/ 디렉토리에서 확인할 수 있는 디렉터리 구조는 다음과 같습니다:
-threads/: 기본 커널의 소스 코드가 포함되어 있으며, 프로젝트 1부터 이 코드를 수정하게 됩니다.
•threads/: 기본 커널의 소스 코드가 포함되어 있으며, 프로젝트 1부터 이 코드를 수정하게 됩니다.
-userprog/: 사용자 프로그램 로더의 소스 코드가 포함되어 있으며, 프로젝트 2부터 이 코드를 수정하게 됩니다.
•userprog/: 사용자 프로그램 로더의 소스 코드가 포함되어 있으며, 프로젝트 2부터 이 코드를 수정하게 됩니다.
-vm/: 거의 비어 있는 디렉터리입니다. 프로젝트 3에서 가상 메모리를 이곳에 구현하게 됩니다.
•vm/: 거의 비어 있는 디렉터리입니다. 프로젝트 3에서 가상 메모리를 이곳에 구현하게 됩니다.
-filesys/: 기본 파일 시스템의 소스 코드가 포함되어 있습니다. 프로젝트 2부터 이 파일 시스템을 사용하지만, 프로젝트 4까지는 수정하지 않습니다.
•filesys/: 기본 파일 시스템의 소스 코드가 포함되어 있습니다. 프로젝트 2부터 이 파일 시스템을 사용하지만, 프로젝트 4까지는 수정하지 않습니다.
-devices/: I/O 장치를 인터페이스하는 소스 코드가 포함되어 있습니다 : 키보드, 타이머, 디스크 등. 프로젝트 1에서 타이머 구현을 수정합니다. 그 외에는 이 코드를 변경할 필요가 없습니다.
•devices/: I/O 장치를 인터페이스하는 소스 코드가 포함되어 있습니다 : 키보드, 타이머, 디스크 등. 프로젝트 1에서 타이머 구현을 수정합니다. 그 외에는 이 코드를 변경할 필요가 없습니다.
-lib/: 표준 C 라이브러리의 일부를 구현한 코드가 포함되어 있습니다. 이 디렉터리의 코드는 Pintos 커널에 컴파일되며, 프로젝트 2부터는 Pintos에서 실행되는 사용자 프로그램에도 사용됩니다. 이 코드는 수정할 필요가 거의 없습니다.
•lib/: 표준 C 라이브러리의 일부를 구현한 코드가 포함되어 있습니다. 이 디렉터리의 코드는 Pintos 커널에 컴파일되며, 프로젝트 2부터는 Pintos에서 실행되는 사용자 프로그램에도 사용됩니다. 이 코드는 수정할 필요가 거의 없습니다.
-include/lib/kernel/: Pintos 커널에만 포함되는 C 라이브러리의 일부가 들어 있습니다. 비트맵, 이중 연결 리스트, 해시 테이블과 같은 데이터 타입 구현이 포함되어 있으며, 커널 코드에서 자유롭게 사용할 수 있습니다. 커널에서 이 디렉터리의 헤더는 #include <...> 형식으로 포함할 수 있습니다.
•include/lib/kernel/: Pintos 커널에만 포함되는 C 라이브러리의 일부가 들어 있습니다. 비트맵, 이중 연결 리스트, 해시 테이블과 같은 데이터 타입 구현이 포함되어 있으며, 커널 코드에서 자유롭게 사용할 수 있습니다. 커널에서 이 디렉터리의 헤더는 #include <...> 형식으로 포함할 수 있습니다.
-include/lib/user/: Pintos 사용자 프로그램에만 포함되는 C 라이브러리의 일부가 들어 있습니다. 사용자 프로그램에서는 이 디렉터리의 헤더를 #include <...> 형식으로 포함할 수 있습니다.
•include/lib/user/: Pintos 사용자 프로그램에만 포함되는 C 라이브러리의 일부가 들어 있습니다. 사용자 프로그램에서는 이 디렉터리의 헤더를 #include <...> 형식으로 포함할 수 있습니다.
-tests/: 각 프로젝트를 위한 테스트 코드가 포함되어 있습니다. 제출물 테스트를 위해 이 코드를 수정할 수 있습니다. 그러나 채점 시에는 원본 코드로 대체됩니다.
•tests/: 각 프로젝트를 위한 테스트 코드가 포함되어 있습니다. 제출물 테스트를 위해 이 코드를 수정할 수 있습니다. 그러나 채점 시에는 원본 코드로 대체됩니다.
-examples/: 프로젝트 2부터 사용할 예제 사용자 프로그램이 포함되어 있습니다.
•examples/: 프로젝트 2부터 사용할 예제 사용자 프로그램이 포함되어 있습니다.
-include/: 헤더 파일 (*.h) 의 소스 코드가 포함되어 있습니다.
•include/: 헤더 파일 (*.h) 의 소스 코드가 포함되어 있습니다.
### Pintos 빌드하기
...
...
@@ -61,4 +61,4 @@ $ source ./activate
우리는 시뮬레이터에서 Pintos를 편리하게 실행할 수 있는 pintos라는 프로그램을 제공합니다. 가장 간단한 경우로, pintos를 pintos 인자(argument)... 형태로 실행할 수 있습니다. 각 인자는 Pintos 커널에 전달되어 실행됩니다. 한번 실행해 보세요. 먼저 새로 생성된 build 디렉토리로 이동합니다(cd). 그런 다음 pintos run alarm-multiple 명령어를 실행합니다. 이 명령은 run alarm-multiple 인자를 Pintos 커널에 전달합니다. 이 인자에서 run은 커널에 테스트를 실행하도록 지시하고, 이때 alarm-multiple이 실행할 테스트입니다. Pintos는 부팅한 뒤 alarm-multiple 테스트 프로그램을 실행하며, 이는 몇 화면 분량의 텍스트를 출력합니다.
명령줄(command line)에서 리디렉션을 사용하여 시리얼 출력을 파일에 기록할 수도 있습니다. 예시: pintos -- run alarm-multiple > logfile. pintos 프로그램은 qemu 또는 가상 하드웨어를 구성할 수 있는 여러 옵션을 제공합니다. 옵션을 지정하려면 커널에 전달할 명령어보다 앞에 작성해야 하며, 옵션과 명령어는 --로 구분해야 합니다. 따라서 전체 명령은 pintos 옵션... -- 인자... 형태가 됩니다. pintos를 인자 없이 실행하면 사용 가능한 옵션 목록을 확인할 수 있습니다. 옵션에는 VM 출력 방식을 설정하는 기능이 포함되어 있으며, -v를 사용하여 VGA 출력을 비활성화하거나, -s를 사용하여 표준 입력(stdin) 및 표준 출력(stdout)으로의 시리얼 입출력을 억제할 수 있습니다. Pintos 커널은 run 명령 외에도 다양한 명령어와 옵션을 제공합니다. 지금 이것들은 크게 중요하지 않지만, -h를 사용하여 목록을 확인할 수 있습니다. 예: pintos –h
명령줄(command line)에서 리디렉션을 사용하여 시리얼 출력을 파일에 기록할 수도 있습니다. 예시: `pintos -- run alarm-multiple > logfile`. pintos 프로그램은 qemu 또는 가상 하드웨어를 구성할 수 있는 여러 옵션을 제공합니다. 옵션을 지정하려면 커널에 전달할 명령어보다 앞에 작성해야 하며, 옵션과 명령어는 --로 구분해야 합니다. 따라서 전체 명령은 pintos 옵션... -- 인자... 형태가 됩니다. pintos를 인자 없이 실행하면 사용 가능한 옵션 목록을 확인할 수 있습니다. 옵션에는 VM 출력 방식을 설정하는 기능이 포함되어 있으며, -v를 사용하여 VGA 출력을 비활성화하거나, -s를 사용하여 표준 입력(stdin) 및 표준 출력(stdout)으로의 시리얼 입출력을 억제할 수 있습니다. Pintos 커널은 run 명령 외에도 다양한 명령어와 옵션을 제공합니다. 지금 이것들은 크게 중요하지 않지만, -h를 사용하여 목록을 확인할 수 있습니다. 예: pintos –h