과거의나야도와줘
[CS / 운영체제] CH3. 프로세스 #2,#3 (Thread) 본문
CH3. 프로세스 #2,#3 (Thread)
목차
1. Thread
2. Single and Multithreaded Processes
3. Benefits of Threads
4. Implementation of Threads
1. Thread란?
스레드(Thread)(a.k.a lightweight process)란 프로세스 내에 존재하며
cpu를 실행하는 프로세스보다 더 작은단위입니다.
Thread의 구성
- Program Counter(현재 이 스레드가 어디까지 진행 되었는지),
- Register set(이 스레드에 할당된 레지스터 셋)
- Stack space(이 스레드가 실행되며 생성된 stack들)
위의 구성요소들은 다른 스레드들과 독립된 현재 이 스레드에만 쓰이는 것들입니다.
이 외에 다른 Thread들과 공유할 수 있는 부분은 최대한 공유합니다
Thread끼리 공유하는 부분(=Task)
- Code seciton
- Data section
- OS resources
- Network connection 등등
전통적인 개념의 Heavyweight process는 하나의 Thread를 가지고 있는 Task로 볼 수있습니다
2. Single and Multithreaded Processes
싱글스레드 프로세스와 멀티스레드 프로세스는 말 그대로 프로세스가 스레드 하나로 구성되어 있는지와 여러개의 스레드로 구성되어 있는지로 구분됩니다.
싱글스레드 프로세스는 한번에 하나의 일만 처리 할 수 있습니다.
이 말인 즉슨 프로세스가 유저의 Input이나 네트워크에서 data의 입력이 일어나 blocked 또는 waiting 상태가 된 경우 그 일이 끝나기 전까지 프로세스가 계속 멈춰있어야 합니다.
반면, 멀티스레드 프로세스는 하나의 스레드가 block, waiting 상태인 경우 다른 스레드의 일을 처리하면 되기에 프로그램의 성능이 향상 됩니다.
프로세스가 실행 할 수 있는 스레드의 갯수는 CPU의 코어 갯수에 의해 제한되고 OS 스케쥴러가 이 스레드들의 실행 순서를 관리합니다.
3. Benefits of Threads
멀티스레드의 장점
1. 성능 향상
위에서 봤듯이 하나의 스레드를 사용하는 것보다 멀티 스레드를 사용하는 것이 프로그램의 성능을 향상시킵니다.
2. 반응성 향상
입력, 화면 출력, 네트워크 데이터 수신 등 스레드를 나눠 놓으면 입력을 받는 동시에 출력을 처리하는 등 반응성이 향상 됩니다.
3. 자원 공유
한 프로세스 내에서 스레드들은 공유할 수 있는 자원은 최대한 공유합니다. 여러개의 싱글스레드 프로세스를 사용하는 것을 생각해보면 훨씬 자원이 절약되는 것을 알 수 있습니다.
4. 멀티 코어의 효율 향상
위에서 프로세스가 실행 할 수 있는 스레드의 갯수는 CPU의 코어 갯수에 의해 제한된다고 했는데 반대로 생각해보면 멀티스레드를 사용해야 CPU의 멀티 코어의 병렬처리 능력을 놀지 않게 최대한 사용하는 것입니다.
5. 더 쉬운 프로그래밍(멀티 프로세싱보다)
멀티프로세싱보다 쉽고 효율적인 방법으로 한 프로그램에서 멀티 태스킹을 구현 할 수 있습니다.
멀티스레드의 단점
물론 단점도 있습니다. 멀티스레드를 잘못 사용하면 경쟁상태(Race condition, 둘 이상의 입력 또는 조작의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태)나 교착상태(Deadlock, 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태)가 일어날 수 있습니다
또한, 적절히 사용하지 못하면 프로그램의 복잡도만 높이는 결과가 일어납니다.
4. Implementation of Threads(스레드의 구현)
이 부분은 강의도 없고 면접에서도 잘 안물어 봐서 일단은 참고 했던 사이트를 올려두겠습니다.
Implementing threads :: Operating systems 2018 (uu.se)
Implementing threads :: Operating systems 2018
Implementing threads A thread library provides programmers with an API for creating and managing threads. Support for threads must be provided either at the user level or by the kernel. Kernel level threads are supported and managed directly by the operati
www.it.uu.se
스레드의 구현은 OS 레벨에서 구현하는 kernel-level threads와 유저 레벨에서 구현하는 user-level threads로 나뉘어진다 정도만 일단 알면 될 것 같습니다.
면접 질문 1!
운영체제에서 스레드에 대해 간단히 설명해 주세요
스레드란 프로세스 내에 존재하며 cpu를 실행하는 프로세스보다 더 작은 단위입니다.
프로그램 카운터, 스택과 같이 각 스레드의 처리에 독립적으로 필요한 것들을 제외한 나머지 공유할 수 있는 부분은 다른 스레드들과 공유합니다.
모든 프로세스는 최소 한개의 스레드를 가지고 있으며 스레드의 갯수에 따라 싱글스레드 프로세스, 멀티스레드 프로세스로 구분 합니다.
면접 질문 2!
싱글스레드에 비해 멀티스레드 프로세스의 장점을 말해주세요
싱글스레드 프로세스는 한번에 하나의 일만 처리 할 수 있어 프로세스가 유저 input등의 일에 의해 blocked 또는 waiting 상태가 된 경우 그 일이 끝나기 전까지 프로세스가 계속 멈춰있어야 하는 비효율이 발생합니다
반면, 멀티스레드 프로세스는 하나의 스레드가 block, waiting 상태인 경우 다른 스레드의 일을 처리하면 되기에 프로그램의 성능이 향상 됩니다.
스레드에 관해 Chat-GPT에게 몇개 물어 봤는데 같이 보면 좋을 것 같아요
'CS정리 > 운영체제' 카테고리의 다른 글
[CS/운영체제] CH9. 가상 메모리 2 (0) | 2023.02.27 |
---|---|
[CS/운영체제] CH9. 가상 메모리 1 (0) | 2023.02.27 |
[CS/운영체제] CH6. 프로세스 동기화(동기화 관련 문제, 모니터) (0) | 2023.02.05 |