개발 일기

PCB, Context Switching, Interrupt 본문

CS

PCB, Context Switching, Interrupt

종현종현 2026. 5. 14. 23:24

PCB란?

PCB(Process Control Block)는 운영체제가 프로세스를 관리하기 위해 사용하는 정보 묶음이다.

 

왜 PCB가 필요할까?

CPU는 한 번에 하나의 작업만 실제로 실행한다. 하지만 우리는 여러 프로그램이 동시에 실행되는 것처럼 느낀다.

그 이유가 운영체제는 CPU를 매우 빠르게 번갈아 사용하게 하면서 여러 프로세스를 관리하기 때문이다.

이 때 CPU를 다른 프로세스로 바꿀 때,

  • 이전 프로세스가 어디까지 실행됐는지
  • 어떤 데이터를 쓰고 있었는지
  • 현재 상태가 무엇인지

이런 정보를 저장해둬야 다시 이어서 실행할 수 있다. 그 정보를 저장하는 곳이 PCB다.

PCB 안에 들어가 있는 것

  • (1) Process ID : 프로세스를 구분하는 ID
  • (2) Process State : 각 State 들의 상태를 저장한다.
  • (3) Program Counter : 다음 Instruction  주소를 저장하는 카운터. CPU는 이 값을 통해 Process 의 Instruction 을 수행한다.
  • (4) Register : Accumulator, CPU Register, General Register 등을 포함한다.
  • (5) CPU Scheduling Information : 우선 순위, 최종 실행시간, CPU 점유시간 등이 포함(***)된다.
  • (6) Memory Information : 해당 프로세스 주소공간(lower bound ~ upper bound) 정보를 저장.
  • (7) Process Information(페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등)
  • (8) Device I/O Status(프로세스에 할당된 입출력 장치 목록, 열린 팔린 목록 등)
  • (9) Pointer : 부모/자식 프로세스에 대한 포인터, 자원에 대한 포인터 
  • (10) Open File List : 프로세스를 위해 열려있는 파일의 리스트

PCB 관리되는 방식

PCB는 Linked List 방식으로 관리되고 PCB List Head에 PCB들이 생성될 때마다 붙게 된다.

주소값으로 연결이 이루어져 있는 연결리스트이기 때문에 삽입 삭제가 용이하고 프로세스가 생성되면 해당 PCB가 생성되고 프로세스 완료시 제거된다.

 

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

Context Switching

Context Switching은 CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에 읽어 레지스터에 적재하는 과정이다.

 

Context Switching은 언제 발생하는가?

  • 주어진 Time Slice(Time Quantum)를 다 사용함
  • I/O 작업을 해야 함
  • 다른 리소스를 기다려야 함
  • 인터럽트(Interrupt)

위의 대표적인 트리거와 더불어 다른 여러 이유로도 발생될 수 있다.

Context Switching이 일어나는 과정

컨텍스트 스위칭이 구체적으로 일어나는 과정은, 다른 프로세스끼리의 스위칭(Process Context Switching)인지 같은 프로세스의 스레드들끼리의 스위칭(Thread Context Switching)인지에 따라 다르다.

둘의 공통점

1. 커널 모드에서 실행된다

 

두 스위칭은 모두 커널 모드에서 실행된다.

커널 모드라는 말은, 어느 프로세스가 실행되다가 하드웨어와 밀접한 일들 혹은 컴퓨터에 있는 여러 리소스들을 다뤄야 하는 상황이 발생하면 프로세스가 직접 컴퓨터의 리소스에 접근하는 것이 아니라 운영체제를 통해 접근하게 되는데, 특히 운영체제에서도 커널을 통해서 접근하게 된다. 이때, 이 프로세스에서 커널로 통제권이 넘어가서 커널에 의해서 실행되는 것을 '커널 모드'라고 한다.

이 컨텍스트 스위칭은 커널 모드에서 실행되기 때문에 커널로 통제권이 넘어간다.

 

2. CPU의 레지스터 상태를 교체

 

두 스위칭은 또한 모두 CPU의 레지스터 상태를 교체한다.

레지스터에 대해서 간단하게 설명하고 가자면, 레지스터란 CPU에서 각종 명령어들을 수행하기 위해 필요한 여러 데이터들을 저장하는 곳이다. 많은 레지스터들이 있지만, 대표적으로 PC(Program Counter), Stack Pointer 등이 있다.

