-
프로세스?
-
스레드?
-
프로세스 & 스레드 메모리
-
프로세스 & 스레드 컨텍스트 스위칭
프로세스 Process
운영체제로 부터 자원을 할당 받은 작업
의 단위
우리가 일반적으로 컴퓨터에 실행할 수 있는 파일들을 정적 프로그램 즉, 프로그램
이라고 한다.
ex ) 크롬, 익스플로러, 그림판 등..
이 프로그램은 프로그래밍 언어로 작성된 코드 덩어리 들이다.
그리고 프로세스는 이 프로그램을 실행시켜 메모리에 올라오고 CPU 자원을 할당 받은 상태를 말한다.
프로세스의 한계
과거에는 프로그램을 실행할 때 프로세스를 하나만 사용했지만 프로그램이 복잡해지고 다채로워짐에 따라서 프로세스 하나만으로는 한계가 생겼다.
하지만 동일한 프로그램을 여러 개의 프로세스로 만들게 되면 메모리를 차지하고 CPU의 자원할당이 중복된다는 문제가 있었고 이를 해결하기 위해 스레드
가 탄생했다.
스레드
하나의 프로세스 내에서 동시에 진행되는 작업의 단위
를 말한다.
즉, 하나의 프로세스 안에서 여러가지 작업의 흐름
을 동시에 진행할 수 있고 이것을 스레드
라고 하며 여러개가 있다면 멀티 스레드
라고 부른다.
일반적으로 하나의 프로그램은 하나 이상의 프로세스를 가지고 하나의 프로세스는 하나 이상의 스레드를 갖는다. 이떄 기본적인 하나의 스레드를 메인 스레드라고한다.
프로세스 & 스레드 메모리
프로세스의 구조
프로그램이 실행되어 프로세스가 생성되면
프로세스는 운영체제로 부터 여러 자원을 할당 받습니다.
그 중 하나가 메모리이고 메모리는 code, static, stack, heap 영역으로 구분됩니다.
각각의 프로세스
는 독립적인 메모리 영역
을 할당 받습니다.
스레드의 자원 공유
스레드는 프로세스에 속해있는 작업의 실행 단위로서
독립적인 Stack영역
을 가지고 나머지의 영역은 공유
합니다.
stack은 함수 호출시의 작업들이 저장되는 공간이므로 독립적인 stack 영역을 가진다는 것은 독립적인 함수 호출 즉, 여러개의 스레드로 여러개의 함수를 병렬처리 할 수 있다는 뜻입니다.
이렇게 프로세스 내부의 작업을 스레드로 나누면서 자원의 생성과 관리의 중복은 최소화 하고 수행능력은 올릴 수 있습니다.
</br>
프로세스의 자원 공유
각 프로세스는 별도의 메모리 영역에서 실행되기 때문에 기본적으로는 다른 프로세스에 접근할 수 없지만
- IPC (Inter-Process Communication)
- LPC (Local Inter-Process Communication)
- 별도의 공유 메모리를 사용
등의 방법으로 정보를 공유할 수 있습니다.
</br> </br>
프로세스 & 스레드 컨텍스트 스위칭
하이퍼스레딩
CPU는 여러개의 코어를 가지고 이것은 물리적 코어 갯수를 뜻한다.
여기서 쓰레드는 논리적 코어 갯수를 뜻한다.
예를 들어 4코어 8쓰레드 CPU는 물리적 코어가 4개고 논리적 코어가 8개인 CPU로
물리적 코어 1개를 논리적 코어 2개로 인식하여운영체제가 8개의 작업을 동시에 처리할 수 있다는 의미이다.
이를 하이퍼스레딩
이라고 한다.
병렬성 (Parallelism)
병렬성은 멀티 코어 프로세서에서 여러개의 프로세스, 스레드를 병렬로 동시에 수행하는 것을 말합니다.
동시성 (Concurrency)
사실 CPU의 코어(프로세서)는 한번에 하나의 스레드만 실행할 수 있습니다.
멀티 프로세싱, 멀티 스레딩은 결국 여러가지 프로세스나 스레드를 계속해서 교체하며
작업을 수행하여 동시에 실행되는 것 처럼 보이게하는 방법입니다.
컨텍스트 스위칭 Context Switching
하나의 스레드에서 다른 스레드로 전환하는 작업을 뜻합니다.
이때 기존 스레드의 CPU 레지스터의 상태와 작업 내용들을 저장하고
전환할 스레드의 작업 내용을 불러옵니다.
동시성, 컨텍스트 스위칭이 사용되는 이유?
- 하드웨어적 한계 - 코어를 많이 넣을수록 병렬성이 강화되어 효율이 증가하겠지만 한계가 있다.
- 논리적인 효율 - 하드웨어의 스레드 수를 초과하는 작업이 있을 때 동시성이 없다면 초과하는 작업들은 앞의 작업이 끝날때 까지 대기해야한다.
컨텍스트 스위칭 멀티 프로세싱 vs 멀티 스레딩
각 프로세스는 독립적인 메모리 영역을 가지기 때문에 프로세스1에서 프로세스2의 스레드로 전환을 한다면 프로세스의 모든 메모리 영역을 전환해야 합니다.
그래서 자원 부담이 크다는 단점이 생깁니다. (멀티 프로세싱의 단점)
하지만 한 프로세스 내부에서 스레드를 전환하는 경우 스레드는 스택 영역을 제외하고는 다른 스레드와 메모리 영역을 공유하기 때문에 전환할 메모리 영역이 적고 멀티 프로세싱에 비해 자원의 부담이 적습니다. (멀티 스레딩의 장점)
참고 자료