정보처리기사 실기 프로세스·스레드·스케줄링 | 라운드 로빈 대기 시간 계산

2026. 10. 16. 14:25ㆍWORK/커리어

도서관 서가에서 책을 고르는 학습자

 

이 글은 LIFE ARCHITECTURE의 WORK 카테고리 ‘일하며 공부하는 구조’ 기록입니다. 퇴근 후 짧은 시간에 자격증 공부를 이어가려면 의지보다 ‘한 번에 끝낼 수 있는 작은 단위’로 공부를 쪼개는 구조가 필요합니다. 이번에는 프로세스와 스레드가 자원을 어떻게 나누는지 살핀 뒤, 세 작업의 CPU 실행 순서와 대기 시간을 직접 계산하는 방법을 정리했습니다.

도서관 서가에서 문제집을 꺼내면 프로세스, 스레드, 준비 큐, 시간 할당량이 한꺼번에 눈에 들어온다. 용어를 외웠는데도 실행 순서 문제에서 자꾸 멈추는 이유는 서로 다른 두 질문을 섞기 때문이다. 무엇이 실행에 필요한 자원을 갖고 있는가와 언제 CPU를 배정받는가를 나누면 그림이 단순해진다. 이 글의 표와 계산은 실제 기출문제가 아닌 자체 연습 예시다.

프로세스는 실행 자원을 담고 스레드는 그 안의 실행 흐름을 만든다

프로그램 파일이 저장돼 있는 상태와 그것을 실행하는 상태는 다르다. 여기서는 실행 중인 프로그램을 프로세스로 생각하자. Microsoft의 프로세스·스레드 설명에 따르면 프로세스는 가상 주소 공간, 코드, 열린 핸들, 보안 문맥 등 실행에 필요한 자원을 제공하며 적어도 하나의 스레드가 있다. 스레드는 프로세스 안에서 실행을 스케줄할 수 있는 단위다. 같은 프로세스에 속한 스레드는 가상 주소 공간과 시스템 자원을 공유하지만 각자 실행 문맥을 지닌다.

예컨대 문서 편집 프로그램에서 입력을 처리하는 흐름과 백그라운드 저장을 처리하는 흐름을 떠올릴 수 있다. 두 흐름이 한 프로세스에 속한다면 공유 자원에 접근할 수 있지만, 각각 어디까지 실행했는지는 따로 기억해야 한다. 이 예는 이해를 돕기 위한 구성이지 특정 편집기의 실제 구현을 설명한 것은 아니다. ‘프로세스는 무조건 하나의 일, 스레드는 여러 일’이라고 외우면 공유와 독립의 경계를 놓치기 쉽다.

자원 공유와 실행 상태를 서로 다른 칸에 적어야 헷갈리지 않는다

아래 표의 기준은 하나의 프로세스 안에 스레드 두 개가 있는 일반적인 예다. 운영체제와 구현에 따라 구체적인 관리 구조는 달라질 수 있으므로, 계산 문제에서는 문제에 명시된 조건을 먼저 읽는다.

구분 프로세스 관점 스레드 관점
핵심 역할 실행에 필요한 자원을 담는 경계 CPU에서 진행되는 실행 흐름
같은 프로세스 안 주소 공간·열린 자원 등을 제공 그 자원을 다른 스레드와 공유
흐름별 정보 프로세스 식별과 자원 정보 각자의 레지스터 상태·스택 등 문맥
문제에서 확인할 것 서로 다른 프로세스인지 어떤 실행 단위가 준비·대기·실행 중인지

스레드가 같은 메모리를 쓴다는 말은 모든 실행 정보가 같다는 뜻이 아니다. 같은 방의 도구를 함께 사용하더라도 각자가 읽던 페이지와 손의 위치는 다른 것과 비슷하다. 반대로 서로 다른 프로세스 사이의 자료 교환은 같은 프로세스 안의 스레드 공유와 동일하게 취급하면 안 된다. 이 경계를 표시한 뒤에야 스케줄링 그림에서 ‘무엇을 한 칸으로 셀 것인가’를 결정할 수 있다.

준비·실행·대기를 먼저 구분하면 CPU 순서가 보인다

