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
- 웹 호스팅
- 삼성 청년 SW 아카데미
- Synchronization
- floyd-warshall
- 세마포어와 뮤텍스의 차이
- 서버 호스팅
- 세마포어란?
- 호스팅이란?
- SSAFY
- 동기화
- 플로이드 와샬
- Dijkstra Algorithm
- 다익스트라
- 싸피 합격
- 세마포어와 뮤텍스
- 싸피
- 프록시
- 뮤텍스란?
- 다익스트라 알고리즘
- 최단 경로
- 호스팅
- 싸피 면접 후기
- 뮤텍스
- 프록시서버
- 세마포어
- 플로이드 워셜
- 클라우드 서버
- Proxy Server
- Proxy
Archives
- Today
- Total
어제의 나보다 성장한 오늘의 나
임계영역(critical section) 본문
임계 영역이란?
- 프로세스 간에 공유자원을 접근하는 데 있어서 문제가 발생하지 않도록 한 번에 하나의 프로세스만 이용하게끔 보장해줘야 하는 영역
임계 영역 문제를 해결하기 위해서는 3가지 조건을 충족해야 된다.
- 상호 배제(Mutual exclution)
- 하나의 프로세스가 임계 영역에 들어가 있다면 다른 프로세스는 들어갈 수 없어야 한다.
- 진행(Progress)
- 임계 영역에 들어간 프로세스가 없는 상태에서 들어가려 하는 프로세스가 여러 개라면 어느 것이 들어갈지 결정해줘야 한다.
- 한정 대기(Bounded waiting)
- 다른 프로세스의 기아(Starvation)를 방지하기 위해, 한 번 임계 구역에 들어간 프로세스는 다음번 임계 영역에 들어갈 때 제한을 두어야 한다.
- 임계 영역의 동시 접근을 해결하기 위한 방법으로는 Lock, Semaphore, monitor 등이 있다.
Lock이란?
- 이름 그대로 걸어 잠 구는 행위를 의미한다.
- 자원을 사용하고 있는 동안에는 문을 걸어 잠가서 자신 말고는 아무도 못 들어오게 하는 방식이다.
- 스레드 A가 공유자원에 Lock을 걸고 사용하는 동안 timer Interrupt가 걸렸다고 가정하자.
- B스레드가 수행되고 공유자원을 접근하려고 할 때 Lock이 걸려있을 경우 해제해주기를 기다리게 된다. (busy-waits)
- 그리고 다시 A스레드가 스케줄링에 의해 나머지를 다 수행하고 Lock을 해제하게 되면 그제야 B스레드가 수행되는 방식
- Lock의 구현의 경우 bool 값을 통한 무한루프 문을 통해서 구현할 수 있다.
- 해제해주기를 기다리는 부분에 무한루프를 빠져나오지 못하기 때문이다.
- 이처럼 의미 없는 코드를 반복 수행하며 기다리는 것을 busy-waits라고 부른다. (비싼 CPU를 사용하면서 기다리므로..)
문제점
- Lock의 문제점은 특정한 상황에서 제대로 작동하지 않는 문제가 있다.
- A스레드가 Lock함수를 실행하여 무한루프를 돌게 하고 변수의 값을 변경하기 전에 인터럽트가 걸려 값을 변경하지 못하고 다른 스레드가 Lock 함수에 들어오게 된다면 두 개의 스레드가 임계 영역에 동시 접근을 하는 상황이 발생.
Semaphore는 중요한 내용이므로 다음 포스팅에서 자세히 다루겠습니다. The End.
출처
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 메모리 관리 전략 (Memory Management Strategy) (0) | 2021.05.07 |
---|---|
[운영체제] 세마포어와 뮤텍스 (0) | 2021.04.30 |
[운영체제] 동기화 Synchronization , Race condition (0) | 2021.04.24 |
스케줄러의 종류(장기스케줄러, 중기스케줄러, 단기스케줄러) (0) | 2021.04.24 |
교착상태(DeadLock)가 무엇인가? (0) | 2021.04.23 |
Comments