CS [운영체제] - 동기/비동기, 세마포어/뮤텍스 차이

링딩·2023년 3월 20일
0

Computer Science

목록 보기
8/49



🚦 동기와 비동기

* 동기의 정의

  • 요청과 그에 따른 결과가 동시에 일어나는 것
  • 즉 요청 후 결과가 와야만, 그 다음 작업이 이루어지는 방식

🤦‍♀️어떠한 일을 처리하는 동안 다른 일을 할 수 없다.

*비동기 정의

  • 요청과 그 결과가 동시에 일어나지 않는 것
  • 요청 후 결과가 오는 동안, 그 다음 작업이 이루어지는 방식

👍 동기보다 복잡하지만, 일을 처리하면서도 다른 쪽에서도 일을 할 수 있어 효율적임.




🚨 블로킹, 논 블로킹

정의 :

'블로킹'/'논-블로킹'은 동기/비동기와 관점이 다르고, 제어권이 어디에 있느냐에 대한 관점이다.

  • 블로킹
    호출된 함수가 자신의 작업을 모두 끝날 때 까지 제어권을 갖고 있어 호출한 함수가 대기하도록 함

  • 논-블로킹
    호출된 함수가 바로 return 해서 호출한 함수에게 제어권을 주어 다른 일을 할 수 있게



🚗 프로세스 동기화

A와 B를 동일하게 만드는 작업이다. 즉 여러 프로세스가 공유하는 자원의 일관성을 유지하는 것.
=> 공유하는 자원에 하나의 프로세스만이 이용하도록 제어


⭐ 경쟁 상태

여러 프로세스나 스레드가 '동기화 메커니즘' 없이 자원에 접근하려는 상황을 가리킵니다. 공유된 자원에 대한 접근 순서에 따라 실행 결과가 달라질 수 있는 상황을 의미

⭐임계영역

* 정의

동일한 자원에 동시에 접근하는 작업(ex. 공유하는 변수 사용, 동일 파일 접근 및 수정 등)을 실행하는 코드 영역을 뜻함.

  • 즉 동시에 접근하려고 하는 자원에서 문제가 발생하지 않게 독점을 보장해줘야 하는 영역
    => 멀티 스레딩의 문제점 중 하나

💬 <임계영역을 해결하기 위한 전제 조건>

  • 상호배제 : 한 프로세스가 임계영역에 들어갔을 때 다른 프로세스는 접근할 수 없게
  • 한정 대기 : 특정 프로세스가 진입 요청 후, 받아들여질 때까지 다른 프로세스들이 이 임계영역에 진입하는 횟수는 제한이 있어야 함.
    => 아예 한 번도 안들어가는 경우는 x야함.
  • 진행 : 임계 구역에 들어간 프로세스가 없는 상태에서, 들어가려고 하는 프로세스가 여러 개 있다면 어느 것이 들어갈지를 적절히 결정해주어야 한다.

해결방법

1. Mutex (뮤텍스)

ex) 이해 꿀팁: 화장실 키를 들고 갔다로 이해하자
뮤텍스는 상태가 오직 획득(Lock) / 해제(Unlock)만 존재한다

  • (정의)
    임계영역에 진입하는 프로세스는 'Lock'을 획득 -> 영역을 나올 때, 'Lock'을 방출

  • (한계) 다중처리기 환경에서는 시간적인 효율성 측면에서 적용이 어려움.


2. Semaphores(세마포)

스핀락과 뮤택스와 달리 표현형이 정수형으로, 하나 이상의 컴포넌트가 공유자원에 접근할 수 있게 허용한다. 소프트웨어상에서 임계영역 문제를 해결하기 위한 동기화 도구로 2가지로 나뉘어진다.

ex) 이해 꿀팁 🤔:
세마포어는 화장실이 여러 개 있고, 화장실 입구에는 현재 빈 화장실의 개수를 알려주는 전광판이 있는 식당과 비슷하다.
모든 칸의 화장실이 사용중일 때 전광판의 숫자는 0이 되며, 손님들은 전광판 숫자가 1로 바뀔 때까지 대기해야한다.

  • 카운팅 세마포

    • 도메인이 0 이상인 임의의 정수값인 세마포어
    • 여러개의 자원을 가질 수 있으며, 제한된 자원을 가지고 액세스 작업할 때 사용
  • 이진 세마포

    • 0 or 1의 값만을 가지는 세마포어
    • 임계영역 문제를 해결하는 데에 사용
      => 자원이 하나라 '뮤텍스'로도 사용가능


(결론)

  • '뮤텍스'는 상태가 0, 1 두 개 뿐인 binary Semaphore 라고 볼 수 있다.

  • '세마포어'는 프로세스(스레드)가 소유할 수 없는 반면, '뮤텍스'는 소유가 가능하며 프로세스(스레드)가 이에 대한 책임을 진다. (Mutex 의 경우 상태가 두개 뿐인 lock 이므로 lock 을 ‘가질’ 수 있다.)

  • '뮤텍스'는 동기화 대상이 오직 하나뿐일 때, '세마포어'는 동기화 대상이 하나 이상일 때 사용한다.

  • '세마포어'는 시스템 범위에 걸쳐있고 파일 시스템 상의 파일 형태로 존재한다.
    반면 '뮤텍스'는 프로세스 범위를 가지며 프로세스가 종료될 때 자동으로 해제된다.




1. 교착상태

두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리기 때문에 아무것도 완료되지 못하고 있는 상태

🤦‍♂️교착상태를 발생시키는 조건[모두 성립되어야 함]

1. 상호배제 : 하나의 프로세스가 자원을 사용중일 때 다른 프로세스는 그를 사용할 수 없다.
2.점유 대기 : 최소 하나의 자원을 점유하고 있으면서 다른 프로세스가 사용중인 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재한다.
3. 비선점 : 다른 프로세스가 자원을 사용중인 경우 그 사용이 끝날 때 까지 강제로 뺏을 수 없다.
4. 순환 대기 : 프로세스의 집합에서 순환형태로 자원을 대기하고 있어야 한다.


👍교착상태의 예방과 회피,회복, 무시

(예방)

조건 중 하나를 제거하면서 예방.

  • 상호 배제 부정 : 여러 프로세스가 공유 자원 사용
  • 점유 대기 부정 : 프로세스 실행 전 모든 자원 할당
  • 비선점 부정 : 점유중인 자원을 다른 프로세스가 요구하는 경우 그를 반납
  • 순환 대기 부정 : 자원에 고유 번호를 할당한 후 순서대로 자원 요구

(회피)

  • 은행원 알고리즘

프로세스가 자원을 요구할 때 시스템은 자원을 할당한 후에도 안정 상태로 남아있게 되는지 미리 검사하여 교착 상태를 회피한다.

그 외에 회복과 무시...

교착상태 발생시, 해결한다와 성능저하가 심할 경우 무시한다.


2. 기아상태

특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태를 말함.

(해결 방법)

  1. 프로세스 우선순위 수시 변경을 통해 각 프로세스 높은 우선순위를 가지도록 기회 부여
  2. 오래 기다린 프로세스의 우선순위 높이기
  3. 요청 순서대로 처리하는 요청큐 사용



참고

sangjin98님의 글을 참고하였습니다.

이대현 님의 글을 참고하였습니다.

underlier12 님의 글을 참고하였습니다.

profile
초짜 백엔드 개린이

0개의 댓글