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
- 이분탐색
- 크루스칼
- 플로이드와샬
- GIT
- 비트마스킹
- 플로이드 와샬
- 백트래킹
- 2018 KAKAO BLIND RECRUITMENT
- 2020 카카오 인턴십
- 조합
- SWEA
- 우선순위큐
- 트라이
- 로봇 청소기
- 프로그래머스
- 2021 KAKAO BLIND RECRUITMENT
- 다익스트라
- 파이썬
- 백준
- Spring
- 2019 KAKAO BLIND RECRUITMENT
- 투 포인터
- 스택
- BFS
- 2020 KAKAO BLIND RECRUITMENT
- 시뮬레이션
- 투포인터
- 브루트포스
- 구현
- 최소 신장 트리
Archives
- Today
- Total
개발조아
프로세스 동기화 본문
728x90
- 경쟁 상태(Race Condition)
- 공유 자원에 대해 여러 프로세스가 동시에 접근할 때, 순서에 따라 영향을 줄 수 있는 상태
- 동시 접근 시 자료의 일관성을 해치는 결과가 나타남
- Race Condition이 발생하는 경우
- 커널 작업을 수행하는 중 인터럽트 발생
- 상황 : 운영체제가 커널모드에서 작업하다 인터럽트가 발생하여 같은 데이터를 조작하는 경우
- 해결방안 : 커널 모드 시 인터럽트가 발생해도 제어권이 넘어가지 않도록 한다.
- 프로스세가 System Call를 호출하여 커널모드로 수행 중일 때 ContextSwitching이 일어날 경우
- 상황 : A 프로세스가 System Call 호출하여 커널모드로 커널의 변수를 조작하다 CPU 사용시간이 다되 ContextSwitching이 일어났다. 다음 프로세스가 동알한 System Call을 호출하여 동일한 데이터를 조작할 경우 발생한다.
- 해결방안 : 커널 모드에서 작업하는 경우 CPU 제어권이 넘어가지 않도록 한다.
- 멀티 프로세서 환경에서 공유 메모리 내의 커널 데이터에 접근할 경우
- 상황 : 여러개의 프로세서가 동시에 커널 내부 공유 데이터에 접근하여 조작하는 경우
- 해결방안 : 공유 데이터에 접근할 때 lock/unlock을 하도록 한다.
- 커널 작업을 수행하는 중 인터럽트 발생
- 공유 자원에 대해 여러 프로세스가 동시에 접근할 때, 순서에 따라 영향을 줄 수 있는 상태
- 임계 구역(Critical Section)
- 여러 프로세스가 데이터를 공유하며 수행할 때, 그 공유하는 데이터에 접근하는 코드가 있는 부분
- 공유 데이터에 여러 프로세스가 동시에 접근할 때 문제가 발생할 수 있으므로 한 프로세스 작업 중일 때 다른 프로세스는 접근하지 못해야한다.
- 임계 구역 문제
- 임계 구역에 여러 프로세스가 동시에 접근할 때 방생하는 문제
- 문제 해결을 위한 조건
- 상호배제(Mutual Exclusion)
- 임계 구역에 한 프로세스가 진입했다면 다른 프로세스는 진입할 수 없어야한다.
- 진행(Progress)
- 임계 구역에 진입한 프로세스가 없고, 별도의 동작이 없는 프로세스만 임계 구역에 진입 후보가 될 수 있어야한다.
- 유한 대기(Bounded Waiting)
- 한 프로세스가 임계 구역에 진입 신청한 후 받아들여질때까지, 다른 프로세스가 임계 구역에 들어가는 횟수가 제한되어야한다.(기아방지)
- 상호배제(Mutual Exclusion)
- 해결 방안
- 스핀락
- 공유 자원에 대한 여러 프로세스의 접근을 Lock을 걸어 막는 것
- 만약 Lock가 걸린 상태라면 해당 프로세스는 무의미한 반복을 통해 Lock가 해제 될 때까지 기다림
- Busy Waiting
- 뮤텍스
- 공유 자원에 대한 여러 프로세스의 접근하는 것을 막는 것
- 오직 하나의 프로세스만이 임계구역에 들어갈 수 있음
- 임계구역에 들어갈 때 Lock를 걸어 다른 프로세스가 접근 못하도록 막음
- 임계구역에서 나올 때 Lock를 해제하여 다른 프로세스가 접근할 수 있도록 함
- 이미 Lock가 걸려있다면 해당 프로세스는 Sleep되었다가 Lock가 풀리면 Wakeup 되어 다시 프로세스가 실행 됨
- 세마포어
- 소프트웨어 기반 해결책
- 공유 자원에 대한 여러 프로세스의 접근하는 것을 막는 것
- 여러 프로세스가 임계구역에 들어올 수 있음
- P, V 연산을 통해 S의 값을 조정하여 공유 자원에 대한 Lock 수행
- S는 임계 구역에 진입 가능한 개수를 의미
- P 연산(wait 연산)
- 임계 구역을 들어가기 전에 수행
- S 값을 확인하여 남아있다면 S - 1하고 임계구역에 들어간다.
- 그렇지 않다면 계속 기다린다.
- V 연산(singal 연산)
- 임계 구역에서 작업을 마치고 빠져나올 때 수행
- S 값을 증가시켜 다른 프로세스가 진입할 수 있도록 한다.
- 카운팅 세마포어
- S가 2 이상인 값을 가진 세마포어로, 여러 프로세스가 임계구역에 접근할 수 있다.
- 이진 세마포어
- S가 1인 경우만 허용하며, 임계 구역에는 하나의 프로세스만 접근할 수 있다.
- 뮤텍스와 세마포어의 차이
- 뮤텍스는 동기화 대상이 하나, 세마포어는 동기화 대상이 여러개
- 뮤텍스는 공유자원에 대해 오직 하나의 프로세스만 접근 가능
- 세마포어는 공유자원에 대해 여러 프로세스가 접근 가능
- 접근 권한 상태 변경
- 뮤텍스는 임계구역에 들어선, 현재 실행중인 프로세스만이 lock를 해제할 수 있음
- 세마포어는 다른 프로세스가 세마포어를 해제할 수 있음
- 여러개의 프로세스가 하나의 S값으로 세마포어를 제어하므로
- 뮤텍스는 동기화 대상이 하나, 세마포어는 동기화 대상이 여러개
- 스핀락
Comments