왜 스레드가 필요한가?
동일한 일을 여러개 하는 프로세스가 있다면 프로세스마다 독립적인 주소 공간이 만들어져서 메모리가 낭비된다.
스레드의 개념 1
스레드의 개념 2
스레드의 주소공간
스레드: 프로세스는 하나만 띄워 놓고, 프로그램의 어떤 부분을 실행할건지, 프로그램 카운터만 여러개 둔다.cpu를 실행하는 단위. 스레드는 주소공간(코드,데이터)을 공유한다. 스택에 ,pc, 레지스터 만 스레드 간에 독립적으로 가지고 있다.
스레드의 구성
스레드 장점
- 다중 스레드로 구성된 테스크 구조에서는 하나의 서버 스레드가 블락(웨이팅) 상태인 동안에도 동일한 테스크 내의 다른 스레드가 실행 (러닝)되어 빠른 처리를 할 수 있다.(빠른응답성)
- 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리률과 성능 향상을 얻을 수 있다.
- 스레드를 사용하면 병렬성을 높일 수 있다.
- 하나의 바이너리코드, 데이터, 리소스를 공유할 수 있다.
예1)웹브라우저에서 화면을 호출할때 스레드가 하나면 웹페이지의 특정사진 하나 호출할때까지 다 기다려야 되지만, 스레드가 여러개면 하나의 스레드가 사진 로드하고 다른 하나의 스레드가 글을 가져와서 화면이 작동안된다는 느낌을 안줄수 있다.(참고로 네트워크 통신도 io작업이라 웹페이지를 불러오는데 시간이 소요된다.)
예2) 메모리 낭비를 줄일 수 있다. 웹브라우저를 여러개 띄우거나 , 아래한글을 띄운다고 할때 각각의 프로세스를 띄운다면 메모리가 낭비가 될것이다.하지만 같은일을 처리하는 기능이라면 하나의 프로세스에 여러 스레드를 돌리면 하나의 코드와 데이터, 자원을 공유하기때문에 메모리가 더 절약된다.
예3) 프로세스의 콘텍스트 스위치 보다 쓰레드의 콘텍스트 스위치의 오버헤드가 더 크다.
스레드
pcb안에 스레드 공간
프로세스 안에 여러 스레드가 존재한다면 PCB는 프로세스 수와 같이 하나이고, 그안에 스레드는 독자적으로 가지고 있어야될 부분만 pc와 레지스터 로 가지고 있다 pc와 레지스터는 스레드 수 많큼 존재한다(빨간 부분)
싱글스레드와 멀티스레드
-왼쪽그림: 싱글 스레드
-오른쪽그림: 멀티스레드
스레드의 구현
커널수준
1.커널 스레드: 운영체제 커널이 여러 스레드가 존재한다는것을 알고 있어서, 하나의 스레드에서 다른 스레드로 cpu넘기는것도 커널이 cpu스케쥴링 하는것처럼 넘겨준다. OS(Kernel)이 직접 관리.
• 커널 영역에서 스레드의 생성, 관리 수행
• Context switching 등 부하(Overhead)가 큼 • 커널이 각 스레드를 개별적으로 관리
• 프로세스 내 스레드들이 병행 수행 가능
• 하나의 스레드가block 상태가 되어도,다른스레드는 계속 작업수행가능
유저수준
2.유저 스레드: 라이브러리를 통해서 작동된다. 커널은 스레드의 존재를 모르고, 사용자가 사용자 레벨에서 관리한다.
• 사용자 영역의 스레드 라이브러리로 구현 됨
• 스레드의 생성, 스케줄링 등
• POSIX threads, Win32 threads, Java thread API 등
• 커널은 스레드의 존재를 모름
• 커널의 관리(개입)를 받지 않음
• 생성및관리의부하가적음,유연한관리가능
• 이식성(portability)이높음
• 커널은 프로세스 단위로 자원 할당
• 하나의스레드가block상태가되면, 모든스레드가 대기 (single-threaded kernel의 경우)
스레드 예 1
스레드 예 2
참고: 이화여대 반효경 교수님 운영체제 강의정리
'컴퓨터 기초 > 운영체제 이론' 카테고리의 다른 글
[운영체제 정리] 6.CPU 스케쥴링 (0) | 2020.06.02 |
---|---|
[운영체제 정리] 5.프로세스 관리 (0) | 2020.06.01 |
[운영체제 정리] 3.프로세스 (0) | 2020.05.29 |
[운영체제 정리] 2.컴퓨터 시스템 구조 (0) | 2020.05.28 |
[운영체제 정리] 1.운영체제 개론 (0) | 2020.05.28 |