clamp
Clamp
clamp
글쓰기 관리
전체 방문자
오늘
어제
  • 분류 전체보기 (509)
    • IOS (85)
    • SwiftUI+TCA+Combine (9)
    • RxSwift + MVVM (56)
    • Clean Architecture (12)
    • SWIFT (56)
    • iOS - TDD (2)
    • 디자인패턴 (4)
    • CS (56)
      • 알고리즘 (29)
      • 운영체제 (15)
      • 자료구조 (2)
      • 네트워킹 (4)
      • 기타 (6)
    • 회고 (0)
    • Firebase (18)
    • SwiftUI (10)
    • iOS - UIKit (11)
    • iOS - 오픈소스 (6)
    • 코딩테스트 (166)
      • 프로그래머스 (164)
    • 정보처리기사 (14)
    • GitHub (2)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Swift
  • uikit
  • ㅅ
  • Q

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

CS/운영체제

운영체제(OS) - 세마포어(Semaphore)와 뮤텍스(Mutex)

2022. 5. 8. 19:57

프로세스간 메시지를 전송하거나, 공유메모리를 통해 특정 데이터를  공유하게 되는 경우 문제가 발생한다.

즉, 공유된 자원에 여러 개의 프로세스가 동시에 접근 하면서 문제가 발생하는 것으로써 공유된 자원 속 하나의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한해 두어야 하는데, 이를 위하여 고안된 것이 바로 세마포어(Semaphore)다.

 

세마포어와 뮤텍스의 차이

- 세마포어(Semaphore): 공유 자원의 데이터 혹은 임계영역(Critical region)등에 여러 Process 혹은 Thread가 접근하는 것을 막아줌.(동기화 대상이 하나 이상)

 

- 뮤텍스(Mutex): 공유 자원의 데이터 혹은 임계영역(Critical region)등에 하나의 Process 혹은 Thread가 접근하는 것을 막아줌.(동기화 대상이 하나)

 

세마포어 예) 

컴퓨터가 여러 프로그램을 동시에 수행하는 다중 프로그래밍 시스템에서는 프로세스들간의 상호배체와 동기화를 위한 기본적인 연산이 필요하게 되고 세마포어는 여러 프로세스들에 의해 공유되는 변수로 정의된다.

 

세마포어는 P연산, V연산으로 이루어져있다.

P: S를 1 감소

V: S를 1 증가

 

이 연산을 이용해 임계영역에 동기적으로 진입하는지)

S를 1로 생각해보고 프로세스는 S가 1일때만 임계영역으로 진입할 수 있다고 볼 경우, S가 0일 경우 진입하지 못한다.

초기 S = 1
P(S) // S가 1 감소되어 0
//critical region start
//공유 자원을 사용할 수 있는 영역
//critical region end
V(S) //S가 증가되어 1

P(S)를 수행하면 S가 1이 감소되어 0이된다. 만약 다른 프로세스가 이 임계영역을 보고 S가 0이면 대기한다. P연산에는 S가 0이라면 대기하는 코드가 들어갈 것이다. 만일 0이 아니라면, 즉 1이상이라면 S를 1감소시킨 후에 임계영역에 들어갈 수 있게 된다.

 

P(S)의 코드

P(S){
    while(S==0){
    //S가 0이면 wait
    }
	S--; //S를 1 감소시킴.
}

V(S)는 S를 하나 증가시킨다. 그렇게 함으로써 P(S)에서 기다리고 있는 프로세스가 S가 1이 되는 순간 진입할 수 있게 해준다.

V(S){
	S++;
}

 

여기서 S에 주목할 필요가 있다. 만일 S가 1이라면 임계영역에 들어갈 수 있는 프로세스는 하나가 된다. 그렇다면 S가 2라면 임게영역에 들어갈 수 있는 프로세스는 2개가 된다.

 

 

이렇게 Mutex와 Semephore차이가 생기게 된다.

저작자표시 비영리 동일조건 (새창열림)
    'CS/운영체제' 카테고리의 다른 글
    • 운영체제(OS) - 가상메모리(Virtual Memory)
    • 운영체제(OS) - 메모리 관리(Basic Memory Management)
    • 운영체제(OS) - 식사하는 철학자 문제(Dining Philosophers Problem)
    • 운영체제(OS) - 스케줄링(Scheduling)
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바