운영체제 studyPCB Context Switcing

운영체제 study March 20, 2024
운영체제  studyPCB  Context Switcing

PCB Context Switching

Process Management

CPU가 프로세스가 여러개일 때, CPU 스케줄링을 통해 관리하는 것을 말함

이때, CPU는 각 프로세스들이 누군지 알아야 관리가 가능함

프로세스들의 특징을 갖고있는 것이 바로 Process Metadata

  • Process Metadata
    • Process ID
    • Process State
    • Process Priority
    • CPU Registers
    • Owner
    • CPU Usage
    • Memeory Usage

이 메타데이터는 프로세스가 생성되면 PCB(Process Control Block)이라는 곳에 저장됨

PCB(Process Control Block)

프로세스 메타데이터들을 저장해 놓는 곳, 한 PCB 안에는 한 프로세스의 정보가 담김

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

다시 정리해보면?

생략


PCB가 왜 필요한가요?

CPU에서는 프로세스의 상태에 따라 교체작업이 이루어진다. (interrupt가 발생해서 할당받은 프로세스가 waiting 상태가 되고 다른 프로세스를 running으로 바꿔 올릴 때)

이때, 앞으로 다시 수행할 대기 중인 프로세스에 관한 저장 값을 PCB에 저장해두는 것이다.

PCB는 어떻게 관리되나요?

Linked List 방식으로 관리된다.

PCB List Head에 PCB들이 생성될 때마다 붙게 된다. 주소값으로 연결이 이루어져 있는 연결리스트이기 때문에 삽입 삭제가 용이하다.

즉, 프로세스가 생성되면 해당 PCB가 생성되고 프로세스 완료시 제거된다.

이렇게 수행 중인 프로세스를 변경할 때, CPU의 레지스터 정보가 변경되는 것을 Context Switching이라고 한다.

Context Switching

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

보통 인터럽트가 발생하거나, 실행 중인 CPU 사용 허가시간을 모두 소모하거나, 입출력을 위해 대기해야 하는 경우에 Context Switching이 발생한다.

즉, 프로세스가 Ready → Running, Running → Ready, Running → Waiting처럼 상태 변경 시 발생!

Context Switching 과정


1. 현재 CPU는 process P0을 수행하고 있다가 인터럽트(interrupt)가 걸리게되면 현재 수행하고 있는 것을 먼저 PCB0에 저장을 한다.
2. Waiting 상태로 변하게 되면 CPU는 다른 프로세스(process P1)을 Running으로 바꿔 올린다.
3. CPU가 앞으로 수행할 프로세스(process P1)에 관한 정보로 교체
4. 이번에는 CPU가 process P1을 수행하다 다시 인터럽트(interrupt)가 걸리면 현재 수행하고 있는 것을 PCB1에 저장한다.
5. Waiting 상태로 변하게 되면 CPU는 다른 프로세스(process P0)을 Running으로 바꿔 올린다.
6. CPU가 앞으로 수행할 프로세스(process P0)에 관한 정보로 교체

왜 Context Swiching이 필요?

만약 컴퓨터 매번 하나의 Task만 처리한다면 다음 Task를 처리하기 위해선 현재 Task가 끝날 때까지 기다려야 되기 때문에 매우 불편하다. 그래서 동시에 사용하는 것처럼 하기 위해 Context Switching이 필요하게 되었다.

Context Switching 오버헤드

현재 Context Switching 과정을 보면 P0이 수행되다가 P1이 되고 P1을 수행하다 다시 P0이 수행이 실행이 된다. 이렇게 계속 교체가 되면 현재 수행되던 프로세스를 메모리에 저장하고, 다음 수행할 프로세스를 CPU에 넣어야 되는 이런 번거로운 일(overhead)이 추가가 되는데 왜 이렇게 하는 걸까? 그냥 P0을 한번에 한 다음 P1을 하면 되지 않을까?
프로세스 수행 중 입출력 이벤트가 발생했을 때 CPU를 사용하지 않게 되는데 이 CPU가 낭비되는 시간 동안 차라리 overhead가 발생하더라도 Context Switching을 통해 다른 프로세스를 실행시키는 게 전체적으로 봤을 때 더 효율적이기 때문에 overhead를 감수하고 Context Switching을 하는 것이고 그래서 운영체제가 CPU를 관리하는 것이다.

댓글 (0)

댓글 작성