Chapter6 프로세스 동기화 & 상호배제

2021. 12. 16. 09:00· CS/[OS]
목차
  1. 1. 동기화(Synchronization)란?
  2. 1.1 용어
  3. 1.2 Mutual Exclusion
  4. 2. Mutal Exclusion Solution
  5. 2.1 SW Solution
  6. 2.1.1 Dekker's Algorithm
  7. 2.1.2 Peterson's Algorithm
  8. 2.1.3 Dijkstra's Algorithm
  9. 2.1.4 문제점
  10. 2.2 HW Solution
  11. 2.2.1 TAS(Test And Set) Instruction
  12. 2.3 OS supported SW Solution
  13. 2.3.1 Spinlock
  14. 2.3.2 Semaphore
  15. 2.3.3 Eventcount/sequencer
  16. 2.4 Language-Level Solution
  17. 2.4.1 Monitor

Chapter6 프로세스 동기화 & 상호배제

1. 동기화(Synchronization)란?

  • 다중 프로그래밍 시스템내에서 프로세스들은 서로 독립적인 동작을 하기 때문에, 공유 자원을 사용할 때 문제가 생김 → 동기화가 필요
    • 동기화(Synchronization) : 프로세스들이 서로 동작을 맞추는 것
    • 비동기적(Asynchronous) : 프로세스들이 서로에 대해 모름
    • 병렬적(Concurrent) : 여러 개의 프로세스들이 동시에 시스템에 존재

 

1.1 용어

  • Shared data(공유 데이터, Critical data) : 공유 데이터
  • Critical Section(임계 영역) : 공유 데이터를 접근하는 코드 영역
  • Mutual Exclusion(상호 배제) : 둘 이상의 프로세스가 동시에 critical sectiond에 진입하는 것을 막는 것
  • 기계어 명령(machine instruction) : 명령 실행 중에 인터럽트를 받지 않음(원자성, 분리불가)
  • primitive : 기본 연산

 

1.2 Mutual Exclusion

    • enterCS()
      • Critical Section 진입 전 검사
      • 다른 프로세스가 CS 안에 있는지 검사
    • exitCS()
      • CS을 벗어날 때의 후처리 과정
      • CS을 벗어남을 시스템에 알림primitives
  • Requirements
    • Mutual Exclusion(상호배제) : CS에 프로세스가 있으면, 다른 프로세스의 진입 금지
    • Progress(진행) : CS 안에 있는 프로세스 외에는, 다른 프로세스가 CS에 진입하는 것을 방해 하면 안됨
    • Bounded Waiting(한정대기) : 프로세스의 CS 진입은 유한시간 내에 허용되어야 함.



2. Mutal Exclusion Solution

2.1 SW Solution

2.1.1 Dekker's Algorithm

  • Two Process ME을 보장하는 최초의 알고리즘

 

2.1.2 Peterson's Algorithm

  • Dekker's 알고리즘의 간략화 버전

 

2.1.3 Dijkstra's Algorithm

  • 최초로 프로세스 n개의 상호 배제 문제를 소프트웨어적으로 해결

2.1.4 문제점

  • 속도가 느림
  • 구현이 복잡함
  • ME primitive 수행 중에 Preemtion이 될 수 있음
  • Busy waiting



2.2 HW Solution

2.2.1 TAS(Test And Set) Instruction

  • Test와 Set을한번에 수행하는 기계어
    • 실행 중 interrupt를 받지 않음
  •  
    • 3개 이상의 프로세스의 경우, Bounded Waiting 조건 위배
      • Starvation이 나타날 수 있음
  • 특징
    • 구현이 간단
    • Busy Waiting 존재 → Semaphore로 해결



2.3 OS supported SW Solution

2.3.1 Spinlock

  • 정수 변수
  • 연산의 종류
    • 초기화, P(), V() 연산으로만 접근가능
      • OS가 support 해줌
      • 전체가 한 instruction cycle에서 수행 됨
  • 특징
    • 멀티 프로세서 시스템에서만 사용 가능
    • Busy waiting

 

2.3.2 Semaphore

  • Busy Waiting 문제를 해결한 solution
  • 음이 아닌 정수형 변수(S)를 가지고 함
    • 임의의 변수(S) 하나씩 ready queue 하나가 할당 됨
  • 연산의 종류
    • 초기화, P(), V()
      • P : 검사, V : 증가
      • 모두 indivisible 연산(OS support)
  • 종류
    • Binary semaphore : S가 0과 1 두 종류의 값만 가짐, 상호배제나 프로세스 동기화 목적으로 사용
    • Counting semaphore : S가 0이상의 정수값을 가질 수 있음, Producer-Consumer 문제 등을 해결하기 위해 사용
  • 특징
    • No busy waiting
    • wake-up 순서는 비결정적 → starvation
  • 해결할 수 있는 동기화 문제들
    • Mutual Exclusion
    • Process Synchronization problem
      • Processe들의 실행 순서 맞추기
    • Producer-Consumer problem
      • Producer : 메시지를 생성하는 프로세스 그룹
      • Consumer : 메시지를 전달받는 프로세스 그룹

        • 단일 버퍼 일 때
        • N개의 버퍼일 때
    • Reader-Wirter problem
      • Reader : 데이터 읽기 연산만 수행
      • Writer : 데이터에 대해 갱신 연산을 수행
      • 데이터 무결성 보장 필요
        • Reader들은 동시에 데이터 접근 가능
        • Writer들이 동시에 데이터 접근할 때, 동기화 필요
      • 해결법 : reader나 writer 한 쪽에 우선권 부여
    • Dining philosopher problem

 

