Skip to content

Commit

Permalink
docs: 내용 추가, 오타 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
lja3723 committed Apr 9, 2024
1 parent e314757 commit 7167c9e
Showing 1 changed file with 31 additions and 4 deletions.
35 changes: 31 additions & 4 deletions _posts/Computer-Science/OS/2024-04-08-thread.md
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ _실행 결과 참고 도표_
| **대기 상태(Blocked)** | 스레드가 입출력 요청하거나 `sleep()`과 같은<br> syscall로 인해 커널에 의해 중단된 상태 |
| **종료 상태(Terminated)** | 스레드가 종료된 상태 |

!스레드의 상태 변화]({{ img_path }}/4.1. 스레드의 상태 변화.png){: width='550'}
![스레드의 상태 변화]({{ img_path }}/4.1. 스레드의 상태 변화.png){: width='550'}



Expand All @@ -302,7 +302,7 @@ _실행 결과 참고 도표_
#### 5.2.1. 프로세스 종료

- 프로세스에 속한 어떤 스레드라도 `exit()` syscall 부르면 **프로세스 종료**(모든 스레드 종료)
- **메인 스레드의 종료**(C언에서 main()의 종료) → **모든 스레드도 함께 종료**
- **메인 스레드의 종료**(C언에서 `main()`의 종료) → **모든 스레드도 함께 종료**

#### 5.2.2. 스레드 종료

Expand Down Expand Up @@ -530,11 +530,38 @@ _Thread Switching 과정 2_

### 10.1. 멀티스레드와 fork()와 exec()

작성 예정
- **멀티스레드에서 `fork()` 또는 `exec()` syscall을 실행한다면 어떻게 되는 것인가?**
1. 여러 스레드 중 한 스레드가 `fork()` 호출하는 경우
- 새 프로세스는 **`fork()`를 호출한 스레드만 복제**한다.
2. 여러 스레드 중 한 스레드가` exec()` 호출하는 경우
- **프로세스 전체**가 사라진다.

- **그러면, fork()가 모든 스레드를 복제한다면 어떻게 되는 것인가?**
- 일부 시스템은 전체 스레드를 복제하는 fork도 존재한다. **그러나,**
- `fork()` 호출 이후 `exec()` 호출시: **모든 스레드 복제한 의미가 없음**
- `fork()` 호출 이후 `exec()` 미호출시: **모든 쓰레드 복제가 의미 있음**

### 10.2. 자원 동기화 문제: thread-safe 개념

작성 예정
하나의 자원에 대해 여러 스레드가 동시에 접근하면 **공유 데이터 훼손 문제**가 발생하게 된다.

- **Thread-safe**
- 멀티스레드 프로그래밍에서 어떤 함수/변수/객체가 여러 스레드로부터 동시 접근이 이뤄져도 프로그램의 실행에 문제가 없는 것

#### 10.2.1. Thread-safe를 지키는 방법

1. **Re-entrancy**
- 어떤 함수가 한 스레드에 의해 호출되어 실행중일 때, 다른 스레드가 그 함수 호출하더라도 결과가 각각에게 올바르게 주어져야 함
-
2. **Thread-local storage**
- 공유 자원의 사용을 최대한 줄여 각 스레드에서만 접근 가능한 저장소들을 사용, 동시 접근을 막음
- 동기화 방법과 관련되어 있고, 공유상태 피할 수 없을 때 사용하는 방법
-
3. **Mutual exclusion**
- 공유 자원 꼭 사용해야 할 경우 그 자원의 접근을 세마포어 등의 락으로 통제
-
4. **Atomic operations**
- 공유 자원에 접근할 때 원자 연산을 이용하거나 '원자적'으로 정의된 접근 방법을 사용함으로써 상호 배제 구현



Expand Down

0 comments on commit 7167c9e

Please sign in to comment.