포시코딩

[운영체제] 5. Process Synchronization (1) 본문

CS (Computer Science)

[운영체제] 5. Process Synchronization (1)

포시 2023. 5. 1. 19:19
728x90

키워드

synchronization, race condition, critical section

 

데이터의 접근

추상적으로 아래와 같이 구분됨

  • Storage Box: 데이터가 저장되어 있는 위치
  • Execution Box: 실제 연산하는 위치

  • 데이터를 읽기만 하면 누가 먼저 읽든, 읽는 동안 다른 곳에서 읽든 문제될 게 없지만
  • 데이터를 읽어와 연산 후 데이터를 수정하여 저장하는 방식에서는
    누가 먼저 읽었느냐에 따라 결과가 달라질 수도 있는 등
    여기서 생기는 문제를 Synchronization 문제라고 한다. 
  • 마찬가지로 한 곳에선 데이터를 증가시키려 하고 다른 곳에선 데이터를 감소시키려 하면
    문제가 발생 -> Race Condition(경쟁 상태)

  • Multiprocessor system처럼 메모리를 공유한다면 문제가 발생할 가능성 존재
  • 프로세스는 자신만의 주소 공간에 접근할 수 있지만 
    공유 메모리를 사용할 수 있는 방법이 있기 때문에 그런 상황에서도 문제 발생 가능성 존재

  • 제일 중요한건 운영체제 커널과 관련해서 생기는 문제다.
    -> 일반적인 경우엔 프로세스가 자기 주소 공간만 접근하기 때문에 process synchronization과 관련된 문제가
    발생할 일이 없지만 프로세스가 본인이 직접 실행할 수 없어 운영체제한테 요청하게 되는 부분에 대해서(시스템 콜)
    커널의 코드가 그 프로세스를 대신해서 실행할 경우 (커널의 데이터 접근)
    CPU를 뺏겨 다른 프로세스한테 넘어간 상황에서 해당 프로세스가 또 시스템 콜을 하여 운영체제한테 요청해서
    커널의 코드가 실행되면서 커널의 데이터를 접근해 Race condition 문제가 발생할 수 있음
  • 커널의 코드가 실행중일 때 인터럽트가 발생할 경우(인터럽트를 실행하는 코드도 커널의 코드)

  • 유저 레벨에서는 문제가 발생하지 않아도 운영체제 커널로 들어가면 커널에 있는 데이터는 
    여러 프로세스들이 동시에 사용할 수 있는 공유 데이터이기 때문에 문제가 발생한다.
  • 중요한 값을 건드리는 동안은 인터럽트가 들어와도 작업이 끝날 때까지는 인터럽트를 disable시켰다가
    작업이 끝난 후 처리되게끔 하여 문제가 발생하지 않도록 한다.
    -> 무작정 막으면 비효율적이기에 어떻게 처리할지가 Process Synchronization의 주제

  • 해결책: 커널 모드에서 수행 중일 때는 CPU를 preempt하지 않음
    커널 모드에서 사용자 모드로 돌아갈 때 preempt
    -> time sharing 시스템은 real time 시스템이 아니기 때문에 조금의 시간이 지체되었다고 해도 문제가 되지 않는다.

  • CPU가 여러 개일 경우 (multiprocessor일 경우)
    • interrupt enable/disable로 해결할 수 없음
    • 방법 1: CPU가 데이터를 들고가면서 Lock을 걸고 저장이 끝난 후 Unlock하는 방법
    • 방법 2: 사용자 프로그램이 아닌 운영체제의 커널을 여러 CPU가 동시에 접근하기 때문에 발생하는 문제
      -> 커널을 접근하는 CPU를 매순간 하나만 접근하게 하는 방법(대신 비효율적)

 

Process Synchronizatioin 문제

  • 공유 데이터(shared data)의 동시 접근(concurrent access)은 
    데이터의 불일치 문제(inconsistency)를 발생시킬 수 있다.
  • 일관성(consistency) 유지를 위해서는 협력 프로세스(cooperating process)간의 실행 순서(orderly execution)를
    정해주는 메커니즘이 필요하다.
  • Race condition
    • 여러 프로세스들이 동시에 공유 데이터를 접근하는 상황
    • 데이터의 최종 연산 결과는 마지막에 그 데이터를 다룬 프로세스에 따라 달라진다.
    • Race condition을 막기 위해서는 concurrent process가 동기화(synchronize)되어야 한다.

 

The Critical-Section Problem

(=임계구역 문제)

  • Critical-Section: 공유 데이터를 접근하는 코드
  • 하나의 프로세스가 critical section에 있을 때, 다른 모든 프로세스는 ciritical section에 들어갈 수 없어야 한다.
  • 보통 프로그램의 코드는 critical section이거나 아니거나. 즉, 공유 데이터를 접근하는 코드이거나 아니거나의 반복이다.
    그럼 이 앞뒤로 부가적인 내용을 추가해 race condition이 발생하지 않게 하는 소프트웨어적인 방법들이 존재한다.
    -> 뒤이어 나올 알고리즘들
728x90