일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 삼성코딩테스트
- 알고리즘
- 삼성역량테스트
- 코딩테스트
- 코테 문제
- 자료구조
- 딥러닝
- 임베디드 딥러닝
- 그리디
- dfs문제
- TensorFlow Lite
- sort
- DP문제
- 영상처리
- MCU 딥러닝
- bfs문제
- 삼성코테
- 포스코 교육
- 포스코 ai 교육
- DP
- 다이나믹프로그래밍
- tinyml
- 초소형머신러닝
- dfs
- 코테
- BFS
- 삼성역테
- 컴퓨팅사고
- 포스코 AI교육
- tflite
- Today
- Total
코딩뚠뚠
[OS 공부] 프로세스 동기화 본문
프로세스 동기화란 :
여러 프로세스가 공유하는 자원의 일관성을 유지하는 것
여러 프로세스가 동시에 한 자원에 접근하려 할때 이 프로세스들의 순서를 정의해주어 일관성을 유지해야 한다.
용어 :
Critical Section :
동일한 자원에 동시에 접근하는 작업을 실행하는 코드 영역
Critical Section Problem :
프로세스들이 Critical Section 을 같이 사용할 수 있는 프로토콜을 설계하는 것
해결을 위해 필요한 조건들
- Mutual Exclusion (상호 배제)
1번 프로세스가 Critical Section에서 실행중이라면 다른 프로세스들은 Critical Section에서 실행될 수 없다.
- Progress (진행)
Critical Section 에서 실행중인 프로세스가 없고, 별도의 동작이 없는 프로세스들만 Critical Section에 진입가능하다.
- Bounded Waiting (한정된 대기)
1번 프로세스가 Critical Section에 진입 신청 후 받아들여질때까지, 다른 프로세스들이 Critical Section에 진입하는 횟수는 제한되어야 한다.
해결책은 ?
1. Lock :
- 하드웨어 기반의 해결책
- 동시에 자원에 접근하는 것을 막기 위해 Critical Section에 진입하는 프로세스는 Lock을 획득하고, Critical Section을 빠져나올 때 Lock을 방출하여 동시 접근이 되지 않도록 한다. 문을 걸고 들어가고 열고 나온다는 의미
한계 - 다중처리기 환경에선 시간 효율성 측면 때문에 적용할 수 없다.
2. Semaphores :
- 소프트웨어 기반의 해결책
종류 - Counting, Binary
P 연산 : Wait동작. 자원을 사용하려는 프로세스들의 진입여부를 카운트를 통해 결정한다. 카운트를 감소시킴
V 연산 : Signal동작. 대기중인 프로세스를 깨우는 신호. 카운트를 증가시킨다.
Counting Semaphores - 접근제어용으로 사용
- 공유 자원의 데이터에 여러 프로세스가 접근하는 것을 막는 것
- 1개 이상의 스레드가 접근할 수 있다.
- Semaphores를 소유하고 있지 않는 스레드도 해당 Semaphores를 해제할 수 있다.
- 각 프로세스에 제어 신호를 전달하여 순서대로 작업을 수행하도록 한다.
Binary Semaphores(MUTEX) - 다중 프로세스들 사이의 Critical Section 문제를 해결하기 위함
- 특정 프로세스가 공유자원을 사용하고 있다면 다른 스레드(프로세스)가 접근하는 것을 막는 것
- 0,1 값 즉 lock, unlock 두가지 값만 가진다.
- MUTEX를 소유하고 있는 스레드가 해당 MUTEX를 해제할 수 있다.
한계 - Busy Wating, Deadlock
Busy Wating -
- Semaphores 초기 버전에서 Critical Section에 진입해야 하는 프로세스는 진입하는 코드를 반복실행해야 했고 이는 CPU 자원을 낭비했다. 이를 Busy Waiting 이라고 부르고 비효율적이다.
- 이의 해결 방법으로는.. Semaphores에서 Critical Section에 진입을 시도했지만 실패한 프로세스에 대해서 Block 시킨 뒤 Critical Section에 자리가 날 때 깨우는 방식 이용한다.
Deadlock -
Semaphores가 Ready Queue를 가지고 있고 둘 이상의 프로세스가 Critical Section진입을 계속해서 기다리고 있고, Critical Section에서 실행되는 프로세스는 진입대기중인 프로세스가 실행되어야만 빠져나올 수 있는 상황
3. Monitor :
- 코드를 상호배제 하게끔 만든 추상화 된 데이터 형태
- 공유자원에 접근하기 위한 key 획득과 반납을 모두 처리한다. Semaphores는 직접 처리해야한다.
'공부 > OS 공부' 카테고리의 다른 글
[OS 공부] 가상 메모리 (0) | 2021.02.12 |
---|---|
[OS 공부] 메모리 관리 전략 (0) | 2021.02.06 |
[OS 공부] 동기&비동기 (0) | 2021.01.17 |
[OS 공부] CPU 스케줄러 (0) | 2021.01.13 |
[OS 공부] 스케줄러 (0) | 2021.01.10 |