* 혼자공부하는 컴퓨터 구조 운영체제를 공부한내용을 정리하였습니다.
- 동시다발적으로 실행되는 프로세스들은 서로 협력하며 영향을 주고 받는다.
- 이 과정에서 자원의 일관성을 보장해야한다.
- 프로세스와 쓰레드 둘다 동기화의 대상이다. (편의상 프로세스 동기화로 통일)
동기화의 의미
- 프로세스들의 수행 시기를 맞추는것을 말한다.
- 실행 순서 제어
- 상호 배제 : 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기
- 실행의 문맥을 갖는 모든 대상은 동기화 대상이기에, 스레드도 동기화 대상
실행순서제어를 위한 동기화 : Reader Writer Problem
- 읽기는 쓰여진 내용이 있어야 가능하다. 즉, 실행순서가 있다는것에서 발생하는 문제
상호배제를 위한 동기화 : Bank Account Problem
- 공유가 불가능한 자원의 동시 사용을 피하기 위한 동기화
- 잔고에 동시에 값을(a: 10원,b: 15원, 잔고: 0원)을 저장한다면 25원이 아닌 10 or 15원으로 초기화 될것이다.
Producer & Consumer problem
- 생산자와 소비자가 '총합'변수를 공유하고 동기화를 하지않았다면
- 생산자에 +100,000 ,소비자에 -100,000을 했을때 0이 나오지 않는다고 한다.
동시에 접근해서는 안되는 자원
1. 공유자원
- 여러 프로세스 혹은 스레드가 공유하는 자원
- 전역변수, 파일, 입출력장치, 보조기억장치 등
2. 임계구역
- 동시에 실행하면 문제가 발생하는 자원(공유자원)에 접근하는 코드 영역
- 앞선 예시의 '총합' 변수, '잔액' 변수 등
* 임계 구역에 진입하고자 하면 진입한 프로세스 이외에는 대기해야 한다.
고급언어가 저급언어로 변환될때 저급언어는 더 많은 줄수를 가지게 된다.
동기화가 제대로 이루어져 있지 않으면 저급언어의 많아진 줄수가 서로 겹쳐서 실행되게 되고
겹쳐서 실행되게 되면 당연히 제대로된 값을 산출해내지 못할것이다.
(고급언어에서 1줄이더라도, 저급언어로 변환시 3줄이상이 될 수 있다.)
운영체제가 임계구역 문제를 해결하는 세가지 원칙
1. 상호배제 (mutual exclusion) : 한 프로세스가 임계구역에 있다면, 다른 프로세스는 못들어온다.
2. 진행 (progress) : 임계 구역에 어떤 프로세스도 진입하지 않았다면 진입하고자 하는 프로세스는 들어갈 수 있다.
3. 유한 대기 (bounded waiting) : 한 프로세스가 임계 구역에 진입하고 싶다면 언젠가는 임계 구역에 들어올 수 있어야 한다.
(무한정 대기하는 상황을 만들어서는 안된다.)
'프로그래밍 > 컴퓨터구조 및 운영체제' 카테고리의 다른 글
프로세스 연속 메모리 할당 (feat 외부 단편화) (0) | 2023.11.22 |
---|---|
프로세스 교착상태 (1) | 2023.11.21 |
CPU 스케줄링의 알고리즘 알아보기 (0) | 2023.11.18 |
CPU 스케쥴링 개념 (0) | 2023.11.16 |
스레드 알아보기 (1) | 2023.11.15 |