스레드 개념이 도입됨
Thread 개념 및 관리
하나의 프로세스 내에 독립된 실행 흐름 (독자적 PC와 레지스터 보유)
프로세스 주소 공간 공유 → 데이터 공유 가능
여기서 병행성 문제가 발생함
Concurrency Control (병행성 제어)
공유 변수에 하나의 프로세스만 접근
→ 동기화된 방식으로 데이터를 접근하도록 강제하는 방법
스레드 관리
하나의 프로세스 주소 공간 내 여러 개의 스택
스택 = 스레드 지역 저장소
독립된 실행 흐름
상태 전이: 프로세스 상태와 동일함 (Running, Ready, Blocked)
하나의 CPU에서는 한 번에 하나의 스레드씩 실행함
→ PC 및 레지스터를 독자적으로 유지 (별도의 Context)
→ TCB (Thread Control Block)에 관리 정보가 유지됨
OS가 실행 스레드 교체 시 Context Switch
왜 스레드를 사용하는데 ? (스레드 장점)
프로세스에 비해 빠른 생성이 가능 (Process < Thread)
프로세스는 무거움, 스레드는 가벼움병렬 처리에 적합함 (Process = Thread)
처리와 대기를 분리하여 효율 증대 (Process = Thread)
웹 서버, GUI 등
데이터 공유 (Process ≤ Thread)
멀티 스레드 프로그램
여러 개의 실행 흐름을 갖는 프로그램
여러 개의 PC 값을 동시에 유지함
하나의 주소 공간을 공유
주소 공간 - 스택/스레드
하나의 스레드 당 8MB를 할당받음
8MB가 넘는 변수를 선언하게 될 경우 전역변수로 빼야함
Shared Data
count ++; 는 3가지의 어셈블리어로 동작함
1번 2번 동작을 하다가 인터럽트가 걸리면 병행성 문제가 발생함
경쟁 조건 (Race Condition)
스레드 실행 순서에 따라 결과가 달라지는 현상
정확한 답을 보장할 수 없음
임계 영역 (Critical Section)
경쟁 조건을 유발할 수 있는 코드
공유 자원을 접근하므로 동시에 두 쓰레드가 실행해서는 안 됨
상호 배제 (Mutual Exclusion)
반드시 하나의 스레드만 임계 영역을 실행할 수 있도록 보장
원자성 (Atomicity)
더 이상 쪼개질 수 없음
임계 영역의 명령들이 원자적으로 수행된다면 ? → 상호배제 사용
어떻게 한 구역의 원자적 실행이 가능 ?
인터럽트로 불가능하게 하는 것
근데 요즘은 멀티 프로세스라 이건 X
하드웨어 명령어 추가
short, int , float, double … 등등 고려할 게 많음
현실성이 없음 - X
상호 배제용 API
하드웨어 명령을 활용하여 동기화 함수를 구현함
Lock, Condition Variable
동시성(병행성) 문제
상호 배제로 해결
동기화로 해결
→ 하나의 스레드가 다른 스레드의 어떤 동작이 끝나기를 기다림
'Computer Science > Operating System' 카테고리의 다른 글
[OS] 15장: 주소 변환의 원리 (0) | 2024.06.27 |
---|---|
[OS] 13장: Memory Virtualization (0) | 2024.06.26 |
[OS] 멀티 프로세서 스케줄링 (0) | 2024.05.05 |
[OS] Proportional Share (비례 배분) (0) | 2024.05.04 |
[OS] MLFQ (Multi-Level Feedback Queue) (0) | 2024.05.03 |