CS/운영체제

PCB와 컨텍스트 스위칭(context switching)

프론트엔드코린이 2025. 5. 29. 18:01

✅ PCB (Process Control Block, 프로세스 제어 블록)

  • 운영체제가 각 프로세스를 관리하기 위해 저장해 놓는 정보 묶음이야.
  • 하나의 프로세스는 하나의 PCB를 갖고 있어.
  • 운영체제가 이 PCB를 보고 어떤 프로세스인지 파악하고, 실행 시킬 수 있어.

📌 PCB에 저장되는 주요 정보:

항목설명
프로세스 상태 실행 중, 준비 상태, 대기 상태 등
프로그램 카운터 다음에 실행할 명령어 주소
CPU 레지스터 값 중단된 시점의 레지스터 정보
메모리 정보 프로세스에 할당된 메모리 위치
프로세스 식별자(PID) 고유한 번호
스케줄링 정보 우선순위, 스케줄링 큐 등
 

✅ 컨텍스트 스위칭 (Context Switching)

  • CPU가 현재 실행 중인 프로세스를 멈추고, 다른 프로세스로 전환할 때 발생하는 과정이야.
  • 이때 PCB가 아주 중요해! 왜냐면 중단한 프로세스의 상태를 PCB에 저장해야 나중에 이어서 실행할 수 있으니까.

📌 컨텍스트 스위칭 순서:

  1. 현재 실행 중인 프로세스의 상태를 PCB에 저장
  2. 다른 프로세스의 PCB에서 정보를 불러옴
  3. CPU가 그 프로세스를 실행

CPU 가상화, 타임 쉐어링

CPU 가상화는 컴퓨터의 하드웨어 자원 중 하나인 CPU를 여러 개의 가상 CPU처럼 분할해서, 마치 여러 개의 독립적인 컴퓨터가 각각 작업을 처리하는 것처럼 만드는 기술입니다. 이 기술을 통해, 하나의 실제 CPU가 여러 개의 가상 CPU를 대신해서 여러 작업을 동시에 할 수 있는 것처럼 보이게 해줍니다.

말이 어렵게 들리죠?

한 명의 선생님, 여러 개의 과목(나?)

생각해 보세요. 하나의 큰 교실이 있고, 그 교실에는 한 명의 선생님만 있어요. 그런데 이 선생님은 다양한 과목을 가르쳐야 해서, 한 번에 여러 가지 일을 해야 해요. 자바, 자바스크립트, 파이썬을 동시에 가르쳐야 하는데, 선생님은 한 명밖에 없어요. 어떻게 해결할까요?

여기서 CPU 가상화가 중요한 역할을 합니다. 한 명의 선생님(실제 CPU) 이 가상 선생님들처럼 보이게끔 각 과목을 맡게 하는 거예요. 이 선생님은 하나의 물리적인 존재지만, 마치 여러 명의 선생님처럼 교실 안에서 여러 가지 일을 동시에 할 수 있게 됩니다.

어떻게 가능한가요?

하나의 선생님이 각 과목을 차례차례 가르치는 방식이 아니라, 시간을 나누어서 각각 다른 과목을 가르치는 거예요. 예를 들어, 자바를 가르치고 나면 잠깐 자바스크립트를 가르치고, 다시 파이썬으로 돌아가는 식이에요. 이 과정에서 학생들은 각 과목을 동시에 배우는 것처럼 느껴지죠.

이처럼 CPU 가상화는 하나의 CPU가 가상 CPU처럼 여러 개의 작업을 동시에 하는 것처럼 보이게 만들어요. 하나의 물리적인 CPU가 마치 여러 개의 가상 CPU처럼 시간을 나누어 작업을 처리하는 방식입니다. 각 작업은 독립적으로 처리되는 것처럼 보이지만, 사실 하나의 CPU가 빠르게 전환하면서 여러 작업을 처리하고 있는 거예요.

왜 이렇게 해야 할까요?

이렇게 함으로써, 자원을 효율적으로 나누어 쓸 수 있습니다. 예를 들어, 게임을 실행하면서 동시에 웹 브라우저도 열 수 있는 것처럼, 하나의 CPU가 여러 작업을 동시에 처리할 수 있게 되는 거죠. 각 작업은 각각 가상으로 CPU를 사용하는 것처럼 보이지만, 사실 하나의 물리적인 CPU가 빠르게 전환하면서 여러 일을 처리하는 방식이에요.

