170 likes | 916 Views
2004 Nachos Project. Project #2 : Build a Thread System Due date : 2004. 04.20. Introduction. Nachos 의 code/threads/ directory 에는 아직 불완전한 thread system 이 있습니다 . 이번 project 에는 이 thread routine 을 분석하고 , synchronization 과 scheduling 과 관련한 새로운 function 을 추가함으로써 thread system 을 완성하는 것입니다.
E N D
2004 Nachos Project Project #2 : Build a Thread System Due date : 2004. 04.20 Distributed Computing System Laboratory
Introduction • Nachos의 code/threads/ directory에는 아직 불완전한 thread system이 있습니다. • 이번 project 에는 이 thread routine을 분석하고, synchronization과 scheduling과 관련한 새로운 function을 추가함으로써 thread system을 완성하는 것입니다 Distributed Computing System Laboratory
Assignments • Thread관련 루틴 분석 (20) • Alarm::WaitUntil구현 (10) • Thread::Join구현 (10) • Thread Scheduling구현 (60) • Round-Robin Scheduling (20) • Priority Scheduling (30) • Test & Evaluation (10) Distributed Computing System Laboratory
Thread 관련 루틴 분석 threads nachos userprog lib network machine test bin filesys Distributed Computing System Laboratory
Thread 관련 루틴 분석 • Files • Thread, Alarm, Timer, Scheduler, Interrupt, Stats, Semaphore 등 • 그 외의 클래스들도 필요할 경우 간략히 관련 부분만 설명 • Focus • Thread 의 생성에서 소멸까지의 경로 • SWITCH(), StackAllocate() 분석 • sleep에서 interrupt disable을 호출하는 이유 • Alarm, Timer, Interrupt 의 관계 • Semaphore와 Condition variable과의 관계 • Nachos에서 시간의 흐름을 처리하는 방법 • Real world time, Simulated time, kernel time 사이의 관련을 중심 Distributed Computing System Laboratory
Alarm::WaitUntil 구현 • Alarm::WaitUntil(x) • 현재 시간에서 x time 이 경과할 때까지 함수를 호출한 thread를 block함 • x 는 Timer tick 단위로 표시 • x Timer tick 이상이 경과하면 해당 thread는 ready 상태로 전이 • 구현 : block된 thread들의 리스트를 만들고 timer interrupt 발생 시 마다 timer tick이 x 이상 지났는지 검사한다 Distributed Computing System Laboratory
Thread::Join 구현 • Thread::Join() • UNIX 의 wait() 과 유사하게 동작 t1 Constructed & forked by t1 t2 (child of t1) t2가 종료될 때까지 block됨 t2.join() t2 실행 종료 return from join • 이미 종료되었으면 바로 return • t1이 join을 호출하지 않을 수도 있음 Distributed Computing System Laboratory
Thread Scheduling 구현 • Round-Robin Scheduling 구현 • 실행 가능한 thread들은 FIFO 큐에서 대기 • queue의 첫번째 thread가 실행 • Priority Scheduling with preemption구현 • 운영 체제 교재 21장 The Linux System의 Scheduling part 참조 • Understanding Linux Kernel 의 Scheduling part 참조 • Goodness 값이 큰 순서대로 scheduling • Goodness = priority + counter • Priority : static priority (setPriority, getPriority에 의해 변경 가능) • Counter : CPU 사용량 반영, 매 timer interrupt 마다 1 감소 • Counter가 0이 되면 scheduling 수행 • 모든 ready thread의 counter가 0인 경우 모든 thread의 counter 재계산 Distributed Computing System Laboratory
Thread Scheduling Test • 테스트 • 테스트 루틴을 Thread::SelfTest() 에 구현 • Test 방법 • 각 thread는 Computation, I/O가 교대로 수행되는 것으로 modeling • Computation : interrupt disable interrupt enable 반복 • I/O : Alarm:WaitUntil() 사용 • e.g. <10, 5> thread • Computation-bound, I/O-bound thread 들이 조합된 thread set들에 대해 test • e.g. <20, 0>, <20, 0>, <5, 15>, … • Join 구현을 확인하기 위해 임의의 process가 child를 fork 하고 Join 한다 … computation I/O computation I/O computation I/O 10 tick 5 tick Distributed Computing System Laboratory
Guidelines • 이번 project 부터 결과는 조별로 받습니다. • 결과는 소스코드와 보고서로 나뉩니다. • 구현을 위해 수정한 code는 e-mail을 통해 제출하고, 보고서의 장수는 10장으로 제한합니다. • 수정한 소스의 앞뒤에는 다음과 같은 lines을 추가합니다. #if(n)def CHANGED….#endif • 보고서는 2004년 4월 20일 정오까지 302동 311-2호의 숙제 제출함에 제출합니다. Distributed Computing System Laboratory
Guidelines • 소스 코드는 수정한 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에서 압축을 풀면 올바른 위치에 압축이 풀리도록 합니다.압축 파일의 이름은 [조이름]_proj2.tar.gz ( ex : os049_proj2.tar.gz )입니다. • tar czvf os049_proj2.tar.gz * • 이렇게 압축한 파일은 2004년 4월 20일 0:00시까지 os2004@dcslab.snu.ac.kr로 제출합니다. Distributed Computing System Laboratory
보고서 양식 • 과제의 개요 및 팀 구성원의 작업 분담 내용(구체적으로) • 기존 루틴의 분석 • 자료 구조 분석 • 기능의 요약 및 필드 정의 설명 • 주요 함수의 분석 • arguments, global variable, local variable • 함수의 기능 설명 • 각 구현 루틴에 대해서 • 설계 및 디자인 • 루틴에 대한 설명 • test program • 설명 및 실행 방법 • 수행 결과를 변경/추가 부분과 관련하여 설명 Distributed Computing System Laboratory