눈송이의 개발생활
[운영체제]프로세스(Process)와 스레드(Thread) 본문
프로그램 : 어떤 작업을 라기 위해 실행할 수 있는 파일 or 프로그램
프로세스 : 메모리에 적재되서 CPU 자원을 할당받아 프로그램이 진행되고 있는 상태
프로세스(Process)
- 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
- OS로부터 시스템 자원 할당받는 작업의 단위
- CPU 스케줄링의 대상이 되는 작업(task)
- 프로그램이 메모리에 올라가면 프로세스가 됨(= 인스턴스화)
💡 특징
- 프로세스 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당 받음
- 기본적으로 1개의 프로세스는 1개의 스레드를 가짐
- 각 프로세스는 별도의 주소 공간에서 실행 됨 ⇒ 다른 프로세스의 메모리에 접근할 수 ❌
- 다른 프로세스에 접근하기 위해서는 프로세스 간 통신(IPC) 사용해야 함
프로세스 메모리 구조
1️⃣ Code
2️⃣ Data
3️⃣ Stack
4️⃣ Heap
자세한 내용 : https://hihellosuah.tistory.com/109
프로세스 제어 블록(PCB : Process Control Block)
- 운영체제에서 프로세스에 대한 메타데이터를 저정한 데이터
- 메타데이터 : 데이터를 설명하는 작은 데이터
- 프로세스가 생성되면 운영체제는 해당 PCB 생성
- context switching은 PCB를 교환하는 과정
멀티 프로세스(Multi Process)
- 하나의 애플리케이션을 여러 프로세스로 구성하여 동시에 2가지 이상의 일을 수행하는 것
- 하나 이상의 일 병렬로 처리 가능
- 특정 프로세스에 문제가 생겨도 다른 프로세스를 사용할 수 있어서 신뢰성 높음
💡 특징
- 안전성 ⬆️ : 하나의 프로세스에 문제가 발생해도 다른 자식 프로세스에 영향 확산되지 않음
- 간단한 구현
- 독립적인 동작
- 메모리 사용량 ⬆️
- 스케줄링에 따른 context switching이 많아져 성능 저하될 수 있음
- 프로세스 간에 통신을 위해서는 IPC 통해서 해야 함
스레드(Thread)
- 프로세스 내 작업의 흐름 (여러 흐름의 단위)
- 프로세스가 할당 받은 자원을 이용하는 실행의 단위
💡 특징
- 프로세스 내에서 각각 stack만 따로 할당 받고 나머지 메모리 영역(Code, Data, Heap)은 공유
- 프로세스 내의 자원과 주소 공간을 동일 프로세스 내 스레드와 공유하면서 실행됨
- 각각의 스레드는 별도의 레지스터와 스택을 갖지만 heap 메모리는 서로 읽고 쓸 수 있음
- 한 스레드가 프로세스의 자원을 변경하면, 다른 스레드도 즉시 변경한 결과 확인 가능
❓ 스레드는 왜 탄생했을까?
프로세스보다 크기가 작은 실행단위 필요했고, 프로세스는 생성하거나 소멸할 때 큰 오버헤드가 있어 이를 줄이기 위해 탄생했다.
또한 프로세스들 사이에는 통신이 어려워 더 쉬운 방식이 필요했다.
프로세스는 context switching이 비효율적이고 오베헤드가 커서 빠르게 문맥교환을 하기 위해 스레드가 탄생했다.
멀티 스레드(Multi Thread)
- 프로세스 내 작업을 여러 개의 스레드로 처리하는 방법
- 하나의 스레드가 하나의 작업을 처리하도록
💡 특징
- 응답성 좋음 : 프로그램의 일부 스레드가 중단되어도 프로그램을 계속 실행할 수 있음
- 자원 공유 쉬움 ⇒ 효율성 높음
- 프로세스 할당하는 것보다 스레드 할당하는 것이 비용이 적음
- 멀티프로세서 구조에서 각각의 스레드가 다른 프로세스에서 병렬로 수행 가능
- 구현/테스트/디버깅 어려움
- 잦은 사용을 오베헤드 초래할 수 있음
- 동기화 or 교착상태 발생할 수 있음
- 자식 스레드 중 하나에 문제가 생기면 전체 프로세스 영향줄 수 있음
멀티 프로세스 vs 멀티 스레드
멀티 프로세스 | 멀티 스레드 | |
장점 | 하나의 프로세스가 죽어도 다른 프로세스에는 영향 ❌ | 프로세스 응답시간 단축/시스템 처리율 ⬆️ 자원 소모 적음 |
단점 | 독립된 메모리 영역을 갖고 있어 작업량 많으면 오베헤드 발생 context switching으로 인한 성능 저하 |
디버깅 어려움 하나의 스레드에 문제 생기면 전체적인 프로세스에 영향 |
참고
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4
https://lazymankook.tistory.com/32
'Computer Science > Operating System' 카테고리의 다른 글
[운영체제]프로세스 사이 통신 - IPC(Inter Process Communication) (0) | 2023.02.27 |
---|---|
[운영체제]PCB와 문맥 교환(Context Switching) (0) | 2023.02.27 |
[운영체제]인터럽트(Interrupt)와 시스템 콜(System Call) (0) | 2023.02.23 |
[운영체제]블로킹(Blocking)/논블로킹(Non-Blocking) & 동기(Synchronous)/비동기(Asynchronous) (0) | 2023.02.22 |
[운영체제]프로세스 메모리 구조 (0) | 2023.02.21 |
Comments