동현 유
척척석사
동현 유
전체 방문자
오늘
어제
  • 분류 전체보기 (181)
    • BlockChain (48)
      • [paper] Consensus (13)
      • [paper] Execution (19)
      • [paper] Storage (5)
      • [paper] ZKP (1)
      • [paper] Oracle (1)
      • Blockchains (9)
    • Java (19)
      • Java의 정석 (13)
      • Java 파헤치기 (5)
    • Python (20)
      • Python 뜯어보기 (6)
      • 데이터 분석 기초 (5)
      • Python 기초 강의 (6)
      • Python 기초 강의 부록 (3)
    • Golang (0)
    • MySQL (3)
      • programmers (2)
      • 기본 문법 (0)
    • 웹 프로젝트 (IBAS) (36)
      • Django 레거시 (14)
      • SpringBoot api 개편 (14)
      • Infra (3)
      • 서버 장애 기록 (4)
      • 신입팀원 교육 자료 (1)
    • CS (30)
      • Operating System (22)
      • Computer Security (3)
      • Network (4)
      • DBMS (1)
    • 책 (10)
      • 도메인 주도 설계 철저 입문 (9)
      • Real MySQL 8.0 (1)
    • BOJ 문제 풀이 (3)
    • 이러쿵저러쿵 (10)
    • 회고 (1)

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
동현 유

척척석사

CS/Operating System

[전공생이 설명하는 OS] 동기화 - (1) 용어 및 개념정리

2022. 5. 19. 14:21

동기화 문제가 왜 발생하는지에 대해서는 [전공생이 설명하는 OS] 쓰레드(Thread)와 동기화 문제 의 마지막 단락을 참고해주세요.


[동기화 관련 용어]

(1) Race Condition

  : 멀티쓰레드 또는 멀티 프로세스 환경에서 공유자원에 동시에 접근할 때, 의도치 않은 결과를 낳는 것을 race condition이라고 하고 다음과 같은 특성을 갖는다. 근본적으로는 [cpu 스케줄링 + 캐시(레지스터 포함) + non-atomic instruction] 때문에 발생하며, 이를 방지하기 위해서는 공유자원에 대한 동기화가 필요하다.

  • Non-Deterministic : 의도하지 않은 결과를 내는데, 결과를 예측할 수 없다.
  • Reproducible : 재현 가능하다.

(2) Critical Section

  : 공유자원에 접근하는 코드 영역이다. 동기화 문제는 결국 이 critical section 을 어떻게 다루는가에 대한 문제로 볼 수 있다. 크게는 상호배제(mutual exclusion) 전략과 조건동기화(conditional synchronization) 전략 두가지로 나눌 수 있다. 참고로 공유자원에 대해서 read-only 만 수행한다면 race condition은 발생하지 않는다.

(3) Mutual Exclusion

  : 상호 배제라는 뜻으로, critical section을 수행하는 실행흐름(thread or process)은 단 한 개로 한정되어야한다는 뜻이다. 다른 말로는 공유자원에 접근할 때 동시에 여러개의 프로세스나 스레드가 접근할 수 없도록 제한하는 방식이다.

(4) Conditional Synchronization

  : 조건부 동기화 방식으로 특정 조건에서만 공유자원에 접근할 수 있도록 제한하는 방식이다.


[Critical Section Problem]

 

동기화 문제를 해결한다는 것은, 임계영역에 대한 접근을 잘 제어한다는 것이다. 구체적으로는 아래의 3가지를 만족시켜야한다.

  1. Mutual Exclusion (상호 배제)
    : 임계 영역에 접근하는 실행흐름(process/thread)은 동시에 둘 이상이 될 수 없다.
  2. Progress (진행)
    : 임계 영역을 아무도 실행하고 있지 않을 때, 무제한 대기하지 않고 임계영역으로 들어갈 수 있어야한다. deadlock 상황을 예로 들 수 있다.
  3. Bounded Waiting (한정 대기)
    : starvation 이 발생하면 안된다. 즉 공유자원에 대한 access 요청을 했는데, 다른 프로세스들은 계속 접근하면서, 특정 프로세스만 무한정 대기하고 있으면 안된다. 공유자원 요청을 하면 언제가는 해당 자원을 할당 받을 수 있어야한다.

위에서 언급했다시피, 동기화 전략에는  (1) 상호배제, (2) 조건부 동기화 두가지가 있다. 다음 포스팅에서는 상호배제를 이용한 동기화 전략을 살펴보도록 하겠다..

'CS > Operating System' 카테고리의 다른 글

[전공생이 설명하는 OS] 동기화 - (3) 조건동기화 (pthread 예제 코드 포함)  (0) 2022.05.22
[전공생이 설명하는 OS] 동기화 - (2) 상호배제 전략 (Mutex)  (0) 2022.05.19
[전공생이 설명하는 OS] 쓰레드(Thread)와 동기화 문제  (3) 2022.04.28
[전공생이 설명하는 OS] 멀티 코어 프로세스 스케줄링  (0) 2022.04.28
[전공생이 설명하는 OS] 프로세스 스케줄링(feat. 알고리즘 장단점 비교)  (0) 2022.04.28
    동현 유
    동현 유
    Fault Tolerant System Researcher for more Trustful World and Better Lives. (LinkedIn: https://www.linkedin.com/in/donghyeon-ryu-526b8a276/)

    티스토리툴바