CS OS PCB & Context Switching
Process Management
CPU가 프로세스가 여러개 일 때, CPU 스케줄링을 통해 관리하는 것을 말한다.
이 때 CPU가 프로세스를 관리하기 위해 각 프로세스가 누군지 알아야 한다.
프로세스의 특징을 갖고 있는 것이 Process Metadata이다.
Process Metadata
- Process ID (프로세스 아이디)
- Process State (프로세스 상태)
- Process Priority (프로세스 우선순위)
- CPU Registers (CPU 레지스터)
- Owner (소유자)
- CPU Usage (CPU 사용량)
- Memory Usage (메모리 사용량)
프로세스가 생성되면 메타데이터는 PCB(Process Control Block)이라는 곳에 저장된다.
ㅇ PCB
프로세스 메타데이터들을 저장하는 공간, 한 PCB에는 한 프로세스의 정보가 담긴다.
동작 과정
- 프로그램 실행
- 프로세스 생성
- 프로세스 주소 공간에 (코드, 데이터, 스택) 생성
- 이 프로세스의 메타데이터를 PCB에 저장
PCB가 필요한 이유
CPU에서는 프로세스의 상태에 따라 교체작업이 이루어진다.
(인터럽트가 발생하여 현재 실행중인 프로세스가 wating 상태가 되고 다른 프로세스가 running으로 올라갈 때)
이 상황에서 수행대기중인 프로세스에 관한 저장 값을 PCB에 저장하는 것이다.
PCB의 관리
Linked List 형식으로 관리된다.
PCB List Head에 PCB들이 생성될 때 마다 붙게된다. 주소값으로 연결이 이루어져 있는 연결리스트이기 때문에 삽입 삭제가 용이하다.
이렇게 수행 중인 프로세스를 변경할 때 CPU 레지스터 정보가 변경되는 것을 Context Switching이라 한다.
ㅇ Context Switching
수행중인 Task(Process/Thread)가 변경될 때 CPU의 레지스터 정보가 변경되는 것을 뜻한다. 이전 프로세스 상태를 PCB에 보관하고, 다른 프로세스의 정보를 PCB에서 읽어와 CPU 레지스터에 적재하는 과정이다.
Context Switching은 언제 발생하는가
- 실행되고 있는 프로세스가 중단되고 다른 프로세스가 올라올 때
- CPU 스케줄링에 의해 Timeout이 발생할 때
- 인터럽트가 발생하거나 입출력을 위해 대기해야할 때
Context Switching은 왜 필요한가
CPU는 한 번에 하나의 프로세스만 수행할 수 있지만, 실생활에서 우리는 여러 개의 프로세스를 동시에 수행하고자 한다. 따라서 CPU가 여러 개의 프로세스를 번갈아가면서 수행함으로 동시에 수행하는 것 처럼 보이게 하기 위하여 사용한다.
Cntext Switching OverHead?
overhead는 과부하라는 뜻으로 안좋은 말로 쓰인다.
프로세스 작업 중에는 과부하를 감수해야하는 상황이 있다.
* 프로세스를 수행하다 입출력 이벤트가 발생하여 대기 상태로 전환
이 때 CPU를 그냥 놀게 놔두는게 아니라 다른 프로세스를 수행시키는 것이 효율적
CPU에게 계속 프로세스를 수행시키도록 하기 위해서 다른 프로세스를 실행시키고 Context Switching 한다.
CPU가 놀지 않도록하고, 사용자에게 빠른 일처리를 제공해주기 위한 것이다.
출처:
https://gyoogle.dev/blog/computer-science/operating-system/PCB%20&%20Context%20Switching.html