[운영체제] 공유자원과 임계구역 간단 정리

glow_soon·2022년 6월 9일
0

공유 자원: 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일

경쟁 상태 (race condition) : 2개이상의 프로세스가 공유자원을 병행적으로 일걱나 쓰는 상황, 타이밍이나 순서등이 결과 값에 영향을 줄 수 있다. (동시성 문제)

임계 구역 (Critical Section) : 공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 코드 영역 (즉, 임계 구역 안에서 race condition 발생)

임계구역 해결조건

1. 상호 배제(Mutual Exclusion)

한 프로세스가 임계구역에 들어가면 다른 프로세스는 들어갈수 없다.

2. 한정 대기 (bounded waiting)

상호 배제 때문에 기다리는 프로세스가 무한대기하면 안된다.

3. 진해의 융통성(progress flexblity)

임계구역에 프로세스가 없다면 어떤 프로세스라도 들어가서 자원활용 가능하다.


Thread (쓰레드)

프로그램의 실행단위이며 하나의 프로세스는 여러개의 쓰레드로 구성이 가능하다.
하나의 프로세스를 구성하는 쓰레드들은 프로세스에 할당된 메모리, 자원을 공유 가능
프로세스과 같이 실행, 준비, 대기 등의 실행 상태를 가지며 상태변화가 될때마다 쓰레드 문맥교환을 수행 한다

Process와 Thread의 차이

  • 프로세스 : 실행중인 프로그램
  • 쓰레드 : 프로세스의 실행단위라 할 수 있으며 독립적인 작업을 수행해야 하기 때문에 각자의 stack과 PC레지스터 값을 가진다.

Thread의 장점

  • 프로세스보다 생성, 종료, 전환시간이 짧다.
  • 커널의 도움없이 상호 통신 가능

단점

  • 하나의 쓰레드 문제가 발생하면 전체 프로세스가 영향받음
  • 자원 공유의 문제, 동기화 작업이 필요하다

쓰레드 동기화는 race condition을 피하기 위해 임계영역 내에서 상호배제를 제공하는 메커니즘이다!!!

세마포어(Semaphore)

여러개의 프로세스에 의해서 공유되는 자원의 접근 제어를 위한 도구, P와 V의 명령으로만 접근이 가능하다
(P : 임계구역 들어가기전 수행 (wait))
(V : 임계구역 나갈때 수행 (signal))

  • 계수 세마포어 (Counting Semaphore)
    general semaphore
    초기 값은 가능한 자원의 수
    세마포어의 값 범위는 0과 양의 정수, 여러개의 공유자원을 상호배재

  • 이진 세마포어 (Binary Semaphore)
    mutex locks
    세마포어의 값 0 or 1
    계수 세마포어 보다 간단, 한개의 공유자원을 상호배재

세마포어 연산은 처리중에 인터럽트 되면 안된다.

  • Monitor : 세마포어를 실제로 구현한 프로그램(병행성 구조), 한순간에 하나의 프로세스만이 모니터에 진입 가능하다.
profile
나는야 코린이

0개의 댓글