사전 지식
프로그램
- 컴퓨터가 실행할 수 있는 명령어들의 집합
프로세스
- 컴퓨터에서 실행 중인 프로그램을 의미
- 각각의 프로세스는 독립된 메모리 공간을 할당 받는다.
- 명령어들과 데이터를 가짐
CPU(Central Processing Unit)
- 명령어를 실행하는 연산 장치
메인 메모리
- 프로세스가 CPU에서 실행되기 위해 대기하는 공간
I/O(Input/Output)
- 파일을 읽고 쓰는 행동
- 네트워크와 데이터를 주고 받는 것
- 입출력 장치와 데이터를 주고 받는 것
프로세스
단일 프로세스 시스템
- 컴퓨터의 역사에서 초창기에는 단일 프로세스 시스템
- 한 번에 하나의 프로그램만 실행
- 단점: 실행 중에 있는 프로세스가 I/O작업 동안에는 CPU는 아무것도 하지 않음 → CPU 사용률이 좋지 않음
멀티 프로그래밍 시스템
- CPU 사용률을 극대화 시키는 데 목적
- 여러 개의 프로그램을 메모리에 대기시켜놓고 동시에 실행시키는 시스템
- I/O 작업이 발생하면 다른 프로세스가 CPU에서 번갈아가면서 실행됨
- 단점: CPU 사용 시간이 길어지면, 다른 프로세스는 계속 대기해야함
멀티 태스킹
- 프로세스의 응답 시간을 최소화 시키는 데 목적
- 멀티 프로그래밍과 비슷하지만, CPU 타임을 아주 짧게 쪼개서 서로 다른 프로세스들이 번갈아 가면서 실행될 수 있다는 것이 차이
- 번갈아 가면서 실행되는 속도가 매우 짧아서 마치 동시에 실행되는 효과를 볼 수 있음
- 단점: 하나의 프로세스가 동시에 여러 작업을 수행하지 못 함
프로세스를 여러 개 만들어서 동작시키는 것이 힘든 이유
- 프로세스의 컨텍스트 스위칭(Context Switching)은 무거운 작업
*컨텍스트 스위칭: CPU에서 어느 한 프로세스에서 다른 프로세스로 교체 되는 것 - 프로세스는 각각 독립적인 메모리 공간을 차지하고 있어서, 프로세스끼리 데이터 공유가 어려움
- 듀얼 코어의 등장으로 스레드라는 개념이 필요하게 됨
스레드
- 프로세스는 한 개 이상의 스레드를 가질 수 있음
- CPU에서 실행되는 단위(Unit Of Execution)
- 같은 프로세스의 스레드들끼리 Context Switching은 가벼운 작업
- 프로세스의 스레드들은 해당 프로세스의 메모리 영역을 공유할 수 있음
- 각 스레드들은 메모리 영역에서 스택 및 프로그램 카운터는 고유한 영역으로 치부됨
*프로그램 카운터: 다음번에 실행되어야 할 명령어가 있는 메모리 주소를 가르키는 것
- 각 스레드들은 메모리 영역에서 스택 및 프로그램 카운터는 고유한 영역으로 치부됨
멀티 스레딩
- 하나의 프로세스가 동시에 여러 작업을 실행하는 것
- 여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 CPU Time을 나눠 갖는 것
멀티 프로세싱
- 두 개 이상의 프로세서나 코어를 활용하는 시스템