본문 바로가기

세마포어3

9.3 커널 동기화 9.2 커널 동기화9.2.1 동시성 문제공유자원에 접근하는 코드영역을 '임계영역'이라고 한다.이 임계영역이 동시에 실행되면 경쟁상태가 되어 동시성 문제가 발생할 수 있다. 동시성 문제의 원인1) 인터럽트: 커널 코드가 공유 자원을 사용하는 중에 인터럽트가 발생하여 인터럽트 핸들러가 공유 자원을 사용함.2) 지연함수: 커널 타이머나 tasklet이 특정 함수를 호출함.3) 선점형 커널: 프로세스가 커널에서 실행 중일 때 다른 프로세스를 스케줄링할 수 있음.4) SMP 시스템: 2개 이상의 CPU가 동시에 공유 자원에 접근. 9.2.2 세마포어태스크가 임계영역에 도달하면 세마포어를 1 감수시킨 후 진입한다.세마포어가 0인 경우 태스크는 잠이 든다. (임계영역에 다른 태스크가 있는 경우임)태스크가 임계영역을 .. 2018. 7. 6.
4.2 스레드 동기화 4.2 스레드 동기화4.2.1 뮤텍스 함수int pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutex_attr attr);기능: 뮤텍스 초기화 int pthread_mutex_lock(pthread_mutex_t* mutex);기능: 뮤텍스 획득 int pthread_mutex_unlock(pthread_mutex_t* mutex);기능: 뮤텍스 반납 int pthread_mutex_destroy(pthread_mutex_t* mutex);기능: 뮤텍스 비활성화 리턴: 성공 시 0, 에러 시 에러번호 리턴mutex: 뮤텍스 변수 주소attr: 뮤텍스 속성 (일반적으로 NULL) 4.2.2 POSIX 이름있는 세마포어세마포어 파일을 매개로 동기화 .. 2018. 6. 28.
3.2 세마포어 3.2 세마포어3.2.1 개요프로세스의 동기화 문제두 개 이상의 프로세스가 하나의 자원에 동시에 접근하면 문제가 발생한다.이러한 문제를 막기 위해 정해진 개수의 프로세스만 해당 자원에 접근할 수 있도록 만들어주어야 한다."임계영역"을 구성해 정해진 개수의 프로세스만 코드 영역에 진입할 수 있도록 만들자! 세마포어로 해결세마포어는 코드의 특정 영역을 임계영역으로 만들어준다. 1) 세마포어 값이 1 이상인 경우 프로세스는 세마포어 값을 1 감소시킨 후 임계영역에 진입한다.2) 세마포어 값이 0인 경우 임계영역에 하나 이상의 프로세스가 진행중이므로 그 밖에 있는 프로세스는 자면서 기다린다.3) 세마포어 값이 다시 1 이상이 됐을 때 (임계영역에 있던 프로세스가 임계영역에서 탈출하면서 세마포어 값을 1 증가시킴.. 2018. 6. 27.