모든 프로세스들은 실행을 위해서 CPU를 필요로 한다. 하지만, CPU의 자원은 한정되어있기 때문에, 자신의 차례에 정해진 시간만큼 CPU를 사용하고, 타이머 인터럽트(Time Out)이 발생하면 차례를 양보한다.
프로세스 실행 도중 시스템 호출을 통해 다른 프로세스 생성이 가능하다.
부모 프로세스와 자식 프로세스는 별개의 프로세스이다. 그렇기 때문에 자식 프로세스가 부모 프로세스에서 복제되었더라도, 각각 다른 PID를 가진다.
부모 프로세스는 fork()라는 시스템 호출을 통해 자신의 복사본을 자식 프로세스로 생성한다.
자식 프로세스는 exec()라는 시스템 호출을 통해 자신의 메모리 공간을 다른 프로그램으로 교체한다. → 메모리 공간을 새로운 프로그램으로 덮어씀(옷 갈아입는 것과 유사)
하나의 프로세스는 하나 이상의 스레드를 가질 수 있다. ex) 웹 브라우저 프로세스는 화면 출력 스레드, 입력 스레드, 검색 스레드 등을 가질 수 있다.
스레드들은 프로세스의 자원을 공유한다.
동일한 작업을 수행하는 단일 스레드 프로세스 여러 개 실행 vs 하나의 프로세스를 여러 스레드로 실행
→ 프로세스끼리는 자원을 공유하지 않지만, 스레드는 같은 프로세스의 자원을 공유한다.
즉, 프로세스를 fork()하면 코드/힙/데이터 영역 등 모든 자원이 복제됨 → 자원의 낭비
그렇다고 해서 한쪽이 무조건 좋은 것만은 아님. 멀티 프로세스 환경에서는 하나의 프로세스에 문제가 생겨도 나머지에 문제가 없다면 상관 없지만, 멀티 스레드 환경에서는 프로세스에 문제가 생기면 이를 따르는 스레드들에 모두 문제가 생긴다.
번갈아 수행되는 프로세스들을 관리하기 위한 자료구조. 프로세스 관련 정보를 저장하는 자료구조.
PID - 특정 프로세스를 식별하기 위해 부여하는 고유한 번호
레지스터 값 - 프로세스는 자신의 실행 차례가 오면, 이전까지 사용한 레지스터 중간 값을 모두 복원해서 실행
프로세스 상태 - 입출력 장치를 사용하기 위해 기다리는 상태
CPU 스케줄링 정보 - 어떠한 순서로 CPU를 할당받아서 사용할지에 대한 정보
메모리 정보 - 프로세스가 어느 주소에 저장되어 있는지에 대한 정보, 페이지 테이블 정보
사용한 파일과 입출력장치 정보 - 할당된 입출력 장치, 사용중인 파일정보
기존의 실행 중인 프로세스의 문맥을 백업하고, 새로운 프로세스 실행을 위해 문맥을 복구하는 과정
한 프로세스에서 다른 프로세스로 실행순서가 넘어가면, 기존에 실행되던 프로세스는 지금까지의 중간정보를 PCB에 저장한다. 이러한 중간정보가 바로 context이고, 이는 다음 실행될 차례가 왔을 때 실행을 재개하기 위한 정보이다.