Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Q5) What is Semaphore? (Interview Question in OS) #13

Open
terry-yes opened this issue Dec 23, 2020 · 4 comments
Open

Q5) What is Semaphore? (Interview Question in OS) #13

terry-yes opened this issue Dec 23, 2020 · 4 comments
Labels

Comments

@terry-yes
Copy link
Contributor

terry-yes commented Dec 23, 2020

Q) '세마포(Semaphore)'에 대해 설명해주세요😯

@terry-yes terry-yes added the OS label Dec 24, 2020
@joey-ful
Copy link
Contributor

joey-ful commented Dec 24, 2020

즉석

음... 뭐더라 😖 (노인공격)

@365kim
Copy link
Member

365kim commented Dec 26, 2020

즉석
세마포어는 동기화 도구 중 하나입니다.



보충
와 이것도 스터디때 제가 문제냈네요... 새롭... (링크)

세마포어는 동시 에 리소스에 접근 허용이 가능한 개수를 의미하는 정수 변수입니다.
즉, 세마포어 S 값이 0이거나 음수이면 프로세스는 크리티컬 섹션에 진입할 수 없습니다.
세마포어 중 0과 1의 값만 가능해서 'Mutex락'과 유사하게 동작하는 것을 이진 세마포어(binary semaphores)라고 합니다.

@terry-yes
Copy link
Contributor Author

임계영역을 어떻게 다루나요? - [2020 카카오 인턴 jko님 면접 질문]
Semaphore란? - [보이저 엑스 면접 질문리스트]

🦊 용어 정리

  • 임계구역(Critical Section): 다른 프로세스와의 공유 데이터를 접근할 수 있는 프로세스의 코드 부분
  • 경쟁상황(Race Condition): 도시에 여러 개의 프로세스가 동일한자료를 접근하여 조작할 때, 그 실행 결과가 접근이 발생한 특정 순서에 의존하는 상황
  • 임계구역 문제(Critical Section Problem): 경쟁상황이 일어나지 않게 임계구역을 설계하는 방법을 찾아내는 문제
  • 임계구역 문제의 해결 조건:
    • 상호 배제: 하나의 프로세스가 임계 구역에 들어가 있따면 다른 프로세스는 들어갈 수 없어야 한다.
    • 진행(Progress): 임계 구역에 들어간 프로세스가 없는 상태에서, 들어가려고 하는 프로세스가 여러 개 있다면 어느 것이 들어갈지를 적절히 결정해주어야 한다.
    • 한정 대기(Bounded waiting): 다른 프로세스의 기아(Stravation)를 방지하기 위해, 한 번 임계 구역에 들어간 프로세스는 다음 번 임계 구역에 들어갈 때 제한을 두어야 한다.

🦊 세마포

  • 임계구역 문제의 해결방안에 대표적으로 뮤텍스, 세마포, 모니터가 있음
  • 세마포: 동시에 리소스에 접근 허용이 가능한 개수를 의미하는 정수 변수(from 미혜님 OS문제)
  • 세마포는 wait 연산(=P 연산)과 signal 연산(V 연산)으로만 접근할 수 있다.
    • wait, signal 코드 (이해를 돕기위한 코드, 면접에서 언급할 필요는 없을듯)
//wait연산
wait(S) {
	while (S <=0)
		; // busy wait
	S--;
}
// signal연산 
signal(S) {
  S++;
}
  • 세마포만큼 프로세스가 동시에 공유데이터에 접근할 수 있다. 프로세스가 한개 접근할 때마다 세마포는 1씩 줄어든다.

    • 세마포가 0이된 이후에 접근을 시도하던 프로세스A는 바쁜 대기를 하게되고 Critical Section에서 프로그램을 수행중이던 프로세스B는 작업을 마치고 세마포를 반납하게된다. 비로소 이때 프로세스A는 공유데이터에 접근할 수 있다.
  • 세마포의 종류

    • 이진 세마포: 0,1로 이루어진 세마포, 공유데이터에 한번에 하나의 프로세스만 접근가능(뮤텍스와 비슷함)
    • 카운팅 세마포: 접근하는 프로세스 갯수 제한이 없는 세마포(임의의 양의 정수)
  • 세마포의 한계

    • 2개 이상의 프로세스가 동시에 Critical Section에 진입할 수 있으므로 상호 배제를 보장할 수 없음

    • 우선순위가 높은 프로세스가 바쁜대기를 하다가 우선순위가 낮은 프로세스가 먼저 Critical Section에 도달하는 우선순위 역전(Priority Inversion)이 일어날 수 있다.

    • 프로그래머가 코드로 직접 구현하기 복잡하다. (데드락이 생기지 않게 wait연산과 siganl연산의 순서를 잘 고려해야한다.)

🐳 보너스 문제

임계구역 문제를 해결하는 방법으로 모니터도 있습니다. 세마포에 비해 모니터에 장점이 무엇일까요?

@terry-yes
Copy link
Contributor Author

  • 모니터: critical section을 한번에 한 프로세스만 접근할 수 있게 하는 추상자료형(abastract data type)입니다.
//형태
Monitor monitor-name
{
 // 지역변수 선언
 Public entry p1(…){}
 Public entry p2(…){}
}

모니터는 락의 획득과 해제과정(세마포에서의 wait과 signal연산)에 대해 프로그래머가 고려하지 않아도 됩니다.

보통 객체지향언어(Java 등)에서 언어차원에서 지원하는 기능이기에 (데드락이 걸리지않게 잘 짜야하는) 세마포에 비해 구현이 쉽지만 세마포만큼 빠르다는 장점이 있습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants