핀토스 - Argument passing, File management, Process management
*지*
다운로드
장바구니
소개글
1.1. Argument passing프로그램 수행 시 파일 이름과 함께 Command line argument들을 Parsing해 프로그램에 넘겨주도록 하는 과제
1.2. File management
파일 관리를 위한 table을 구성하고 시스템 콜 인터페이스와 핸들러를 적절하게 연결해주도록 함
1.3. Process management
Process들 간의 상호작용과 자원 관리 등을 위해서 Process relationship을 구성하고 동기화를 수행하는 과제
각각의 해당 과제에 대해 디자인과, 코드, 테스트, 실행화면까지 충실하게 담았습니다.
핀토스 과제에 많은 도움을 줄 수 있을 것입니다.
목차
1. 과제 개요1.1. Argument passing
1.2. File management
1.3. Process management
2. 디자인
2.1. Argument passing
2.2. File management
2.3. Process management (Process Table, Process Relationship, Wait, Exit, Exec)
3. 구현
3.1. Argument passing
3.2. File management
3.3. Process management (Wait, Exit, Exec)
4. 테스트
4.1. 테스트 프로그램 설명 및 실행 방법
4.2. 테스트 프로그램의 구성
5. 테스트 및 결과
5.1. Child-simple
5.2. Wait-simple
5.3. Wait-twice
5.4. Open-bad-ptr
5.5. Open-normal
5.6. Read-bad-ptr
5.7. Read-normal
5.8. Write-bad-ptr
5.9. Write-normal
5.10. Arg-pass
본문내용
2.1. Argument passing파일 이름뿐 아니라 다른 command line argument들도 프로그램의 인자로 넘어갈 수 있도록 하기 위해서는 파일 이름과 인자가 포함된 문자열을 파싱한 뒤 이를 실행될 프로그램의 스택에 push해야 한다.
이를 위해 파일 이름만을 인자로 받아 해당 프로그램을 실행하던 process_execute 함수를 수정하여 command line에 입력된 파일 이름과 인자가 포함되어 있는 문자열을 인자로 받도록 했다. process_execute에서 execute_thread 함수를 실행하며 파일 이름과 인자가 포함되어 있는 문자열을 인자로 넘기면 execute_thread 함수에서는 이를 파싱한 뒤 스택 메모리 영역을 확보하는 등의 준비 작업을 수행하여 실행될 프로그램을 적재한다. intr_frame 구조체의 멤버 esp 포인터를 사용해 실행될 프로그램의 스택 메모리 영역에 접근하여 파싱한 argument들을 push한다. 이 때 인텔 x86 calling convention을 따르도록 했다. 이후 핀토스 커널은 인터럽트를 통해 프로그램을 실행하게 된다.
2.2. File management
우선 열려 있는 모든 파일들에 대한 정보를 저장할 자료구조와 각 프로세스가 열어놓은 파일들에 대한 정보를 저장할 자료구조가 필요하다. 이를 위하여 list 타입의 open_file_table과 open_file_list를 만들었다. open_file_table은 pintos의 부팅 이후부터 프로세스들에 의하여 열린 모든 파일들에 대한 정보를 저장하고 있다. 각 프로세스는 open_file_list를 가지고 있어 여기에 자신의 연 파일들에 대한 정보를 저장한다. 각 프로세스는 파일을 읽거나 쓸 때 open_file_list를 통하여 자신이 열어 놓은 파일에만 접근할 수 있다. File descriptor는 초기값 3에서부터 시작하여 새로 열린 파일은 바로 직전에 열린 파일의 file descriptor보다 +1이 된 값을 갖게 된다.
System call은 interrupt routine을 통하여 구현되는데 우리가 해야 할 일은 사용자에게 보이는 system call 함수들과 커널 내부에서 실제로 그 system call에 대한 작업을 수행해주는 함수들을 연결해주는 일이다. 이 때 이 두 함수들 사이의 인자 전달은 스택을 통하여 이루어진다. 따라서 우리가 구현하는 syscall_handler에서는 스택으로부터 올바른 위치에서 올바른 타입으로 인자를 꺼내 와서 올바른 함수에 전달해주는 것이 중요하다. (esp + 0)에는 system call number가 들어있다. 이 값을 확인하여 적당한 system call 함수로 연결해 줄 수 있다. 그 다음 인자들은 (esp + 4), (esp + 8), … 에 들어 있고 타입에 알맞게 casting을 하여 사용해야한다.
잘못된 파일로의 접근과 같이 파일과 관련한 system call의 처리에서 주의해야 할 사항들이 몇 가지 있는데 이러한 에러들에 대한 검출과 처리 역시 위의 syscall_handler에서 수행한다.
참고 자료
없음이 자료와 함께 구매한 자료
- Pintos Project 2,3,4 0페이지
- kpu 운영체제(OS) Pintos프로젝트 보고서 8페이지
- Pintos(핀토스) 설치과정 및 과제수행 16페이지
- OS team project 35페이지