디지털·가전제품

운영체제는 어떻게 여러 프로그램을 동시에 실행시키나요?

컴퓨터에서 여러 프로그램을 동시에 켜놓고 쓰는데, CPU가 실제로는 한 번에 하나씩 처리한다고 배우는데, 어떻게 이게 동시에 실행되는 것처럼 보이는지 궁금합니다.

2개의 답변이 있어요!

  • 번갈아 실행하는 착시라는 설명은 맞는데, 요즘 컴퓨터는 절반쯤은 진짜로 동시에 돌립니다. 코어가 여덟 개면 그 순간 여덟 개의 일이 실제로 나란히 진행돼요. 그러니 지금 화면의 프로그램들은 진짜 병렬과 빠른 번갈아 실행이 섞여서 돌아가고 있는 겁니다.

    번갈아 실행하는 쪽을 조금만 더 들여다보면 재미있어요. 프로그램을 바꿀 때 운영체제는 그 프로그램이 쓰던 계산 상태와 다음에 실행할 위치를 통째로 저장해 두었다가, 나중에 그대로 복원합니다. 책갈피를 꽂고 다른 책을 펴는 것과 비슷한데, 이 저장과 복원 자체가 시간을 잡아먹어서 무한정 잘게 쪼갤 수는 없습니다.

    그럼 프로그램이 CPU를 안 놓아 주면 어떻게 되느냐가 다음 질문일 텐데, 여기에 핵심 장치가 있습니다. 하드웨어 타이머가 주기적으로 신호를 보내 강제로 운영체제에게 제어권을 돌려줍니다. 프로그램이 양보하는 게 아니라 뺏기는 구조예요.

    옛날 운영체제는 이 장치가 없어서 프로그램이 스스로 양보해 주기를 기다렸습니다. 그래서 프로그램 하나가 멈추면 컴퓨터 전체가 같이 멈췄죠. 지금은 한 프로그램이 죽어도 나머지가 멀쩡한 이유가 바로 이 차이입니다.

    그리고 의외의 사실 하나. 대부분의 프로그램은 사실 거의 놀고 있습니다. 디스크에서 파일이 오기를 기다리거나 네트워크 응답을 기다리거나 사용자가 키를 누르기를 기다리죠. 그 기다리는 시간에 다른 프로그램이 들어가 일을 합니다. 코어 몇 개로 수백 개가 돌아가는 진짜 비결은 여기에 있습니다.

    메모리 쪽에도 같은 착시가 있어요. 각 프로그램은 자기가 메모리를 통째로 혼자 쓰고 있다고 믿습니다. 운영체제가 주소를 중간에서 바꿔 주기 때문인데, 그래서 서로의 메모리를 훔쳐볼 수 없고 한쪽이 망가져도 옆 프로그램이 무사합니다.

    직접 확인해 보고 싶으시면 작업 관리자를 열고 성능 탭에서 스레드 수를 보세요. 보통 수천 개가 떠 있는데 CPU 사용률은 낮습니다. 저 수천 개가 대부분 무언가를 기다리는 중이라는 뜻이에요. 이 숫자를 보고 나면 동시 실행이 어떻게 가능한지 훨씬 잘 와닿습니다.

    채택된 답변
  • 운영체제는 CPU의 시간을 아주 짧게 나눠 여러 프로그램에 번갈아 배정합니다. 예를 들어 A프로그램을 잠깐 실행한 뒤 상태를 저장하고 B로 넘어가는 식입니다. 이런 전환이 매우 빠르게 반복되면서 사람에게는 여러 프로그램이 동시에 실행되는 것처럼 보입니다.