** 키워드 정리
- 실행 단위 : CPU core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념
- 프로세스 : 하나의 스레드만 가지고 있는 단일 스레드 프로세스
- 동시성 : 한 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것
프로그램과 프로세스
프로그램이 프로세스가 되면서 총 2가지 일이 일어나야 함
-
프로세스가 필요로 하는 데이터들이 메모리에 올라가야함
- Code : 실행 명령을 포함하는 코드들
- Data : static변수 또는 global변수
- Heap : 동적 메모리 영역
- Stack : 지역변수, 매개변수, 반환 값 등 일시적인 데이터
-
해당 프로세스에 대한 정보를 담고 있는 PCB(Process Control Block)도 올라가야 함
- Pointer : 준비 상태나 대기 상태의 큐를 구현하기 위해 필요한 포인터
- Process State : 현재 프로세스 상태 저장
- Process Number : 프로세스 고유 번호
- Program Count : 다음 명령어를 가리킴
- Register
- Memory limits
- List of open files
...
Process & Thread
프로세스를 동시에 실행시키기 위해서 프로세스들을 번갈아가면서 실행 - 준비 상태를 반복
ex) 1번 실행 - 1번 대기열로 내림 - 2번 실행 - 2번 대기열로 내림..
==> 이를 경량화한 것이 Thread!
(하나의 프로세스 안에 다수의 쓰레드가 있으면 공유되는 자원이 있기 때문!)
쓰레드는 코드, 데이터, 힙 영역을 공통된 자원으로 사용(스택만 따로 가지고 있음)
=> 공유되는 자원이 있기 때문에 이전처럼 컨텍스트 스위칭이 일어날 때 캐시 적중률이 높아짐
ex) 회의실에서 노트북, 스피커, 리모콘으로 화면을 연결해서 발표를 한다고 할 때, 이전 팀이 노트북, 스피커, 리모콘을 다 두고 가면 금방 바로 발표를 진행할 수 있는 것 처럼!
Multi-process & Multi-thread
한 어플리케이션에 대한 두 가지 처리 방식
요약
- 프로세스는 프로그램이 실행된 것
- 스레드는 한 프로세스 내에서 나뉘어진 하나 이상의 실행 단위
- 한 어플리케이션에 대한 작업을 동시에 하기 위해서는 2가지 처리 방식(멀티 프로세스, 멀티 스레드)가 있다
- 동시에 실행이 되는 것처럼 보이기 위해 실행 단위는 시분할로 cpu를 점유하며 context switching을 한다
- 멀티 프로세스는 독립적인 메모리를 가지고 있지만 멀티 스레드는 자원을 공유한다
- 멀티 코어는 하드웨어 측면에서 실행 단위를 병렬적으로 처리할 수 있도록 여러 프로세서가 있는 것이다