프로세스에 대해 더 자세한 내용은 여기
컴퓨터가 실행할 수 있는 명령어들의 집합
- 컴퓨터에서 실행되고 있는 프로그램을 의미한다.
- 각각의 프로세스는 독립된 메모리공간을 할당 받음
- 메모리공간에 명려어들과 데이터들을 저장
명령어를 실행하는 연산 장치, 프로세서라고도 불림.
프로세스가 cpu에서 실행되기 위해 대기하는 곳
파일을 읽고 쓰거나, 네트워크의 어딘가와 데이터를 주고 받는 것, 입출력 장치와 데이터를 주고 받는 것
Process1이 cpu 사용을 하면 Process1의 작업이 끝날 때까지 기다려야 한다.
Process1의 작업이 모두 끝난 후에 Process2가 cpu를 사용할 수 있음.
한번에 하나의 프로그램만 실행되는 것, 다른 프로그램을 실행하려면 먼저 실행하고 있던 프로그램을 종료시키고 그 다음 프로그램을 실행해야함
- 단점: CPU 사용률이 좋지 않음 , 실행 중에 있는 프로세스가 IO 작업을 하는 동안에는 CPU가 쉬고 있음
이런 단점을 보완하고자 여러개의 프로세스를 메모리에 올려놓고 동시에 실행켜 cpu 사용률을 높이고자 한 것이 바로 멀티 프로그래밍!
Process1이 cpu를 사용하다가 IO를 하게 되면 그 사이에 Process2가 사용할 수 있음. 그러다 Process2가 IO를 하게 되면 Process1이 다시 cpu를 사용할 수 있음.
여러개의 프로세스를 메모리에 올려놓고 동시에 실행시키자! , IO 작업이 발생하면 다른 프로세스가 CPU에서 실행됨!
- 단점: CPU 사용시간이 길어지면 다른 프로세스는 계속 대기하는 문제 발생
멀티 프로그래밍과 유사하지만 하나의 프로세스가 계속해서 CPU를 점유하는 문제를 해결하기 위한 것이 바로 멀티 태스킹!
프로세스가 한번 CPU를 사용할 때 아주 짧은 시간(QUANTAM)만큼만 CPU에서 실행되도록 하자! CPU사용시간을 퀀텀 단위로 나눈 것으로 프로세스의 응답시간을 최소화 시키는데 목적!
- 단점: 여러 프로세스가 동시에 실행되는 것은 시스템 차원에서 지원함. BUT 하나의 프로세스가 동시에 여러 작업을 수행하지는 못함
->여러 프로세스를 만들면 되지 않나?
문제점: 프로세스 컨텍스트 스위칭은 무거운 작업임. 그리고 프로세스끼리 데이터 공유가 까다로움. 또한 듀얼 코어가 등장하면서 이를 잘 활용하고자 하는 요구사항.
이런 단점과 문제점을 해결하고자 나온 것이 스레드 개념.
- CPU에서 실행되는 단위가 프로세스에서 스레드로 바뀜!(unit of excution)
-> 기본적으로 프로세스는 한 개 이상의 스레드를 가질 수 있음( 그렇기 때문에 한 프로세스 안에서 여러 작업을 동시에 실행 할 수 있음)- 같은 프로세스의 스레드끼리 컨텍스트 스위칭은 가벼움.
- 스레드들은 자신이 속한 프로세스의 메모리 영역을 공유할 수 있음
-> 자원 공유가 쉬워짐 (힙 영역 공유, 스레드마다 PC, SP, 스택은/ 따로 관리)
그래서 하나의 프로세스가 동시에 여러 스레드를 갖는 것을 멀티 스레딩이라고 한다.
즉, 동시에 하나의 프로세스가 여러 작업을 수행할 수 있음.
두 개 이상의 프로세서나 코어를 활용하는 시스템