순번 | 용어 | 정의 |
---|---|---|
1 | program | 컴퓨터가 실행할 수 있는 명령들의 집합 |
2 | process | - 컴퓨터에서 실행 중인 프로그램 - 각각의 프로세스는 독립된 메모리 공간을 할당 받음 - 명령어들과 데이터를 가짐 |
3 | CPU | 명령어를 실행하는 연산 장치 |
4 | main memory | 프로세스가 cpu에서 실행되기 위해 대기하는 곳 |
5 | IO(input/output) | - 파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 주고 받는 것 - 입출력 장치와 데이터를 주거나 받는 것 |
한 번에 하나의 프로그램만 사용
CPU 사용률이 좋지 않음
여러개의 프로그램이 동시에 실행
CPU사용 시간이 길어지면 다른 프로세스는 계속 대기
- 동시에 여러 프로그램을 실행시킨 다는 것은 멀티 프로그래밍과 유사하나, CPU타임 안에서 프로세스를 짧게 쪼개 번갈아 가면서 실행한다는데 차이가 있다.
- 프로세스의 응답 시간을 최소화 시키는데 목적이 있다. (즉각적 응답 가능)
- 하나의 프로세스가 동시에 여러작업을 수행하지는 못함
- 프로세스의 컨텍스트 스위칭(하나의 cpu에서 여러 프로세스을 실행하기위해서 짧은 작업을 마치고 다른 프로세스로 교체하는 작업)은 무거운 작업임
- 프로세스끼리 데이터 공유가 까다로움
- 하나의 CPU성능을 계속 발전시키는 것이 발열등의 이슈로 어려워짐. 한 CPU안에 두개의 코어를 두어 전체적인 성능을 향상시키는 발전을 하게 됨 그것이 듀얼 코어다.
프로세스는 한 개 이상의 스레드 가질 수 있다.
- 한 프로세스 안에서 여러 개의 작업을 하기 위해 등장 했기 때문에 여러 개를 하나 하나 맡아서 작업해줄 스레드가 필요하다.
- cpu에서 실행되는 단위다. (unit of execution)
- 예전에는 프로세스가 cpu에서 실행되는 단위었다면 지금은 스레드로 바뀌었다.
- 때문에, 기본적으로 프로세스는 하나의 스레드를 가지고 있다.
- 같은 프로세스의 스레드들끼리 컨텍스트 스위칭은 가볍다.
- 스레드들은 자신들의 속한 프로세스의 메모리 영역을 공유한다. 따라서, 컨텍스트 스위칭이 가볍고 데이터공유가 쉽다.
아래는 메모리 구조를 나타내는 그림이다.
[왼쪽 그림] : 싱글 스레드, 스레드 나오기 전에 프로세스만의 메모리 구조
[오른쪽 그림]: 스레드가 등장한 이후의 메모리 구조
- 하나의 프로세스가 동시에 여러 작업을 실행하는데 목적
- 코어가 두 개 이상으로, 하나의 코어가 여러개의 스레드를 가지고 병렬적으로 처리
- 확장된 멀티태스킹 개념:
- 여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 cpu time을 나눠 갖는 것
두 개 이상의 프로세서나 코어를 활용하는 시스템
만일 해야할 일의 양이 100이라고 가정할 때 3명이 하나의 팀으로써 리소스를 공유하는 것(=thread단위)이 좋을까? 아니면 각자 따로 버츄얼메모리를 가지고 각자의 stack, heap을 가지고 작업을 하는 것(=process단위)이 좋을까?
정답은 없다.
둘 중 무엇이 효율적이냐의 문제가 있다. 운영체제의 설계철학이 여기서 드러남
thread - 윈도우
process - 리눅스(도커가 적합)