CS 공부

PCB와 Context Switching, IPC 본문

CS공부/운영체제

PCB와 Context Switching, IPC

kluiop1 2021. 7. 5. 01:25

PCB

프로세스가 하나 시작될 때마다 운영체제에서 그 프로세스에서 상태 정보를 포함하여 생성하는 것

각 프로세스가 생성될 때 각 프로세스에 대한 고유의 PCB가 생성되고 프로세스가 완료되면 PCB는 제거됩니다.

 

PCB 프로세스 상태 관리와 문맥 교환(Context switch)시에 프로세스의 상태를 알기위해서 필요하다.

PCB는 커널의 주소 공간에서 data에 해당하는 부분에 저장된다.

 

즉 운영체제가 프로세스 스케줄링을 위해 프로세스에 관한 모든 정보를 가지고 있는 데이터베이스를 PCB라고 한다.

 

상태가 전이되면 프로세스는 CPU가 처리하던 작업의 내용들을 자신의 PCB에 저장하고 다음에 다시 CPU를 점유하여 작업을 수행해야 할 때 PCB로부터 해당 정보들을 CPU에서 넘겨와서 계속해서 하던 작업을 진행할 수 있게 된다.

 

PCB에 저장되어있는 정보

포인터 : 부모 프로세스에 대한 포인터, 자식 프로세스에 대한 포인터, 프로세스가 위치한 메모리 주소에 대한 포인터, 할당된 자원에 대한 포인터 정보 등을 저장한다.

프로세스 상태(Process State) : 생성(create), 준비(ready), 실행 (running), 대기(waiting), 완료(terminated) 상태를 저장한다.

프로세스 식별자(Process number: PID) : 모든 프로세스에는 프로세스 식별자를 저장하는 프로세스 ID 또는 PID라는 고유 한 ID가 할당된다.

프로그램 계수기(Program Counter) : 프로그램 계수기는 이 프로세스가 다음에 실행할 명령어의 주소를 가리킨다.

CPU 레지스터 및 일반 레지스터(Registers): 누산기, 베이스, 레지스터 및 범용 레지스터를 포함하는 CPU 레지스터에 있는 정보

메모리 관리(Memory limits): 운영 체제에서 사용하는 메모리 관리 시스템에 대한 정보가 포함

열린 파일 목록(list of open files): 프로세스를 위해 열린 파일 목록

그 외 그림에는 없지만 포함된 정보들

CPU 스케줄링 정보 : 우선 순위, 최종 실행시각, CPU 점유시간 등

프로세스 계정 정보 : 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등

입출력 상태 정보 : 프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등

 

Context Switch(문맥 교환)

문맥 교환이란?

1. 멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업을 Context Switch(Context Switching)라고 한다.

 

2. 인터럽트가 발생한 경우 진행 중인 프로그램의 재개에 필요한 레지스터 문맥을 저장한다.

 

필요한 이유

하나의 CPU를 이용하여 매번 하나의 작업만 수행한다면 매번 해당 작업이 끝날 때까지 다음 작업은 기다릴 수 밖에 없고 그렇게 되면 반응 속도가 매우 느리고 사용하기 불편해진다.

 

그리하여 하나의 CPU로 효율적으로 동시에 여러 프로그램이 실행되는 것처럼 보이게 하기 위해서 context switching이 필요하게 되었다.

 

Context Switching이 진행되는 과정

작업(프로세스)의 대부분의 정보는 레지스터에 저장되고 PCB로 관리 됨

따라서 현재 실행하고 있는 작업의 상태 정보를 PCB에 저장함

 

그리고 다음에 실행할 작업을 PCB정보를 읽어 레지스터에 적재하고 CPU가 이전에 진행했던 작업을 이어서 수행할 수 있도록 한다.

 

Context Switching Cost

Context Switching이 발생하게 되면 다음과 같은 비용이 든다.

- Cache 초기화

- Memory Mapping 초기화

