Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 트리
- 문자열다루기
- 그래프
- 완전탐색
- 문자열
- 코딩
- 백준
- 운영체제
- 안드로이드
- dfs
- component
- 다이나믹프로그래밍
- 배열
- 이분탐색
- 자바
- Android
- activity
- 세그먼트트리
- GIT
- 프로그래머스
- 생명주기
- 카카오블라인드
- 코틀린
- BOJ
- BFS
- 스택
- 코딩테스트
- 동적계획법
- 알고리즘
- 분할정복
Archives
- Today
- Total
HS_development_log
동기화 본문
반응형
동기화(Synchronization)
* 프로세스와 쓰레드 모두 해당되는 문서입니다. 편의를 위해 프로세스로 작성하였습니다
동기화(synchronization)
- 병행 프로세스들이 서로 데이터를 주고 받으면서 수행 될 때, 이 프로세스들 간의 동기화가 필요하다
- 병행 프로세스들이 공유 데이터에 접근할 때, 병행 접근하면 데이터의 일관성(data consistency)이 잘못될 수 있다
- 데이터의 일관성을 유지하려면 데이터 접근을 순서화 해야한다.
임계 구역(Critical Section)
-
각 프로세스는 공유 데이터를 접근하는 코드 세그먼트를 갖고 있는데 이것을 임계 구역 이라고 함
임계 구역 문제
-
임계 구역의 수행을 순서화 해서 수행하자
-
오직 한 프로세스 만이 임계 구역을 수행하게 하자
문제 해결
-
각 프로세스는 임계 구역을 수행하기 전에 허가를 요청해서 승인받고, 임계 구역을 마친후에는 이를 알려준다.
-
진입 구역(entry section) : 임계 구역 수행 전에 허가를 요청하는 코드 구역
-
출구 구역(exit section) : 임계 구역 다음에 위치하여 임계 구역 수행을 끝낸다는 것을 알리는 코드 구역
임계 구역 문제를 해결하기 위한 조건
- 상호 배제(Mutual Exclusion) : 프로세스 P가 임계 구역에서 실행된다면, 다른 프로세스들은 임계 구역에서 실행될 수 없다
- 진행(Progress) : 임계 구역에서 실행되는 프로세스가 없고 임계 구역을 수행하려는 프로세스들이 있다면, 임계 구역을 수행할 다음 프로세스의 선택은 잔류 구역에 있지 않은 프로세스들 중에서 선택하되 무한하게 연기되지 않는다.
- 한계 대기(Bounded Watiting) : 프로세스가 임계 구역의 수행에 대한 요청을 하고 요청이 허용될 때까지 다른 프로세스가 임계 구역을 수행하도록 허용하는 횟수에 한계를 두어야 한다
임계 구역 문제의 해결 방법
피터슨(Peterson) 알고리즘
- 오직 두 프로세스만을 가정한다
- 두 프로세스는 다음 두 변수를 공유한다
- int turn : 임계 구역에 어떤 프로세스가 들어갈 지를 나타냄
- boolean flag[2] : 프로세스가 임계 구역에 들어갈 준비가 되었는 지를 나타냄. flag[i] == true이면 준비가 된 상태
세마포어(Semaphore)
-
공유된 자원의 데이터를 여러 프로세스, 스레드가 접근하는 것을 막는 것
-
세마포어 s : 정수 변수로서 오직 두 개의 연산으로만 접근 가능함
- wait(s) or P(s) : 임계 구역에 들어가기 전에 수행하는 연산
- signal(s) or V(s) : 임계 구역에서 나올 때 수행하는 연산
-
이 두 연산에서 세마포어 변수의 접근은 원자적으로 수행됨(접근 도중 인터럽트 되지 않음)
-
현재 수행중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있다
세마포어의 종류
- Binary Semaphore : 오직 0과 1값을 사용
- 세마포어의 초기값을 1로 한다
- mutex locks 이라고도 알려져 있다
- Counting Semaphore : 제약이 없는 정수 값을 사용
- N개 프로세스의 병행 접근을 허용하고자 할 때
- 세마포어의 초기값을 N으로 함
세마포어의 문제점
- 교착상태가 발생할 수 있다
- 두 개 이상의 프로세스들이 다른 프로세스가 해주어야 하는 사건을 무한하게 기다리는 현상
뮤텍스 락(Mutual Exclusion Lock)
- Binary Semaphore
- 뮤텍스 객체는 두 프로세스가 동시에 사용할 수 없다
- 락(lock)을 획득한 프로세스만이 락을 해제할 수 있다
세마포어 vs 뮤텍스
- 세마포어는 뮤텍스가 될 수 있지만, 뮤텍스는 세마포어가 될 수 없다
- 세마포어는 파일 시스템 상 파일형태로 존재, 뮤텍스는 프로세스 범위입니다
- 세마포어는 소유할 수 없는 반면, 뮤텍스는 소유할 수 있습니다
- 세마포어의 경우, 세마포어를 소유하고 있지 않은 쓰레드도 세마포어를 해제할 수 있지만, 뮤텍스는 락을 소유한 쓰레드만 락을 해제할 수 있습니다
모니터(Monitor)
- 동기화를 자동적으로 제공하기 위하여 새로운 언어 구조를 개발
- 여러 프로세스들이 추상 데이터 타입(abstract data type)을 안전하고 효과적으로 공유할 수 있도록 한 기법
- 한번에 한 프로세스만이 모니터 안에서 수행될 수 있다
- 프로그래머가 직접 동기화 제약을 코딩할 필요가 없다
모니터의 구성
- 공유 자원 + 공유 함수로 구성됨
- 2개의 queue 운영
- 배타동기(Mutual exclusion queue)
- 조건동기(Conditional synchronization)
모니터의 운영
- 공유 자원 접근 함수에는 최대 1개의 프로세스만이 진입가능 : 나머지는 큐에서 진입못하고 기다리고 있어야 한다
- 진입 프로세스가 조건 동기로 블록되면 새 프로세스 진입 가능
- 새 프로세스는 조건 동기로 블록된 프로세스를 깨울 수 있다
- 깨워진 프로세스는 현재 프로세스가 나가면 재진입 할 수 있다
참고
-
[System Software & Security Lab @ Myongji Univ. - Operating System ppt]
반응형
'CS > 운영체제' 카테고리의 다른 글
주소 바인딩(Address Binding)과 주소 변환(Address Translation) (0) | 2020.09.28 |
---|---|
교착상태 (0) | 2020.09.28 |
CPU 스케줄링 (0) | 2020.09.28 |
멀티 프로세스 vs 멀티 쓰레드 (0) | 2020.09.28 |
쓰레드 (0) | 2020.09.28 |