2.3.3 Eventcount/sequencer

  • 은행의 번호표와 비슷한 개념
  • Sequencer
    • 정수형 변수
    • 생성시 0으로 초기화, 항상 증가만 함
    • 발생 사건들의 순서 유지
    • ticket() 연산으로 접근 가능
      • 현재까지 ticket() 연산이 호출 된 횟수를 반환
  • Eventcount
    • 정수형 변수
    • 생성시 0으로 초기화, 항상 증가만 함
    • 특정 사건의 발생 횟수를 기록
    • read(E), advance(E), await(E, v)연산으로만 접근 가능
      • read(E) : 현재 Eventcount 값 반환
      • advance(E) : E ← E + 1, E를 기다리는 프로세스를 깨움(wake-up)
      • await(E, v) : v는 정수형 변수, E < v이면 E에 해당하는 프로세스를 대기시킴
  • Mutual Exclusion solution
  • Producer-Consumer proble solution
  • 특징
    • No busy waiting
    • No starvation



2.4 Language-Level Solution

2.4.1 Monitor

  • 공유 데이터와 Critical Section의 집합
  • 구조
    • Entry queue(진입 큐) : 모니터 내의 procedure 수만큼 존재
    • Mutual exclusion : 모니터 내에는 항상 하나의 프로세스만 진입 가능
    • Information hiding(정보 은폐) : 모니터 내의 프로세스만이 공유 데이터 접근 가능
    • Condition queue(조건 큐) : 모니터 내의 특정 이벤트를 기다리는(signal()) 프로세스가 대기하는 곳
    • Signaler queue(신호제공자 큐) : 모니터에 항상 하나의 신호제공자 큐가 존재
      • signal() 명령을 보낼 프로세스가 임시 대기
  • 자원 할당 문제 solution
  • Producer-Consumer Problem solution
  • Reader-Writer Problem solution
    • reader/writer 프로세스들간의 데이터 무결성 보장
    • writer 프로세스에 의한 데이터 접근 시에만 상호 배제 및 동기화가 필요
  • Dining philosopher problem solution
    • 5명의 철학자가 생각하는 일 또는 스파게티 먹는 일만 반복적으로 수행
    • 포크는 철학자들 사이에 1개씩 존재(총 5개)하고 스파게티를 먹으려면 양 옆의 포크(2개)가 필요
    • 공유 자원 : 스파게티, 포크
  • 특징
    • Language-level 구조
    • 사용이 쉬움
    • Deadlock등 error 발생 가능성이 낮음
    • 지원하는 언어에서만 사용 가능
    • 컴파일러가 OS를 이해하고 있어야 함
저작자표시 (새창열림)

'CS > [OS]' 카테고리의 다른 글

Chapter8 메모리(주기억장치) 관리  (0) 2021.12.23
Chapter7 교착상태(Deadlock Resolution)  (0) 2021.12.21
Chapter5 프로세스 스케줄링  (0) 2021.12.14
Chapter4. 스레드(Thread)  (0) 2021.12.09
Chapter3 프로세스 관리  (0) 2021.12.07
  1. 1. 동기화(Synchronization)란?
  2. 1.1 용어
  3. 1.2 Mutual Exclusion
  4. 2. Mutal Exclusion Solution
  5. 2.1 SW Solution
  6. 2.1.1 Dekker's Algorithm
  7. 2.1.2 Peterson's Algorithm
  8. 2.1.3 Dijkstra's Algorithm
  9. 2.1.4 문제점
  10. 2.2 HW Solution
  11. 2.2.1 TAS(Test And Set) Instruction
  12. 2.3 OS supported SW Solution
  13. 2.3.1 Spinlock
  14. 2.3.2 Semaphore
  15. 2.3.3 Eventcount/sequencer
  16. 2.4 Language-Level Solution
  17. 2.4.1 Monitor
'CS/[OS]' 카테고리의 다른 글
  • Chapter8 메모리(주기억장치) 관리
  • Chapter7 교착상태(Deadlock Resolution)
  • Chapter5 프로세스 스케줄링
  • Chapter4. 스레드(Thread)
쿠엔크
쿠엔크
우아한테크코스 5기 BE 에단 Github : https://github.com/cookienc
쿠엔크
기러기는 기록기록
쿠엔크
전체
오늘
어제
  • 분류 전체보기 (132)
    • CS (46)
      • [OS] (12)
      • [NETWORK] (10)
      • [DATABASE] (11)
      • [BASIC CONCEPT] (1)
      • [DATA STRUCTURE] (7)
      • [ALGORITHM] (5)
    • LANGUAGE (17)
      • [JAVA] (17)
    • DESIGN_PATTERN (2)
    • FRAMEWORK (18)
      • [SPRING] (18)
    • ORM (11)
      • JPA (11)
    • AWS (7)
    • BOOK (10)
      • [자바 웹 개발 워크북] (3)
      • [이펙티브 자바] (7)
    • 개발 (19)
      • [오류] (7)
      • [고민] (1)
      • [우테코] (10)
      • [iTracker] (1)
    • Tip (1)
      • [Plugins] (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 오류
  • Effective Java
  • JPA
  • 디자인 패턴
  • 자바 웹 개발 워크북
  • aws
  • ArgumentResolver
  • Spring
  • 스프링
  • java
  • 데이터베이스
  • 네트워크
  • 자료구조
  • 가비아
  • 개념
  • JVM
  • CORS
  • 알고리즘
  • 운영체제
  • HTTP

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
쿠엔크
Chapter6 프로세스 동기화 & 상호배제

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.