PCB (Process Control Block)
1. PCB (=TCB (Task Control Block)) 란?
- 특정 프로세스에 대한 정보를 담고있는 자료구조
- 운영체제는 PCB에 담긴 프로세스 정보를 이용하여 프로세스를 관리, 제어함
- 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 제거됨
+ 프로세스란?
- 프로그램의 인스턴스
- 운영체제로부터 자원을 할당받는 작업의 단위
- 메모리에 적재되어 실행되고 있는 프로그램
→ 하나의 프로그램에서는 여러개의 프로세스 실행 가능
ex. 메모장이라는 프로그램을 여러 번 동작시키면, 여러개의 메모장(프로세스)이 실행됨
- 프로세스 메모리 구조
○ code(text) 영역 : 실행할 프로그램의 코드
○ data 영역 : 전역 변수, 정적 변수 담기는 영역
○ stack 영역 : 지역 변수, 매개변수같은 임시적인 데이터들 담기는 영역
○ heap 영역 : 런타임시 동적으로 메모리 할당받는 영역
2. PCB에 저장되는 프로세스 정보 (Process Metadata)
- Process ID : 프로세스 고유 식별 번호 (PID : Process Identification Number)
- Process State : 프로세스의 상태 - 생성(create), 준비(ready), 실행(running), 대기(waiting), 완료(terminated)
- Process Priority (프로세스 우선순위)
- Program Counter : 프로세스가 다음에 실행할 명령의 주소를 가리킴 (CPU가 해당 값을 통해 프로세스의 명령을 수행)
- Process Register : 프로세스의 레지스터 상태를 저장하는 공간
- Pointer : 부모/자식 프로세스에 대한 포인터
- 메모리 관리정보, 프로세스 계정정보, 입출력 상태정보 등등
정리하자면..
프로그램 실행 → 프로세스 생성 → 프로세스 주소공간(메모리구조)에 코드, 데이터, 스택 생성 → 프로세스의 메타데이터들이 PCB에 저장
*메타데이터란? 데이터에 대한 데이터 (ex. 파일생성날짜, 시간, 파일생성된 위치, 수정일자, 파일크기 등)
3. PCB가 필요한 이유?
CPU에서는 프로세스 상태에 따라 교체작업이 이루어짐 (for 문맥교환 - 아래에서 설명)
→ 프로세스는 CPU가 처리하던 작업의 내용들을 자신의 PCB에 저장하고, 다음에 다시 CPU를 점유하여 작업을 수행해야 할 때 PCB로부터 해당 정보들을 가져와 하던 작업을 마저 진행
4. PCB는 어떻게 관리되는지?
- Linked List (연결리스트) 형태로 관리
- PCB List Head에 PCB들이 생성될때마다 붙게됨
- 주소값으로 연결이 이루어져있는 연결리스트
Running 상태 (수행 중)의 프로세스 정보는 CPU 레지스터에 저장됨
따라서 수행중인 프로세스를 변경할 때, CPU의 레지스터 정보가 변경되는 것을 Context Switching (문맥교환)이라고 함
+레지스터란?
- 레지스터(Register)에도 다양한 종류가 있는데, 이 글에 해당하는 건 CPU 레지스터로, CPU 내부에서 처리할 명령어나 연산의 중간 결괏값 등을 일시적으로 저장하는 기억장치를 의미함
- 레지스터는 메모리 계층의 최상위에 위치하며, 간단하게는 가장 빠른 속도로 접근 가능한 메모리 정도로 기억하자.
실제 컴퓨터에서 데이터를 영구적으로 저장하기 위해서는 하드디스크에 저장하고, 임시적으로는 메모리(RAM)에 저장함
메모리(RAM)와 하드디스크에 데이터를 보내기 위해선, 이들에 대한 주소와 명령의 종류를 저장할 수 있는 기억공간이 하나 더 필요
→ 이런 역할들을 하는것이 CPU 옆에 붙어있는 레지스터
Context Switching (문맥교환)
1. 문맥교환이란?
- 현재 CPU가 실행하고 있는 프로세스 정보를 `문맥` 이라고 함 → 이를 교환하는 행위가 문맥 교환(Context Switching)
- 현재 실행 중인 프로세스 정보를 담고 있는 CPU 레지스터의 내용이 다음 실행할 프로세스의 정보로 변경되는 것을 의미
- 위에서 설명했던 PCB가 필요한 이유는 바로 Context Switching (문맥교환)을 위해서
2. Context Switching(문맥교환)이 필요한 이유
만약 컴퓨터가 매번 하나의 Task만 처리할 수 있다면, 다음 Task 처리를 위해 현재 Task가 끝날 때까지 기다려함
→ 반응속도가 매우 느리고 사용하기 불편
컴퓨터가 멀티태스킹을 통해 빠른 반응속도로 응답하며, 다양한 작업들이 실시간으로 처리되는 것처럼 보여지는 이유는 Context Switching이 이루어지고 있기 때문
3. Context Switching 시나리오
EX)
1. 프로세스 A에서 인터럽트 발생
2. A의 현재 상태 정보를 PCB에 저장
3. A를 대기 상태로 돌리고 프로세스 B를 실행 상태로 전환
4. B의 PCB에서 프로세스 상태 정보가 CPU에 재로딩
5. B가 원하는 동작을 모두 수행
6. B의 현재 상태 정보를 PCB에 저장
7. B를 대기 상태로 돌리고 A를 실행 상태로 전환
8. A의 PCB 정보를 기반으로 실행 재개
*인터럽트란?
프로그램을 실행하는 도중 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 중단하고 발생된 상황을 처리한 후 다시 작업을 복귀하는 것
정리하자면..
문맥교환은 프로세스가 Ready → Running , Running → Ready , Running → Block 등등 처럼 상태 변경 시에 발생하는 것
'CS > 운영체제' 카테고리의 다른 글
프로세스 vs 스레드 (0) | 2022.07.16 |
---|---|
파일 시스템 (0) | 2022.06.25 |
페이징(Paging) & 세그멘테이션(Segmentation) (0) | 2022.06.18 |
세마포어(Semaphore)와 뮤텍스(Mutex) (0) | 2022.06.18 |
CPU 스케줄링 (0) | 2022.06.11 |