Skip to content

Commit

Permalink
Merge pull request #11 from Ajeong-Im/main
Browse files Browse the repository at this point in the history
[2주차]_12장_프로세스 동기화_임아정.md
  • Loading branch information
Yujin-Baek authored Sep 4, 2023
2 parents 3fae751 + 496b90a commit c0a9e06
Showing 1 changed file with 147 additions and 0 deletions.
147 changes: 147 additions & 0 deletions 2주차/12장/12장_프로세스 동기화_임아정.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
# 발표 자료

## 혼자 공부하는 컴퓨터구조 + 운영체제 12강

### 프로세스 동기화란?

```
💡 프로세스들 사이의 수행 시기를 맞추는 것
```

1. 실행 순서 제어: 프로세스를 올바른 순서대로 실행하기
2. 상호 배제: 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기

---

### 1. 실행 순서 제어를 위한 동기화

```
💡 동시에 실행되는 프로세스를 올바른 순서대로 실행하는 것
```
<img width="926" alt="12강1" src="https://github.com/Ajeong-Im/computer-architecture-and-operating-system/assets/86238348/778c38b1-fe9b-47df-bf45-109809d08d95">


### 2. 상호 배제를 위한 동기화

```
💡 공유가 불가능한 자원의 동시 사용을 피하기 위해 사용하는 알고리즘
```

프로세스 A

1. 계좌의 잔액을 읽어 들인다
2. 읽어 들인 잔액에 2만 원을 더한다
3. 더한 값을 저장한다

프로세스 B

1. 계좌의 잔액을 읽어 들인다
2. 읽어 들인 잔액에 5만 원을 더한다
3. 더한 값을 저장한다

<img width="1048" alt="12강2" src="https://github.com/Ajeong-Im/computer-architecture-and-operating-system/assets/86238348/b8014dad-5cfa-44b1-a712-e704a8edd96c">

<img width="1048" alt="12강3" src="https://github.com/Ajeong-Im/computer-architecture-and-operating-system/assets/86238348/6ad3185a-1d1d-4b51-8e5d-9cc960beae05">


---

### 공유 자원과 임계 구역

**공유 자원이란?**

```
💡 동시에 실행되는 프로세스들이 작업을 하는 공동의 자원
```

eg) 전역 변수, 파일, 입출력장치, 보조 기억 장치 등

**임계 구역이란?**

```
💡 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역
```

eg) 앞서 보여준 계좌 잔액 문제에서의 ‘잔액’ 변수
<img width="1048" alt="12강4" src="https://github.com/Ajeong-Im/computer-architecture-and-operating-system/assets/86238348/145df673-6018-4e67-a638-c05cf91be6e1">


**레이스 컨디션**: 잘못된 실행으로 인해 여러 프로세스가 동시 다발적으로 임계 구역의 코드를 실행하여 문제가 발생하는 경우

### 상호 배제를 위한 동기화 원칙

1. 상호 배제: 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어올 수 없음
2. 진행: 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 진입이 가능해야 함
3. 유한 대기: 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가는 임계 구역에 들어올 수 있어야 함

---

### 프로세스 동기화의 진행 과정

**뮤텍스 락이란?**

```
💡 동시에 접근해서는 안 되는 자원에 동시에 접근하지 못하도록 만드는 상호 배제를 위한 동기화 도구
```

1. 전역 변수 lock

자물쇠 역할, 잠금 여부 확인

1. acquire 함수

프로세스가 임계 구역에 진입하기 전 호출하는 함수

- 임계 구역이 잠겨 있다면 열릴 때까지 (lock이 false가 될 때까지) 반복적으로 확인
- 임계 구역이 열려 있다면 잠금 (lock을 true로 변경)

1. release 함수

임계 구역에서의 작업이 끝난 뒤 호출하는 함수

- 현재 잠겨 있는 임계 구역을 열어 줌 (lock을 false로 변경)

**세마포란?**

```
💡 뮤텍스 락보다 조금 더 일반화된 방식의 동기화 도구, 공유 자원이 여러 개 있는 상황에서도 적용 가능
```

1. 전역 변수 S

사용 가능한 공유 자원의 개수

1. wait 함수

임계 구역에 들어가도 좋은지, 기다려야 할지를 알려주는 함수

1. signal 함수

임계 구역 앞에서 대기하는 프로세스에 진입 가능 신호를 보내주는 함수

```jsx
wait() {
S--;
if ( S < 0 ) {
add this process to Queue; //
sleep(); //
}
}
```

```jsx
signal() {
S++;
if ( S <= 0 ) {
remove a process p from Queue //
wakeup(p) //
}
}
```

**모니터란?**

```
💡 하나의 데이터마다 하나의 모니터를 결합할 수 있으며, 결합된 객체가 동시에 두 개 이상의 스레드에 의해 접근할 수 없도록 막는 잠금 기능을 제공하는 동기화 도구로, 조건 변수를 사용함
```
<img width="798" alt="12강5" src="https://github.com/Ajeong-Im/computer-architecture-and-operating-system/assets/86238348/5b01ea26-af86-4d47-ad6e-931e93e24523">

0 comments on commit c0a9e06

Please sign in to comment.