inflearn logo
강의

講義

知識共有

図で簡単に学ぶオペレーティングシステム

セマフォア

세마포어에 관련해 질문입니다

144

tklr0731

投稿した質問数 6

1

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

세마포어를 사용하는 이유로 공유자원을 동시에 여러 프로세스가 사용하려할때 생기는 오류를 방지하는데 세마포어를 wait(1) 이렇게 1개의 프로세스만 공유자원을 사용할수있다 가정한 후 동시에 여러 프로세스가 공유자원을 사용하려할때 어떤 기준으로 먼저 실행할 프로세스를 선택하나요?

운영체제

回答 2

0

gamja5

안녕하세요 영욱님!
세마포어에 대해서 궁금증이 있으시군요.

세마포어를 사용해서 세마포어(s)를 1로 설정한 상태에서 별다른 설정 없이 여러 프로세스에서 어떤 프로세스가 먼저 실행될 지는 운영체제의 스케줄링 알고리즘에 따릅니다.
운영체제 스케줄링의 높은 우선순위로 선택된 프로세스가 먼저 실행합니다.

 

"그러면 프로그래머가 원하는 프로세스가 먼저 실행되도록 선택은 못하나요?"라는 질문이 나올 수 있을 것 같습니다.
이 부분은 세마포어 연산을 이용해 원하는 프로세스가 먼저 실행되도록 할 수 있습니다.

프로세스 A가 실행할 코드와 프로세스 B가 실행할 코드가 나눠져있고 프로세스 A가 먼저 실행되도록 하고 싶다는 상황으로 예를 들어보겠습니다.

그렇다면 세마포어의 초기값을 아래와 같이 0으로 설정합니다.

s = 0; // 세마포어 선언

프로세스 A가 실행할 코드에는 아래와 같이 signal() 연산을 추가해줍니다.

// 프로세스 A가 실행할 코드
프로세스 A 동작
.
.
.
signal(s); // 세마포어 변수가 1이 됨.

프로세스 A가 실행할 코드는 wait()함수가 없으므로 바로 실행할 수 있습니다.

 

반면 프로세스 B가 실행할 코드에는 wait() 함수를 추가해 프로세스 A의 동작이 끝나고 나서 시작되도록 컨트롤 합니다.

// 프로세스 B가 실행할 코드
wait(s) // 세마포어 변수가 0이면 대기큐에서 기다리고, 1이상이면 바로 실행
프로세스 B 동작
.
.
.
signal(s); // 세마포어 변수에 1을 더해(0+1 = 1) 1로 설정 

만약 운영체제 CPU 스케줄링에 따라 프로세스 B가 실행할 코드가 먼저 실행했더라도 wait() 함수가 호출될 때는 세마포어 변수가 0이기 때문에 대기큐로 들어갑니다.
결국 프로세스 A가 먼저 실행될 수 있습니다.

 

1

tklr0731

와 진짜 원하던 답변이였습니다 감사합니다!

1

tklr0731

갑자기 생각나서 질문 하나 더 드립니다.

위에 예시로 보여진 코드를 해석하면 프로세스 A는 wait()없이 signal(s)만 선언되어 세마포어의 초기값이 0일경우 세마포어 값이 1이 추가되는데 그럼 프로세스 A가 실행할때마다 세마포어의값이 1씩 계속 추가되서 계속 늘어나게 되나요

그리고 세마포어의 값이 1이되면 다시 A와 B 프로세스가 동시에 실행될때 세마포어의 값이 1이여서 B도 실행이 가능해져 A를 먼저 실행할수 없을거같은데 B가 종료될때 조건구문같은걸 따로 적어줘야 하나요??

1

gamja5

signal() 연산을 계속하면 연산을 할 때마다 1이 늘어나게됩니다.
만약 프로세스 A의 반복문 안에 signal() 연산을 넣어줘 세마포어값이 1이상이 되어
프로세스 A와 B를 동시에 실행된다면 A, B 둘 중 어느 프로세스가 먼저 실행될 지 예측이 힘들 수 있습니다.
이럴땐 반복문 밖에 signal() 연산을 넣어 예측이 가능하도록 해주면 되겠죠?

