본문 바로가기
운영체제

[운영체제] 4. 스레드 관리 - (1) 스레드의 필요성과 개념

by NoDapKeepGoing 2025. 4. 17.

📍1.  스레드의 필요성

☑️ 프로세스를 수행 단위로 하는 멀티프로그래밍의 문제점

1️⃣ 프로세스 생성의 큰 오버헤드
- 프로세스를 위한 메모리 할당, 부모 프로세스로부터 코드와 데이터 복사
- PCB 생성, 매핑 테이블(페이지 테이블) 생성 등

2️⃣ 프로세스 스위칭(process switching) 시 큰 오버헤드

- 기존 프로세스 컨텍스트를 PCB에 저장, 새 프로세스 PCB 갱신 및 CPU 레지스터로 복원
- CPU가 참고할 매핑 테이블(페이지 테이블)의 교체 시간
- CPU 캐시에 새 프로세스의 코드와 데이터가 채워지는데 걸리는 시간 등

3️⃣ 프로세스 사이 통신의 어려움
- 프로세스가 다른 프로세스의 메모리에 접근 불가
- 커널 메모리나 커널에 의해 마련된 메모리 공간을 이용하여 데이터 송수신
- 이 방법들은 코딩이 어렵고, 수행 속도 느리고, 운영체제 호환성 부족

 

📍2. 스레드 개념

2-1. 출현 동기

✔️ 프로세스를 수행 단위로 하는 멀티프로그래밍의 문제점
 - 커널에 많은 시간, 공간 오버헤드 발생 ➡️ 시스템 전체 속도 저하

✔️ 효율적인 새로운 수행 단위 필요: 스레드 출현

1️⃣ 프로세스보다 생성 및 제거가 빠르고
2️⃣ 문맥 교환이 빠르고
3️⃣ 통신 오버헤드가 적음

✔️ 현대 운영체제는 멀티스레딩을 지원함

 

2-2. 프로세스와 스레드

 

 

2-3. 스레드 정의

✔️ 프로세스 정의
스레드가 필요로 하는 자원 할당과 보호의 단위

✔️ 스레드 정의
스케줄링과 수행 단위

 

✔️ 스레드는 스케줄링과 수행 단위
 - 스레드 수행 상태(수행, 준비 등)
 - 수행 중이 아닐 때 수행 문맥을 저장할 자료구조(스레드 제어블록)
 - 지역변수 저장을 위해 각 스레드가 사용하는 정적 저장소(사용자 스택)
 - 커널 스택
 - 프로세스의 자원에 대한 접근

 

✔️ 스레드는 코드, 데이터, 힙, 스택을 가진 실체
✔️ 스레드마다 자신의 정보를 저장하는 스레드 제어블록(ThreadControl Block, TCB)이 있음
✔️ 스레드 프로세스 모델

 

 

2-4. 프로세스와 스레드 관계 (커널 레벨 스레드 가정)

 

2-5. 스레드의 생명과 프로세스의 생명

✔️ 스레드로 만든 함수가 종료하면 스레드 종료
✔️ 스레드가 종료하면 TCB 등 스레드 관련 정보 모두 제거
✔️ 프로세스에 속한 모든 스레드가 종료될 때, 프로세스 종료

 

✔️ Linux에서 pthread 라이브러리를 이용하여 2개의 스레드로 구성된 C 프로그램 작성 예

 

 

📍3. 멀티 스레드 응용프로그램 사례

✔️ 전면(foreground)과 후면(background) 작업
 - 앱에서 하나의 스레드가 메뉴를 나타내고 사용자 입력을 읽는 중에, 다른 스레드는 사용자 명령을 수행하고 내용 갱신
 - 이전 명령이 완료되기 전에 다음 명령을 신속하게 수행함으로써 앱의 속도를 향상시킴

✔️ 비동기(asynchronous) 처리
 - 워드프로세서 설계 시 워드 작업 중, 정전으로부터 데이터를 보호하기 1분마다 메모리 버퍼의 내용을 디스크로 기록하는 스레드 생성

✔️ 빠른 수행

 - 어떤 데이트 묶음을 계산하면서, 동시에 어떤 장치로부터 다음 데이터 묶음을 읽기 위해 입출력 작업 진행

✔️ 모듈 프로그램 구조
 - 다양한 기능을 포함하고 있는 프로그램의 경우 스레드들을 사용하여 설계하고 구현하는 것이 편리함

 

 

📍4. 멀티스레딩 분석

✔️ 멀티스레딩
 - 다수의 스레드를 동시에 수행시킴으로서, CPU나 입출력장치 등 자원의 활용률을 높이고 빠른 응답시간을 제공하기 위함

✔️다수의스레드가동시에수행되는상황
☑️ Concurrency(동시성, 병행성): interleaving
 - 1개의 CPU로 2개 이상의 스레드(프로세스)를 수행되는 상황

☑️ Parallelism(병렬성): multithreading, overlapping
 - 2개 이상의 스레드(프로세스)가 서로 다른 CPU에서 동시에 수행되는 상황