프로세스 맛보기
PCB와 Context Switching
Process Control Block (PCB)
PCB는 OS에서 특정 프로세스에 관한 정보를 담고 있는 자료구조이다.
OS 프로세스는 PCB로 표현되고 OS는 PCB를 사용해서 이러한 프로세스를 추적하고 관리한다.
PCB로 표현된 프로세스에 관한 정보를 우리 Context라고 부른다.
구성 요소
- 프로세스 상태: 프로세스의 현재 상태(예: 실행 중, 대기 중, 준비 완료 등)
- 프로세스 Number(PID): 각 프로세스를 고유하게 식별하는 ID
- 프로그램 Counter: 프로세스가 실행할 다음 명령어의 주소
- CPU 레지스터: 누산기, 인덱스 레지스터, 스택 포인터 등 다양한 CPU 레지스터를 포함하며, 프로세스 실행 중 임시 데이터 및 중간 결과를 저장하는 곳
- 메모리 관리 정보: 프로세스에 할당된 메모리에 대한 정보(페이지 테이블 같은 거)
- Accounting 정보: CPU 사용량, 시간 제한, …
- I/O 상태 정보: 프로세스에 할당된 I/O 장치, 열린 파일 등에 대한 정보
출처: https://cps-cse.media.uconn.edu/wp-content/uploads/sites/2687/2019/09/ch3.pdf
Process 맛보기
실제 X닉스에는 이러한 PCB가 task_struct 구조체로 구현되어 있다.
task_struct는 user mode에서는 직접적으로 접근하지 못합니다. 우분투는 모든 것을 파일로 노출해주기에 간단하게 제 우분투 서버로 프로세스에 어떤 것이 있는지 보여드릴려고 합니다. 실제 제 우분투 서버에서 본 프로세스(`zsh`)에서 사용중인 자원들입니다.
현재 실행중인 프로세스들이 어떤 자원을 가지고 있는지 봐보자.
현재 프로세스의 상태는 다음과 같다.
우분부 같은 X닉스 계열의 서버는 프로세스의 자원도 파일로 접근할 수 있도록 되어있다.
파일 디스크립터를 건드려서 간단한 실험을 해보자!
좌측에서 cd한 proc/self는 현재 실행 중인 프로세스를 즉, zsh을 나타낸다. 여기에 보면 zsh의 현재 PID를 가져올 수 있다.
우측에서 새로운 zsh에서 `proc/좌측_터미널_zsh_PID`의 1번 파일디스크립터에 문자를 덮어씌워봤다. 그랬더니 좌측의 프로세스에서 그 문자열이 표준출력이 되버리는 것을 볼 수 있다.
Context Switching
Context Switching은 OS가 현재 실행 중인 프로세스의 상태를 저장해두고 다른 프로세스의 상태를 복원하여 단일 CPU에서 여러 프로세스가 실행될 수 있도록하는 과정이다.
멀티태스킹을 위해 필수적인 기능이다!
조심해야할 점
Context Switch를 하는 동안은 의미있는 시스템은 다른 작업을 할 수 없기 때문에 오버헤드가 생긴다. 특히, Context Switching을 많이 하면 계속 상태를 저장하고 불러오느라 시간을 뺐기게 되므로 비효율적이다.
면접 질문 예상해보기
컨텍스트 스위칭의 잠재적인 단점은 무엇인가요?
컨텍스트 스위칭을 할 때 프로세스 상태를 저장하고 복원하는 과정에서 CPU는 실질적인 작업을 수행하지 못합니다. 여기서 발생하는 오버헤드 때문에 잦은 컨텍스트 스위칭은 CPU 사용량을 높여 전체적인 시스템 성능을 저하시킬 수 있습니다.
그리고 컨텍스트 스위칭이 일어나면 CPU 캐시에 저장된 데이터가 무효화되고 새로운 프로세스가 CPU를 차지할 때 다시 로드해야 합니다. 이것 때문에 캐시 Miss가 발생하게 되고 메모리 접근 속도가 느려질 수 있습니다.