타임 쉐어링

방금 설명드린 방식이 사실 가상 CPU의 타임 쉐어링이라는 기술입니다.

타임 쉐어링의 동작 방식

  1. CPU 자원 나누기: CPU는 여러 프로세스(실행 중인 프로그램)에 시간을 분배합니다. 각 프로그램은 짧은 시간 동안만 CPU를 사용하고, 그 후 다른 프로그램이 CPU를 사용하도록 합니다.
  2. 빠른 전환: 프로그램이 CPU를 사용하고 있는 동안, 운영체제는 타이머를 사용하여 정해진 시간이 지나면 CPU를 다른 프로그램에 넘깁니다. 이 전환이 너무 빨라서 사용자는 여러 프로그램이 동시에 실행되는 것처럼 느낍니다.
  3. 멀티태스킹: 타임 쉐어링 덕분에 여러 프로그램이 동시에 실행되는 것처럼 보이지만, 사실은 하나의 CPU가 빠르게 번갈아 가며 프로그램을 처리하고 있는 거예요.

타임 쉐어링의 장점

  • 공정한 자원 분배: 여러 프로그램이 CPU 자원을 공평하게 나누어 사용하도록 하여, CPU가 과도하게 한 프로그램에 할당되지 않게 합니다.
  • 다중 작업 처리: 사용자는 여러 프로그램을 동시에 실행하는 것처럼 느낄 수 있어요. 예를 들어, 웹 서핑을 하면서 음악을 듣고, 동시에 문서 작업을 하는 것처럼요.
  • 효율적인 자원 활용: 하나의 CPU가 여러 작업을 처리할 수 있게 해 주기 때문에 자원을 효율적으로 활용할 수 있습니다.

컨텍스트 스위칭

이렇게 하나의 CPU가 시간을 분배하여 여러 개의 프로세스를 처리하는 과정에서는 많은 기억력을 요합니다. 예를 들어볼까요?

위에서 설명했던 것처럼 선생님이 자바스크립트 수업을 마친 후, 파이썬 수업으로 전환하는 경우를 고려해보죠. 자바스크립트 수업을 마친 후, 선생님은 수업의 상태(예를 들어, 수업이 어디까지 진행되었는지, 학생들이 어떤 질문을 했는지 등)를 기억해두어야 합니다. 그리고 나서 파이썬 수업으로 넘어갈 때, 파이썬 수업에 필요한 준비물(교재, 학생들이 다룰 예제 등)을 준비하고 그 상태로 수업을 시작해야 하죠. 이때 자바스크립트 수업의 상태를 저장하고, 파이썬 수업의 상태를 불러오는 과정이 컨텍스트 스위칭입니다.

컴퓨터에서 컨텍스트 스위칭은 CPU가 다른 작업으로 전환될 때, 현재 작업의 상태를 저장하고, 새로운 작업의 상태를 복원하는 과정입니다. 예를 들어, 웹 브라우저에서 작업을 하다가 게임을 실행하면, CPU는 웹 브라우저의 작업 상태(어떤 페이지를 보고 있었는지, 스크롤 위치 등)를 저장하고, 게임의 상태(게임이 실행되기 위한 데이터와 설정)를 불러와서 게임을 실행하는 것이죠.

타임 쉐어링과 컨텍스트 스위칭



타임 쉐어링과 컨텍스트 스위칭은 서로 밀접하게 연결되어 있습니다. 타임 쉐어링 덕분에 하나의 CPU가 여러 프로그램을 빠르게 전환하면서 실행할 수 있죠. 그런데 이 전환을 가능하게 해주는 과정이 바로 컨텍스트 스위칭입니다. CPU가 각 작업을 전환할 때마다 그 작업의 상태를 저장하고 복원해야 하므로, 컨텍스트 스위칭이 꼭 필요합니다. 이렇게 해서 CPU는 여러 작업을 순차적으로 처리하면서도, 마치 여러 작업을 동시에 처리하는 것처럼 보이게 만듭니다.