Skip to content
난이도 문제은행 6

프로세스 상태·스레드·IPC ​

프로세스(process)는 실행 중인 프로그램이다. 운영체제는 프로세스를 여러 상태 사이로 옮기며 CPU를 나눠 준다. 실기 시험에서는 상태 전이 그림의 빈칸에 들어갈 용어(디스패치·타임아웃·블록·웨이크업), 스레드의 정의, IPC(Inter-Process Communication, 프로세스 간 통신)의 대표 방법을 묻는다. 프로세스 제어 블록(process control block)과 문맥 교환(context switch)의 원리는 CS 카테고리의 프로세스·스레드 문서가 다룬다.

프로세스 상태 전이 ​

CPU는 한 번에 한 프로세스만 실행하므로, 나머지는 차례를 기다리거나 입출력이 끝나기를 기다린다. 운영체제는 이 처지를 상태로 구분해 관리한다.

다이어그램 로딩…
전이언제 일어나나
디스패치(dispatch)준비 상태의 프로세스 하나가 CPU를 받아 실행 상태가 된다
타임아웃(timeout)받은 시간을 다 써서 CPU를 내놓고 준비 상태로 돌아간다
블록(block)입출력 등을 요청해 기다려야 하므로 대기 상태로 간다
웨이크업(wake up)기다리던 입출력이 끝나 대기에서 준비 상태로 간다

웨이크업 뒤에 곧바로 실행으로 가지 않는다는 점이 자주 나오는 함정이다. 입출력이 끝났어도 CPU는 다른 프로세스가 쓰고 있을 수 있으므로 다시 줄을 서야 한다. 타임아웃은 시험에서 "할당 시간 초과"로도 쓴다.

시험 그림은 생성(new) 대신 제출(submit) 과 접수(hold) 상태를 두기도 한다. 접수된 작업은 작업 스케줄러(job scheduler)가 골라 준비 상태로 올린다. 표준 설명에서는 이 작업 스케줄러를 장기 스케줄러(long-term scheduler)라고 부르며, 생성 상태의 프로세스를 준비 상태로 들여보내는 역할을 한다.

스풀링(spooling)은 느린 입출력 장치와 주고받을 데이터를 곧장 보내지 않고 디스크의 대기열에 먼저 적어 두는 방식이다. 프린터 출력이 대표 예이고 입력도 같은 방식으로 미리 받아 둔다. 스풀러(spooler)가 장치 속도에 맞춰 대기열을 차례로 내보내므로, 프로세스는 프린터를 기다리지 않고 다음 일을 해 처리량이 늘어난다.

스레드 ​

스레드(thread)는 프로세스 안에서 실제로 CPU를 받아 실행되는 작업 단위다. 한 프로세스에 스레드를 여럿 두면 같은 프로그램의 여러 흐름이 동시에 진행된다. 새 프로세스를 만드는 것보다 가볍게 만들고 전환할 수 있어 경량 프로세스(light weight process)라고도 하며, 줄여서 LWP라 부른다.

가벼운 이유는 자원을 공유하기 때문이다. 같은 프로세스의 스레드들은 코드·데이터·힙 영역과 열린 파일을 공유하고, 각자 실행 위치를 담은 프로그램 카운터·레지스터·스택만 따로 가진다. 대신 같은 데이터를 동시에 고치지 않도록 동기화가 필요하다.

IPC ​

프로세스는 서로의 메모리를 볼 수 없게 격리되어 있다. 그래서 프로세스끼리 데이터를 주고받으려면 운영체제가 제공하는 통로가 필요한데, 이것이 IPC다. 시험은 대표 방법 다섯 가지를 묻는다.

방법핵심
공유 메모리(shared memory)여러 프로세스가 같은 메모리 영역을 함께 읽고 쓴다. 가장 빠르다
소켓(socket)네트워크 너머 다른 컴퓨터의 프로세스와도 통신한다
세마포어(semaphore)데이터를 나르기보다 공유 자원에 들어가는 순서를 맞춘다
파이프와 네임드 파이프(pipe·named pipe)한 방향 바이트 흐름. 네임드 파이프는 관계없는 프로세스끼리도 쓴다
메시지 큐잉(message queueing)메시지 단위로 큐에 넣고 꺼낸다

시험 포인트 ​

  • 준비 → 실행 디스패치, 실행 → 준비 타임아웃, 실행 → 대기 블록, 대기 → 준비 웨이크업.
  • 한 프로세스 안의 실행 흐름, 자원을 공유해 가볍다, LWP → 스레드.
  • 스레드가 따로 갖는 것: 스택·레지스터·프로그램 카운터. 나머지는 공유.
  • 입출력 데이터를 디스크 대기열에 먼저 적고 장치 속도에 맞춰 처리 → 스풀링.
  • IPC 다섯: 공유 메모리, 소켓, 세마포어, 파이프와 네임드 파이프, 메시지 큐잉. CS 쪽 문서는 이름 있는 파이프·메시지 큐로 적는다.

관련 문서