프로세스 내부에는 최소 하나의 스레드(thread)를 가지고 있는데, 실제로는 스레드(thread) 단위로 스케줄링을 한다.
각 프로세스는 독립된 메모리 공간을 할당받아 실행되며, 운영 체제는 프로세스를 생성, 제어, 종료하고 여러 프로세스 간의 상호작용을 관리합니다.
프로세스의 메모리 영역은 Code, Data, Heap, Stack 등을 가지고 있습니다.
✔️ 프로세스의 상태
실행(Running) : 현재 CPU에서 실행중인 상태입니다.
준비(Ready) : 실행 가능한 상태로, CPU를 할당받기 위해 대기 중인 상태입니다.
대기(Blocked, Waiting, Sleep) - 특정 이벤트 발생을 기다리는 상태로, 예를 들어 입출력 완료를 기다리거나 락(lock)을 획득하기 위해 대기하는 상태입니다. - CPU를 주어도 당장 instruction 을 수행할 수 없는 상태입니다.
종료(Terminated) : 실행이 완료된 상태로, 운영 체제에 의해 자원이 해제되고 종료되는 상태입니다.
Process State
✔️ PCB(Process Control Block)
운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 구조체입니다.
프로세스 상태 관리와 문맥 교환(Context Switching)을 위해 필요합니다.
PCB는 프로세스 생성 시 만들어지며 주기억장치에 유지된다.
✔️ PCB의 구조
프로세스 식별자(Process ID) : 각 프로세스가 갖는 고유한 식별자입니다.
프로세스 상태(Process State) : 프로세스는 실행 중, 대기 중, 준비 중 등의 여러 상태를 갖고 PCB는 현재 프로세스 상태를 추적합니다.
레지스터 상태(Register State) : 프로세스가 실행되는 동안 레지스터에 저장되는 값들은 프로세스 상태의 일부입니다. PCB는 프로그램 카운터 (Program Counter), 스택 포인터 (Stack Pointer), 누산기 (Accumulator) 등의 레지스터 상태를 유지합니다.
프로세스 우선순위(Process Priority) : 운영체제는 프로세스에 우선순위를 할당합니다. PCB는 프로세스의 우선순위를 포함하고 이를 기반으로 스케줄링을 수행합니다.
✔️ 문맥 교환(Context Switch)
Context switch는 운영체제에서 실행 중인 프로세스 또는 스레드의 상태를 저장하고, 다른 프로세스 또는 스레드로 전환하는 과정을 말합니다. 또한, 멀티태스킹 환경에서 CPU 시간을 공유하고 여러 프로세스 또는 스레드가 동시에 실행될 수 있도록 합니다.
현재 프로세스 A 가 CPU 를CPU를 사용하고 있는 상황에서 CPU 사용시간이 끝나, 다음 프로세스에게 CPU를 넘겨주어야 합니다.스케줄링 알고리즘에 의해 다음 CPU 를 받을 프로세스 B 가 선택되었고, 타이머 인터럽트가 발생해 CPU 제어권이 운영체제 커널에 넘어가게 됩니다.
ex) 카카오톡을 켜놓고 유투브로 영상을 보면서 웹서핑을 하는 것은 사용자 입장에서 동시에 일어나는 일처럼 보이지만 실제로는 그렇지 않음.
위와 같은 현상을 동시성이라고 부릅니다. 동시성(Concurreny)과 병렬성(Parallelism)의 차이는 아래 포스트 참고하시기 바랍니다.