누구의 실행인가
- PID, PPID, UID/GID로 관계와 권한을 판단한다.
- 상태 값으로 Ready, Running, Waiting을 구분한다.
PCB는 프로세스의 신분, CPU 문맥, 메모리 경계, 열린 자원을 저장하고 컨텍스트 스위칭은 이 값을 저장한 뒤 다음 프로세스 값을 복원한다.
타이머 인터럽트나 I/O 대기로 현재 실행이 멈춘다.
PC, SP, 레지스터와 상태를 현재 프로세스 PCB에 쓴다.
Ready Queue에서 우선순위와 시간 정책으로 대상을 고른다.
페이지 테이블이 바뀌며 TLB와 캐시 비용이 생긴다.
다음 PCB의 레지스터를 CPU에 올리고 사용자 모드로 돌아간다.
CPU를 받을 수 있는 후보가 모이며 스케줄러가 여기서 고른다.
I/O, 네트워크, 시그널 이벤트를 기다리다 완료되면 Ready로 돌아간다.
스레드는 주소 공간을 공유해 프로세스 전환보다 TLB 부담이 작다.
/proc/<PID>/status에서 상태, 메모리, 스레드 수를 본다.
/proc/<PID>/fd에서 파일과 소켓 연결을 확인한다.
voluntary와 nonvoluntary switch를 나누어 I/O 대기와 CPU 경쟁을 구분한다.