PCB (Process Control Block), Context Switching 문맥교환, Overhead 오버헤드에 대해서 알아보겠습니다.

 

 

 

 

 

PCB(process Control Block)란?

  • 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 구조체이다.
  • 프로세스 상태 관리와 문맥교환(context switching)을 위해 필요하다.
  • PCB는 프로세스 생성 시 만들어지며 주기억장치에 유지된다.

 

 

우리는 인터넷을 하면서 음악도 듣고, 채팅도 할 수 있다. → 어떻게 이 많은 일을 동시에 할 수 있는걸까??

사실 컴퓨터는 이를 동시에 처리하는게 아니라 TIME SHARING이라고 해서 짧은 시간동안 왔다갔다 번갈아서 재빨리빨리 처리해주는건데 그 방법이 아주 효율적이고 빨라서 우리가 동시에 일어나는 일처럼 느끼는 것뿐!!

→ 운영체제라는 프로그램덕분

이렇게 프로세스들이 교체되어 수행되고 나면 다시 다른 프로세스를 불러와야 하는데,

이 말은 이전 작업에 대한 내용을 기억하고 있다는 이야기가 된다.

이를 위해 프로세스 단위로 정보를 저장해주는 block가 있는데 이를 PCB라 한다.

결국 운영체제는 하드웨어가 효율적으로 동작할 수 있도록 관리해주는 소프트웨어! 프로그램!입니다.

따라서 운영체제라는 프로그램이 프로세스를 하나 만들어서 실행을 하려면 그 프로세스와 관련된 데이터 구조가 당연히 있어야겠죠.

그 프로세스가 뭔지 알아야! 기본적인 정보들은 어딘가에 저장이 되어 있어야 하기 때문!!

그것을 PCB라고 부른다. 프로세스상태 관리와 문맥교환을 위해 필요한 프로세스와 관련된 데이터 구조!!!→ PCB

즉 프로세스가 만들어지면 그 프로세스에 저장되어야 할 데이터들을 하나의 structure로 만들어 놓은 것을 뜻합니다.

이런 블럭들이 있어서 스위칭 되어도 기억을 하고 이어서 실행할수 있다

 

 

 

 

 

PCB 저장 정보

  • PID(process ID) : 프로세스의 고유 번호
  • 프로세스 상태(Process State) : 생성, 준비, 실행, 대기, 완료 상태가 있습니다.
  • 프로그램 계수기(Process Counter) : 프로그램 계수기는 이 프로세스가 다음에 실행할 명령어의 주소(프로세스의 주소)를 가리킵니다.
  • 레지스터 저장 공간 : 레지스터 관련 정보를 저장
  • CPU 스케줄링 정보 : 우선 순위, 최종 실행시각, CPU 점유시간 등
  • 메모리 관리 정보 : 해당 프로세스의 주소 공간, 할당된 자원 정보
  • 프로세스 계정 정보(account) : 페이지 테이블, 스케쥴링 큐 포인터, 소유자, 부모 등
  • 입출력 상태 정보 : 프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등
  • 포인터 : 부모프로세스, 자식 프로세스에 대한 포인터, 프로세스가 위치한 메모리 주소의 포인터, 할당된 자원에 대한 포인터 정보 등

 

현재 수행 중인 프로세스 정보만을 위해서는 CPU 자체의 레지스터에 저장하고 있어서 PCB가 따로 필요하지 않다.

 

 

  1. processP0이 실행되고 있다. cpu에 있는 레지스터들은 P0의 상태로 수행되고 있는것
  2. interrupt가 걸리면 운영체제는 먼저 현재 실행중인 프로세스를 저장한다.
  3. 현재 실행하던 processP0를 저장하고 waiting로 변하게되고 다른 프로세스를 running로 바꿔 버린다.(인터럽트가 걸렸다는 것은 지금 내가 running하는 프로세스를 잠깐 내려놓고 다른 프로세스를 실행하는 동안 기다리게 한다는 뜻입니다.)
  4. 레지스터의 저장 값이 앞으로 수행할 프로세스에 관한 정보로 교체될 겁니다.
  5. cpu는 레지스터에 있는 정보를 보고 처리작업을 수행하니까 당연히 새 프로세스 실행을 위해 기존 프로세스 정보는 다른 곳으로 저장을 한후 실행할 프로세스의 정보를 cpu의 레지스터에 저장해야한다.

 

이때 PCB에 cpu에서 수행되면 레지스터 값들이 저장이 됩니다.

내가 수행하던 프로세스가 어디까지 수행됬는지(프로세스 카운터), stack pointer의 위치가 어디인지, 그 외 register들의 집합 정보들을 PCB에 잠시 저장한다는 겁니다!

그림을 보면 executing되다가 다른 프로세스 P1을 수행 시키기 위해 PCB0에다가 P0프로세스의 정보를 저장합니다.

그리고 레지스터에 PCB1에 저장되어있던 process1 정보를 가져와 p1을 수행시킵니다.

이러한 저장 공간을 PCB라 하고

이렇게 수행중인 프로세스를 변경할 때 레지스터에 프로세스의 정보가 바뀌는 것을 Contet Switching 문맥교환이라고 합니다.

Context Switching 문맥교환 이란 CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에서 읽어 레지스터에 적재하는 과정을 말합니다.

문맥교환이 일어나는 경우

 

  1. 인터럽트가 발생했을때
  2. 프로세스가 CPU사용을 허가 받은 시간을 모두 소모했을때
  3. I/o입출력을 위해 대기해야 하는 경우(키보드로부터 입력받는동안 cpu를 놀리면 안되니까 i/o작업이 끝날때 까지는 다른 프로세스를 돌리고 있는다. 프로세스를 내리고 새 프로세스를 올리니 문맥교환 발생!)

 

즉 프로세스가 준비→실행, 실행→준비, 실행→대기 등으로 상태 변경될 때 발생합니다!

 

 

 

 

 

Overload

 

과부하?, 부하, 수수료 등 부정적의미

왜 하나의 프로세스를 쭉 실행하지 않고 프로세스를 교환하는 작업인 context switching를 하는 걸까

1차원적으로 생각해 봤을때 교환이 일어나면 쭉 실행하는 것보다 많은 작업을 하는건데

→ 프로세스를 수행하다가 I/O이벤트가 디스크에다가 명령을 내렸는데 이벤트가 끝날때 까지 기다려야하는 상황이 온다. 하지만 이럴때 프로세스를 안바꾼다면 CPU가 그냥 놀고 있게된다.

그래서 차라리 다른 프로세스로 바꾸면까지 CPU를 활용하는게 더 이익이라는 얘기이다.

이 정도의 overload를 감수하면서도 기존 프로세스를 새프로세스로 바꾸는 것이 더 이익이다!

그래서 운영체제가 CPU가 놀지 않게 관리해주는 것이다. 이것이 대표적인 운영체제가 하는 CPU관리이다 .

 

 

 

참조:

jhnyang.tistory.com/33

 

jwprogramming.tistory.com/16

 

반응형

'운영체제(os)' 카테고리의 다른 글

[운영체제] 프로세스와 스레드  (2) 2021.02.03

+ Recent posts