프로세스 제어 블록
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
프로세스 제어 블록(PCB)은 운영체제에서 프로세스를 관리하기 위해 필요한 정보를 저장하는 자료 구조이다. PCB는 스케줄링, 컨텍스트 스위칭, 자원 관리에 핵심적인 역할을 하며, 프로세스 ID, 상태, 프로그램 카운터, 레지스터 값, 스케줄링 정보, 메모리 관리 정보, 계정 정보, 입출력 상태 정보 등을 포함한다. 멀티태스킹 환경에서 PCB는 정확하고 효율적인 프로세스 관리를 위해 필수적이며, 컨텍스트 스위칭 시 현재 실행 중인 프로세스의 상태를 저장하고 다른 프로세스의 상태를 복원하는 데 사용된다. PCB는 일반적으로 보호된 메모리 영역에 위치하며, 커널 내에서 현재 실행 중인 프로세스의 PCB를 가리키는 전역 포인터 변수(카렌트 PCB)를 통해 접근한다. 또한, 라이트웨이트 프로세스 환경에서는 PCB가 프로세스 전체 정보와 스레드별 컨텍스트 정보로 나뉘어 관리된다.
더 읽어볼만한 페이지
- 자료 구조 - 라우팅 테이블
라우팅 테이블은 네트워크에서 데이터 전송 시 최적 경로를 결정하는 핵심 데이터베이스로, 라우터가 목적지 IP 주소를 기반으로 다음 홉을 결정하며 직접 연결 및 원격 네트워크 경로 정보를 저장하고 동적 라우팅 또는 수동 설정으로 관리된다. - 자료 구조 - 스택
스택은 후입선출(LIFO) 원칙에 따라 데이터를 관리하는 추상 자료형으로, push 연산으로 데이터를 쌓고 pop 연산으로 가장 최근 데이터를 제거하며, 서브루틴 호출 관리, 수식 평가, 백트래킹 등에 활용된다. - 운영체제 기술 - 프로세스
프로세스는 컴퓨터에서 실행되는 프로그램의 인스턴스로, 운영 체제가 시스템 자원을 효율적으로 관리하며 멀티태스킹 환경에서 독립적인 실행 흐름을 유지한다. - 운영체제 기술 - 커널 (컴퓨팅)
커널은 운영 체제의 핵심으로, 하드웨어와 소프트웨어 간 상호 작용을 관리하며 시스템 보안, 자원 관리, 하드웨어 추상화, 프로세스 스케줄링, 프로세스 간 통신, 다중 작업 환경 지원 등의 기능을 제공하고, 모놀리식, 마이크로, 혼합형 커널 등으로 구현되며 가상화 및 클라우드 컴퓨팅 환경에서 중요성이 커지고 있다.
프로세스 제어 블록 |
---|
2. 역할
프로세스 제어 블록(PCB)은 프로세스 관리에서 핵심적인 역할을 한다. PCB는 스케줄링 및 자원 관리에 관련된 유틸리티에 의해 접근되거나 수정된다.[1]
2. 1. 프로세스 스케줄링
프로세스 제어 블록(PCB)은 프로세스 관리에서 핵심적인 역할을 수행한다. PCB는 스케줄링 및 자원 관리에 관련된 유틸리티에 의해 접근되거나 수정된다.[1]구현은 다양하지만, 일반적으로 PCB는 다음과 같은 정보를 직접 또는 간접적으로 포함한다.[1]
- 프로세스 식별 번호 (프로세스 식별자 또는 PID)
- 해당 프로세스의 레지스터 값 (특히 프로그램 카운터 값)
- 해당 프로세스의 주소 공간(의 관리 데이터)
- 열린 파일과 소켓 목록
- 프로세스 계정 정보 (프로세스가 최근에 동작한 시간, 지금까지 소비한 CPU 시간의 합계 등)
컨텍스트 스위칭 시, 현재 실행 중인 프로세스는 일시 중지되고 다른 프로세스에게 실행 기회가 주어진다. 커널은 실행 중인 프로세스를 중지하고, 그 때의 레지스터 값을 PCB에 저장하며, 새롭게 동작시킬 프로세스의 PCB에서 레지스터로 값을 복원한다.[1]
2. 2. 컨텍스트 스위칭
컨텍스트 스위칭 시, 현재 실행 중인 프로세스는 일시 정지되고 다른 프로세스에게 실행 기회가 주어진다. 커널은 실행 중인 프로세스를 중지하고, 그 때의 레지스터 값을 프로세스 제어 블록(PCB)에 저장하며, 새롭게 동작시킬 프로세스의 PCB에서 레지스터로 값을 복원한다.3. 구조
멀티태스킹 운영 체제에서 PCB는 정확하고 효율적인 프로세스 관리에 필요한 데이터를 저장한다.[4] 이러한 구조는 시스템에 따라 다르지만, 일반적인 요소는 프로세스 식별, 프로세스 상태, 프로세스 제어의 세 가지 주요 범주로 나뉜다.[4]
메모리, I/O 장치, 파일 및 프로세스를 설명하는 각 관련 엔티티에 대한 상태 테이블이 존재한다. 예를 들어, 메모리 테이블에는 각 프로세스에 대한 주 메모리 및 보조 (가상) 메모리의 할당, 서로 다른 프로세스 간에 공유되는 메모리 영역에 액세스하기 위한 권한 속성 등에 대한 정보가 포함되어 있다. I/O 테이블에는 장치의 가용성 또는 프로세스에의 할당, I/O 작업의 상태, I/O 작업에 사용되는 메모리 버퍼의 위치 등을 나타내는 항목이 있을 수 있다.
PCB는 일반적으로 다음과 같은 정보를 포함한다.[4]
정보 종류 | 내용 |
---|---|
프로세스 식별 정보 | 프로세스 고유 식별자(PID), 상위 프로세스 식별자, 사용자 식별자, 사용자 그룹 식별자 등 |
프로세스 상태 정보 | 프로세스 상태, 프로그램 계수기(PC), CPU 레지스터, CPU 스케줄링 정보, 페이지 테이블 등의 메모리 관리 정보, 입출력(I/O) 상태 정보, 프로세스 계정 정보 등 |
프로세스 제어 정보 | 프로세스 스케줄링 상태, 프로세스 구조화 정보, 프로세스 간 통신 정보, 프로세스 권한 등 |
3. 1. 프로세스 식별 정보
프로세스 식별 데이터에는 프로세스에 대한 고유 식별자(거의 항상 정수)와 다중 사용자-멀티태스킹 시스템에서 상위 프로세스의 식별자, 사용자 식별자, 사용자 그룹 식별자 등이 포함된다.[4] 프로세스 ID는 위에 정의된 테이블을 상호 참조하는 데 자주 사용되므로 특히 관련이 있다. 예를 들어, 어떤 프로세스가 어떤 I/O 장치 또는 메모리 영역을 사용하고 있는지 보여준다.[4]일반적으로 PCB는 다음과 같은 프로세스 식별 정보를 직/간접적으로 포함한다.
- 프로세스를 식별하는 번호(프로세스 식별자 또는 PID)
- 해당 프로세스의 주소 공간(의 관리 데이터)
- 열린 파일과 소켓의 목록
- 프로세스 계정 정보: 프로세스가 최근에 동작한 시간, 지금까지 소비한 CPU 시간의 합계 등[4]
3. 2. 프로세스 상태 정보
운영체제에 따라 PCB에 포함되는 항목은 다를 수 있지만, 일반적으로 다음과 같은 프로세스 상태 정보를 포함한다.[4]- 프로세스 상태: 프로세스의 현재 상태를 나타낸다. 생성(create), 준비(ready), 실행(running), 대기(waiting), 완료(terminated) 상태 등이 있다. 유예준비상태(suspended ready)와 유예대기상태(suspended wait)는 스택이 아닌 디스크(disk)에 저장된다.
- 프로그램 계수기(PC): 다음에 실행할 명령어의 주소를 가리킨다.
- CPU 레지스터: 실행 상태를 위해 프로세스를 저장해야 하는 레지스터 세트이다.
- CPU 스케줄링 정보: CPU 시간을 스케줄링하는 데 필요한 정보이다. 우선순위, 최종 실행 시각, CPU 점유 시간 등이 포함된다.
- 메모리 관리 정보: 페이지 테이블, 메모리 제한, 세그먼트 테이블 등 메모리 관리에 필요한 정보이다.
- 입출력(I/O) 상태 정보: 프로세스에 할당된 입출력 장치 목록과 열린 파일 목록 등이 포함된다.
- 프로세스 계정 정보: 프로세스가 최근에 동작한 시간, 지금까지 소비한 CPU 시간의 합계 등
- 프로세스 구조화 정보: 프로세스의 자식 ID 또는 현재 프로세스와 기능적 방식으로 관련된 다른 프로세스의 ID (큐, 링 또는 기타 데이터 구조로 나타낼 수 있음).
- 프로세스 간 통신 정보: 독립 프로세스 간의 통신과 관련된 플래그, 신호 및 메시지.
- 프로세스 권한: 시스템 리소스에 대한 허용/거부된 액세스.
컨텍스트 스위칭 시, 현재 실행 중인 프로세스는 일시 정지되고 다른 프로세스에게 실행 기회가 주어진다. 커널은 실행 중인 프로세스를 중지하고, 그 때의 레지스터 값을 PCB에 저장하며, 새롭게 동작시킬 프로세스의 PCB에서 레지스터로 값을 복원한다.[4]
3. 3. 프로세스 제어 정보
운영체제에 따라 PCB에 포함되는 항목은 다를 수 있지만, 일반적으로 다음과 같은 정보가 포함된다.[4]- 프로세스 식별자(Process ID)
- 프로세스 상태(Process State): 생성(create), 준비(ready), 실행(running), 대기(waiting), 완료(terminated) 상태 등이 있다.
- 프로그램 계수기(Program Counter): 다음에 실행할 명령어의 주소를 가리킨다.
- CPU 레지스터 및 일반 레지스터
- CPU 스케줄링 정보: 우선 순위, 최종 실행시각, CPU 점유시간 등
- 메모리 관리 정보: 해당 프로세스의 주소 공간 등
- 프로세스 계정 정보: 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등
- 입출력 상태 정보: 프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등
멀티태스킹 운영 체제에서 PCB는 프로세스 관리에 필요한 데이터를 저장한다.[4] 일반적인 요소는 다음 세 가지 주요 범주로 나뉜다.[4]
- 프로세스 식별
- 프로세스 상태
- 프로세스 제어
메모리, I/O 장치, 파일 및 프로세스를 설명하는 각 관련 엔티티에 대한 상태 테이블이 존재한다.
예를 들어, 메모리 테이블에는 각 프로세스에 대한 주 메모리 및 보조 (가상) 메모리의 할당, 서로 다른 프로세스 간에 공유되는 메모리 영역에 액세스하기 위한 권한 속성 등에 대한 정보가 포함되어 있다. I/O 테이블에는 장치의 가용성 또는 프로세스에의 할당, I/O 작업의 상태, I/O 작업에 사용되는 메모리 버퍼의 위치 등을 나타내는 항목이 있을 수 있다.
'''프로세스 식별 데이터'''에는 다음 정보가 포함된다.
- 프로세스에 대한 고유 식별자 (거의 항상 정수)
- 상위 프로세스의 식별자
- 사용자 식별자
- 사용자 그룹 식별자
프로세스 ID는 위에 정의된 테이블을 상호 참조하는 데 자주 사용된다. 예를 들어, 어떤 프로세스가 어떤 I/O 장치 또는 메모리 영역을 사용하고 있는지 보여준다.
'''프로세스 상태 데이터'''는 OS가 나중에 다시 시작할 수 있도록 프로세스가 일시 중단될 때 프로세스의 상태를 정의한다. 여기에는 일반적으로 다음이 포함된다.
- 범용 CPU 레지스터의 내용
- CPU 프로세스 상태 워드
- 스택 및 프레임 포인터 등
컨텍스트 스위칭 동안 실행 중인 프로세스가 중지되고 다른 프로세스가 실행된다. 커널은 실행 중인 프로세스의 실행을 중지하고, 그 때의 레지스터 값을 PCB에 저장하며, 새 프로세스의 PCB에서 레지스터로 값을 복원한다.
'''프로세스 제어 정보'''는 OS에서 프로세스 자체를 관리하는 데 사용된다. 여기에는 다음이 포함된다.
- 프로세스 스케줄링 상태
- "준비", "일시 중단" 등과 관련하여 프로세스의 상태, 우선 순위 값, 프로세스가 CPU 제어를 얻은 이후 또는 일시 중단된 이후 경과된 시간 등과 같은 다른 스케줄링 정보.
- 일시 중단된 프로세스의 경우 프로세스가 대기 중인 이벤트에 대한 이벤트 식별 데이터를 기록해야 한다.
- 프로세스 구조화 정보 - 프로세스의 자식 ID 또는 현재 프로세스와 기능적 방식으로 관련된 다른 프로세스의 ID (큐, 링 또는 기타 데이터 구조로 나타낼 수 있음).
- 프로세스 간 통신 정보 - 독립 프로세스 간의 통신과 관련된 플래그, 신호 및 메시지.
- 프로세스 권한 - 시스템 리소스에 대한 허용/거부된 액세스.
- 프로세스 상태 - 새 프로세스, 준비, 실행 중, 대기, 종료.
- 프로세스 번호 (PID) - 각 프로세스에 대한 고유 식별 번호 (프로세스 ID라고도 함).
- 프로그램 카운터 (PC) - 이 프로세스에 대해 실행될 다음 명령어의 주소를 가리키는 포인터.
- CPU 레지스터 - 실행 상태를 위해 프로세스를 저장해야 하는 레지스터 세트.
- CPU 스케줄링 정보 - CPU 시간을 스케줄링하는 정보.
- 메모리 관리 정보 - 페이지 테이블, 메모리 제한, 세그먼트 테이블.
- 회계 정보 - 프로세스 실행에 사용된 CPU의 양, 시간 제한, 실행 ID 등.
- I/O 상태 정보 - 프로세스에 할당된 I/O 장치 목록.
일반적으로 PCB는 다음과 같은 항목을 보관한다.
4. 위치
PCB는 프로세스의 중요한 정보를 담고 있어 일반 사용자가 접근할 수 없도록 보호된 메모리 영역에 보관된다. 일부 운영 체제에서는 PCB가 커널 스택의 처음에 위치하는데, 이는 편리하면서도 보호를 받는 위치이기 때문이다.[7][5]
커널 내 코드는 현재 실행 중인 프로세스의 PCB에 자주 접근한다. 보통 전역 포인터 변수를 사용하여 현재 프로세스의 PCB (카렌트 PCB)를 가리킨다. 시스템 콜 처리는 프로세스마다 이루어지므로, 커널 스택은 각 프로세스마다 필요하다. 이를 쉽게 관리하기 위해 PCB와 커널 스택을 함께 두는 경우가 많다.
전역 변수를 사용하면 간접 접근으로 인해 성능이 떨어질 수 있다. 성능 향상을 위해 카렌트 PCB를 고정된 가상 주소에 매핑하기도 한다. 예를 들어 MIPS 아키텍처에서는 0번지 전후 접근 시 제로 레지스터 (내용이 항상 0)를 포인터처럼 사용하여 효율적인 코드를 작성할 수 있다. 이를 통해 가상 공간의 가장 큰 주소 (32비트의 경우 0xFFFFFFFF) 근처에 PCB와 커널 스택을 매핑하는 경우가 많다 (음수 오프셋과 제로 레지스터로 PCB 접근 가능).
일반적으로 커널 내에서는 프로세스마다 스택이 존재하므로, 그 크기는 사용자 공간의 콜 스택만큼 크게 할 수 없다. 따라서 커널 내 코드는 스택에 큰 지역 변수 영역을 만들지 않도록 주의해야 하며, 재귀 호출도 피해야 한다.
멀티 프로세싱 환경에서는 각 프로세서가 서로 다른 프로세스를 실행하므로, 카렌트 PCB도 프로세서마다 존재한다.
5. 카렌트 PCB
커널 내의 코드는 현재 실행 중인 프로세스의 프로세스 제어 블록(PCB)에 자주 접근한다. 보통 전역 포인터 변수를 사용하여 현재 프로세스의 PCB (카렌트 PCB)를 가리킨다.[1] 커널 내의 시스템 콜 처리는 프로세스마다 이루어지므로, 커널 스택도 프로세스마다 필요하다.[1] 이들을 쉽게 관리하기 위해 PCB와 커널 스택을 하나로 합치는 경우가 있다.[1]
전역 변수를 사용하면 간접 접근이 발생하여 성능이 저하될 수 있다.[1] 따라서 성능 향상을 위해 카렌트 PCB를 고정된 가상 주소에 매핑하기도 한다.[1] 예를 들어, MIPS 아키텍처에서는 0번지 근처에 접근할 때 제로 레지스터(내용이 항상 0)를 포인터처럼 사용하여 매우 효율적인 코드를 작성할 수 있다.[1] 이를 이용하여 가상 공간의 가장 큰 주소(32비트라면 0xFFFFFFFF) 근처에 PCB와 커널 스택을 매핑하는 경우가 많다(음수 오프셋과 제로 레지스터로 PCB에 접근 가능).[1]
멀티 프로세싱에서는 각 프로세서가 각각 다른 프로세스를 실행하므로, 카렌트 PCB도 프로세서마다 존재한다.[1]
6. 라이트웨이트 프로세스 (Lightweight Process)
사용자 프로세스의 멀티 스레드를 커널이 인식하고 처리하는 경우 (라이트웨이트 프로세스), 각 스레드는 커널 내에 컨텍스트를 가진다. 따라서 PCB는 프로세스 전체에 관련된 부분(주소 공간 관련 및 파일 관련)과 컨텍스트 스위칭에 관련된 부분으로 나뉘며, 후자는 스레드(라이트웨이트 프로세스)마다 생성된다. 이는 어떤 의미에서는 프로세스 관리의 두 가지 주요 기능(프로세스별 자원 할당 관리와 프로세스 또는 라이트웨이트 프로세스의 상태 관리)에 대응한다.[1]
참조
[1]
웹사이트
Process Control Block | Baeldung on Computer Science
https://www.baeldung[...]
2020-06-25
[2]
웹사이트
Class 9: The Unix Filesystem
https://www.usna.edu[...]
2023-12-09
[3]
웹사이트
CS 537 Notes: Directories
https://pages.cs.wis[...]
2023-12-09
[4]
서적
Operating system concepts
https://archive.org/[...]
Wiley
[5]
간행물
Breaking through the Maximum Process Number
http://www.linuxjour[...]
Linux Journal
2004-01-01
[6]
서적
An introduction to operating systems
http://portal.acm.or[...]
Addison-Wesley
[7]
간행물
Breaking through the Maximum Process Number
http://www.linuxjour[...]
Linux Journal
2004-01-01
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com