일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 컴공복전
- paging
- BOJ
- 백트래킹
- 동기화문제
- higunnew
- 스케줄링
- exec
- fork
- Brute Force
- 시뮬레이션
- 가상메모리
- samsung research
- BFS
- 삼성기출
- 백준
- pwnable.kr
- 데드락
- Deadlock
- Memory Management
- 알고리즘
- 구현
- 운영체제
- ascii_easy
- 프로세스
- 삼성리서치
- dfs
- 김건우
- segmentation
- 완전탐색
- Today
- Total
목록동기화문제 (2)
gunnew의 잡설
지금까지 Semaphore에 대한 얘기를 주구장창 했다. 그런데 Semaphore의 문제점은 있다. 구현도 어렵고, 실수 하면 시스템이 완전히 무너진다. 또한 Semaphore를 이용하여 프로그래밍 했을 때 어디에 P연산과 V연산이 들어가야 하는지 정확히 시스템이 작동되는지 검증하기가 굉장히 어렵다. 그러면 이러한 동기화 문제를 해결함에 있어서 조금 더 쉬운 방법은 없을까 고민하다가 나온 것이 Monitor라는 개념이다. Monitor Monitor는 High-level Language에서 제공하는 동기화 수단이다. Semaphore에서는 공유 데이터 접근을 Semaphore가 책임지지 않았고 실제로 동기화 문제는 프로그래머가 처리해야 했다. 공유 데이터에 접근하기 전에 Lock을 프로그래머가 걸어야 하..
Semaphore은 프로그래밍을 조금만 잘못해도 문제가 발생할 수 있다. 예를 들어 Semaphore 변수가 S와 Q로 두 개가 있다고 가정하자. 그리고 어떤 프로세스는 두 Semaphore를 모두 얻어야만 할 수 있는 작업이라고 하자. 예를 들면 A라는 Tape driver에 있는 내용을 B에 저장을 하는 것과 같은 작업이다. 그것들을 각각 P0와 P1이라고 하며 에 나타나 있다. 겉으로 보기엔 문제가 없어 보인다. 그러나 여기에는 심각한 문제가 발생할 수 있다. P0가 S를 얻고 CPU를 뺏겼다고 해보자. 그리고 CPU가 P1로 넘어가고 P1은 Q를 획득했다고 하자. P1이 이제 아랫부분을 실행하려고 해도 S를 P0가 가지고 있기 때문에 실행을 못하고, 반대로 P0가 Q를 얻으려고 해도 P1이 가지고..