-
[OS]Process VS ThreadCS/OS 2021. 7. 10. 19:15
📝 Process VS Thread
✨ 해당 글은 아래 [10분 테코톡]을 듣고 작성했습니다.✨
🙋♀️ 프로세스와 쓰레드에 대해 알아보기 전에, 먼저 용어를 정리하고 가자.
- 실행 단위 - cpu core에서 일어나는 하나의 단위. 프로세스와 스레드를 포괄하는 개념이다.
- (부연 설명이 없는)프로세스 - 하나의 스레드만 가지고 있는 단일 스레드
- 동시성 - 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것
📌 Process에 대한 사전 지식
🔎 프로세스가 실행되기 위해선 필요한 자원이 메모리에 올라가 있어야 한다.
- 메모리 영역은 Code영역, Data영역, Heap영역, Stack영역으로 나뉜다.
- Code: 실행 명령을 포함하는 코드 영역
- Data: static, grobal 변수 영역
- Heap: 동적 메모리 영역
- Stack: 지역변수, 매개변수 등 일시적인 데이터 영역
- PCB또한 프로세스 생성시 함께 올라간다.
- PCB: Process Control Block으로 프로세스에 대한 정보를 담고있다.
📌 Process와 Thread
🔎 CPU는 한 번에 하나의 프로세스만 관리할 수 있다.
- 한번에 여러개의 의 프로세스를 실행하기 위해서는 다음과 같은 작업이 필요하다.
- 프로세스 A를 실행한다.
- 프로세스 A를 준비상태로 바꾸고 프로세스 B를 실행한다.
- 프로세스 B를 준비상태로 바꾸고 프로세스 A를 실행한다.
이렇게 프로세스의 상태를 변화시켜 CPU에게 할당/해제 하는 과정을 컨텍스트 스위칭이라고 한다.
- 컨텍스트 스위칭에 대해 자세히 알아보자
- CPU 스케줄러가 인터럽트를 발생시켜 현재 프로세스의 상태를 PCB에 저장하고, 새로운 프로세스의 상태를 레지스터에 저장하는 것을 말한다.
- 프로세스 컨텍스트 스위칭이 일어나면 CPU는 아무런 작업을 하지 못하므로 잦은 컨텍스트 스위칭은 성능 저하를 일으킨다.
🔎 프로세스의 경량 버전인 스레드
- 스레드에 대해 알아보자.
- 프로세스의 경량 버전이다.
- 하나의 프로세스에는 다수의 스레드가 존재할 수 있으며 해당 스레드 간에는 코드, 데이터, 힙 영역의 자원을 공유한다.
- 자원을 공유하기 때문에 컨텍스트 스위칭시 모든 자원을 교환할 필요가 없어 캐싱 적중률이 올라가고, 컨텍스트 스위칭 비용 또한 프로세스에 비해 적다.
📌 Multi Process와 Multi Thread
🙋♀️ 멀티 프로세스와 멀티 쓰레드는 처리 방식의 일종이다. 하나의 어플리케이션이 여러개의 일을 처리하는 방식을 말한다.
🔎 Multi Process와 Mutli Thread의 차이점에 대해 알아보자.
- Multi Process
- 한 프로세스는 한번에 하나의 작업만 가능하므로 부모가 fork()로 자식 프로세스를 여러개 생성하는 것을 말한다.
- 별개의 메모리 영역을 확보한다.
- 독립적이기 때문에 IPC를 이용해 통신한다.
- 컨텍스트 스위칭 비용이 크다.
- 독립적이기 때문에 동기화 작업이 필요하지 않다.
- Multi Thread
- 한 프로세스 내에서 구분지어진 실행 단위이다.
- 공유 자원이 많아 서로 긴밀히 연결되어 있어 통신 비용을 절감한다.
- 메모리를 효율적으로 사용할 수 있다.
- 컨텍스트 스위칭 비용이 적다.
- 공유된 자원에 대한 관리가 필요하다.
🔎 Multi Process와 Multi Thread는 언제 쓰일까?
- Google Chrome
- Multi Process를 사용한다.
- 멀티 탭을 사용할때 서로 영향을 덜 받는다.
- Internet Explore
- Multi Thread를 사용한다.
- 멀티 탭을 사용할때, 하나의 탭에 문제가 생기면 전체 화면의 탭이 종료된다. 서로 긴밀히 연결되어 있어 하나의 스레드에 문제가 생기면 전체 프로세스에 영향을 미친다.
📌 Multi Core
🔎 동시성과 Single Core
- Single Core CPU에서는 실행단위 처리시 동시에 여러개의 실행단위를 실행하기 위해 빠른 텀으로 실행단위를 전환한다.
- 이러한 특징을 동시성이라고 한다. (짧은 순간에 CPU 시간을 분할해 동시에 하는 것 처럼 보이게 한다.)
🔎 병렬처리와 Multi Core
- 여러개의 Core를 사용하여 다수의 실행단위를 한번에 처리할 수 있다.
- 이러한 특징을 병렬처리라고 한다.
✍ 요약
- 프로세스는 프로그램이 실행된 것이다.
- 스레드는 한 프로세스 내에서 나뉘어진 하나의 실행 단위이다.
- 한 어플리케이션에 대한 작업을 동시에 하기 위해선 2가지 처리방식(Multi Process, Multi Thread)이 있다.
- 동시에 실행되는 것 처럼 보이기 위해 실행 단위는 시분할로 CPU를 점유하여 컨텍스트 스위칭 한다.
- Multi Process는 독립적인 메모리를 가지고 있지만 Multi Thread는 자원을 공유한다. 각각의 장단점이 있다.
- Multi Core는 하드웨어 측면에서 실행 단위를 병렬적으로 처리할 수 있도록 여러 프로세스가 있는 것이다.
'CS > OS' 카테고리의 다른 글
[OS] 캐시 메모리 (0) 2021.08.06 [OS] CPU 작동원리 (0) 2021.08.06 OS - 은행원 알고리즘 (0) 2021.02.20 OS - CPU스케줄링 (0) 2021.02.16 OS - 프로세스와 쓰레드 (0) 2021.02.15