• 파일시티 이벤트
  • 캠퍼스북
  • LF몰 이벤트
  • 서울좀비 이벤트
  • 탑툰 이벤트
  • 닥터피엘 이벤트
  • 아이템베이 이벤트
  • 아이템매니아 이벤트

[컴퓨터공학] nachos Thread, Synchronization, Scheduling 분석

*윤
최초 등록일
2004.12.19
최종 저작일
2004.10
34페이지/한글파일 한컴오피스
가격 1,500원 할인쿠폰받기
다운로드
장바구니

소개글

정말 열심히 분석했습니다. 그냥 읽어만 봐도 nachos가 이해가 가실 거에요~

목차

1.
1) threads/threadtest.cc threadtest()에서 5개의 thread를 생성시키고 rs 옵션을 설정하여 nachos를 수행시키시오. rs 옵션을 설정하지 않았을 때와 결과를 비교하여 설명하시오
2) code/userprog에서 -c 옵션을 설정하고 nachos를 수행시키면 echo가 수행되고 문자 ‘q‘를 입력하게 되면 종료합니다. 이것을 문자 ‘q`가 아닌 문자열 `bye`를 입력했을 때 종료되게 수정하시오.(ConsoleTest() 함수내에서 수정을 하시오)
3) 위의 1),2)번 문제를 수행하다 보면 다음의 파일들을 보게 됩니다. 다음 파일들을 분석 하시오
code/thread :
thread.h, thread.cc
scheduler.h scheduler.cc
list.h list.cc
synch.h , synch.cc
code/machine :
interrupt.h , interrupt.cc
timer.h , timer.cc
stats.h , stats.cc

- thread 생성 및 종료
- 스케쥴링, context switching
- h/w timer
- interrupt : interrupt handler, interrupt enable, disable
- semaphore, lock
2. synch.h 에 정의되어 있는 Lock을 구현하고 설명하시오.
그리고 구현된 Lock을 테스트 하기위한 LockTest 라는 함수를 만들어서 현재 Lock을 잡은 thread, Lock을 놓은 thread를 화면에 출력하는 테스트 코드를 threadtest.cc 파일 에 추가하시오.
3. semaphore를 이용하여 producer consumer problem을 구현하시오.(교재참고)
threadtest.cc에 테스트 할 함수를 구현하고 main.cc에서 해당함수를 호출하게 구현하시 오. (20점)
(makefile에 PROCONSUMER를 define 하고 PROCONSUMER가 define되었다면 main.cc에서 SemTest()를 호출하면 됩니다. )
4. nachos에서 제공하는 scheduling을 Priority Scheduling으로 수정하시오. (20점)

Thread 및 Scheduler 클래스의 수정이 필요하고 단, Thread 생성 시 Priority를 설정하는 부분은 2개의 parameter를 갖는 constructor를 추가하거나 SetPriority(int priority) 함수를 추가하시오.
그리고 Priority Scheduling을 테스트 할 수 있는 코드도 추가하시기 바랍니다. 테스트 코드의 경우는 Thread Name, 현재 가지고 있는 우선순위 값 등의 정보를 출력해주는 코드이면 됩니다.
(makefile에 PRIORITYSCHED define하고 main.cc에서 본인이 작성한 함수 명을 호출하시오. 그리고 본인이 작성한 스케쥴링의 policy를 설명하시오.)

본문내용

nachos라고 실행화일명을 입력하면 먼저 initialize()에서 console, disk, timer와 같은 simulate hardware를 초기화하고 최초의 thread 하나를 생성한다. 다음으로 Threadtest()를 수행하면서 threadtest.cc로 theadsystem을 test하고 새로운 thread 하나를 더 생성하여 두 개의 thread가 실행된다.
많은 ready thread들 중에 단 하나의 thread만이 CPU를 점유할 수 있다. 이 실행될 thread를 고르는 일을 scheduler가 담당하는데, 이것이 scheduler.cc에 구현되어 있다. 이것들을 간단히 살펴보면 scheduler의 ReadyToRun()은 매개변수로 thread를 가지고 ready list에 tread를 넣는다. FindNextRun()은 ready list의 실행 준비 중인 thread들 중 실행될 thread를 고른다. Run()은 매개변수로 thread를 가지고 현재 실행 중이던 thread를 보류시키고, 다른 thread를 실행시키는 switching을 담당한다.
하나의 thread가 실행되는 중에, 다른 thread를 실행시키려면 interrupt 명령이 enable 되어야 한다. 이것은 functionptr()이라는 함수를 이용하여 구현한다. thread controller나 scheduler 안에서는 interrupt는 disable 된다.
thread는 종료되면서 소멸한다. thread.cc의 Finish()를 보면 thread는 종료할 때, 그 pointer를 threadToBeDestroyed라는 변수에 넘긴다. 그러면 scheduler는 다른 thread로 swich 시키며, stack area는 다른 것으로 바뀐다. Scheduler.cc의 Run()을 보면 실행 중이던 thread는 threadToBeDestroyed라는 변수를 확인하고 그것이 NULL이 아니면 thread 객체를 가리키고 있던 pointer를 해제한다. 따라서 실행 중이던 thread가 종료되는 것이다.
context switching은 실행상태에 놓이는 thread를 바꾸는 것을 말한다. 이 과정은 scheduler.cc 와 switch.s에 구현되어 있다. scheduler.cc의 Run()에 실행할 thread의 pointer를 바꾸는 과정이 나와 있으며, switch.s는 기계어 소스로서, stack pointer와 register값, program counter들을 바꾸는 과정이 묘사되어 있다.
이 과정에서 쓰인 파일들을 분석해 보기로 하자.

참고 자료

없음

자료후기(5)

5개 리뷰 평점
  • A+최고예요
    1
  • A좋아요
    1
  • B괜찮아요
    2
  • C아쉬워요
    1
  • D별로예요
    0
*윤
판매자 유형Bronze개인

주의사항

저작권 자료의 정보 및 내용의 진실성에 대하여 해피캠퍼스는 보증하지 않으며, 해당 정보 및 게시물 저작권과 기타 법적 책임은 자료 등록자에게 있습니다.
자료 및 게시물 내용의 불법적 이용, 무단 전재∙배포는 금지되어 있습니다.
저작권침해, 명예훼손 등 분쟁 요소 발견 시 고객센터의 저작권침해 신고센터를 이용해 주시기 바랍니다.
환불정책

해피캠퍼스는 구매자와 판매자 모두가 만족하는 서비스가 되도록 노력하고 있으며, 아래의 4가지 자료환불 조건을 꼭 확인해주시기 바랍니다.

파일오류 중복자료 저작권 없음 설명과 실제 내용 불일치
파일의 다운로드가 제대로 되지 않거나 파일형식에 맞는 프로그램으로 정상 작동하지 않는 경우 다른 자료와 70% 이상 내용이 일치하는 경우 (중복임을 확인할 수 있는 근거 필요함) 인터넷의 다른 사이트, 연구기관, 학교, 서적 등의 자료를 도용한 경우 자료의 설명과 실제 자료의 내용이 일치하지 않는 경우

이런 노하우도 있어요!더보기

최근 본 자료더보기
탑툰 이벤트
[컴퓨터공학]  nachos Thread, Synchronization, Scheduling 분석
  • 레이어 팝업
  • 레이어 팝업
  • 레이어 팝업
  • 레이어 팝업
  • 레이어 팝업