준비 상태는 CPU를 받을 수 있지만 자기 차례를 기다리는 상태다. 실행 상태는 CPU를 받아 명령을 수행하는 상태다. 대기는 입출력 완료 같은 사건을 기다려 당장 CPU를 받아도 진행할 수 없는 상태를 뜻한다. 실행하던 작업이 입출력을 요청하면 대기로 옮겨갈 수 있고, 사건이 끝나면 다시 준비 상태로 들어올 수 있다. ‘대기’라는 일상어 때문에 준비 큐에서 CPU를 기다리는 시간과 입출력 사건을 기다리는 상태를 같은 것으로 표시하면 계산이 틀어진다.

문제에서 CPU 실행 시간만 주어지고 입출력이나 도착 시각이 따로 제시되지 않으면, 먼저 모든 작업이 0에 준비됐다는 가정이 있는지 확인한다. 그 가정이 없다면 순서를 하나로 확정할 수 없는 문제가 된다. 다음 예에서는 세 작업이 시간 0에 A, B, C 순으로 준비 큐에 도착했고, 문맥 전환 비용과 입출력 시간은 없다고 명시한다. 실제 운영체제의 동작을 그대로 재현한 계산이 아니라 알고리즘을 연습하기 위한 단순화다.

라운드 로빈은 남은 시간을 기록하면서 한 바퀴씩 돈다

자체 연습문제의 입력은 A의 CPU 시간 5, B의 CPU 시간 3, C의 CPU 시간 2, 시간 할당량 2다. 라운드 로빈에서는 앞에 선 작업이 최대 2만큼 실행한 뒤 끝나지 않았으면 큐 뒤로 간다. 첫 바퀴에는 A가 0~2를 사용해 3이 남고, B가 2~4를 사용해 1이 남으며, C는 4~6에 필요한 2를 모두 써서 끝난다. 그다음 A가 6~8을 사용해 1이 남고, B가 8~9에 끝난다. 마지막으로 A가 9~10에 끝난다.

시간선은 0–2 A → 2–4 B → 4–6 C → 6–8 A → 8–9 B → 9–10 A다. 각 구간 길이를 합하면 A는 2+2+1=5, B는 2+1=3, C는 2다. 입력 시간과 일치하므로 한 번 검산할 수 있다. 완료 시각은 A 10, B 9, C 6이다. C가 6에서 끝났는데도 다음 바퀴의 큐에 다시 적는 실수가 자주 생긴다. 끝난 작업은 바로 제외한다.

완료·반환·대기 시간을 분리해야 계산이 맞는다

반환 시간은 완료 시각에서 도착 시각을 뺀 값이고, 이 예처럼 입출력 시간이 없는 조건에서 대기 시간은 반환 시간에서 CPU 실행 시간을 뺀 값이다. 모두 0에 도착했으므로 반환 시간은 각각 A 10, B 9, C 6이다. 대기 시간은 A 10−5=5, B 9−3=6, C 6−2=4다. 평균 대기 시간은 (5+6+4)÷3=5이며, 평균 반환 시간은 (10+9+6)÷3=25÷3, 약 8.33이다. 소수 둘째 자리 표기는 반올림한 계산 예시다.

여기서 A가 여러 차례 CPU를 받았다고 해서 실행 구간 사이만 세면 대기 시간이 작아지는 것은 아니다. A의 완료까지 10이 흘렀고 CPU를 실제 쓴 시간은 5이므로 나머지 5가 이 예의 준비 큐 대기 시간이다. 입출력 대기가 있는 별도 문제라면 반환 시간에서 CPU 시간만 빼서 준비 큐 대기 시간이라고 부를 수 없다. 조건에 주어진 입출력 구간을 함께 분리해야 한다.

선입선출과 비교하면 알고리즘 이름보다 조건이 중요해진다

같은 A, B, C를 같은 도착 순서로 선입선출(FCFS)에 넣으면 A 0~5, B 5~8, C 8~10에 실행한다. 이때 대기 시간은 A 0, B 5, C 8로 평균 13÷3, 약 4.33이다. 위 라운드 로빈 예의 평균 대기 시간 5보다 낮다. 이것만으로 선입선출이 언제나 더 낫다고 결론 낼 수는 없다. 작업 도착 순서, 각 작업의 길이, 시간 할당량, 반응성을 어떤 기준으로 볼지에 따라 비교 결과가 달라진다.

