1. 프로세스 및 쓰레드
2. 쓰레드의 유형
프로세스와 쓰레드
프로세스: 실행 중인 프로그램
프로세스제어블록(PCB) |
텍스트 (코드, 명령어) |
데이터(전역변수) |
힙(동적 메모리 할당) |
free area |
스택(지역변수, 매개변수) |
멀티 쓰레드 프로그램
- 하나의 프로그램을 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 |