[OS] Thread & Concurrency

Chris Kim·2024년 10월 15일

공룡책

목록 보기
5/14

1. Thread 개괄

지금까지 우리는 프로세스를 단일 스레드를 통제하는 실행중인 프로그램이락고 가정했다. 그러나 한 프로세스는 복수의 스레드를 가지고 있을 수 있다.
그래서 스레드는 LWP라고 하며, CPU를 점유하는 가장 작은 단위다. 스레드 ID, 프로그램 카운터, Register set, stack를 각 스레드가 포함해야 한다.

멀티 스레딩의 이점은 클라이언트-서버 프로그램에서 찾아볼 수 있다. 특히 응답성(responsiveness)이 좋다. 자원 공유(resource sharing)를 잘 할 수 있다. 그리고 경제성(economy)이 있다. 확장성(scalability)이 좋아 프로세스는 멀티프로세서 구조의 이점을 가질 수 있다.

2. Thread Library

JAVA에서 스레드는 Fundamental model of program execution이다. 자바는 다양한 기능을 제공하기에 스레드를 생성 관리하기 좋다. 자바에서 스레드를 관리하는 방법 3가지가 있다.
(1) 스레드 클래스 상속: 다중 상속이 안됨

(2) runnable interface를 구현하는 새로운 클래스를 정의하고 public void run()을 override 한다.

(3) 람다 표현식을 사용하는 방법도 있다.

(4)프로세스와 달리 부모 스레드의 대기는 join을 쓴다.

(5)스레드의 종료는 stop이 아닌 interrupt를 쓴다.

3. 멀티코어 프로그래밍

3.1 멀티코어 시스템 내의 멀티 스레딩

동시성 향상을 위한 멀티 코어 효율성이 중요해졌다. 단일 코어에서는 시분할을 했으나, 멀티코어면 그렇게 하지 않는다.

3.2 멀티코어 시스템 개발의 문제

(1) Identifying tasks: 작은 태스크로 나눌 수 있는지 찾아야한다.
(2) Balance: 같은 태스크 수행을 보장해야한다.
(3) Data splitting: 각 코어에서 실행될 수 있도록 데이터를 나눈다.
(4) Data dependency: 태스크 실행의 데이터 의존성 수용과 동기화 되었는지를 보장해야한다.
(5) Testing and debugging: 검사, 디버깅이 힘들어진다.
(6)

3.3 병렬처리의 유형


이 둘을 구분할 필요가 없다. 크게 중요하지 않음.

3.4 암달(Amdahl)의 법칙

4. 멀티스레딩

4. 유형

(1) 유저스레드
커널의 보조 없이 커널 위에 있다.

(2) 커널스레드
OS에 의해 직접적으로 관리되고 보조를 받는다.

4.2 두 스레드의 관계와 이를 나타낸 모델

(1) Many to One : 기본적인 모델
(2) One to One
(3) Many to Many

4.3 스레드 라이브러리

스레드 라이브러리는 스레드를 생성 관리하는 API를 제공한다.

  • POSIX Pthread(Exercise 4.17, 4.19)
    스레드 정의만이 있고, 구현이 포함되지 않음

4.4 암묵적 스레딩

암묵적 스레딩 전략

동시성, 병렬성을 어플리케이션에서 설계하는 것은 너무 어렵다. 따라서 이 부담을 컴파일러와 런타임 라이브러리에 넘겨주었다.

(1) Thread Pools: 다양한 스레드를 만들어 저장해둔다.
(2) Fork & Join: 스레딩을 명시한다. 암묵적 스레딩의 훌룡한 후보
(3) OpenMP: 컴파일러 지시어 집합과 API: 병렬 지역만 지정해주면 해당 블록의 코드는 병렬적으로 실행된다. 컴파일러 지시어를 소스코드의 병렬 지역에 삽입하면, 이 지시어들은 OpenMP 런타임 라이브러리로 하여금 해당 영역을 병렬적으로 실행하게 만든다.


(4) Grand Central Dispatch(GCD)

profile
회계+IT=???

0개의 댓글