ComputerScience/프로세스와 스레드

PCB

dev_swan 2023. 11. 20.

✏️ PCB

PCB(Process Control Block)는 운영체제에서 프로세스에 대한 메타데이터를 저장한 데이터 구조를 말합니다. 프로세스가 생성되면 운영체제는 해당 프로세스를 관리하기 위해 PCB를 생성합니다.

 

프로그램이 실행되면 프로세스가 생성되고, 프로세스의 주소 공간에는 스택, 힙 등의 메모리 구조가 형성됩니다. PCB는 이러한 프로세스의 상태, 프로그램 카운터, 메모리 포인터 등의 중요한 정보를 포함하고 있습니다. 이 정보는 프로세스의 수명 동안 필요한 중요한 데이터이기 때문에 커널 영역에서 보호되며, 일반 사용자가 직접 접근할 수 없습니다.

더보기

💡 프로그램 카운터

프로그램 카운터는 현재 CPU가 실행 중인 명령어의 주소를 가리키는 레지스터입니다. 프로세스가 실행되면서 명령어가 순차적으로 실행될 때, 프로그램 카운터는 다음에 실행될 명령어의 주소로 업데이트됩니다.

더보기

💡 메모리 포인터

메모리 포인터는 메모리 주소를 저장하는 변수 또는 레지스터입니다. 프로그래밍에서 포인터는 특정 메모리 위치를 가리키는 변수로 사용되며, 포인터를 통해 해당 메모리 위치에 접근할 수 있습니다.

 

📋 PCB의 구조

  • 프로세스 스케줄링 상태 : 준비, 일시중단 등 프로세스가 CPU에 대한 소유권을 얻은 이후의 상태
  • 프로세스 ID : 프로세스 ID, 해당 프로세스의 자식 프로세스 ID
  • 프로세스 권한 : 컴퓨터 자원 또는 I/O 디바이스에 대한 권한 정보
  • 프로그램 카운터 : 프로세스에서 실행해야 할 다음 명령어의 주소에 대한 포인터
  • CPU 레지스터 : 프로세스를 실행하기 위해 저장해야 할 레지스터에 대한 정보
  • CPU 스케줄링 정보 : CPU 스케줄러에 의해 중단된 시간 등에 대한 정보
  • 계정 정보 : 프로세스에 실행에 사용된 CPU 사용량, 실행한 유저의 정보
  • I/O 상태 정보 : 프로세스에 할당된 I/O 디바이스 목록

🔁 컨텍스트 스위칭

컨텍스트 스위칭(Context Switching)은 현재 실행 중인 프로세스의 상태를 그 프로세스의 PCB에 저장하고, 다음에 실행될 프로세스의 상태를 해당 프로세스의 PCB에서 불러오는 과정을 말합니다. 이 과정은 주로 타임 퀀텀이 소진될 때, I/O 요청, 페이지 폴트와 같은 인터럽트에 의해 발생합니다.

 

실제로 컴퓨터는 여러 프로세스를 동시에 실행하는 것처럼 보이지만, 싱글 코어 CPU에서는 특정 시점에는 단 하나의 프로세스만이 실행됩니다. 이러한 동시성의 느낌이 주어지는 이유는 컨텍스트 스위칭이 매우 빠르게 이루어지기 때문입니다. 그 결과 사용자는 여러 프로그램이 동시에 구동되는 것처럼 느끼게 됩니다.

 

단, 멀티코어 CPU에서는 여러 프로세스나 스레드가 동시에 실행될 수 있습니다. 이 경우, 각 코어마다 독립적으로 컨텍스트 스위칭이 발생할 수 있습니다.

더보기

💡 타임 퀀텀

타임 퀀텀은 각 프로세스에 할당된 고정된 시간 단위를 의미하며, 프로세스는 해당 시간 동안만 CPU를 사용할 수 있습니다.

 

타임 퀀텀이 소진되면, 현재 실행 중인 프로세스는 다음 프로세스에게 CPU를 양보하게 되고, 해당 프로세스의 상태는 PCB에 저장됩니다. 이후 해당 프로세스는 준비 상태로 되돌아가서 다시 CPU를 할당받을 때까지 기다리게 됩니다.

컨텍스트 스위칭 - https://velog.io/@hkh1213

위의 그림처럼 프로세스 P0이 실행하다 멈추고, P0의 PCB를 저장하고 다시 프로세스 P1을 로드하여 실행합니다. 그리고 다시 프로세스 P1의 PCB를 저장하고, 프로세스 P0의 PCB를 로드합니다. 컨텍스트 스위칭이 일어날 때 위의 그림처럼 유휴 시간(idle time)이 발생하는 것을 확인할 수 있습니다.

더보기

💡 유휴 시간

유휴 시간은 프로세스 간의 전환 시 발생하는 시간 손실을 의미합니다. 이 시간 동안 실제로 유용한 작업이 수행되지 않기 때문에 유휴 시간이라고 표현될 수 있습니다.

 

스레드에서의 컨텍스트 스위칭

컨텍스트 스위칭은 프로세스뿐만 아니라 스레드 간에서도 발생합니다. 스레드는 동일한 프로세스 내에서 실행되기 때문에 코드, 데이터, 힙 등의 메모리 영역을 공유합니다. 그러나 각 스레드는 자체적인 스택 영역과 레지스터 집합을 가지고 있습니다.

 

이러한 구조 덕분에 스레드 간의 컨텍스트 스위칭은 프로세스 간의 컨텍스트 스위칭보다 일반적으로 비용이 더 적게 들고 빠르게 수행될 수 있습니다. 스레드 간의 컨텍스트 스위칭에서는 주로 레지스터 정보와 스택 상태를 저장 및 복원하는 작업만 필요하기 때문입니다.

'ComputerScience > 프로세스와 스레드' 카테고리의 다른 글

스레드와 멀티스레딩  (0) 2023.11.20
멀티프로세싱  (0) 2023.11.20
프로세스의 메모리 구조  (0) 2023.11.20
프로세스의 상태  (1) 2023.11.20
프로세스와 컴파일 과정  (0) 2023.11.17

댓글