프로세스 제어 블록 - PCB, 프로세스 문맥(Context), IPC

Groot·2022년 10월 24일
0

TIL

목록 보기
87/153
post-thumbnail
post-custom-banner

TIL

🌱 난 오늘 무엇을 공부했을까?

📌 프로세스 제어 블록 - PCB

  • 프로세스 제어 블록(Process Control Block, 줄여서 PCB)은 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영 체제 커널의 자료 구조.
  • PCB는 정수 프로세스 ID(PID)로 식별.
  • PCB는 아래 표에 나열된 프로세스를 추적하는 데 필요한 모든 정보를 보관.
  • PCB는 프로세스 수명 내내 유지되며 프로세스가 종료되면 삭제됩니다.
  • PCB의 아키텍처는 운영 체제에 완전히 의존하며 운영 체제에 따라 다른 정보를 포함.
  • PCB가 프로세스의 중요한 정보를 포함하고 있기 때문에, 일반 사용자가 접근하지 못하도록 보호된 메모리 영역 안에 남는다. (일부 운영 체제에서 PCB는 커널 스택의 처음에 위치한다.)

🔗 PCB의 구조

  • 프로세스 식별자(Process ID)
  • 프로세스 상태(Process State): 생성(create), 준비(ready), 실행(running), 대기(waiting), 완료(terminated) 상태가 있다.

    유예준비상태(suspended ready), 유예대기상태(suspended wait)는 스택이 아닌 disk에 저장된다.

  • 프로그램 카운터(Program Counter): 프로그램 카운터는 이 프로세스가 다음에 실행할 명령어의 주소를 가리킨다.
  • CPU 레지스터 및 일반 레지스터
  • CPU 스케줄링 정보: 우선 순위, 최종 실행시각, CPU 점유시간 등
  • 메모리 관리 정보: 해당 프로세스의 주소 공간 등
  • 프로세스 계정 정보: 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등
  • 입출력 상태 정보: 프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등

📌 프로세스 문맥(Context)

  • 특정 시점에서 프로그램을 얼마나 진행했는지
    - 주소공간의 어디를 바라보는가? (Stack, Code 등)
    - 레지스터에 무엇이 들어있는가?

🔗 하드웨어 문맥

  • Program Counter
  • register

🔗 프로세스의 주소 공간

  • code, data, stack

🔗 프로세스 관련 커널 자료구조

  • PCB
  • Kernel stack

📌 문맥 교환(Context Switching)

  • 컨텍스트 스위칭은 프로세스 제어 블록에 CPU의 상태 또는 컨텍스트를 저장하고 복원하여 나중에 같은 지점에서 프로세스 실행을 재개할 수 있도록 하는 메커니즘.
  • 컨텍스트 스위처를 통해 여러 프로세스가 단일 CPU를 공유
  • 컨텍스트 스위칭은 멀티태스킹 운영 체제 기능의 필수적인 부분

🔗 문맥 교환 구조


1. 스케줄러가 CPU를 한 프로세스 실행에서 다른 프로세스 실행으로 전환하면 현재 실행 중인 프로세스의 상태가 프로세스 제어 블록에 저장.
2. 그 후, 다음에 실행할 프로세스의 상태는 자체 PCB에서 로드되어 PC, 레지스터 등을 설정하는 데 사용된다. 이 시점에서 두 번째 프로세스가 실행을 시작

  • 저장되는 정보들
    • Program Counter
    • Scheduling information
    • Base and limit register value
    • Currently used register
    • Changed State
    • I/O State information
    • Accounting information

인터럽트나 시스템 콜이 발생 시 무조건 문맥교환이 일어나지는 않음.
프로세스에서 다른 프로세스로 변경되는 시점에서만 문맥교환이 일어남.

📌 IPC

  • 프로세스 간 통신(Inter-Process Communication, IPC)이란 프로세스들 사이에 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로를 뜻한다.
  • 한 프로그램에서 병렬성을 키우면서 공유되는 데이터를 사용하기 위해 메모리 공간을 공유하는 스레드를 이용하는 경우가 많다 (물론 스레드를 쓰는 이유는 이것 말고도 매우 다양하다). 하지만 이것은 하나의 프로그램에서만 의미가 있는 것이고, 서로 다른 프로그램(즉, 서로 다른 프로세스)의 데이터를 공유하려면 결국 다른 프로세스의 메모리를 접근할 필요가 발생한다. 따라서 이 때는 IPC라는 것을 사용하게 된다.
  • 멀티태스킹 운영체제 내 또는 네트워크화(Networked)/분산된(Distributed) 컴퓨터들 사이에, 각각 실행되는 프로세스 간에 정보의 교환을 가능케 하는 기법
  • IPC는 트랜스포트 계층(Layer 4) 또는 세션계층(Layer 5)에서 이루어짐

    LPC(Local Inter-Process Communication, 로컬 컴퓨터 프로세스간 통신)라는 게 있는데 프로세스가 다른 프로세스와 정보를 주고 받을 때 빠른 속도로 데이터를 교환하기 위해 사용한다. 다만 이건 커널에서만 쓸 수 있으며 일반 프로그램은 LPC를 사용할 수 없다.

🔗 IPC 구현 기법들

  1. file
  2. Message Queue
  3. Shared Memory
  4. Pipe
  5. Signal
  6. Semaphore
  7. Socket
  • 커널은 공간을 공유하기 때문에 2번부터는 모두 커널 공간을 사용한다.

https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4_%EC%A0%9C%EC%96%B4_%EB%B8%94%EB%A1%9D
https://ko.wikipedia.org/wiki/%EB%AC%B8%EB%A7%A5_%EA%B5%90%ED%99%98
https://www.tutorialspoint.com/operating_system/os_processes.htm
https://www.tutorialspoint.com/operating_system/os_process_scheduling.htm
https://namu.wiki/w/IPC
https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4_%EA%B0%84_%ED%86%B5%EC%8B%A0
http://www.ktword.co.kr/test/view/view.php?no=302
https://www.fun-coding.org/ipc.html

profile
I Am Groot
post-custom-banner

0개의 댓글