하나의 프로그램이 메모리에 올라온 상태를 말한다.
(폰노이만 구조에서, 어떤 프로그램이 '실행'된다는 것은 메모리 위에 올라온 상태를 말한다)
프로세스는 크게 4가지 status로 나뉘며, 이 모든 status는 CPU 스케줄러가 관리한다.
모든 프로세스는 고유한 제어 블록(PCB, Process Control Block)을 가진다.
프로세스 제어블록에는 여러 가지 중요한 정보가 있는데, 대표적으로 아래와 같다.
특히 포인터는, 같은 입출력을 기다리는 프로세스끼리 모이게 해주는 역할을 한다. 모든 대기 프로세스가 한 곳에 모여 있다면 비효율적이므로, 포인터는 대기 큐/준비 큐 등으로 나눠서 프로세스가 진행될 수 있도록 돕는다.
PCB는 문맥 교환(context swtiching)이 일어날 때 같이 리셋된다.
CPU를 차지하던 기존의 프로세스에서 새로운 프로세스로 변경될 경우, 기존 프로세스의 작업내용은 저장되고 > 새로운 프로세스의 제어 블록 내용으로 CPU가 리셋되는데, 그래야 다음 작업을 계속 할 수 있기 때문.
부모 프로세스(PPID) 와 자식 프로세스(CPID)
다른 프로세스를 생성하는 프로세스를 부모 프로세스라고 하며,
부모 프로세스에 의해 생성되는 프로세스를 자식 프로세스라고 한다.
파이썬에서는multiprocessing
모듈을 통해 자식 프로세스를 만들어 일을 위임할 수 있다.#프로세스 이름 및 PID(운영체제가 부여한 프로세스 넘버) 확인 import multiprocessing as mp if __name__ == '__main__': proc = mp.current_process() print(proc.name) print(proc.pid) >>> MainProcess >>> 8105
#자식 프로세스 생성 import multiprocessing as mp import time def worker(): proc = mp.current_process() print(proc.name) print(proc.pid) time.sleep(5) print('SubProcess End') if __name__ == '__main__': proc = mp.current_process() print(proc.name) print(proc.pid) p = mp.Process(name='SubProcess', target=worker) p.start() print('MainProcess End') >>> MainProcess >>> 8105 >>> MainProcess End >>> SubProcess >>> 8149 >>> SubPRocess End
자료 출처
쉽게 배우는 운영체제, 조성호
https://www.guru99.com/process-management-pcb.html
https://wikidocs.net/85603