세마포어는 이렇게 여러 상황을 신경써야하는 복잡성이 있기 때문에 프로그래머가 버그를 만들어 낼 가능성이 크다는 단점이 있습니다.
상황을 잘 분석해 wait()과 signal()을 사용하는 것이 중요합니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 영욱님.

세마포어는 여러 프로세스가 공유 자원에 접근할 때 동시 접근으로 인한 문제를 방지하고자 사용됩니다. 세마포어의 wait 함수가 호출될 때, 세마포어의 카운트 값은 감소하고, 값이 0이 되면 다른 프로세스는 자원이 여유로워질 때까지 대기 상태가 됩니다. 이를 통해 한 번에 한 프로세스만 공유 자원에 접근할 수 있도록 합니다.

어떤 프로세스가 먼저 실행되는지에 관한 기준:

  1. 대기 큐: 보통 세마포어가 관리하는 대기 큐가 있어서, wait 호출 시 자원이 여유롭지 않다면 프로세스는 이 큐에 들어가게 됩니다. 이후 자원이 여유로워질 때 (signal이 호출될 때) 큐에 있는 프로세스들이 순차적으로 자원 접근 기회를 얻게 됩니다.

  2. 스케줄링 정책: 운영체제의 스케줄링 정책에 따라 대기 큐에 있는 프로세스가 선택되어 실행될 수 있습니다. 기본적으로는 FIFO (First In, First Out) 방식이 자주 사용되지만, 시스템마다 다를 수 있습니다.

  3. 우선순위: 특정 운영체제나 시스템에서는 우선순위를 가지고 프로세스를 스케줄링하기도 합니다. 높은 우선순위를 가진 프로세스가 대기 중이면 먼저 자원을 할당 받게 됩니다.

유사 질문 탐색

세마포어와 관련된 더 깊은 이해를 위해서 운영체제 강의에서 다루는 우선순위 스케줄링 및 프로세스 관리를 참고하시면 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

여러 의문점

1

63

1

CPU 스케줄링 RR 강의 2:54에서 질문 있습니다.

1

57

2

CPU Bound Process와 sleep, yield에 대해

1

60

1

커널과 인터페이스 개념

1

64

2

exit() 함수

0

154

2

LRU 관련 질문

1

182

2

고정 분할 방식도 연속 할당으로 알고 있는데 애니메이션이 다소 헷갈립니다.

0

115

2

Swapping, Manual Overlay, Dynamic Loading, Dynamic Linking의 개념이 헷갈립니다

0

147

2

각 메모리의 최대 요구 CPU 리소스는 어떻게 아나요?

1

167

2

PCB들이 연결리스트로 저장되는 이유가 뭔가요?

1

127

2

IPC 방식 중 매개체가 파일과 메모리일 때 할당되는 용량의 차이

0

116

2

고정 분할 방식에 질문입니다

0

120

2

IPC 통신 중 파일을 이용한 방법이 정확히 어떤 건가요?

0

152

1

공유자원과 동기화 문제에 관해서 질문이 있습니다.

0

152

2

FIFO 알고리즘에 대해서 질문이 있습니다.

1

128

2

멀티프로그래밍, 멀티 태스킹, 멀티 프로세싱

1

163

1

새로 올라온 영상에서 스와핑 언급이 빠졌는데

1

80

2

유니프로그래밍과 멀티프로세싱이 어떻게 공존할 수 있는 건가요?

3

173

2

인터럽트에 대해 질문 드립니다.

1

93

2

수업 노트 설명에 대해 이해가 안가는 부분이 있어 질문 드립니다.

0

113

2

3:59초에 대해서 궁금해요!

0

117

2

실무적으로 궁금한게 있습니다ㅠ

0

95

1

완강을 해보니 오히려 더 궁금한게 많아지네요

1

166

2

파일디스크립터 질문드려요.

0

128

2