PCB (Process Control Block)
PCB는 운영체제가 각 프로세스를 관리하기 위해 유지하는 자료구조이다.
각 프로세스마다 하나의 PCB가 할당되며, PCB에는 해당 프로세스에 대한 정보가 저장된다.
PCB에 저장되는 정보
- 프로세스 식별자(Process Id)
- 각 프로세스에는 고유한 식별자가 할당된다.
- 프로세스를 식별하고 구분하기 위해 사용
- 프로세스 상태(Process State)
- 프로세스의 현재 상태를 나타낸다.
- new, ready, running, waiting, terminated가 있다.
- 스케줄링 및 운영체제의 상태 관리에 사용
- 프로그램 카운터(Program Counter)
- 현재 프로세스가 다음에 실행할 명령어의 주소를 가리키는 레지스터 값
- 프로세스가 중단되었다가 다시 실행될 때, 이전 상태로 복원하기 위해 필요하다.
- 레지스터(Registers)
- 프로세스의 레지스터 값들을 저장한다. 레지스터에는 프로세스의 실행 상태와 관련된 정보가 포함된다.
- ex) 범용 레지스터, 스택 포인터, 프로그램 상태 레지스터 등의 값
- 프로세스 상태 전환이나 중단/복원 시에 레지스터 값을 유지하기 위해 필요하다.
- 스케줄링 정보(Scheduling Information)
- 프로세스의 우선순위, 스케줄링 알고리즘에 필요한 정보 등을 저장한다.
- 스케줄링 알고리즘이 결정되는 데 사용되며, 운영체제가 프로세스를 효율적으로 관리할 수 있도록 도와준다.
- 메모리 관리 정보(Memory Related Information)
- 프로세스의 메모리 할당과 관련된 메모리 영역의 범위, 페이지 테이블 등의 정보를 저장한다.
- 메모리 관련 유틸리티가 메모리 할당 및 해제를 관리하는 데 사용
- 계정 정보(Accounting Information)
- 프로세스와 관련된 계정 정보를 저장한다.
- ex) CPU 사용량, 실행 시간, 입출력 작업 통계 등
- 이러한 정보는 성능 모니터링, 로그 기록, 자원 사용 축적 등에 사용된다.
- I/O 관련 상태 정보(Status Information related to I/O)
- 프로세스와 관련된 입출력 장치의 상태 정보를 저장한다.
- ex) 현재 열린 파일, I/O 대기열, 입출력 상태 등
- 입출력 작업 관리와 관련된 운영체제 기능을 지원하기 위해 사용
PCB 사용
- 프로세스 상태 관리 & Context Switching
- CPU에서는 프로세스의 상태에 따라 교체작업이 이루어지는데, 이때 PCB는 현재 실행 중인 프로세스의 상태를 저장하고 다음으로 실행할 프로세스의 정보를 로드하여 CPU의 전환을 지원한다.
- CPU에서는 프로세스의 상태에 따라 교체작업이 이루어지는데, 이때 PCB는 현재 실행 중인 프로세스의 상태를 저장하고 다음으로 실행할 프로세스의 정보를 로드하여 CPU의 전환을 지원한다.
- 메모리와 CPU 레지스터 간 정보 전환
- 대기 중이거나 준비 중인 프로세스의 PCB는 메모리에 유지된다. 그리고 해당 프로세스가 실행되기 위해 선택되면 PCB의 정보가 CPU 레지스터로 올라간다.
- 즉, ready/waiting → 메모리, running → CPU 레지스터에 위치한다.
PCB 관리 방식
- 일반적으로 주기억장치(RAM)에 저장되며, 각 프로세스마다 PCB가 할당되고 주소를 통해 연결리스트 형태로 관리된다. PCB List Head에 PCB들이 생성될 때마다 연결 리스트에 추가된다.
- 연결 리스트는 PCB의 주소를 통해 각 PCB가 연결되어 있어, PCB의 삽입 및 삭제 작업이 용이하다.
- 프로세스가 생성되면 해당 프로세스에 대한 PCB가 생성되고, 프로세스가 종료되면 해당 PCB는 제거된다.
Context Switching (컨텍스트 스위칭)
Context Switching은 CPU가 한 프로세스에서 다른 프로세스로 전환하는 과정이다. 컨텍스트 스위칭은 다중 프로세스 환경에서 프로세스들이 CPU를 공유하며 실행되는 상황에서 필요한 작업이다.
Context Switching이 발생하는 상황
- 프로세스 스케줄링 : 현재 실행 중인 프로세스를 중지하고 다른 프로세스를 실행해야 하는 경우
- 인터럽트 : 현재 실행 중인 프로세스를 중지하고 인터럽트 처리를 위한 다른 프로세스를 실행해야 하는 경우
인터럽트를 처리한 후 원래 진행 중이던 프로세스를 다시 진행 할 경우
Context Switching 과정
- 현재 실행 중인 프로세스/스레드의 상태 저장 : 현재 실행 중인 프로세스/스레드의 레지스터 값, 프로그램 카운터, 상태 정보 등을 해당 프로세스의 PCB에 저장
- 다음 실행할 프로세스/스레드 정보 로드 : 다음으로 실행할 프로세스/스레드의 PCB에서 해당 프로세스의 레지스터 값, 프로그램 카운터, 상태 정보 등을 CPU에 로드
- 프로세스/스레드 상태 전환 : 현재 실행 중인 프로세스/스레드를 waiting 상태로 전환하고, 다음으로 실행할 프로세스/스레를 ready 또는 running 상태로 전환
- 이전 프로세스/스레 복원 : 컨텍스트 스위칭이 완료되면 CPU는 다음에 실행할 프로세스/스레드로 이동하고, 해당 작업의 프로그램 카운터(PC) 값부터 실행을 재개
Context Switching 비용
- 프로세스가 스레드보다 많이 든다.
- 스레드는 stack을 제외한 모든 메모리를 공유하기 때문에 컨텍스트 스위칭이 일어나도 stack 영역만 변경하면 된다.
'Computer Science > Operating System' 카테고리의 다른 글
[OS] CPU 스케줄러 (0) | 2023.06.02 |
---|---|
[OS] IPC (Inter Process Communication) (0) | 2023.05.28 |
[OS] 시스템 콜 (System Call) (0) | 2023.05.27 |
[OS] 인터럽트(Interrupt) (0) | 2023.05.22 |
[OS] 프로세스(Process) & 스레드(Thread) (0) | 2023.05.21 |