Mathlife
Mathlife의 학습 노트
Mathlife
전체 방문자
오늘
어제
  • 분류 전체보기
    • CS
      • 알고리즘
      • 자료구조
      • 운영체제
      • 네트워크
      • 데이터베이스
    • 프로그래밍 언어
      • Java
      • JavaScript
      • C·C++
      • Python
    • Backend
      • Spring
    • Frontend
      • HTML
      • CSS
    • Math
      • Linear Algebra
      • Calculus
    • AI
      • ML
      • DL
      • RL
    • Git

블로그 메뉴

  • 홈
  • 관리
  • 글쓰기
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Mathlife
CS/운영체제

[ETL] Multithreading

[ETL] Multithreading
CS/운영체제

[ETL] Multithreading

2022. 5. 22. 07:39

출처 : SNUON / 운영체제의 기초: 쉽게 배우는 운영체제 원리 / 서울대 홍성수 교수님

 

병렬성이 필요할 때마다 프로세스 만드는 건 오버헤드가 너무 큼

 

잘 생각해보면 프로세스에서 context는 자원이고 thread of control(execution stream)이 실행 주체다.

 

ex) CPU register : cpu 자원, memory context : 메모리 자원

 

그럼 thread of control은 여러 개 있어도 되지 않을까?

 

자원은 한 프로세스 분량만 유지하고 쓰레드들이 자원을 나눠서 쓴다

 

이제 쓰레드가 execution entity, 즉 CPU를 할당받는 주체다.

 

하나의 프로세스가 여러 개의 스택을 갖는다.

 

즉, 쓰레드들이 address space, resource는 공유하는 대신 각각의 스택을 갖는다.

 

추가로, 커널 메모리 공간에는 각 쓰레드들의 Thread ID도 저장해야 하고, TCB(Thread Control Blcok)도 만들어줘야 한다.

 

--------------------------------------------------------------------------------------------------------------

참고

지금 내가 제일 헷갈리는 부분 정리해뒀음

--------------------------------------------------------------------------------------------------------------

 

 

 

 

process : run-time process

task : design-time process

 

 

 

multi threading 의 목적

- 값싸게 concurrency 얻겠다.

(thread 생성, thread context switch 엄청 값싸다. 스택 하나 기껏해봐야 4K 밖에 안된다...)

- 반응성이 확 상승.

 

커널의 구현

 

 

 

User-level Implementation

 

- 커널이 전혀 모르게 구현하는 방법

(Old UNIX는 멀티쓰레딩 서비스 안해줘서 이렇게 구현할 수밖에 없다)

 

- 유저 레벨에서 스택, TCB, 스케줄러 전부 구현해야함.

 

- nonpreemptive scheduling : cpu yield 함수 호출하면 된다

 

- preemptive scheduling : 안된다

ex) 하나의 쓰레드가 read 인터럽트 걸어도 process가 통째로 blocking

ex) read 작업 끝나서 인터럽트 와도 OS가 어느 쓰레드에 대한 인터럽트인지 알 수 없어서 전달 X

 

- 과학 계산 같이 input 계속 받을 필요 없을 땐 좋다. reactive 시스템에선 못쓴다.

 

 

 

Kerenel-level implementation

 

- 스택, TCB, 스케쥴링 등을 커널이 다 해준다

 

- preemptive scheduling도 잘 된다

 

- 예를 들어, Windows가 커널 레벨 쓰레드를 지원한다

 

- 과학 계산할 때는 오버헤드로 인해 별로 안좋다

 

 

둘의 장점만 결합

 

 

 

응용 프로그래머 관점에서 multi-threading을 사용할 때에는 POSIX Pthread API가 가장 애용된다.

 

POSIX : UNIX 계열 변종 OS들의 API를 표준화하려고 만든 API

 

Pthread : POSIX에서 멀티쓰레딩에 관한 부분

 

 

 

'CS > 운영체제' 카테고리의 다른 글

메모리 관리  (0) 2022.05.24
Deadlock  (0) 2022.05.24
[ETL] Process Creation and Termination  (0) 2022.05.22
[ETL] Context Switching  (0) 2022.05.22
[ETL] Processes and Threads - Process Scheduling  (0) 2022.05.16
  • 커널의 구현
'CS/운영체제' 카테고리의 다른 글
  • 메모리 관리
  • Deadlock
  • [ETL] Process Creation and Termination
  • [ETL] Context Switching
Mathlife
Mathlife

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.