프로그래밍/컴퓨터구조 및 운영체제

프로세스 동기화

gameObject 2023. 11. 19. 10:04
728x90

* 혼자공부하는 컴퓨터 구조 운영체제를 공부한내용을 정리하였습니다.


- 동시다발적으로 실행되는 프로세스들은 서로 협력하며 영향을 주고 받는다.

- 이 과정에서 자원의 일관성을 보장해야한다.

- 프로세스와 쓰레드 둘다 동기화의 대상이다. (편의상 프로세스 동기화로 통일)

 

동기화의 의미

- 프로세스들의 수행 시기를 맞추는것을 말한다.

- 실행 순서 제어

- 상호 배제 : 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기

- 실행의 문맥을 갖는 모든 대상은 동기화 대상이기에, 스레드도 동기화 대상

 

실행순서제어를 위한 동기화 : 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) : 한 프로세스가 임계 구역에 진입하고 싶다면 언젠가는 임계 구역에 들어올 수 있어야 한다.

(무한정 대기하는 상황을 만들어서는 안된다.)

728x90