[운영체제] 스레드

2025. 1. 29. 21:11·CS/OS

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

 


스레드와 동기화

프로세스와 스레드의 기본 개념

프로세스

  • 실행 중인 프로그램의 인스턴스
  • 리소스 소유권의 단위이며 스케줄링/실행의 단위
  • 메모리, 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
'CS/OS' 카테고리의 다른 글
  • [운영체제] 메모리 관리
  • [운영체제] 동기화
  • [운영체제] 프로세스 스케줄링
  • [운영체제] 프로세스 관리
abyss-s
abyss-s
프론트엔드 개발합니다!
  • abyss-s
    abyss-s의 블로그입니다.
    abyss-s
  • 전체
    오늘
    어제
    • 분류 전체보기 (189)
      • Web (16)
        • JavaScript (6)
        • TypeScript (1)
        • React (5)
        • Vue (0)
        • Storybook (1)
        • Next.js (1)
      • Backend & Infra (8)
        • Database (3)
        • Node.js (2)
        • SpringBoot (1)
      • PS (71)
      • CS (30)
        • OS (13)
        • Structure & Algorithm (5)
        • Network (10)
        • 정보처리기사 (2)
      • Language (18)
        • OOP (1)
        • JAVA (13)
        • C++ (4)
      • Activities (13)
        • 멋쟁이 사자처럼 (2)
        • OSSCA (3)
        • LG U+ URECA (4)
        • Project (2)
      • AI (0)
      • Git & Github (5)
      • Notion (1)
      • IT (4)
      • Statistics (11)
      • Book (4)
      • Diary (1)
      • Game (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
    • 백준
    • 트위터
  • 공지사항

    • abyss-s의 티스토리에 오신 것을 환영합니다.
  • 인기 글

  • 태그

    통계학
    C++
    Java
    운영체제
    React
    BAEKJOON
    백준
    github
    Python
    파이썬
    BFS
    생활코딩
    OS
    자바기반응용프로그래밍
    DP
    그리디
    자바스크립트
    JavaScript
    코드트리
    네트워크
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
abyss-s
[운영체제] 스레드
상단으로

티스토리툴바