[운영체제] 11. 임계구역 문제

이호용·2021년 4월 16일
0

운영체제

목록 보기
10/12

아래 내용들은 양희재 교수님의 운영체제 강의를 듣고 정리한 내용입니다.

임계구역 문제

  • The Critical-Section Problem

Critical section(임계구역) 이란?

  • A system consisting of multiple threads
  • 여러개의 쓰레드로 이루어진 시스템에서
  • Each thread has a segment of code, called critical section, in
    which the thread may be changing common variables,
    updating a table, writing a file, and so on.
  • 각각의 쓰레드는 코드영역을 가지고 있는데, 이 쓰레드들이 함께 사용하는 변수 테이블들을 바꾸거나 업데이트 하는 공간을 임계구역이라고 한다.
    이 임계구역을 수정하다가 다른 쓰레드로 넘어가서 수정하고 있는 데이터를 다시 건드리면 문제가 발생할 수 있다.

Solution

아래 세가지를 모두 만족해야함.

    1. Mutual exclusion (상호배타): 오직 한 쓰레드만 진입(다른 하나가 임계구역에 들어가면 다른것들은 못들어가게함.)
    1. Progress (진행): 진입 결정은 유한 시간 내 (임계구역에 들어갈수 있는것들중에 어떤게 먼저 들어갈지 정함.)
    1. Bounded waiting (유한대기): 어느 쓰레드라도 유한 시간 내 (어느 스레드든 기다리면 임계구역에 진입 가능)

동기화 도구 (Synchronization Tools)

이러한 임계구역 문제를 해결하기 위해 사용하는 동기화 도구라는게 있다.

  • Semaphores
  • Monitors
  • Misc.

Semaphores (세마포)

  • n. (철도의) 까치발 신호기, 시그널; U (군대의) 수기(手旗) 신호 (역에서 직원이 깃발 들고 내리며 가도 되는것과 안되는것을 판단하는것과 비슷함.)
  • 동기화 문제 해결을 위한 소프트웨어 도구
  • 구조: 정수형 변수 + 두 개의 동작 (P, V)

세마포의 구조

  • 세마포의 구조는 int 형 변수 value와 value를 증가시키는 release, value를 감소시키는 acquire로 구성되어 있다.
class Semaphore {
int value; // number of permits
Semaphore(int value) {
... }
void acquire() {
... }
void release() {
... }
}

세마포 세부구성

  • acquire안에는 value를 감소시키고, 추가적으로 value값이 음수일떄는 더이상 쓰레드가 진행안되고 block시켜준다.
  • 반대로 realese는 value를 증가시키고, queue가 비워져있지 안흐면 하나를 큐에서 없앰.
void acquire() {
  value--;
  if (value < 0) {
  add this process/thread to list;
  block;
  }
}
void release() {
  value++;
  if (value <= 0) {
  remove a process P from list;
  wakeup P;
  }
}

0개의 댓글