- 메모리의 접근을 위해서 Kernel은 항상 실행

 

그리고 Context Switching때는 해당 CPU는 아무런 일을 하지 못한다.

그래서 Context Switching 잦아지면 오버헤드가 발생해 효율이 떨어진다.

 

시간 할당량 크기에 따른 문맥 교환수 인터럽트 횟수 오버헤드

여러개의 프로세스가 CPU를 차지하는 시간 간격을 시간 할당량이라고 한다.

시간 할당량이 적으면 적을수록 여러 개의 프로세스가 동시에 수행되는 느낌이 들 수 있지만 그에 따른 문맥 교환 수 인터럽트 횟수 오버헤드는 증가한다.

시간 할당량 문맥 교환 수 인터럽트 횟수 오버헤드
작다 증가한다 증가한다 증가한다
크다 감소한다 감소한다 감소한다

 

IPC(Inter Process Communication)

IPC

프로세스 혹은 쓰레드가 데이터를 교환하는 기법 전체를 의미

 

IPC를 사용하는 이유

각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 자원에 직접 접근이 불가능하기 때문이다. (직접 접근 시 프로세스의 데이터 자료구조 부분을 건드리면 경우에 따라 시스템에 치명적인 오류가 발생될 수 도 있다.)

 

종류

메일 슬롯

메일슬롯은 단방향 메시지 전송이 가능한 메모리 상의 가상파일이다. 크기 제한이 424바이트로 꽤 작지만, 쉽게 만들 수 있고, 디스크 파일과는 다르게 휘발성이라는 점, 그리고 브로드캐스팅이 가능하다는 것이 장점이다.

파이프

셸 내에서 한 프로그램의 출력 결과를 다음 프로그램으로 전달해서 데이터를 새롭게 가공시키는 방식

 

소켓

소켓(Socket)은 일반적으로 두 네트워크 프로그램 사이에서 데이터의 입출력의 관문, 또는 그를 위한 운영체제의 API의 이름으로써 많이 쓰인다. 하지만 꼭 다른 네트워크로 가지 않고 소켓을 생성한 두 프로세스가 같은 컴퓨터 내의 같은 운영체제 상에서 실행되고 있다면 프로세스 간 통신이 가능하게 된다. 이에 더해, 아예 하나의 컴퓨터 상에서 IPC를 위해 유닉스 도메인 소켓(Unix Domain Socket)이란 것도 존재한다. 이것도 앞선 네트워크 소켓과 마찬가지로 같은 소켓 API로 사용 가능하다.

 

시그널

시그널(Signal)은 유닉스 시스템에서 쓰이는 IPC 구현 중 하나

소켓은 소켓을 생성해서 그것을 접근하기 위해 별도의 식별자가 필요하지만, 시그널은 그러한 것들이 필요하지 않고, 바로 다른 프로세스로 정보를 보낼 수 있다

소켓처럼 임의의 데이터를 보낼 수는 없고, 이름 그대로 일종의 신호만을 보낼 수 있다.

 

공유메모리

메모리의 일정 영역을 공유하는 것이다.

일정 메모리 영역을 공유 가능하게 바꿔 주는 방식,

하나의 파일을 열고 이를 메모리에 매핑하여(memory-mapped file), 이 영역을 공유 가능하게 하는 방식이 있다.

 

커널레벨 메시지 패싱 추가해야함

 

참고: https://jwprogramming.tistory.com/16

https://nesoy.github.io/articles/2018-11/Context-Switching

https://jeong-pro.tistory.com/93

https://namu.wiki/w/Inter-Process%20Communication

 

'CS공부 > 운영체제' 카테고리의 다른 글

스레드(Thread) + 프로세스 VS 스레드  (0) 2021.07.05
시스템 호출(System Call)  (0) 2021.07.05
프로세스  (0) 2021.07.05
운영체제란?  (0) 2021.07.03
운영체제 2020-1학기 중간고사 대비 3-2  (0) 2021.07.01