혼동을 줄 수 있는 단어 정리
실행 단위 - cpu core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념
(부연 설명이 없는) 프로세스 - 하나의 스레드만 가지고 있는 단일 스레드 프로세스
동시성 - 한 순간에 여러가지 일이 처리 되는 것이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것
프로그램 - OS에서 실행될 수 있게 만들어진것이 프로그램
프로세스 - 프로그램이 운영체제에 의해서 동작중인 것
프로세서 - 프로세스가 동작할 수 있게 해주는 하드웨어(CPU)
cpu에 의해서 수행되고 있고 수행되고 있는것들을 프로세스라고 할 수 있다.
프로그램이 프로세스가 되려면 어떤 과정이?
- 프로세스가 필요로 하는 재료들이 메모리에 올라가야 한다.
- Code(실행 명령을 포함하는 코드), Data(static 변수 혹은 global 변수), Heap(동적 메모리 영역), Stack(지역변수, 매개변수, 반환값 등등 일시적인 데이터)
- 해당 프로세스에 대한 정보를 담고 있는 PCB 블럭이 프로세스 생성시 함께 만들어진다.
한 프로세스가 실행되기 위해서 cpu를 점유하고 있으면 다른 프로세스는 실행상태에 있을 수가 없다.
그래서 다수의 프로세스를 동시에 실행 하기 위해 여러개 프로세스를 시분할로, 짧은 텀을 반복하면서 전환해서 실행을 하게 된다.
### CPU를 할당해 작업을 수행하는 과정이 **Context Switching** 이라고 한다.
P1, P2라는 2개의 프로세스가 있고 CPU에 올라갔다 내려갔다하는 과정을 보여준다.
- Process P1을 실행하다가 PCB1에 상태를 저장한다.
- 저장되어있는 PCB2를 재로드 해서 실행 시킨다.
- 다시 PCB2 상태를 저장한다.
- PCB1을 재로드 하여 실행 시킨다.
많은 비용이 소모되는 Context Switching
그래서 등장을 하는게 경량화된 프로세스 버전인 스레드 이다.
스레드는 Code, Data, Heap 영역을 공통된 자원으로 사용
각 스레드는 Stack 부분만을 따로 가지고 있다.
공유되는 자원이 있기 때문에 이전처럼 컨텍스트 스위칭이 일어날 떄 캐싱 적중률이 올라간다.
Multi-process & Multi-thread
- 멀티프로세스와 멀티스레드 이 두가지 개념이 모두 처리방식의 일종
- 한 어플리케이션에 대한 처리 방식
한 프로세스에서 동시 처리를 위해 부모프로세스가 자식프로세스를 여러개를 만들어 일을 처리하도록 함.
자식 프로세스는 부모와 별개의 메모리 영역을 확보
스레드는 한 프로세스 내에서 구분지어진 실행 단위
하나의 프로세스밖에 없다면, 프로세스의 하나밖에 없는 쓰레드가 실행 단위가 된다.
프로세스 내에서 분리해서 여러 스레드로 나뉘어서 실행 단위가 나뉘어지면 멀티 스레드가 된다.
Multi-process
- 각 프로세스는 독립적
- IPC를 사용한 통신
- 자원 소모적, 개별 메모리 차지
- Context Switching 비용이 큼
- 동기화 작업이 필요하지 않음
Multi-thread
- Thread끼리 긴밀하게 연결되어 있음
- 공유된 자원으로 통신 비용 절감
- 공유된 자원으로 메모리가 효율적임
- Context Switching 비용이 적음
- 공유 자원 관리를 해야함
예시)
- Internet Explorer 오류
- 한탭에 문제가 발생하면, 스레드끼리 연결되어 있기 때문에 전체 프로세스에 영향이 감
- 구글 크롬
- 멀티 프로세스를 이용하기 떄문에 멀티탭 간의 영향이 덜 받는다.
Multi-core
멀티 코어는 병렬처리
- 물리적으로 여러 코어를 사용해서 다수의 실행 단위를 한순간에 처리할 수 있게 해준다.
- 즉 둘 이상의 코어에서 동시에 하나 이상의 프로세스(혹은 스레드)가 한꺼번에 진행되는 것
요약
- 프로세스는 프로그램이 실행된 것이다.
- 스레드는 한 프로세스 내에서 나뉘어진 하나 이상의 실행 단위이다.
- 한 어플리케이션에 대한 작업을 동시에 하기 위해서는 2가지 처리 방식(멀티 프로세스, 멀티 스레드)이 있다.
- 동시에 실행이 되는 것처럼 보이기 위해서 실행 단위는 시분할로 cpu를 점유하여 context switching을 한다.
- 멀티 프로세스는 독립적인 메모리를 가지고 있지만 멀티 스레드는 자원을 공유한다.
- 멀티 코어는 하드웨어 측면에서 실행 단위를 병렬적으로 처리할 수 있도록 여러 프로세서가 있는 것이다.
https://velog.io/@jaeyunn_15/CS-Context-Switching
https://www.youtube.com/watch?v=1grtWKqTn50