Concurrency
- 병행성, 병행적인 프로세스들의 집합으로 응용 프로그램을 구조화함으로써 구현됨
- fork()
- Overhead in Process Model : 여러 개의 프로세스를 사용하는 모델에서 각각의 프로세스는 독립적, 통신을 위해서는 커널을 통한 IPC(Inter Process Communication)가 필요 + PCB의 크기가 크다 ⇒ 프로세스의 생성과 context switching에 오랜 시간이 걸림
Thread
- CPU 스케줄링의 기본 단위
- 한 프로세스 안에서 제어의 흐름
- pc, registers, stack ( 프로세스보다 작아 오버헤드를 줄임 )
- 자신만의 레지스터 상태와 스택을 가짐
- 같은 프로세스 안에서 여러 스레드 생성 가능, 프로세스를 위한 코드와 주소 공간과 운영 자원을 공유 가능
- 스레드가 실행되는 환경 : task
Multithreading
- Single Processor : Concurrency 달성(병렬적인 것처럼 보임, 계산 속도를 증가)
- Multiple Processor : Concurrency 달성(동시에 여러 스레드 실행, core의 병렬성)
User-level vs Kernel-level
- User-level threads : 유저 레벨에서 라이브러리 호출을 통해 커널 위에서 유지됨
- 스레드 관리가 유저 레벨에서 된다.
- 커널 모드로 전환 불가능, 빠르고 간편
- 애플리케이션에 특화된 스케줄링
- Blocking problem : 하나의 스레드에서 I/O처리를 시작했을 때 다른 스레드에서 일 진행 못함, 멀티 프로세서의 concurrency유지 못함(커널이 스레드의 존재를 모름)
- Kernel-level threads : 운영체제 안, 커널 안의 함수를 사용
- 커널에 의해 관리된다.
- 유저레벨에 비해 느리다
- Blocking problem 없음
- 현대 OS들은 커널을 지원
- Multithreading Models(Mapping Model)
- Thread libraries : 스레드를 생성하고 관리하기 위한 API, 유저 레벨과 커널 레벨의 역할이 서로 다름
- Thread Mapping and scheduling
- user level에서의 스케줄은 thread library를 통해 kernel level과 매핑되어 수행
- kernel level의 스케줄은 물리적 cpu와 kernel level 스레드들이 커널을 통해 매핑
- 병렬 실행 : virtual processor(커널 레벨)에 있는 스레드의 병행성, 물리적 코어들에 있는 스레드의 병행성
- 실제 병렬성(parallelism) : 하나의 스레드 : 하나의 코어의 1:1 관계(thread pinning)
Threading Issues
- fork() 이후에 exec()이 바로 호출되면, 모든 스레드를 복사할 필요가 없다.
- Signals(sw interrupt)
- Synchronous signals : 시그널을 발생시킨 동작을 수행한 프로세스에 전달
- Asynchronous signals : 동작 중인 프로세스 바깥에서 발생한 이벤트에 의해 발생
- Thread pools : 할 일을 기다리는 많은 스레드가 존재하는 풀 생성
- 새 스레드를 생성하는 것보다 요청에 응답하는 게 조금 더 빨라짐
- Thread Local Storaged(TLS) : 각각의 스레드들이 자기 자신만의 데이터를 가지게끔
❗ Concurrency는 한번에 많은 것을 처리(SW) / Parallelism은 한 번에 많은 일을 처리(HW) ❗
'Computer Science > Operating System' 카테고리의 다른 글
[개념] Memory Management 1 (0) | 2021.08.12 |
---|---|
[개념] Virtualization (0) | 2021.08.12 |
[개념] IPC (0) | 2021.08.12 |
[개념] I/O Management (0) | 2021.08.12 |
[개념] Process Management (0) | 2021.08.12 |