nachos
- 최초 등록일
- 2008.12.06
- 최종 저작일
- 2007.07
- 36페이지/ 한컴오피스
- 가격 1,000원
소개글
컴퓨터 Nachos Project Assignment #2 레포트
오픈소스인 리눅스 관련 레포트
목차
1.과제 개요
2.기존 루틴 분석
3.Thread::Join() 구현
4.Preemptive priority scheduling 구현
5.Synchronization 실험 문제
본문내용
Ⅲ. Thread::Join() 구현
- C의 wait()와 유사한 기능
• wait() : wait()시스템 콜을 호출하면 부모 프로세스는 자식 프로세스가 종료할 때까지
기다린다. 이 함수는 종료된 자식 PID(Process ID)를 돌려준다.
프로세스는 특정 작업을 수행하는 자식 프로세스를 만든 후, 이 프로세스가 종료 됐는지 검사하기 위해 wait()계열의 시스템 콜을 호출할 수 있다. 이 프로세스가 자식프로세스가 종료됐으면, 부모 프로세스는 종료 코드로 그 작업이 성공적으로 수행되었는지 알 수 있다.
• 주요 자료구조 분석
각 thread들은 constructor에 joinable flag를 이용하여 해당 thread가 joinable 하는지 여부를 선언하도록 하였다. 만일 joinable이 false인 경우에 Join()을 호출하게 되면 assertion failed 오류가 발생하게 된다.
본 프로젝트에서의 joined 및 finished 2개의 Semaphore를 이용하였다. 처음에는 이 두 semaphore를 모두 0으로 설정한 후 thread가 종료하는 경우 finished를 증가하고, joined에 대하여 joiner가 Join()을 호출하기를 기다렸다가 종료한다. 이때 joiner를 기다리지 않으면 thread가 사라지는 경우를 방지하기 위해서이다. joiner는 마찬가지로 finished semaphore를 기다렸다가, 해당 thread가 종료되면 joined semaphore를 이용하여 해당 thread에게 join을 수행하였음을 알려주고 thread가 소멸되어도 좋다는 사실을 알려준다.
이 경우 joiner가 Join()을 호출하지 않아도 되긴 하지만, 해당 프로세스는 Sleep상태로 운영체제가 종료할 때까지 남게 되는 부작용이 생긴다.
• 구현 루틴 설명
join에 대해서 구현할 때 고려해야 할 사항 세 가지에 대해서 구현 루틴을 분석해보자.
첫 번째는 thread가 Join을 부르지 않는 경우이고, 두 번째는 정상적으로 Join을 호출하여 joiner가 joined된 thread의 종료를 기다리는 경우이다. 세 번째는 이미 종료한 thread에 대해 Join을 호출하는 경우이다.
joinable인자를 주는 생성자를 따로 만들었으므로, joinable한 thread에 대해서 생각할 수 있다. 또한 그 생성자 내에서 finished와 joined 두개의 세마포어를 만들게 된다.
(1)Thread::Finish()에 있는
if(joinable){
finished->V();
joined -> P();
}
(2)Thread::Join()에 있는
if(joinable){
finished->P();
joined -> V();
}
부분을 보아가면서 설명하겠다.
참고 자료
없음