IO-Lite: A Unified I/O Buffering and Caching System

Download Report

Transcript IO-Lite: A Unified I/O Buffering and Caching System

Operating System 2004 Nachos Project
2004 운영체제 프로젝트
Nachos
Assignment #3 :
Multiprogramming & System Call
2004. 4. 27
Due date(source code) : 2004. 5. 17 23:59
Due date(report) : 2004. 5.18 오후 1:00
1
Operating System 2004 Nachos Project
Introduction




관련 루틴 분석
멀티 프로그래밍 구현
프로세스 관련 시스템 호출 구현
파일 관련 시스템 호출 구현
2
Operating System 2004 Nachos Project
Related Files(1)
• Userprog/
–
–
–
–
userkernel.cc : 사용자의 응용 프로그램 실행하는 nachos kernel
addrspace.cc : address space 생성 및 application program load
syscall.h : system call들의 interface
exception.cc: Exception handler가 구현. System call, exception,
interrupt를 처리
• Machine/
– translate.cc: virtual address를 physical address로 translate
– machine.cc: hardware를 software로 emulation
– mipssim.cc: MIPS instruction simulation code
3
Operating System 2004 Nachos Project
Related Files(2)
• Test/
– start.s : stub code for handling system call ( assembly language )
– halt.s: system call Halt()를 부르는 test program
– shell.s: shell program code
• Filesys/
– filesys.h: “stub” file system (“#ifdef FILE_STUB” ~ “#else” 이전 부
분)
• Lib/
– sysdep.cc: “stub” file system에서 사용하는 routine들 구현
4
Operating System 2004 Nachos Project
Source Analysis(1)
• User program execution routine 분석
– UserProgKernel, AddrSpace class를 중점적으로 분석
•
•
•
•
•
Physical memory(page) allocation method
User application loading method
User application loading sequence
Page table setup & management
Procedure for existing application
5
Operating System 2004 Nachos Project
Source Analysis(2)
• System Call 처리 routine 분석
– Machine::RaiseException, ExceptionHandler
•
•
•
•
System Call Halt()의 처리 과정
어떤 System Call을 수행하는지를 명시하는 방법
System Call 호출시, type 과 parameter 전달 방법
System Call을 처리한 후, Program counter의 값 증가 이유 ( ++4 )
6
Operating System 2004 Nachos Project
Multiprogramming구현
• Multiprogramming
– 현재는 uni-programming(UserProgKernel:Run())
• 모든 물리 메모리를 하나의 UserProcess가 독점
– AddrSpace class 수정
• 여러 process가 각각 서로 분리되고 독립된 address space를 가질
수 있도록 변경
– User Process의 Page-Table set up
– Physical page allocation method 의 design &
implementation
• Free page list, page usage bitmap design & implementation
• Program을 loading 할 때 이용
7
Operating System 2004 Nachos Project
Multiprogramming구현(cont’d)
• Notes
– 이번 프로젝트에서 수행되는 응용 프로그램들의 모든 page들은 모두
physical memory에 있다고 가정합니다. 즉, paging, swapping은 고려
하지 않습니다.
– Nachos user-process는 heap을 가지지 않습니다. 그래서, loading
time에 user-process의 address space의 정확한 크기를 알 수 있습니다.
– 응용 프로그램을 나타내는 SpaceId를 사용하기 위해 (UNIX에서 pid와 유
사) id를 unique하게 할당하는 메커니즘, 대응하는 thread를 찾는 방법,
id로부터 AddrSpace instance를 찾는 방법을 고려해야 합니다.
– 단순화를 위해 concurrent하게 수행되는 프로세스의 수에 제한을 줄 수
있습니다.
8
Operating System 2004 Nachos Project
Process 관련 System-Call 구현
• 다음 system call들을 구현
– int Exec(char* name)
– int Join(SpaceId id)
– void Exit(int status)
 Notice
 각 시스템 호출의 semantic에 대해서는 userprog/syscall.h 내
