Computer Science/OS
[운영체제/OS] Process vs Thread 그리고 멀티스레드(Multi Thread)
예민한고라니
2022. 8. 27. 23:55
Process vs Thread
Process를 알아보자!
프로세스의 의미
- 실행중인 프로그램을 의미한다.
- 다수의 프로그램이 병행 수행될수 있는 오늘날에는 시분할 시스템(타임쉐어링)의 작업단위로 사용됨
프로세스의 상태 변화
- 생성 -> 준비 : 스케줄러에 의해 프로세스가 호출됨.
- 준비 -> 살행 : 사전 정의된 스케줄링 알고리즘에 따라 프로세스가 CPU할당 받음. 해당과정을 디스패치(dispatch) 라고함
- 실행 -> 준비 : 더 높은 우선순위의 프로세스를 실행하거나, 자원할당시간 만료 후 준비상태로 다시 전환. 해당 과정을 타임아웃(Timeout) 이라 부름
- 실행 -> 대기 : 할당된 시간 이전 실행 중에 기타 입출력 요구, 페이지 교환, read, write 등으로 CPU를 다른 프로세서에 할당 양도한 상태. 즉, Block 상태
- 대기 -> 준비 : 위의 작업이 끝난 후, block 상태의 프로세스를 다시 준비상태로 돌려놓는다. WakeUP 상태 라고 부른다.
PCB (Process Control Block)
- 프로세스가 생성될때 고유의 PCB 생성, 프로세스 종료 후 PCB 제거
- PCB에는 프로그램 카운터, 프로세스 상태, PID(프로세스 식별 번호)등 존재
프로세스 메모리 구조
- Code(text) : 실행할 프로그램의 코드 저장
- Data : 전연변수 및 정적변수 저장
- 추가적으로 BSS(Block Stated Symbol) 영역 존재 : 초기화 되지 않은 전역변수가 저장됨
- Stack : 지역변수, 매개변수 등 잠시 사용되었다가 사라지는 데이터를 저장. 컬파일 타임에 크기가 결정된다.
- Heap : 동적 데이터 영역으로, 메모리 주소 값에 의해서 참조되고 사용되는 영역. 런타임에 크기가 결정된다.
- 예를들어) Stack에서 포인터 변수를 할당하면, 포인터가 가리키는 heap영역의 공간을 원하는 크기만큼 할당해 사용
- Java 에서는 객체가 heap영역에 생성되고, Garbage Collection(GC)에 의해 정리
- C에서는 malloc() 을 이용하여 할당
Thread 를 알아보자!
스레드의 의미
- 프로세스 내에서 실제로 작업을 실행하는 주체로 경량프로세스(lightweight process)라고도 부름
- 1개의 프로세스는 최소 1개의 스레드를 가진다.
멀티 스레드
- 1개의 process에 2개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process) 라고부름
- 1개의 프로세스 안에 존재하는 스레드들은, 프로세스의 메모리 구조 중 code, data, heap 영역은 공유되며, 각 스레드 별로 자신만의 Stack영역을 갖는다
- 대표적인 예로 웹서버가 존재한다
Context Switching을 알아보자!
콘텍스트 스위칭이란
- 현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 순위의 Task가 실행되도록 새로운 Task의 상태 또는 레지스터의 값(Context)를 교체하는 작업을 일컷는다
- 이떄 Context는 프로세스의 PCB에 저장된다
- 콘텍스트 스위칭이 진행될때 해당 CPU는 아무런 일도 하지 못한다
- 따라서 콘텍스트 스위칭이 잦아지면 오버헤드가 발생한다.
- 콘텍스트 스위칭을 하는 주체 = OS 스케줄러 이다
MultiThread 와 MultiProcess
멀티프로세스
장점
- 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 끼치지 않음
단점
- context 전환과 함께 각 프로세스의 memory도 전환됨. 즉 높은 context swtiching 비용 발생
- 상대적으로 많은 메모리 공간과 CPU 시간을 차지함
멀티스레드
장점
- 적은 메모리 공간을 차지
- 스레드간 통신 시 Heap 영역을 이용하여 데이터를 전달하므로 통신 방법이 간단해짐
- code, data, heap 영역은 공유하기 때문에 context swtiching 비용이 상대적으로 적고 응답속도가 빠름
- 이로인해 시스템 처리량이 향상 됨
단점
- 동기화 문제 발생. 즉, 자원 공유 문제가 발생함
- 하나의 스레드에서 문제가 발생시 전체프로세스가 영향을 받는다.
해당 게시글은 github에서 관리 및 공부중인 CS-study respository 내용을 옮겨 적은 것 입니다.
잘못된 이야기가 있으면 언제든 댓글 남겨주세요!