어떤 프로세스가 CPU에서 실행되고 있을 동안에, 레지스터에 있는 여러 값들이 계속 바뀌면서 실행되고 있었을 것이다. 이때, 다른 프로세스가 실행되면 실행되고 있던 프로세스의 레지스터 상태들을 어딘가에 저장을 하고 다른 프로세스가 실행되는 것이다. 그래야, 다시 다른 프로세스가 실행됐을 때 그때의 상태 정보들을 알고 있어야 이어서 실행할 수 있기 때문

둘의 차이점

1. 다른 프로세스끼리의 스위칭인 프로세스 컨텍스트 스위칭은 가상 메모리 주소 관련 처리를 추가로 수행함

 

지난 글에서 같은 프로세스에 속한 스레드들끼리는 공유하는 메모리 지역이 있다. 조금 설명을 덧붙이자면, 스레드들끼리는 

  • 코드(Code) 영역 : 프로세스가 실행할 코드
  • 데이터(Data) 영역 : 전역 변수가 정적 변수들이 저장되는 영역
  • 힙(Heap) 영역 : 동적으로 할당된 메모리

의 영역을 공유한다. 따라서, 스레드들끼리의 컨텍스트 스위칭은 같은 프로세스에 속하기 때문에 스위칭이 일어나도 메모리와 관련해서는 챙겨줘야 할 부분이 없다. 하지만, 프로세스간의 컨텍스트 스위칭이 발생했을 때에는 메모리 주소 체계가 다르기 때문에 이 때는 메모리 주소 관련된 처리를 추가로 수행해야 한다.

 

그렇기 때문에, MMU(Memory Management Unit)와 TLB(Translation Lookaside Buffer)도 관리를 해줘야 한다.

MMU는 가상 메모리와 물리 메모리 사이의 주소 변환을 담당합니다. 프로세스가 물리 메모리에서 할당되는 위치를 추상화하여 각 프로세스가 독립적인 주소 공간을 가지고 있는 것처럼 만든다.

TLB는 MMU 내에 존재하는 캐시 메모리입니다. 가상 주소를 물리 주소로 변환하는 과정을 상대적으로 느릴 수 있기 때문에, 이러한 변환의 결과를 TLB에 저장해 두고 빠르게 사용하는 데에 목적이 있다.

 

스레드 간의 스위칭에서는 실행되고 있던 스레드의 상태를 저장하고, 새로 실행될 스레드의 상태를 로딩하는 것으로 해결이 되지만 프로세스간의 스위칭에서는, 위의 작업에 더불어서 MMU가 실행 될 작업의 메모리를 보도록 해야 하고 캐시 역할을 하는 TLB를 완전히 비워줘야 한다.

 

요약하자면 '다른 프로세스끼리의 스위칭은 주소 체계와 관련된 일들도 추가적으로 처리를 해야 한다'가 되고, 이러한 추가적인 작업이 필요하기 때문에 프로세스 컨텍스트 스위칭보다 스레드 컨텍스트 스위칭이 더 빠릅니다.

Context Switching이 미치는 영향

컨텍스트 스위칭이 발생하면서, 캐시 오염(Cache Pollution)이라는 간접적인 영향이 발생한다.

캐시란 데이터나 값을 임시 저장해 두는 임시 장소이다. CPU가 자주 사용하는 것들에 대해서 매번 메모리에 접근하는 것이 아니라, 캐시에 저장해 두고 빠르게 데이터를 가져오기 위해 사용한다.

컨텍스트 스위칭이 일어나면, 또 사용할 것이라고 예상을 하고 캐시에 데이터나 값을 저장한 캐시가 의미가 없는 데이터가 되어버린다. 컨텍스트 스위칭이 일어난 직후에 캐시에 가봤자, 이전에 프로세스에서 실행되었던 정보들을 저장해놓고 있을 가능성이 매우 높기 때문에, 내가 필요한 정보는 없을 가능성이 매우 높아지기 때문이다. 이러하다는 것은 성능적으로 손해를 보는 부분이 발생한다고 볼 수 있다.

캐시 메모리는 메인 메모리에 비해 매우 작기 때문에 프로세스끼리 나눠서 쓰지 않고 다 같이 사용하는 공간이라고 합니다. 그래서 위와 같은 문제가 발생합니다!

 

어플리케이션 관점에서는, 컨텍스트 스위칭은 순수한 오버헤드(Overhead, 간접비용)이다.

즉, 내가 실행한 이 프로그램의 동작과는 아무 상관없는 순수한 CPU 작업을 필요로 하는 간접비용이다.

인터럽트(Interrupt)

