프로세스와 스레드의 각 차이점 및 특징에 대해 정리하고자 합니다.
GeeksForGeeks에 좋은 내용들이 있어 해당 문서를 기반으로 작성합니다.
프로세스는 실행 중인 프로그램입니다.
예를 들어, 우리가 C 혹은 C++를 사용하여 컴파일 했을 때, 컴파일러는 바이너리 코드를 만들어 냅니다.
원래의 코드와 바이너리 코드 모두 프로그램이라 할 수 있으며 우리가 실제 바이너리 코드를 실행하게 되면 이것이 프로세스가 됩니다.
하나의 프로그램은 동시에 실행하기 위해 여러 프로세스를 생성 할 수 있습니다. 예를 들어 우리가 .exe 파일 혹은 바이너리 파일을 동시에 열었을 때 다수의 인스턴스들은 시작됩니다. 이때 여러 개의 프로세스가 생성이 되는 것입니다.
(출처 : https://www.geeksforgeeks.org/introduction-of-process-management/?ref=lbp)
(출처 : https://www.geeksforgeeks.org/introduction-of-process-management/?ref=lbp)
1. new : 새롭게 생성된 프로세스 혹은 생성되어진 프로세스의 상태
2. Ready : 생성된 프로세스들은 Ready 상태로 이동됩니다. 즉, 실행 가능한 상태가 됩니다.
3. Run : CPU 내에서 현재 실행 중인 프로세스의 상태입니다. (하나의 프로세서에서는 오직 하나의 프로세스만 실행 상태가 가능합니다.)
4. Wait (or block) : 프로세스가 I/O 접근을 요청할 때의 상태입니다.
5. Complete (or terminated) : 실행을 마친 프로세스의 상태 입니다.
6. Suspended Ready : Ready Queue가 꽉차게 될 때, 일부 프로세스들은 일시 중지 시작 상태로 이동합니다.
7. Suspended Block : Waiting Queue가 꽉 찼을 때의 상태 입니다.
한 task가 끝날 때 까지 기다리는 것이 아니라 여러 작업을 번갈아 가면서 실행해서 동시에 처리될 수 있도록 하는 방법입니다.
인터럽트가 발생하면 현재 프로세스의 상태를 PCB에 저장하고 새로운 프로세스의 상태를 레지스터에 저장하는 방식으로 동작합니다. 이때, CPU는 아무런 일을 하지 않으므로 잦은 문맥교환은 성능저하를 일으킬 수 있습니다.
mode switch는 CPU privilege level이 변경되었을 때 발생합니다. 예를 들어, 시스템 호출이 발생하거나 결함이 발생했을 때 입니다.
커널은 표준 사용자 작업보다 privileged mode에 더 우선순위를 두어 동작합니다.
만약 사용자 프로세스가 커널에서만 접근 가능한 무엇인가에 접근하고자 할 때, mode switch가 발생합니다.
현재 실행 중인 프로세스는 mode switch가 동작되는 동안 변경되면 안됩니다.
하나의 mode switch는 전형적으로 프로세스 문백 교환을 발생시키기 위해 동작합니다.
cpu-bound 프로세스는 실행 시간 동안 더 많은 CPU 사용률과 시간을 소모합니다.
I/O-Bound 프로세스는 더 많은 I/O 사용률과 적은 CPU 사용률을 소모합니다. I/O 프로세스는 waiting 상태에서 더 많은 시간을 사용합니다.