특히 ‘먼저 CPU를 잠깐 받는 시점’과 ‘완전히 끝나는 시점’은 다른 지표다. 위 예에서 C의 첫 실행은 라운드 로빈에서 4, 선입선출에서 8에 시작하지만, A의 완료는 라운드 로빈에서 10, 선입선출에서 5다. 한 가지 평균값만 외우기보다 어떤 작업의 어떤 시간을 묻는지 읽는 습관이 필요하다. 실제 운영체제는 이런 교과서식 세 작업만으로 움직이지 않으며, Microsoft 자료도 Windows에서 스레드가 스케줄되는 단위라는 점을 설명한다.

짧은 재풀이에서는 시간선과 남은 시간을 따로 확인한다

연습을 위해 같은 조건에서 시간 할당량만 3으로 바꿔보자. A가 0~3에 실행돼 2가 남고, B는 3~6에 끝나며, C는 6~8에 끝난다. 마지막 A가 8~10에 끝난다. 완료 시각은 A 10, B 6, C 8이고, 대기 시간은 A 10−5=5, B 6−3=3, C 8−2=6이다. 평균은 14÷3, 약 4.67이다. 시간 할당량 하나만 달라져도 순서와 각 작업의 대기가 바뀐다.

바로 풀 때는 다음 네 줄을 종이에 나눠 쓰면 편하다.

  • 도착 시각, CPU 시간, 큐의 처음 순서를 먼저 고정한다.
  • 각 실행 구간 끝에 남은 시간을 쓰고 0이 된 작업은 지운다.
  • 마지막 실행 구간의 끝을 완료 시각으로 표시한다.
  • 반환 시간=완료−도착, 대기 시간=반환−CPU 시간을 조건에 맞게 계산한다.

지난 회차에서 트랜잭션의 COMMIT과 격리 수준을 보았다면, 이번에는 트랜잭션·동시성·회복 예제와 비교하며 ‘여러 작업이 함께 진행된다’는 말이 데이터의 일관성과 CPU 배정에서 각각 무엇을 뜻하는지 구별해 볼 수 있다. 두 주제를 같은 원리로 혼동하지 않는 것이 연결의 목적이다.

자주 묻는 질문은 상태와 시간을 구별하면 풀린다

Q. 스레드 둘이 있으면 CPU도 반드시 둘이 필요한가? 아니다. 하나의 CPU 코어에서도 시간을 나누어 두 실행 흐름을 번갈아 진행할 수 있다. 여러 코어에서는 동시에 실행될 가능성도 있다. 문제의 코어 수와 스케줄링 조건을 확인해야 한다.

Q. 준비 상태와 입출력 대기는 모두 기다리는데 왜 다른가? 준비 상태는 CPU만 받으면 진행할 수 있다. 입출력 대기 상태는 필요한 사건이 끝나야 다시 준비 큐에 들어갈 수 있다. 대기 시간 계산식은 문제에서 무엇을 대기라고 부르는지에 따라 적용 범위를 따져야 한다.

Q. 시간 할당량보다 남은 실행 시간이 짧으면 남은 시간을 모두 써야 하나? 필요한 만큼만 실행하고 완료된다. 위의 B가 두 번째 차례에 1만 쓰고 끝난 이유다. 남은 1을 빈 구간으로 남기지 않고 다음 준비 작업으로 넘어간다.

문제 한 장을 접기 전에 프로세스가 자원을 담는 경계인지, 스레드가 실행 흐름인지 먼저 말해보자. 그다음 시간선의 맨 끝까지 남은 시간을 지워 나간다. 복잡한 운영체제 문제도 결국 작은 상태 변화와 작은 계산을 차례로 기록하는 일에서 풀리기 시작한다.

자료 확인일: 2026년 10월 16일. Q-Net 정보처리기사 종목 안내와 2026년 출제기준에서 실기 범위의 ‘응용 SW기초 기술 활용(운영체제 등)’을 확인했다. 프로세스·스레드의 자원과 실행 단위 설명은 Microsoft Learn About Processes and Threads를 참고했다. 시간선과 수치는 이 글의 독자적인 연습 조건을 검산한 결과다.

반응형