4-1. 동기화 개요
- 프로세스 동기화
- 프로세스들 사이의 수행 시기를 맞추는 것.
- 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기.
- 상호 배제 : 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기.
- 공유 자원
- 전역변수, 파일, 입출력장치, 보조기억장치 등 프로세스들이 공유하는 자원.
- 전역변수, 파일, 입출력장치, 보조기억장치 등 프로세스들이 공유하는 자원.
- 임계 구역 (critical section)
- 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역.
- 레이스 컨디션 (race condition)
- 잘못된 실행으로 인해 여러 프로세스가 동시에 임계 구역의 코드를 실행하여 문제가 발생하는 상황.
- 잘못된 실행으로 인해 여러 프로세스가 동시에 임계 구역의 코드를 실행하여 문제가 발생하는 상황.
- 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역.
- 상호 배제를 위한 동기화의 세 가지 원칙
- 상호 배제 (mutual exclusion)
- 한 프로세스가 임계 구역에 진입했다면, 다른 프로세스는 임계구역에 들어올 수 없다.
- 한 프로세스가 임계 구역에 진입했다면, 다른 프로세스는 임계구역에 들어올 수 없다.
- 진행 (progress)
- 임계구역에 어떤 프로세스도 진입하지 않았다면, 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.
- 임계구역에 어떤 프로세스도 진입하지 않았다면, 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.
- 유한 대기 (bounded waiting)
- 한 프로세스가 임계 구역에 진입하고 싶다면, 그 프로세스가 무한 대기를 해서는 안 된다.
- 한 프로세스가 임계 구역에 진입하고 싶다면, 그 프로세스가 무한 대기를 해서는 안 된다.
- 상호 배제 (mutual exclusion)
4-2. 동기화 기법
- 뮤텍스 락 (MUTual Exclusion lock)
- 상호 배제를 위한 동기화 도구.
- 기초적인 뮤텍스 락의 진행과정
- 프로세스가 임계구역에 진입 전, 임계구역의 lock 여부를 확인.
- 임계구역이 unlock 상태라면, 프로세스가 임계구역에 진입하고 상태를 lock으로 변경.
- 작업 완료 후 임계구역을 나오기 전에 임계구역을 unlock 상태로 변경.
- 만약 임계구역이 lock 상태라면, 대기하면서 지속적으로 1을 반복하여 임계구역 상태를 확인(바쁜대기)
- 상호 배제를 위한 동기화 도구.
- 세마포(semaphore)
- 임계구역과 비슷하나, 임계구역이 하나인 경우만 가정하는 뮤텍스 락과 달리, 임계구역이 여럿인 경우에도 적용 가능함.
- 이진 세마포(뮤텍스락과 비슷), 카운팅 세마포 등.
- 뮤텍스락 알고리즘에서 이용가능한 임계구역의 갯수를 추가함.
- 모니터(monitor)
- 공유 자원과 공유 자원에 접근하기 위한 인터페이스를 묶어 관리.
- 모니터는 인터페이스에 접근하기 위한 프로세스를 담은 큐를 만들고, 모니터 안에 항상 하나의 프로세스만 돌어오게 하여 상호 배제를 위한 동기화 제공.
- 실행 순서 제어를 위한 동기화로 조건변수(condition variable) 사용.
- 각 조건 변수에 대한 큐를 새로 만들어서, 해당 조건 변수로 wait 처리된 프로세스를 해당 큐에 넣음.
- 조건 충족으로 해당 조건변수에 대한 signal 함수 등으로 호출시, 해당 큐에 peek값인 프로세스를 모니터 안으로 들여보낸다.
참고 : 혼자 공부하는 컴퓨터구조 + 운영체제 (강민철 저)
'CS지식 > 운영체제' 카테고리의 다른 글
| 운영체제 Ch.6 가상 메모리 (0) | 2023.01.30 |
|---|---|
| 운영체제 Ch.5 교착 (0) | 2023.01.30 |
| 운영체제 Ch.3 CPU 스케쥴링 (0) | 2023.01.28 |
| 운영체제 Ch.2 프로세스와 스레드 (0) | 2023.01.20 |
| 운영체제 Ch.1 운영체제 시작하기 (0) | 2023.01.17 |