✔️ Process Management
프로세스란 실행 중인 프로그램을 의미하며 구체적으로 시스템(커널)에 등록되고 커널의 관리하에 있는 작업을 뜻한다.
또한 프로세스는 각종 자원들을 요청하고 할당받을 수 있는 프로세스 관리 블록(PCB)를 할당받은 개체이다.
프로세스 관리란 CPU가 여러개의 프로세스가 있을 때 CPU 스케줄링을 통해 프로세스를 관리하는 것을 말한다.
이때, CPU는 각 프로세스들을 식별할 수 있어야 관리가 가능하다.
프로세스의 특징을 갖고 있는 것이 바로 Process Matadata이다.
✔️ Process Matadata
- process-id : 새로운 프로세스에 시스템이 할당해주는 고유 id
- process- state : 프로세스의 라이프 타임과 관련된 상태로, waiting, running, ready, blocked, end, suspend-wait, suspend-ready 가 있다
- priority : 프로세스 스케줄링을 위한 우선순위이다
- Process Accounting Information : CPU를 사용한 시간, CPU 할당 시간 등이 있다
- Program Counter : 이전에 배운 PC로 다음 작업할 명령어 위치를 기억한다
- List of Open Files : 실행 중에 프로그램에 필요한 모든 파일의 정보를 포함한다
- Process I/0 status information : 해당 프로세스가 실행 중에 할당을 요구한 I/O 장치에 대한 정보를 담는다
- CPU 레지스터 : context switch가 발생하면 이 때의 레지스터 정보를 기억해서 다시 프로세스가 CPU 할당을 받으면 사용한다. accumulator, index, stack pointer 와 같은 레지스터의 값이 저장된다
- PCB Pointer : 준비중인 다음 프로세스의 주소를 가리킨다. 준비 상태나, 대기 상태의 큐를 구현할 때 다음을 가리키는 포인터로 사용된다
- Memory management information : 메모리 관리 정보로 프로세스가 메모리의 어디에 있는 지 나타내는 메모리 정보와 메모리 보호를 위한 경계 레지스터, 한계 레지스터 값등이 저장된다. 또한, segmentation table , page table 등 정보도 보관한다.
- PPID, CPID : 부모 프로세스를 가리키는 PPID, 자식 프로세스를 관리하는 CPID가 저장된다.
각 프로세스가 생성될 때마다 고유한 PCB가 생성되고 프로세스가 완료되면 PCB는 제거된다.
1. 프로그램 실행
2. 프로세스 생성 (프로그램을 메모리에 적재)
3. 프로세스 Matadata 생성
4. Matadata를 PCB에 저장
이때, 한 PCB에는 한 프로세스의 정보가 담긴다.
✔️ Process Control Block (PCB)
운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 구조체이다.
프로세스 상태 관리와 Context Switching을 위해 필요하다.
PCB는 프로세스 생성 시 만들어지며 주기억장치에 유지된다.
프로그램 실행 → 프로세스 생성 → 프로세스 주소 공간 생성 → 이 프로세스의 메타 데이터들이 PCB에 저장
✔️ PCB의 필요성과 관리 방법
프로세스가 여러개 실행 중일 때 CPU에서는 프로세스의 상태에 따라 교체 작업이 이루어진다.
Interrupt 발생 → 할당 받은 프로세스를 Waiting 상태로 변경 → 다른 프로세스를 Running 상태로 변경
이때, 앞으로 다시 수행할 대기 중인 프로세스에 대한 저장 값을 PCB에 저장해 두는 것이다.
PCB는 Linked List 방식으로 관리되어 삽입과 삭제가 용이하다.
PCB List Head에 PCB들이 생성될 때마다 붙게된다.
PCB List Head → PCB1 → PCB2 → PCB3
즉 프로세스가 생성되면 해당 PCB가 생성되고 프로세스 완료시 제거된다.
✔️ Context Switching
수행 중인 Task(Process/Thread)가 변경될 때, CPU의 레지스터 정보가 변경되는 것을 뜻한다.
즉, 이전 프로세스의 상태를 PCB에 보관하고, 다른 프로세스의 정보를 PCB에서 읽어와 CPU 레지스터에 적재하는 과정이다.
보통 인터럽트가 발생하거나, 실행 중인 CPU 사용 허가시간을 모두 소모하거나, 입출력을 위해 대기해야 하는 경우에 Context Switching이 발생한다.
System call이나 Interrupt가 발생했다고 해서 반드시 Context Switching이 발생하는 것은 아니다.
Interrupt 중에서도 timer interrupt가 들어왔을 때와 I/O 요청 System Call이 들어왔을 때이다.
즉, 프로세스가 Ready → Running, Running → Ready, Running → Waiting처럼 상태 변경 시 발생!
✔️ Context Switching의 필요성
프로세스 수행 중 입출력 이벤트가 발생해서 해당 프로세스를 대기 상태로 전환시켰을 때
CPU를 그냥 놓게 놔두는 것보다 다른 프로세스를 수행시키는 것이 효율적이기 때문
✔️ Context Switching의 Overhead
Context Switching에 걸린 시간과 메모리를 말한다.
프로세스 내부에서 System call을 요청하거나 Interrupt가 외부에서 들어왔어도 운영체제에서 일을 마치고 다시 할당되었던 CPU로 넘어가게 될 때 발생한다.
Context Switching 발생 시 소요되는 Cost
- Cache 초기화
- Memory Mapping 초기화
- Kernel은 항상 실행되어야 함
I/O 이벤트가 발생했을 때 디스크에 명령을 내렸는데 끝날 때까지 기다리면서 CPU가 가만히 있으면 CPU가 낭비된다.
때문에 다른 프로세스로 바꾸면서까지 CPU를 더 사용하는게 이익이다.
overhead를 감수하면서 기존 프로세스를 새 프로세스로 바꾸는 것이 더 낫다.
🔗 참고
'CS > 운영체제' 카테고리의 다른 글
[운영체제] IPC(Inter Process Communication) (0) | 2022.04.04 |
---|---|
[운영체제] Process Management (0) | 2022.03.17 |
[운영체제] System Call (0) | 2022.03.14 |
[운영체제] 인터럽트(Interrupt) (0) | 2022.03.14 |
[운영체제] 프로세스 & 스레드 (0) | 2022.03.14 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!