🗃️ 이전 글
🤔 그래서 프로세스를 어떻게 "실행, 관리" 할 수 있는 거지?
물론 PCB(Process Control Block)의 존재를 알고 있기는 했다. 하지만 정확하게 PCB가 뭔지, 어떻게 작동하는지가 궁금했다.
🛠️ Kernel
바로 커널이 등장했다. Activity Monitor를 보면 있는 그 친구...! 스레드상으로만 보면 압도적이다. (크롬 때문일까...?)
User mode, Kernel mode
아래는 컴퓨터 시스템의 구성이다. Application programs는 operating system을 통해 computer hardware에 접근하게 된다. 너무 영어를 많이 써서 그런데 아무튼 직접적으로 하드웨어(컴퓨터 자원)에 접근할 수 없다.
이전 글에서 프로세스는 Virtual address space를 가지게 되는데, 이것은 os에서 배정해 주는 것이라고 할 수 있다. 여기서 운영체제의 핵심 컴퓨터 프로그램을 kernel이라고 한다.
나는 iOS, macOS를 주로 사용하고 있으니 아래의 구조로 os가 구성되어 있는 것을 알 수 있다.
어 다윈...! 이거 프로젝트에서 Publisher 구독해제할때 봤던 것 같은데...? 한번 봐볼까? 🤓
다윈은... 넘어가도록 하자... ☠️ 여기는 아직 아닌 것 같다... 자료를 찾아보다가 그나마 microkernel 아키텍처가 이해가 잘 되는 느낌이 들어서 가져왔다. kernel 모드에서 저런식으로 하드웨어와 연관된 것들을 관리해준다. 정도 느낌만 가져가고 본론으로 돌아와보도록 하자.
📀 PCB (Process Control Block)
PCB는 프로세스를 관리하는 정보가 담겨있는 운영 체제 커널의 자료 구조라고 한다.
A process control block (PCB), also sometimes called a process descriptor, is a data structure used by a computer operating system to store all the information about a process.
- Wikipedia
- process state: 프로세스의 진행 상태
- process number: 프로세스의 식별자 PID(process id)로도 불린다.
- process counter: 다음에 실행할 명령어 주소
- registers: 컨텍스트 스위칭 시 복원할 CPU 레지스터의 값
- 메모리 관리 정보, 파일 관리 정보 ,스케줄링 정보 등
이런 정보들이 있는데 프로세스의 상태, 프로세스의 식별자, 프로세스의 디테일한 상황 이렇게 세가지를 저장한다고 보면 될 것 같다. 다시 활성 상태를 보면 kernel_task의 경우 PID가 0번이고 나머지도 고유한 값을 가지는 것을 볼 수 있다. 이런 프로세스들이 PCB의 자료형태로 kernel에서 관리 되는 것을 예상해 볼 수 있었다.
♻️ 프로세스의 상태
프로세스의 상태는 다음과 같이 관리되는데, 시작, 실행, 대기, 준비, 종료로 이루어 진다.
또한 사용되기 이전의 프로세스는 1차 저장소에서 2차 저장소로 Swapping 된다. 프로세스의 상태와 관련된 부분은 사실 어떠한 것을 크게 딥다이브 해야할지 모르겠어서 우선 이렇게 상태가 관리되고 있구나 정도로 하고 넘겼다.
🚧 Context switch
사실 프로세스의 하이라이트라고도 할 수 있는 Context switch! 위의 PCB를 통해 어떻게 여러가지 프로세스를 실행하는지 공룡책에 나와있었다. 이렇게 여러가지 프로세스를 번갈아 실행하는 것을 Context switch라고 한다.
결국 여러 프로세스들이 os, 즉 kernel에 의해 빠르게 전환되면서 실행되는 것을 알 수 있었다.
Switching the CPU core to another process requires performing a state save of the current process and a state restore of a different process. This task is known as a context switch and is illustrated in Figure 3.6. When a context switch occurs, the kernel saves the context of the old process in its PCB and loads the saved context of the new process scheduled to run. Context-switch time is pure overhead because the system does no useful work while switching. Switching speed varies from machine to machine, depending on the memory speed, the number of registers that must be copied, and the existence of special instructions (such as a single instruction to load or store all registers). A typical speed is several microseconds.
Context switching에 대해서 공룡책은 위와 같이 설명하고 있는데 해석해보면, Context switching은 단순히 프로세스 상태를 저장하고 복원하는 작업이기 때문에 pure overhead(유용한 작업을 수행하지 않는 추가적인 관리 작업)에 해당된다고 한다.
물론 필수적인 작업이지만 프로세스 입장에서는 부가 작업에 해당된다. 슬금슬금 스레드가 머리를 빼꼼 내놓고 있는 느낌이 든다. 🥸
🔥 프로세스가 생성되는 순간 일어나는 일
(이부분은 뭔가 GPT에게 물어봤기 때문에 100% 신뢰할 수는 없지만) PCB가 생성된 후, text, data영역이 먼저 메모리에 로드된다고 한다. heap과 stack 영역이 가상 메모리 공간에서 예약되지만, 초기에는 비어 있기 때문에 사용될 때 로드된다고 한다.
🧑🏻💻: 프로세스는 어떻게 관리되나요?
🐣: 프로세스의 정보는 PCB형태의 데이터 구조로 저장되며 kernel에서 관리합니다. PCB에는 PID, Process 상태, Process 컨트롤 정보를 포함하고 있습니다. kernel은 PCB를 사용하여 프로세스를 빠르게 번갈아가면서 실행하게 되는데 이것을 Context switch라고 합니다.
'→ Computer Science' 카테고리의 다른 글
[CS] 정보단위 (0) | 2025.01.31 |
---|---|
[CS] 프로세스와 스레드 딥다이브 - 4. 스레드 (0) | 2025.01.18 |
[CS] 프로세스와 스레드 딥다이브 - 2. 프로세스의 구조?? (1) | 2025.01.18 |
[CS] 프로세스와 스레드 딥다이브 - 1. 딥다이브 전 기초지식 (0) | 2025.01.18 |
[RTMP] RTMP 프로토콜 개요 (7) | 2024.11.08 |