본문 바로가기
Old/복습

운영체제 - Thread

by onenewkong 2023. 12. 27.

1. 프로세스 및 쓰레드

2.  쓰레드의 유형

 

프로세스와 쓰레드

프로세스: 실행 중인 프로그램

프로세스제어블록(PCB)
텍스트 (코드, 명령어)
데이터(전역변수)
힙(동적 메모리 할당)
free area
스택(지역변수, 매개변수)

 

Normal Function Call

 

Threaded Function Call

멀티 쓰레드 프로그램

  • 하나의 프로그램을 2개 이상의 객체가 수행
  • multithread server 구조
    • 동시 다발적으로 일어나는 일들을 thread로 구현
    • server data 분리

쓰레드의 장점

  • 프로세스에 비해 새로운 쓰레드 생성 시간/비용이 절약되며, 프로세스 종료 시간보다 쓰레드 종료 시간이 짧음
  • 병렬처리에 적합
    • 멀티프로세서의 효율적 사용
    • 병행 서버
  • 응답 시간 향상
    • I/O 작업과 컴퓨팅 작업이 병행적으로 실행

 

프로세스 생성 - fork() 함수

: 유닉스 환경에서 함수를 호출한 프로세스를 복사하는 기능

프로세스 id, 즉 pid를 반환하는데 이때 부모 프로세스에서는 자식 pid가 반환되고 자식 프로세스에서는 0이 반환됨

만약 fork() 함수 실행이 실패하면 -1을 반환

Copy On Write: 자식 프로세스와 부모프로세스가 독립적으로 변수를 사용할 수 있음

 

Pthread (POSIX Thread)

: POSIX 시스템에서 병렬적으로 작동하는 소프트웨어를 작성하기 위해 제공하는 API

즉, 쓰레드를 편하게 만들 수 있게 도와주는 API

pthread_create(): 쓰레드 생성

pid: 프로세스 id

tid: 해당 쓰레드의 id

pthread_join(): main을 도는 쓰레드가 자신이 분기시킨 쓰레드들이 종료되기를 기다림

 

쓰레드의 유형

User - level thread

  • 쓰레드 라이브러리가 쓰레드 생성, 제거, 데이터 전송, 동기화, 스케줄, 문맥교환을 수행
  • 커널은 쓰레드의 존재를 모름
  • ex) cthread, pthread

장점

  • 쓰레드 교환/교체 시에 커널 모드 권한이 불필요(두 번의 모드 전이 오버헤드를 절약 가능)
  • 특정 응용에 적합한 스케줄링 적용 가능
  • 모든 OS에서 수행 가능

단점

  • 한 쓰레드가 블록 상태를 유발하는 시스템 호출을 수행할 경우. 자신뿐만 아니라 그 프로세스 내의 다른 쓰레드들도 블록됨
  • 다중처리기의 장점을 살리지 못함
  • 커널 루틴 자체는 다중쓰레딩 될 수 없음

Kernel - level thread

  • 커널이 프로세스 및 쓰레드에 대한 문맥 정보를 관리
  • 쓰레드에 대한 스케줄링이 커널 수준에서 수행됨

 

'Old > 복습' 카테고리의 다른 글

C++ - 범위 기반 for문  (1) 2024.01.03
C++ - 생성자와 소멸자  (0) 2023.12.27
운영체제 - Call Stack  (0) 2023.12.27
게임 서버 - 관계형 데이터베이스와 NoSQL  (1) 2023.08.16
게임 서버 - 데이터베이스 기초  (2) 2023.08.01