운영체제실습 - Synchronization - Real-Time Computing and Communications Lab. Hanyang University jtlim@rtcc.hanyang.ac.kr dhchoi@rtcc.hanyang.ac.kr beespjh@gmail.com
Introduction 조교소개 이름 : 임정택 Tel : 010-4780 - 9294 E-Mail : jtlim@rtcc.hanyang.ac.kr 이름 : 최대호 Tel : 010-9872 - 9353 E-Mail : dhchoi@rtcc.hanyang.ac.kr 이름 : 박준형 Tel : 010-2859 - 6858 E-Mail : beespjh@gmail.com 실습관련질문시제목을아래의양식에맞춰서메일을보내주세요 ex> [ 운영체제 ] 학번 _ 이름 2 2
실습계획 주차 내용 과제 1주차 실습소개, 환경구성 2주차 시스템콜추가, 과제설명 3주차 시스템콜분석 (fork 분석 ), 과제설명 4주차 스케줄러 5주차 스케줄러 6주차 프로세스통신 7주차 프로세스통신 8주차 중간고사휴강 9주차 Syncronization 10주차 Syncronization 11주차 메모리관리 12주차 메모리관리 13주차 파일시스템 or 디바이스드라이버 14주차 파일시스템 or 디바이스드라이버 15주차 휴강대비 16주차 기말고사휴강 3 3
Contents Process Synchronization Mutex Semaphore 과제 4 4
Process Synchronization 데이터의일관성을위해 shared data 에대한동시접근을제어하는것 일관성을유지하기위해서는관련된프로세스들이순차적으로실행되는보장하는방법이요구됨 5 5
The Critical-Section Problem N 개의프로세스들은서로 shared data 를사용하기위해경쟁한다. shared data 에접근하는코드부분을 critical section 이라고한다. critical section 은한번에하나의프로세스만접근가능하다. 6 6
The Critical-Section Problem 시스템은동시에두개의프로세스가 critical section 코드부분을수행하지않게해야함. 각각의프로세스들은동기화를위해사용하기위한변수를공유한다. General process P i entry section : critical section 에 들어가기위한요청을수행 exit section : critical section 의수 행이끝난후출구부분 remainder section : 코드의나머 지부분 7 7
Mutex Critical section 으로들어가기위한하나의키. 어떤 thread 가키를얻어서 critical section 에진입하면, 다른 thread 는키를얻을때까지기다리게됨. 8 8
Mutex Mutex mechanism 9 9
Mutex functions Header File : pthread.h Mutex 초기화 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr); mutex : 초기화할 mutex 의 pointer mutexattr : mutex 의특성을설정할때사용 ( 사용하지않을경우 NULL) Mutex lock int pthread_mutex_lock(pthread_mutex_t *mutex); Mutex unlock int pthread_mutex_unlock(pthread_mutex_t *mutex); Mutex 제거 int pthread_mutex_destory(pthread_mutex_t *mutex); 사용하고난뒤 mutex 와 resource 해제 모든함수는성공시 0 을 return 10 10
Mutex 11 11
Mutex pthread compile gcc command 에서 -lpthread 옵션을추가 12 12
Semaphore Mutex 와같이 critical section 에대한접근을제한하는키로활용됨 integer variable S 를가지며, 2 개의 atomic operation 을통해접근제어가수행됨 P(S) : wait function V(S) : signal function 13 13
Semaphore functions Header file : semaphore.h Semaphore 초기화 int sem_init(sem_t *sem, int pshared, unsigned int value); sem : 초기화할 semaphore 객체 pshared : 0 이아니면프로세스들간에 semaphore 를공유. 0 이면프로세스내부에서만 semaphore 를사용 value : semaphore 초기값 Semaphore value 감소 int sem_wait(sem_t *sem); int sem_trywait(sem_t *sem); sem_wait : semaphore 값이 0 보다크면프로세스는 semaphore 를얻은뒤감소시키고즉시리턴값을반환한다. semaphore 값이 0 이면 0 보다커지거나 signal 이발생할때까지대기한다. sem_trywait : sem_wait 과기본적으로같지만, 즉시 semaphore 를감소시키고리턴값을반환한다는점이다르다. 14 14
Semaphore functions Semaphore value 증가 int sem_post(sem_t *sem); Semaphore value 저장 int sem_getvalue(sem_t *sem, int *sval); sval이가리키는위치에 sem의현재값을저장 Semaphore 삭제 int sem_destory(sem_t *sem); semaphore를포함해관련된 resource를모두해제 15 15
Semaphore Example 16 16
Semaphore Example 결과 17 17
The Dining Philosopher Problem 여러프로세스가동시에돌아갈때교착상태가나타나는원인을직관적으로보여주는문제 다섯명의철학자가앉아있고, 철학자의양옆에는젓가락이하나씩놓여져있음 최대네명의철학자가동시에식사를할수있다 양쪽젓가락이모두사용가능할때에만젓가락을잡을수있다. 철학자가식사를하기위해서는양옆의 2 개의젓가락을동시에들어야함 18 18
과제 주어진 Skeleton Code 와 Semaphore API 를이용하여, Dining Philosopher Problem 을해결 앞에나온해결책들이외에 Deadlock 을해결하면서더효율적인알고리즘이있다면그것을사용해도무방 철학자들이균등하게식사한다. 각각의철학자는 HUNGRY, EATING, THINKING 상태를가진다. 초기상태는 THINKING 이다. 젓가락을놓는순간, THINKING 상태로돌입한다. THINKING -> HUNGRY, EATING -> THINKING 의상태변화는 10~100msec 후일어난다. 19 19
과제 Skeleton Code> 20 20
과제 Skeleton Code> 21 21
과제 잘못된알고리즘으로이문제를해결하려고하면아래와같이 Deadlock 이발생할수있다. 22 22
과제 Example> 오른쪽그림은 10 초동안동작시킨모습이다. 각각의철학자들은현재자신의상태를출력한다. 최종적으로주어진동작시간동안식사한총횟수를출력해준다. 23 23
과제 Due: 2017/05/16 23:59:59 보고서 과제내용요약 코드작성부분에대한스크린샷과설명 최종결과스크린샷 ( 터미널창에서의결과화면 ) Code 전문은 git 에올려야함 24 24