티스토리 뷰
스레드(Thread)
- 실과 같이 흘러가는 프로그램의 흐름
- CPU 이용의 기본 단위로서, 독립적으로 실행되는 코드 집합
- Light Weight Process(경량의 프로세스) 라고 부르기도 함
- 하나의 프로세스 내에 반드시 하나 이상의 스레드 존재
o 하나의 프로그램을 여러개의 스레드로 동시에 혹은 나누어서 병렬적으로 수행
- 각 스레드는 스레드 ID, 프로그램 카운터(PC), 레지스터 집합, 스택을 독립적으로 소유
- 같은 프로세스 내의 여러 스레드는 코드(텍스트 영역), 데이터 영역, 열린 파일 등의 시스템 자원을 공유
o 독립적인 주소 공간(메모리)은 없으며 다른 스레드와 공유
멀티 스레드(Multi Thread)
- 운영체제의 여러작업을 수행하기 위해 프로세스를 늘리는 것 보다, 스레드를 늘리는 것이 효율적임
ex)
o 여러개의 단위 작업으로 구성된 프로그램 (ex) 이미지/텍스트 표시하는 스레드, 네트워크에서 데이터를 가져오는 스레드)
o 동일한 작업을 여러개 동시에 실행하는 프로그램 (ex) 여러개의 클라이언트 요청을 동시에 처리)
o 운영체제의 여러 작업을 멀티 스레드로 처리
- 장점
o 응답성 (Reponsiveness)
다른 스레드의 실행시간 길거나 입출력을 위해 블록(block) 되더라도 계속 실행을 허용
o 자원 공유 (Resource sharing)
타 메모리를 사용하는 것이 아닌, 프로세스의 자원(코드 및 데이터 등)을 자동적으로 공유
o 경제성 (Economy)
프로세스의 생성과 문맥 교환보다 빠르고 자원 사용이 적다.
o 확장성 (Scalability)
멀티 프로세서 시스템에서 병렬성 증가
- 멀티 스레딩 모델 : 실제 운영체제에서 설계하여 사용하는 방법
o 사용자 스레드 (User thread) : 스레드를 하나의 프로세스 흐름으로 관리
커널의 지원/인식 없이 사용자 공간에서 실행 (빠른 스레드 연산)
> 스레드 멈춤은 프로세스 자체의 멈춤을 유발 (blocking)
스레드 라이브러리를 통하여 제공
> 커널의 관여 없이 스레드 생성, 스케줄링, 관리 수행
o 커널 스레드 (Kernel thread) : 커널이 관리하는 스케줄링 유닛으로 관리
커널이 스레드를 인식하고 프로세스와 유사하게 스케줄링
> 커널의 오버헤드로 스레드 생성과 스케줄링이 느림
Windows, Linux, Mac OS X 등 대부분의 운영체제가 지원
각 커널 스레드는 CPU 스케줄링을 통해 병렬적으로 실행
> 멀티 프로세서 시스템에서 병행 수행 능력 향상
- 사용자 스레드와 커널 스레드의 관계
o 사용자 스레드가 CPU를 할당받아 실행되기 위해서는 커널 스레드에 연결되어야 한다. (mapping, binding)
o 다대일(M:1) 모델
사용자 수준의 스레드 구현
> 모든 스레드 제어가 사용자 수준 라이브러리에서 지원됨.
장점
> 커널 모드 전환이 필요 없기 때문에 스레드 연산이 빠르다.
> 라이브러리를 위한 커널 지원이 필요 없기 때문에 이식이 좋다.
단점
> 한 스레드에서 시스템 호출이 블록되면, 모든 스레드가 블록된다. (독립성 X)
> 커널이 스레드 각각을 스케줄하지 못하기 때문에 멀티 프로세서 등의 자원을 활용하지 못한다. (성능 개선 X)
o 일대일(1:1) 모델
커널 수준의 스레드 구현
> 커널이 각 스레드의 스케줄링을 직접 처리
> 다대일 구현의 단점을 해결
단점
> 스레드 생성, 문맥 교환, 동기화 등의 작업이 느리다.
> 커널 스케줄러의 부담이 커져서 시스템의 전반적인 성능이 저하될 수 있다.
> 그러나 성능저하가 감당 가능하기 때문에 리눅스와 윈도즈 등 대부분의 운영체제에 1:1 모델이 선호된다.
'개발 > 운영체제' 카테고리의 다른 글
페이징(Paging) (0) | 2018.01.08 |
---|---|
메모리 관리(Memory Management) (0) | 2018.01.07 |
교착상태(Deadlock) (0) | 2018.01.05 |
락(Lock)과 세마포어(Semaphore) (0) | 2018.01.04 |