[운영체제] 병행 프로세스 - 세마포어 완벽 정리 Part 3 - 판독기-기록기 문제 지난 두 편의 글을 통해 세마포어의 정의와, '상호배제 문제'와 '동기화 문제', '생산자-소비자 문제'를 세마포어가 어떻게 해결하는지에 대해 알아보았다. 이번 포스팅은 세마포어 관련 마지막 포스팅으로, 세마포어로 해결할 수 있는 문제 중 판독기-기록기 문제를 집중적으로 살펴보도록 한다. 판독기-기록기 문제란? 판독기-기록기 문제는 다수의 협력 프로세스가 공유 자원을 사이에 두고 데이터를 읽는 판독기(reader)와 데이터를 쓰는 기록기(writer)로 나위어 동작할 때, 이들의 접근을 어떻게 제어할 것인지에 대한 문제다. 이 문제의 핵심은 두 가지 조건을 만족시키는 것이다. 기록기의 상호 배제: 한 기록기가 공유 자원에 데이터를 쓰는 동안 다른 기록기나 판독기는 접근할 수 없음. 데이터를 쓰고 있는 중.. 2025. 3. 19. [운영체제] 병행 프로세스 - 세마포어 완벽 정리 Part 2 - 생산자-소비자 문제 지난 글에서는 세마포어의 정의와, '상호배제 문제'와 '동기화 문제'를 세마포어가 어떻게 해결하는지에 대해 공부해보았다. 이번 글에서는 세마포어로 해결할 수 있는 문제 중 생산자-소비자 문제에 대해 다뤄보려고 한다. 생산자-소비자 문제란? 생산자-소비자 문제는 두 프로세스가 협력하여 데이터를 주고받는 상황을 다룬다. 생산자-소비자 문제에서는 세 가지 용어를 먼저 정의해야 한다. 생산자(Producer) : 데이터를 생성하여 버퍼에 넣는 프로세스소비자(Consumer) : 버퍼에서 데이터를 꺼내 사용하는 프로세스버퍼(Buffer) : 생산자와 소비자 사이에 데이터를 저장하는 공유 공간 생산자-소비자 문제에는 두 가지 조건이 있다. 상호배제 : 여러 프로세스가 동시에 버퍼에 접근할 수 없다. 즉, 생산자가 .. 2025. 3. 18. [운영체제] 병행 프로세스 - 세마포어 완벽 정리 Part 1 - 상호배제, 동기화 (feat. 비행기 화장실) 운영체제에서는 프로세스의 상호배제 문제를 해결하기 위해 세마포어(semaphore)라는 도구를 사용한다. 상호배제란 여러 프로세스가 동시에 같은 자원(임계영역)을 건드리지 않도록 막는 것이다. 세마포어란? 쉽게 비유하면 자원의 좌물쇠 같은 역할이다. 세마포어는 정수형 변수(s)로 만들어졌는데, 이 값은 사용 가능한 자원의 개수나 잠김/열림 상태를 나타낸다. 예를 들어 s = 3 이면 사용 가능한 자원이 3개 있다는 뜻이니, 프로세스가 3개까지 들어갈 수 있다는 신호다. s = 0 이면 빈 자원이 없으니 대기하라는 뜻이다. 처음에 세마포어 s를 생성할 때, 상황에 맞춰 값을 설정한다. 이 값은 0 이상의 정수여야 한다. 그리고 이 s는 P와 V라는 두 가지 연산으로만 변할 수 있다. 즉, P 연산과 V 연.. 2025. 3. 12. 이전 1 다음