프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에 알리는 것.

 

외부/내부 인터럽트는 CPU의 하드웨어 신호에 의해 발생

소프트웨어 인터럽트는 명렁어의 수행에 의해 발생

 

외부 인터럽트

외부 인터럽트는 CPU 밖의 하드웨어 장치가 발생시키는 인터럽트이다. 비동기적으로 발생한다,

전원 이상, 기계 착오, 외부 신호, 입출력 등

내부 인터럽트

내부 인터럽트는 CPU가 명령어를 실행하는 과정에서 발생하는 인터럽트이다. CPU 내부 문제 또는 특정 명령 때문에 발생하고 동기적이다.

0으로 나누기가 발생, 오버플로우, 명령어를 잘못 사용한 경우 (Exception) 등

소프트웨어 인터럽트

프로그램이 의도적으로 발생시키는 인터럽트이다.

사용자가 프로그램을 실행시킬 때 발생

소프트웨어 이용 중에 다른 프로세스를 실행시키면 시분할 처리를 위해 자원 할당 동작이 수행된다.

인터럽트 발생 처리 과정

주 프로그램이 실행되다가 인터럽트가 발생했다.

현재 수행 중인 프로그램을 멈추고, 상태 레지스터와 PC 등을 스택에 잠시 저장한 뒤에 인터럽트 서비스 루틴으로 간다. (잠시 저장하는 이유는, 인터럽트 서비스 루틴이 끝난 뒤 다시 원래 작업으로 돌아와야 하기 때문)

만약 인터럽트 기능이 없었다면, 컨트롤러는 특정한 어떤 일을 할 시기를 알기 위해 계속 체크를 해야 한다. (이를 폴링(Polling)이라고 한다)

폴링을 하는 시간에는 원래 하던 일에 집중할 수가 없게 되어 많은 기능을 제대로 수행하지 못하는 단점이 있었다.



즉, 컨트롤러가 입력을 받아들이는 방법(우선순위 판별방법)에는 두가지가 있다.

  • 폴링 방식인터럽트 요청 플래그를 차례로 비교하여 우선순위가 가장 높은 인터럽트 자원을 찾아 이에 맞는 인터럽트 서비스 루틴을 수행한다. (하드웨어에 비해 속도 느림)
  • 사용자가 명령어를 사용해 입력 핀의 값을 계속 읽어 변화를 알아내는 방식
  • 인터럽트 방식
    • Daisy Chain
    • 병렬 우선순위 부여
  • MCU 자체가 하드웨적으로 변화를 체크하여 변화 시에만 일정한 동작을 하는 방식

 

인터럽트 방식은 하드웨어로 지원을 받아야 하는 제약이 있지만, 폴링에 비해 신속하게 대응하는 것이 가능하다. 따라서 실시간 대응이 필요할 때는 필수적인 기능이다.

 

즉, 인터럽트는 발생시기를 예측하기 힘든 경우에 컨트롤러가 가장 빠르게 대응할 수 있는 방법이다.

 

참고 자료

https://s7won.tistory.com/11

 

컨텍스트 스위칭(Context Switching)

1. 컨텍스트 스위칭(Context Switching) 컨텍스트 스위칭의 정의 지난 글에서 프로세스와 스레드를 얘기하면서 컨텍스트 스위칭(문맥 교환)에 대해서 짧게 얘기했었는데요, 오늘은 이 컨텍스트 스위

s7won.tistory.com

https://with-mimi.tistory.com/entry/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8Interrupt-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

 

[운영체제] 인터럽트(Interrupt) 란 무엇일까?

☁️ Interrupt 란 ? 인터럽트는 CPU가 프로그램을 실행하고 있을 때, 입/출력 장치 혹은 다른 예외상황이 발생하여 처리가 필요할 경우 CPU에 알려서 처리하는 기술 * 동기식 예외(synchronous exceptions) :

with-mimi.tistory.com

 

https://gyoogle.dev/blog/computer-science/operating-system/Interrupt.html

 

인터럽트(Interrupt) | 👨🏻‍💻 Tech Interview

인터럽트(Interrupt) 정의 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것 지금

gyoogle.dev

 

 

'CS' 카테고리의 다른 글

CPU Scheduling  (0) 2026.05.28
시스템 콜, IPC  (0) 2026.05.27
ARM 프로세서  (0) 2026.04.28
중앙처리장치(CPU) 작동 원리  (0) 2026.04.16
20260316 프로세스와 스레드 (4)  (0) 2026.03.17
Comments