Stacked-Book / os-hardware

OS/하드웨어 관련 스터디
0 stars 0 forks source link

임계영역(critical section) #10

Closed youngreal closed 2 years ago

youngreal commented 2 years ago
  1. 임계영역은 무엇인가요
  2. 임계영역 문제를 해결하기위해 꼭 필요한 조건 세가지
  3. 위의 세가지조건을 만족하면서 임계영역을 해결하기위한 방법(1) - 뮤텍스는 무엇인가요
  4. 위의 세가지조건을 만족하면서 임계영역을 해결하기위한 방법(2) - 세마포어는 무엇인가요
  5. 위의 세가지조건을 만족하면서 임계영역을 해결하기위한 방법(3) - 모니터는 무엇인가요
lee-ji-hoon commented 2 years ago

임계영역

한 순간 반드시 프로세스 하나만 진입해야 하는데, 프로그램에서 임계 자원을 이용하는 부분으로 공유 자원의 독점을 보장하는 코드 영역을 의미합니다.

  • 임계 영역은 지정된 시간이 지난 후 종료됩니다.
  • 즉 공유되는 자원, 즉 동시접근하려고 하는 그 자원에서 문제가 발생하지 않게 독점을 보장해줘야하 하는 영역을 임계 영역이라고 합니다.

멀티 스레드가 공용 리소스에 접근할 때 임계구역을 다루는 방식

동시성 프로그래밍의 가장 큰 숙제는 공유자원이다. 공유자원을 안전하게 관리하기 위해서는 상호배제를 달성하는 기법이 필요하다.

모든 사진과 내용은 를 보고 정리한 내용입니다! 블로그에 사진까지 같이 있으니 블로그에서 보시는 것도 추천합니다.

Mutext

화장실이 하나 뿐이 없는 식당과 비슷하다. 화장실을 가기 위해서는 카운터에서 열쇠를 받아 가야 한다.

  • 화장실에서 볼일을 보고 있는데 다른 테이블에 있는 어떤 남자가 화장실에 가고 싶어졌다.
  • 이 남자는 아무리 용무가 급하더라도 열쇠가 없기 때문에 화장실에 들어갈 수 없다.

→ 결국 남자는 당신이 용무를 마친 후 나올 때까지 카운터에서 기달려야 한다!

Semaphore

세마포어는 손님이 화장실을 좀 더 쉽게 이용할 수 있는 레스토랑이다. 세마포어를 이용하는 레스토랑의 화장실에는 여러 개의 칸이 있다. 그리고 화장실 입구에는 현재 화장실의 빈 칸 개수를 보여주는 전광판이 존재한다.

모니터

하나의 프로세스 내의 다른 스레드간 동기화에 사용됩니다.
모니터는 프레임워크나 라이브러리 그 자체에서 제공된다.

  • 일련의 동기화 작업들이 캡슐화돼 있어서 synchronized wait() notify() 등의 키워드를 통해 편하게 동기화할 수 있습니다.
  • 즉 세마포어와 달리 wait, signal 없이 함수 앞에 synchronized 를 붙여주기만 하면 상호배제하여 함수의 작업을 수행합니다.

간단 정리

뮤텍스 : 한 쓰레드, 프로세스에 의해 소유될 수 있는 key를 기반으로 한 상호배제 기법 세마포어 : 현재 공유 자원에 접근할 수 있는 쓰레드, 프로그세스의 수를 나타내는 값을 두어 상호배제를 달성하는 기법 모니터 : synchronized 를 붙여주기만 하면 상호배제된다!

뮤텍스와 세마포어의 차이

Jaeeun1083 commented 2 years ago

임계영역이란?

임계 영역의 문제

전형적인 프로세스의 일반적인 구조

image

임계 영역 문제 해결 방법

Mutual Exclusion (상호 배제)

Progress (deadlock을 피하기 위한)

Bounded Waiting (starvation을 피하기 위한)

this-is-spear commented 2 years ago

임계영역은 무엇인가요

임계 영역(critical section)

임계 영역이란

임계영역은 각 프로세스에서 공유 데이터를 조작하는 명령을 포함하는 코드 영역을 의미합니다. 즉 ,임계영역은 병렬 컴퓨팅에서 둘 이상의 스레드가 동시 접근해서는 안되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부를 말합니다.

임계영역 안에서는

임계 구역은 지정된 시간이 지난 후 종료됩니다. 때문에 어떤 스레드나 프로세스가 임계 구역에 들어가고자 한다면 지정된 시간만큼 대기해야 합니다. 즉, 한 번에 하나의 프로세스만 공유 데이터에 접근하기 위해서는 특정한 프로세스가 임계 영역을 수행 중이면 다른 프로세스는 자신의 임계 영역의 코드를 수행할 수 없어야 합니다.

임계 영역의 문제를 해결하기 위해서

스레드가 공유자원의 배타적인 사용을 보장받기 위해서 임계 구역에 들어가거나 나올 때는 세마포어와 같은 문제를 해결하기 위한 동기화 매커니즘을 사용합니다.

코드의 구역

