전공 수업 내용 정리 (문제 발생시 비공개합니다.)

스레드와 동기화
프로세스와 스레드의 기본 개념
프로세스
- 실행 중인 프로그램의 인스턴스
- 리소스 소유권의 단위이며 스케줄링/실행의 단위
- 메모리, I/O 채널, I/O 장치, 파일 등의 리소스를 소유
스레드
- 프로세스 내의 실행 단위
- 동일한 프로세스 내의 다른 스레드와 리소스를 공유
- 경량 프로세스(lightweight process)라고도 불림
멀티스레딩의 이점
1. 응답성 향상
- 프로그램의 일부가 블록되어도 계속 실행 가능
- I/O와 연산을 동시에 수행 가능
- RPC(원격 프로시저 호출) 등에서 동시 응답 처리 가능
2. 리소스 공유와 비용 절감
- 새로운 PCB 생성이 불필요
- 프로세스 간 전환보다 스레드 간 전환이 빠름
- 동일 프로세스 내 스레드들은 메모리를 통해 직접 통신 가능
3. 병렬 처리

- 멀티코어 아키텍처에서 확장성 제공
- 동일 애플리케이션을 여러 코어에서 실행 가능
- 암달(Amdahl)의 법칙에 따른 성능 향상
- 단, 무작정 스레드를 증가시킨다고 해서 성능이 올라가는 것은 아니다.

스레드 구현 모델
1. 사용자 수준 스레드(ULT)
- 애플리케이션이 모든 스레드 관리 수행
- 커널 개입 없이 스레드 전환 가능
- 장점: 효율적인 스레드 관리
- 단점: 실제 병렬성 미제공, 블로킹 시스템 콜 시 전체 프로세스 블록
2. 커널 수준 스레드(KLT)
- 커널이 모든 스레드 관리 수행
- 장점: 멀티프로세서에서 병렬 실행 가능
- 단점: 모드 전환 오버헤드 발생
3. 혼합 방식
- 사용자 수준과 커널 수준 스레드 결합
- 다수의 ULT를 적은 수의 KLT에 매핑
- Solaris가 대표적 예시
스레드 동기화
- 공유 자원에 대한 동시 접근 시 레이스 컨디션 발생 가능
- 스레드 간 협력을 위한 동기화 메커니즘 필요
- 정확한 동작을 위한 스레드 조정 필요
스레드 API 예시
/* Java */
main(){
MyThread t;
t = new MyThread();
t.start();
…
}
class MyThread
extends Thread{
public void run(){
…
return;
}
}
pthread_create – create child thread
pthread_exit – thread termination
pthread_join – wait for thread termination
pthread_self – return the calling thread ID
phtread_mutex_lock – lock critical section
pthread_mutex_unlock – unlock critical section
pthread_cond_wait – wait for a condition signal
phtread_cond_signal – wake up one waiting thread
// 스레드 생성
#include <pthread.h>
typedef void *(func)(void *);
int pthread_create(pthread_t *tid, pthread_attr_t *attr, func *f, void *arg);
Returns: 0 if OK, nonzero on error
// Terminating Threads
#include <pthread.h>
pthread_t pthread_self(void);
Returns: thread ID of caller
// reaping Terminated Threads
#include <pthread.h>
int pthread_join(pthread_t tid, void **thread_return);
Returns: 0 if OK, nonzero on error
'CS > OS' 카테고리의 다른 글
[운영체제] 메모리 관리 (0) | 2025.01.29 |
---|---|
[운영체제] 동기화 (0) | 2025.01.29 |
[운영체제] 프로세스 스케줄링 (0) | 2025.01.28 |
[운영체제] 프로세스 관리 (0) | 2025.01.28 |
[운영체제] 프로세스 (0) | 2025.01.28 |