의 comment를 기준으로 함
9
Operating System 2004 Nachos Project
“stub” file system 분석
• Filesys/filesys.h
• FILESYS_STUB가 define되었을 때 사용되는 FileSystem class 분석
• File System을 구현하기 위해서가 아닌, File 관련 System call을 구현하
기 위한 test용으로 사용하는 것임
• Stub file system이 사용하는 routine들
( OpenForWrite,OpenForReadWrite, Unlink ... )들은 lib/sysdep.cc
file에 구현되어 있으며 이를 분석
10
Operating System 2004 Nachos Project
File 관련 System Call 구현
•
다음 System Call들을 구현. userprog/syscall.h에 기술된
syntax,semantics를 따른다.
–
–
–
–
–
void Create(char *name)
OpenFileId Open(char *name)
void Write(char *buffer, int size, OpenFileId id)
int Read(char *buffer, int size, OpenFileId id)
void Close(OpenFileId id)
11
Operating System 2004 Nachos Project
File 관련 System Call 구현
• Notes
– 각 user process 에서 OpenFileId는 unique합니다.(cf. SpaceId is
unique in kernel) 이를 위해서 user process의 각 address space는
unique한 OpenFileId table을 가져야 합니다.
– ConsoleIn, ConsoleOut: predefined OpenFileId
• Keyboard로부터 사용자 입력을 받아들이거나 모니터에 message를 출력하
기 위해 필요한 것입니다. ConsoleInput과 ConsoleOutput은 OpenFileId 0
번과 1번을 차지하게합니다. 이는 마치 Linux에서 File list 0번과 1번에
console device를 넣어주는 것과 유사합니다.
• SynchConsole Class는 사용하지 않음
– User virtual address에 접근하기 위한 routine을 구현해야 합니다. 이것
은 data를 kernel address space에서 user address space로 복사하기
위해서, 또 이와 정반대의 경우를 위해 Read, Write안에서 사용됩니다.
*buffer 인자는 user space의 address를 point합니다.
12
Operating System 2004 Nachos Project
Test Program 작성
• test/ : shell과 기타 test 프로그램
– test를 위해 간단한 test 프로그램들을 사용
• Test program, test routine은 추가, 변경 가능
• multiprogramming 과 file handling 각각에 대해 테스트 할 수 있도록 작성
• Test 주안점
– 구현된 시스템 호출들이 제대로 동작하는가?
• 시스템 호출이 kernel을 종료 시키지 않도록 주의
– 여러 프로세스들이 concurrent하게 수행되는가?
13
Operating System 2004 Nachos Project
Guidelines
• 결과는 조별로 받습니다
• 결과는 소스코드와 보고서로 나뉩니다.
• 구현을 위해 수정한 code는 e-mail을 통해 제출하고, 보고서의 장수는
20장으로 제한합니다.
• 반드시 주석을 달아주기 바랍니다.
• 수정한 소스의 앞뒤에는 다음과 같은 lines을 추가합니다.
#if(n)def CHANGED
….
#endif
• 보고서는 2004년 5월 18일 오후 1시까지 302동 311-2호의 숙제 제출
함에 제출합니다.
•
14
Operating System 2004 Nachos Project
Guidelines(cont’d)
• 소스 코드는 수정한 file만 제출합니다.
• 예를 들어 code/threads/thread.cc와 thread.h 그리고
/userprog/addrspace.cc 를 수정했다면 thread directory와
userprog directory를 만들고 threads directory안에 수정한
thread.cc 와 thread.h , userprog directory안에 addrspace.cc를
넣고 압축을 합니다.
• 따라서 숙제 검사시 /code directory에서 압축을 풀면 올바른 위치에
압축이 풀리도록 합니다. 압축 파일의 이름은 [조이름]_proj3.tar.gz
( ex : os049_proj3.tar.gz )입니다.
– tar czvf os049_proj3.tar.gz *
• 이렇게 압축한 파일은 2004년 5월 17일 23:59시까지
[email protected]로 제출합니다.
15
Operating System 2004 Nachos Project
보고서 양식
• 과제의 개요 및 팀 구성원의 작업 분담 내용(구체적으로)
• 기존 루틴의 분석
– 자료 구조 분석
– 기능의 요약 및 필드 정의 설명
– 주요 함수의 분석
• arguments, global variable, local variable
• 함수의 기능 설명
– 각 구현 루틴에 대해서
• 설계 및 디자인
• 루틴에 대한 설명
– test program
• 설명 및 실행 방법
• 수행 결과를 변경/추가 부분과 관련하여 설명
16