[운영체제] Thread & Concurrency(공룡책 스터디 정리)CS/운영체제2023. 12. 13. 10:54
Table of Contents
본 포스팅은 인프런 공룡책 강의를 기반으로 한 스터디 개인 정리를 위한 포스팅입니다.
잘못된 부분이 있다면 언제든 지적해주시면 감사하겠습니다!
Overview
- 메모리 상에 여러개의 프로세스가 적재되어있고 하나의 CPU가 Context Switch를 통해 작업이 수행되는 멀티 프로그래밍 구조를 배웠음.
- 하나의 프로세스가 여러개의 threads of control을 가질 수 있음.
프로세스(process)란?
- 프로세스(process)란 단순히 실행 중인 프로그램(program)
- 즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것.
- 이러한 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성.
스레드(thread)란?
- 스레드(thread)란 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미.
- 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행.
- 또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고도 함.
- 멀티 쓰레드에서 Code, Data, Files는 공유
쓰레드의 장점
- cpu의 사용률을 향상
- Resource Sharing : 자원을 보다 효율적으로 사용할 수 있다
- Responsiveness : 사용자에 대한 응답성이 향상
- Economy : Context Switch 보다 Thread Switch가 더욱 경제적.
- Scalability : 각각의 Thread를 통해 병렬처리도 가능.
- 작업이 분리되어 코드가 간결해진다
다만, 멀티스레드 프로세스는 여러 스레드가 같은 프로세스 내에서 자원을 공유하면서 작업을 하기 때문에 발생할 수 있는 동기화(synchronization), 교착상태(deadlock) 같은 문제들을 고려해야함.
Threads in Java
세가지 방식으로 사용 가능.
- Thread Class를 상속받아 사용
- 다중상속이 되지않아 추천하지 않음
- Runnable Interface를 상속받아 사용.
- Lambda 표현을 통해 새로운 클래스 선언하지 않고 Runnable 인터페이스를 사용.
Multicore Programming
Concurrency(동시성) vs Parallelism(병렬성)
Concurrency(동시성)
- 멀티 프로그래밍인 ‘척’ 하는 것.
- Single Processor 혹은 Single Core 환경에서 실행되는 것으로 Context Switching을 이용해서 프로세스를 처리.
- 싱글 코어에서 멀티스레드를 동작시키기 위한 방식
- 정말 물리적으로 동시에 동작하는 것은 아님.
Parallelism(병렬성)
- 둘 이상의 코어가 존재하는 멀티 코어 시스템에서 여러 쓰레드 혹은 프로세스를 동시에 처리하는 것.
- 한 개 이상의 스레드를 포함하는 각 코어들이 '동시에' 실행되는 성질
싱글 코어 : 하나의 스레드만 실행
멀티 코어 : 각각의 코어에 별도의 스레드 실행
다중 프로그래밍을 하기 위해 극복해야 할 5가지 과제
- Task 인식 : 응용을 분석하여 독립된 병행 가능 Task로 나눌 수 있는 영역을 찾는 작업이 필요하다.
- 균형 : 전체 작업에 균등한 기여도를 가지도록 태스크로 나누는 것도 중요
- 데이터 분리 : 태스크가 접근하고 조작하는 데이터 또한 개별 코어에서 사용할 수 있도록 함
- 데이터 종속성 : 태스크가 접근하는 데이터는 둘 이상의 태스크 사이에 종속성이 없는지 검토되어야 함
- 시험 및 디버깅 : 프로그램이 다중 코어에서 병렬로 실행 될때, 다양한 실행 경로가 존재할 수 있다.
따라서 다중 코어 시스템을 기반으로 소프트웨어 설계하기 위해서는 새로운 접근법이 필요
Multithreading Models
User Level Thread
- User Mode에서 사용하는 Thread
- 프로그래머가 작성한 코드가 실행되는 부분
- Thread에 대한 관리를 유저가 함.
Kernel Thread
- Kernel Model에서 사용하는 Thread
- 운영체제가 관리하는 Thread
- OS에서 관리하기 때문에 속도가 느림.
Between User and Kernel Thread
두 가지 Thread를 사용하여 3가지 Model을 만들 수 있음.
1. Many-to-One Model
- User Thread가 많아질수록 Kernel Thread 한개로 감당이 안되는 문제점이 있음.
- Drawbacks(드로우백) 현상 발생 가능
- user space의 Thread가 하나 죽으면 해당 프로세스는 죽어버리는 문제.
- Kernel Thread가 Single Thread이기 때문에 User Thread 하나가 막히면 전체 프로세스가 blocking 되버림.
- Kernel Thread 하나에 User Thread가 전부 붙어있기 때문에 병렬성이 보장되지 않음.
2. One-to-One Model
- 위의 Many-to-One Model의 단점을 보완할 수 있음.
- 하나의 User Thread가 막혀도 다른 Thread가 있기 때문에 중단되지 않음.
- 병렬성 또한 허용하는 모델
- 단점으로는 User Thread 한 개당 Kernel Thread(OS가 관리해서 속도가 느림)를 같이 만들어야 해서 overhead가 굉장히 큼.
3. Many-to-Many Model
- 여러 개의 Uesr Thread를 다중 매칭 시키는 모델
- 지금까지의 단점을 모두 극복한 모델.
- Two Level이라고 추가적인 Model또한 존재.
Thread Libraries
- Java API
- Thread Class
- Runnable Interface
- 등등
- 사용하는 라이브러리
- POSIX Pthreads
- POSIX를 기반 (IEEE 1003.1c)
- Windows thread
- Java thread
- POSIX Pthreads
Implicit Threading
- Thread Pools
- 무한루프 안에 쓰레드를 만드는 구문이 있으면 위험
- 쓰레드를 미리 N개 만들어놓고 사용하자!라는 느낌
- Fork & Join(X)
- explicit하게 쓰레딩하는 법.
- OpenMP
- C나 C++에서 병렬처리가 가능하도록 해주는 것.
Question 정리
- 멀티쓰레드 환경에서 생길 수 있는 문제점을 설명해주세요.
- 해당 문제점을 해결하기 위한 방안을 한가지 말해주세요.
- 유저 스레드와 커널 스레드에 대하여 설명해 주세요.
Refference
https://www.inflearn.com/course/운영체제-공룡책-전공강의
'CS > 운영체제' 카테고리의 다른 글
[운영체제] Synchronization Tools(공룡책 스터디 정리) (1) | 2024.01.16 |
---|---|
[운영체제] Cpu Scheduling(공룡책 스터디 정리) (0) | 2023.12.13 |
[운영체제] Processes (공룡책 스터디 정리) (1) | 2023.12.09 |
@Beemo9 :: BeHinD
개발 기술 블로그, Dev
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!