1. 동기화
동기화는 프로세스를 올바른 순서대로 실행하고, 동시에 접근해서는 안 되는 자원에는 하나의 프로세스만 접근하도록 제어하는 것을 말합니다. 만약 두 개 이상의 프로세스가 동시에 데이터에 접근할 경우에는 어떤 순서로 데이터에 접근했는지에 따라서 결괏값이 달라질 수 있으며 이를 레이스 컨디션(경쟁상태)이라고 합니다.
2. 공유자원
공유자원은 공동으로 사용하는 자원으로 전역변수나 입출력 장치, 보조기억장치 등이 될 수 있습니다.
3. 임계구역
임계 구역은 공유자원에 접근하는 코드 중 레이스 컨디션이 발생할 수 있는 특정 부분을 의미합니다.
이러한 임계 구역으로 발생하는 문제를 해결하기 위해서는 3가지 원칙이 지켜져야 합니다.
- 상호 배제 : 이미 작업 중인 프로세스가 있으면 다른 프로세스는 임계 구역에 진입해서는 안된다
- 진행 : 임계구역에 작업중인 프로세스가 없으면 임계구역에 진입하고자 하는 프로세스는 진입할 수 있어야 한다
- 유한 대기 : 임계 구역에 진입하려는 프로세스는 무한정 기다려서는 안 된다.
4. 동기화 기법
종류 | 내용 | 구현 |
뮤텍스락 | 임계구역에 진입한 프로세스는 lock을 걸고 작업이 끝난 후에는 나갈 때 lock 풀고 나감(하나의 공유자원을 가정) | - lock : 프로세스들이 공유하는 전역변수 - acquire함수 : 임계구역이 잠겨 있으면 열릴 때까지 반복적으로 확인(busy wait)하고, 열려있다면 잠그는 함수 - release함수 : 잠긴 임계 구역을 열어주는 함수 |
세마포어 | 철도 신호기처럼 임계구역에 진입해도 좋을지 멈춰야할지 확인하며, 뮤텍스락과는 달리 레디큐를 통해서 busy wait을 방지함(다수의 공유자원을 가정) | - 전역변수 S : 임계구역에 진입할 수 있는 프로세스의 개수 - wait 함수 : 임계구역에 들어가도 좋을지 기다려야할지 알려주는 함수( -1) - signal 함수 : 임계구역에 들어가도 괜찮다고 알려주는 함수(+1) ex ) s= 2 p1 = wait -> 임계구역 -> signal p2 = wait -> 임계구역 -> signal p3 = wait -> 임계구역 -> signal |
모니터 | 공유자원을 다루는 인터페이스에 접근하기 위한 큐를 만들고 모니터 안에는 항상 하나의 프로세스만 들어오도록 함 | - 특정 프로세스가 아직 실행될 조건을 만족하지 않았을 때에는 wait을 통해 실행 중단 - 특정 프로세스가 실행될 조건을 만족했을 때에는 signal을 통해 실행 재개 |
Reference
혼자 공부하는 컴퓨터 구조 + 운영체제
'CS > 운영체제&컴퓨터구조' 카테고리의 다른 글
교착 상태(dead lock) (0) | 2022.11.03 |
---|---|
CPU 스케줄링과 알고리즘 (0) | 2022.11.03 |
프로세스 상태와 스레드 (0) | 2022.11.02 |
PCB(Process Control Block)와 문맥교환(Contect Switching), 메모리 공간의 구조 (0) | 2022.11.02 |
커널(Kernel)과 시스템 콜(Syetem call) (0) | 2022.11.02 |
댓글