각 프로세스는 자신의 임계 구역에 진입하려면 진입 허가를 요청해야 합니다. 이런 요청을 구현한느 코드 부분을 입장 구역(entry section)이라 합니다. 입장 구역에서 기다리다 진입 허가가 나면 임계 구역에 들어갑니다. 임계 구역 이후에는 임계 구역을 빠져나왔음을 알리는 코드 부분인 퇴장 구역(exit scetion)이 있습니다. 퇴장 구역에서는 권한을 반납하게 됩니다. 또한 그 밖의 나머지 코드 부분들을 총칭하여 나머지 구역(remainder section)이라 합니다.

do {
      **entry section** <- 입장 영역
            critical section <- 임계 영역
      **exit scetion** <- ****퇴장 영역
      remainder section (non critical section)
}while (true)

임계영역 문제를 해결하기위해 꼭 필요한 조건 세가지

임계 구역 문제는 임계 구역으로 지정되어야 할 코드 영역이 임계 구역으로 지정되지 않았을 때 발생할 수 있는 문제를 의미합니다. 임계영역을 해결하기 위해서는 상호 배제, 한정 대기, 진행이라는 조건을 만족해야 합니다.

상호 배제(Mutual exclusion)

상호 배제 조건은 한 프로세스가 임계 영역에 들어갔을 때 다른 프로세스는 임계 영역에서 실행될 수 없다는 것을 의미합니다. 임계 영역에 들어가려고 시도하는 프로세스는 임계영역에 진입한 프로세스가 나올 때까지 보류되다가 권한을 부여받을 때, 임계영역에 들어가게 됩니다.

한정 대기(Bounded Waiting)

한정 대기 조건은 임의의 프로세스가 자신의 임계 영역에 진입 요청을 한 후 허가되기 전까지 다른 프로세스들이 자신의 임계 영역에 진입하는 횟수에는 한계가 있어야 한다는 걸 의미합니다. 어떤 프로세스도 임계 영역에 들어가는 것이 무한정 연기 되어서 기아상태와 교착상태가 발생하게 두면 안됩니다.

💡 다른 프로세스의 기아 상황(Starvation)을 방지하기 위해 한 번 임계 영역에 들어간 프로세스는 다음 번 임계 영역에 들어 갈 때 제한을 두어야 합니다.

진행

진행 조건은 임계 영역에서 실행되는 프로세스가 없는 상태에서 임계 영역으로 진입하려 하는 프로세스들이 있다면 잔류 영역에서 실행되지 않고 있는 프로세스들만 다음으로 진입할 수 있는 대상이 되며 이 선택은 무한하게 연기할 수 없어야 하는 걸 의미합니다. 즉, 임계 영역 바깥에 있는 프로세스가 다른 프로세스의 임계 영역 진입을 막아서는 안됩니다.

💡 임계 영역에 들어간 프로세스가 없는 상태에서 들어가려 하는 프로세스가 여러개 있다면 어느 것을 들일지 적절히 결정해야 합니다.

위의 세가지조건을 만족하면서 임계영역을 해결하기위한 방법(1) - 뮤텍스는 무엇인가요

뮤텍스는 공유 자원을 사용하기 전에 설정하고, 사용한 후에 해제하는 잠금입니다. 잠금이 설정되면 다른 스레드는 잠긴 코드 영역에 접근할 수 없습니다. 또한 뮤텍스는 잠금 또는 해제 중 하나의 상태만 가지게 됩니다.

위의 세가지조건을 만족하면서 임계영역을 해결하기위한 방법(2) - 세마포어는 무엇인가요

세마포어는 일반화된 뮤텍스입니다. 간단한 정수 값과 두 가지 함수인 wait, signal로 공유 자원에 대한 접근을 처리합니다. wait()은 자신의 차례가 올 때까지 기다리는 함수이고, signal()은 다음 프로세스로 순서를 넘겨주는 함수입니다.

프로세스가 공유 자원에 접근하면 세마포어에서 wait 작업을 수행하고, 프로세스가 공유 자원을 해제하면 세마포어에서 sinal 작업을 수행합니다. 세마포어에서는 조건 변수가 없고 프로세스가 세마포어 값을 수정할 때 다른 프로세스는 동시에 세마포어 값을 수정할 수 없습니다.

위의 세가지조건을 만족하면서 임계영역을 해결하기위한 방법(3) - 모니터는 무엇인가요

모니터는 둘 이상의 스레드나 프로세스가 공유 자원에 안전하게 접근할 수 있도록 공유 자원을 숨기고 해당 접근에 대해 인터페이스만 제공하는 방법입니다. 모니터는 모니터 큐를 통해 공유 자원에 대한 작업들을 순차적으로 처리하고 있습니다.

모니터는 세마포어보다 구현하기 쉬우며 모니터에서 상호 배제는 자동인 반면에 세마포어에서는 상호 배제를 명시적으로 구현해야하는 차이점이 있습니다.

youngreal commented 2 years ago

1. 임계영역은 무엇인가요 하나 이상의 다른 프로세스와 공유 데이터에 접근하고 갱신할수있는 구역을 뜻한다

임계영역 문제를 해결하기위해 꼭 필요한 조건 세가지 상호배제

한정대기

진행

위의 세가지조건을 만족하면서 임계영역을 해결하기위한 방법(1) - 뮤텍스는 무엇인가요

위의 세가지조건을 만족하면서 임계영역을 해결하기위한 방법(2) - 세마포어는 무엇인가요

위의 세가지조건을 만족하면서 임계영역을 해결하기위한 방법(3) - 모니터는 무엇인가요