본문 바로가기
운영체제

동시성 처리

by dsungc 2024. 12. 28.

프로세스와 스레드

프로세스

- 운영체제의 작업 단위

- 실행중인 프로그램

- 프로세스 실행을 위해 PCB를 생성하며, PCB에는 프로세스의 상태, 메모리 정보 등을 포함

스레드

- CPU의 작업 단위, 하나의 프로세스 내에서 독립적으로 실행

- 모든 프로세스는 기본적으로 하나의 스레드를 갖는데, 이를 메인스레드 라고 함

- 스레드가 등장하면서 프로세스 > 자원의 단위, 스레드 > 실행의 단위

PCB와 TCB

- PCB는 프로세스의 정보를 담고 있고, 각 스레드는 프로세스의 PCB에 연결됨 TCB를 가짐

- TCB는 스레드의 프로그램 카운터(PC), 스택 포인터(SP), 레지스터 상태 등 CPU와 관련된 정보를 담아 컨택스트 스위칭을 가능하게 함

- 스레드가 많아질 경우, 여러개의 TCB를 갖기도 함

 

 

 


병렬 처리의 두가지 방식: 멀티프로세스 vs 멀티 스레드

 

멀티프로세스

장점

- 각 프로세스가 독립적이기에 하나의 프로세스가 오류나더라도 다른 프로세스에 영향을 주지 않음

단점

- 각 프로세스가 메모리를 독립적으로 사용해야하므로 메모리 중복 문제 발생

- IPC 구현이 복잡하고 비용이 많이 듦

- 컨텍스트 스위칭 비용 큼

 

ex) 크롬

멀티스레드

장점

- 메모리 비용 절감

- 컨텍스트 스위칭 비용 프로세스에 비해 적음

- 스레드간 데이터 공유 쉬움

단점

- race condition 문제 발생

- 하나의 스레드에 영향이 생기면 전체 프로세스에 영향을 줌

 

ex) 인터넷 익스플로러

 


여러 종류의 스레드

1. 하드웨어 스레드

- CPU코어가 동시에 처리할 수 있는 작업 단위, 실제 물리적인 구현체

- 인텔의 하이퍼 스레딩

   - 하나의 CPU 코어에 두 개 이상의 하드웨어 스레드를 구현하여 효율적으로 병렬 처리를 지원하는 기술

   - 운영체제는 하드웨어 스레드를 실제 CPU코어로 인식

 

2. OS 스레드

- 커널이 관리한느 스프트웨어적 스레드, 사용자 스레드와 1:1 매칭

- CPU의 스케줄링 단위, 커널에서 관리하기에 비용 발생

- 사용자 코드와 커널 코드 모두 OS 스레드에서 실행

 

3. 사용자 스레드

- 프로그래밍 언어 수준에서 제공되는 스레드, 개발자는 OS 스레드에 대한 세부사항을 신경쓰지 않아도 됨

- 반드시 OS 스레드와 연결되어야 함

 


멀티 스레드 모델

1. 1:N 모델

 

- 커널에 대해 멀티 스레드를 지원하지 않던 초기의 스레드 시스템에서 사용

- 커널의 입장에서는 사용자 스레드가 많아도 하나의 프로세스처럼 보임

장점

- 사용자 스레드 라이브러리에서 직접 스케줄링을 담당하고 작업에 대한 정보 처리 > 컨텍스트 스위칭 X

- 개발자가 원하는 만큼 사용자 스레드 생성 가능

단점

- 한 사용자 스레드가 블로킹 되면 모든 스레드가 블로킹 됨

- 병렬 처리 불가능

 

2. 1:1 모델

 

- 커널에 대해 멀티스레드를 지원하기 시작한 이후의 스레드 시스템에서 사용

- 각 사용자 스레드가 커널 스레드와 1:1 매칭

장점

- 독립적으로 스케줄링 가능

- 병렬로 처리 가능

단점

- 컨텍스트 스위칭 비용 발생 > 1 : N보다 느림

- 개발자가 원하는 만큼 사용자 스레드를 생성하는 것에 주의해야함 > 많은 수의 커널 스레드는 부하 증대

 

3. M:N 모델

 

- 여러 사용자 스레드가 여러 커널 스레드와 매칭

- 커널 스레드의 수는 사용자 스레드의 수보다 적거나 같음

- 1:N & 1:1 모델 혼합 방식

 

장점

- 동시성 및 병렬성의 장점 조합

- 개발자가 원하는 만큼 사용자 스레드 생성 가능

단점

- 구현이 복잡

- 1:1 모델보단 덜하지만 컨텍스트 스위칭에 대한 오버헤드 존재

 


Concurrency(동시성)과 Parallelism(병렬성)

동시성

- 동시에 실행되는 것처럼 보이는 상태

- 단일 코어에서 동작 가능

 

병렬성

- 실제로 동시에 실행되는 상태

- 다중 코어 환경에서도 가능


동시성 처리 기법

 

일반적 동시성 프로그래밍의 문제점

- 생성하는 스레드의 제한이 없어, 컨텍스트 스위칭이 빈번하게 일어나 시스템 성능 저하

- 스레드 생성 비용 

 

스레드 풀

- 최소 스레드 수와 최대 스레드 수를 저장하여 스레드 개수에 대한 제한을 둘 수 있음

- 미리 생성된 스레드 풀에서 작업을 할당하여 스레드 재활용

- 스레드 생성 비용 절감

- 컨텍스트 스위칭 오버헤드 감소

 

GCD

- 애플이 지원하는 동시성 처리 기법

- 스레드 수를 시스템이 자동으로 조정하여 최적화

'운영체제' 카테고리의 다른 글

스레드의 등장  (0) 2024.12.21
프로세스와 운영체제의 이해  (1) 2024.12.15
운영체제의 역할과 구조  (2) 2024.12.14
컴퓨터의 구성과 동작원리  (0) 2024.12.11