포도가게의 개발일지
동시성 프로그래밍 본문
동시성 프로그래밍이란 ?
- 물리적으로는 하나의 일만 처리하지만 논리적으로 여러 일을 동시다발적으로 하는것
- 8장에서 나왔듯이 timer interrupt등 다양한 시그널들을 통하여 코어가 일을 나눠서 하게 된다.
동시성 프로그램을 만들기 위해 세 개의 기본 접근방법이 제공되며
- 프로세스
- I/O 다중화
- Thread
가 있다.
프로세스
- 8장에서 처럼 fork 등 chile process를 만들어 여러 프로세스를 만드는 기법
I/O 다중화
Thread
- 하나의 프로세스 안에 여러 thread를 만들어 일을 논리적으로 동시에 처리한다.
- 각 쓰레드는 고유의 정수 TID, 스택, 스택 포인터, 프로그램 카운터, 범용 레지스터, 조건 코드를 포함한 자신만의 context를 가진다.
- 하나의 프로세스 안에 가상 주소공간의 전체 내용(코드, 데이터, 힙, 공유라이브러리, 오픈한 file)을 공유한다.
- 특정 시점에서 메인 쓰레드(최초)는 peer thread를 생성하며 이때 부터 두 쓰레드가 동시에 돌아간다.
Pthread
- Posix Thread는 c 프로그램에서 쓰레드를 조작하는 표준 인터페이스이다.
공유변수(shared variables in Threaded Programs)
- Process와 달리 thread는 stack을 제외한 모든 자원을 공유하여 변수에 접근이 용이(사실 stack도 접근이 되긴하지만 분리시켜준다)
- 하지만 잘못된 스케쥴링(왜냐하면 core가 어떤 thread를 처리할지는 os에 달려있고 랜덤하게 일어나기때문)으로 잘못된 값을 도출 할 수 있다.
세마포어(Semaphores)
- 이러한 동시적으로 접근하는 것을 막기 위해 나온 알고리즘
- 그 유명한 다익스트라가 고안해 냈다.
- 핵심은 하나의 쓰레드가 그 변수에 접근해 있을때 다른 쓰레드들이 그 변수를 건들 수 없게 한다.
'CS' 카테고리의 다른 글
Kaist PintOS Project 2 (0) | 2021.10.13 |
---|---|
Kaist PintOS Project 1 (0) | 2021.10.04 |
네트워크 프로그래밍 & Echo server (0) | 2021.09.22 |
동적 메모리 할당 part 2 (0) | 2021.09.13 |
동적 메모리 할당 (0) | 2021.09.10 |