Search

10-3 스레드

Last update: @1/7/2023
혼자 공부하는 컴퓨터구조 + 운영체제

운영체제

09 운영체제 시작하기

10 프로세스와 스레드

11 CPU 스케줄링

12 프로세스 동기화

13 교착 상태

14 가상 메모리

15 파일 시스템

스레드(thread) : 프로세스를 구성하는 실행의 흐름 단위
하나의 프로세스는 여러 개의 스레드를 가질 수 있음
스레드를 이용하면 하나의 프로세스에서 여러 부분을 동시에 실행할 수 있음
전통적인 관점에서의 프로세스는 하나의 프로세스에 하나의 일만 처리하는 단일 스레드 프로세스였음. 하지만 스레드라는 개념이 도입되면서 하나의 프로세스가 여러 일을 동시에 처리할 수 있는 멀티스레드 프로세스가 됨
스레드는 프로세스 내에서 각기 다른 스레드 ID, 프로그램 카운터 값을 비롯한 레지스터 값, 스택으로 구 성되어 있기에 스레드마다 각기 다른 코드를 실행할 수 있음
중요한 점은 프로세스의 스레드들은 실행에 필요한 최소한의 정보(프로그램 카운터를 포함한 레지스터, 스택)만을 유지한 채 프로세스 자원을 공유하며 실행된다는 점임(힙, 데이터, 코드 영역, 파일 등)
실제로 최근 많은 운영체제는 CPU에 처리할 작업을 전달할 때 프로세스가 아닌 스레드 단위로 전달함
리눅스에서는 프로세스와 스레드를 태스크(task)라는 이름으로 통일하여 명명하고, 이 둘을 크게 구분 짓지 않음. 둘 다 실행의 문맥(context of execution)이라는 점에서 동등하다 간주하기 때문
만약 같은 작업을 여러개 수행한다고 하면 하나의 자원을 공유하는 스레드를 여러개 실행하는 것이 더 효율적임
다만, 하나의 스레드에 문제가 생기면 다른 스레드도 영향을 받을 수 있음
프로세스 간 통신(IPC; Inter-Process Communication) : 프로세스끼리 자원을 공유하고 데이터를 주고받는 것
공유 메모리(shared memory), 파일, 소켓, 파이프 등을 통해 통신함