✔️ 프로세스 (Process)
- 프로세스는 메모리 상에서 실행 중인 프로그램
- 최소 하나의 스레드를 가짐
- Code, data, heap(프로세스 실행 중에 동적으로 할당되는 메모리), stack의 구조
- 운영체제로부터 자원을 할당받는 단위
- CPU로부터 주소 공간, 파일, 메모리 등을 할당받음, 각 프로세스는 고유 공간과 자원 할당받음
PCB (Process Control Block)
- 특정 프로세스에 관한 중요한 정보를 저장하는 Block
- 운영체제가 프로세스 생성과 동시에 고유한 PCB를 생성
- 프로세스 전환(Context Switching) 이 발생했을 때, 진행상황을 PCB에 저장하고 이후 다시 불러와 마저 진행
- 저장되는 정보 8가지
- 프로세스 ID
- 프로세스 상태 State
- 프로세스 카운터 : 다음 실행할 프로세스 포인터
- CPU 레지스터
- CPU 스케줄링 : 프로세스 우선순위
- 메모리 관리 : 페이지 테이블, 세그먼트 테이블
- 입출력 상태 : 프로세스에 할당된 입출력 장치, 열린 파일
- 어카운팅 : 사용된 CPU 시간, 시간제한, 계정정보
✔️ 스레드 (Thread)
- 프로세스의 실행 단위
- 프로세스들간에는 IPC를 통한 통신만 가능하므로, 더 작은 실행 단위가 필요해짐
- 프로세스 내의 다른 스레드와 주소 공간과 자원을 공유(프로세스의 heap 공유)
- 스레드의 구성 4가지 (각각의 스택과 레지스터를 가짐)
- 쓰레드 ID
- 프로그램 카운터
- 레지스터 집합
- PC 레지스터 : 스레드가 어디까지 실행했는지를 나타냄
- 스택
- 함수 호출 시의 매개변수, 되돌아갈 주소 값, 지역 변수 등을 가지고 있으므로 독립적인 함수 호출이 가능해짐
✔️ 그래서 Process와 Thread의 차이?
| Process | Thread |
---|
정의 | 실행 중인 프로그램 | 프로세스의 실행 단위 |
단위 | 운영체제의 가장 작은 실행단위 | CPU의 가장 작은 실행단위 |
자원 | 프로세스마다 고유의 자원, 메모리 할당 | Stack, 레지스터만 다르고 나머지 프로세스 메모리는 공유함 |
오류 종료 시 | 다른 프로세스에는 영향 없음 | 모든 Thread 한번에 종료 |
Context Switching | 비교적 느림 | 더 빠름 |
상호 통신 | IPC 통신 사용해야만 함 | 쓰레드들끼리 자유롭게 가능 (다른 프로세스는 불가능) |
개별 Stack을 가지는 Thread 구조
참고
https://velog.io/@raejoonee/프로세스와-스레드의-차이
https://zeroco.tistory.com/75
https://velog.io/@dbsrud11/CS-면접-질문-정리#️-os-thread-vs-process
https://jhnyang.tistory.com/33