본문으로 건너뛰기

프로세스와 스레드

정보처리기사 목차운영체제: 프로세스레슨 155 / 233

목차

프로세스(process)는 실행 중인 프로그램입니다. 디스크에 있던 프로그램이 메모리에 올라가 CPU를 받아 돌기 시작하면 프로세스가 되고, 운영체제는 프로세스마다 지금 무엇을 하는지 적어 두고 CPU를 번갈아 줍니다.

CPU는 한 번에 한 프로세스만 돌릴 수 있습니다. 여러 프로그램이 함께 도는 것처럼 보이는 것은 운영체제가 아주 짧은 틈마다 CPU를 다른 프로세스에 넘기기 때문입니다. 넘기려면 프로세스마다 지금 무엇을 기다리는지 알아야 하고, 멈춘 자리도 적어 둬야 다시 이어서 돌릴 수 있습니다. 아래 그림은 프로세스 A·B가 다섯 상태 사이를 옮겨 다니는 모습과, CPU를 넘길 때 멈춘 자리를 적고 꺼내는 모습을 보입니다.

7단계 중 1단계. 프로그램을 실행하면 운영체제가 프로세스마다 PCB를 만들고 준비 상태 줄에 세웁니다.

1다섯 상태와 네 전이

프로세스는 다섯 상태 가운데 하나에 있습니다. 생성(new)은 막 만들어지는 중이고, 준비(ready)는 CPU를 받을 차례를 기다리는 상태입니다. 실행(running)은 CPU를 받아 도는 상태, 대기(waiting)는 입출력처럼 다른 일이 끝나기를 기다리는 상태, 종료(terminated)는 일을 다 마친 상태입니다.

상태 사이를 옮겨 가는 것을 전이라고 하고, 시험은 네 전이의 이름을 묻습니다.

전이어디서 어디로언제
디스패치(dispatch)준비 → 실행스케줄러가 골라 CPU를 줄 때
타임아웃(timeout)실행 → 준비받은 시간을 다 썼을 때
블록(block)실행 → 대기입출력 같은 다른 일을 기다려야 할 때
웨이크업(wake up)대기 → 준비기다리던 일이 끝났을 때

타임아웃은 자료에 따라 할당 시간 초과(timer run out)라고도 부릅니다. 대기에서 깨어난 프로세스는 실행으로 곧장 가지 않고 준비 줄에 다시 섭니다. CPU는 이미 다른 프로세스가 쓰고 있기 때문입니다.

2PCB와 문맥 교환

PCB(Process Control Block, 프로세스 제어 블록)는 운영체제가 프로세스마다 하나씩 두는 기록 카드입니다. 프로세스가 생길 때 만들어지고 끝나면 거둬집니다.

  • 프로세스 번호(PID)와 지금 상태
  • 프로그램 카운터(PC, 다음에 실행할 명령의 자리)와 레지스터(CPU 안에서 계산하던 값을 두는 작은 저장 칸)에 든 값
  • 우선순위 같은 스케줄링 정보
  • 쓰고 있는 메모리 정보
  • 열어 둔 파일·쓰고 있는 입출력 장치 정보
  • CPU를 쓴 시간 같은 계정 정보

CPU를 다른 프로세스로 넘길 때 운영체제는 지금 프로세스의 PC와 레지스터를 그 PCB에 적고, 다음 프로세스의 PCB에서 값을 꺼내 옵니다. 이것을 문맥 교환(context switching)이라고 합니다. 문맥 교환을 하는 동안 CPU는 쓸모 있는 일을 하지 못하므로, 너무 자주 바꾸면 그만큼 손해입니다.

3스레드

스레드(thread)는 프로세스 안에서 실제로 실행되는 흐름 하나입니다. 한 프로세스가 스레드를 여럿 두면 한 프로그램 안에서 여러 일을 함께 할 수 있습니다. 가벼운 프로세스라는 뜻으로 경량 프로세스(light weight process)라고도 부릅니다.

가르는 기준프로세스 여럿한 프로세스 안의 스레드 여럿
코드·데이터·열린 파일저마다 따로함께 쓴다
PC·레지스터·스택저마다 따로스레드마다 따로
만들고 바꾸는 부담크다작다

스레드를 누가 관리하느냐로 둘로 나눕니다. 사용자 수준 스레드(user-level thread)는 프로그램 쪽 라이브러리가 관리해 바꾸기가 빠르지만, 한 스레드가 블록되면 그 프로세스의 스레드가 모두 멈출 수 있습니다. 커널 수준 스레드(kernel-level thread)는 커널이 관리해 한 스레드가 블록되어도 다른 스레드가 돌 수 있지만, 바꾸는 부담이 더 큽니다.

예제

동영상 재생 프로그램 하나가 겪는 일에 전이 이름을 붙여 봅니다. 먼저 이름을 가린 채 맞혀 보세요.

일어난 일전이바뀐 상태
스케줄러가 재생 프로그램을 골라 CPU를 준다디스패치준비 → 실행
다음 장면을 디스크에서 읽어 오라고 요청한다블록실행 → 대기
디스크 읽기가 끝난다웨이크업대기 → 준비
다시 CPU를 받는다디스패치준비 → 실행
화면을 그리다 받은 시간을 다 쓴다타임아웃실행 → 준비

셋째 줄에서 실행으로 곧장 가지 않는 것이 시험의 단골 함정입니다.

시험 포인트

  • 필기: 프로세스는 실행 중인 프로그램이고 PCB를 가집니다. 상태는 생성·준비·실행·대기·종료이고, 디스패치는 준비 → 실행, 타임아웃은 실행 → 준비, 블록은 실행 → 대기, 웨이크업은 대기 → 준비입니다. 대기 → 실행 전이는 없습니다. PCB에는 PID·상태·PC·레지스터·우선순위·메모리·입출력·계정 정보가 담깁니다. 문맥 교환은 PCB에 상태를 적고 꺼내는 일이고, 하는 동안 CPU는 쓸모 있는 일을 하지 못합니다. 스레드는 프로세스의 코드·데이터를 함께 쓰는 실행 흐름이라 만들고 바꾸는 부담이 작습니다. 사용자 수준 스레드는 하나가 블록되면 모두 멈출 수 있고, 커널 수준 스레드는 그렇지 않습니다.
  • 실기: 디스패치(Dispatch)·타임아웃(Timeout, 자료에 따라 할당 시간 초과·Timer Run Out)·블록(Block)·웨이크업(Wake Up), PCB(Process Control Block, 프로세스 제어 블록)·문맥 교환(Context Switching)·스레드(Thread)로 씁니다.

확인 문제

1. 블록 전이가 일어나는 장면을 고르세요.

  • ① 계산만 하던 프로세스가 받은 시간을 다 써 CPU를 내놓는다
  • ② 프로세스가 키보드 입력을 기다려야 해서 CPU를 놓는다
  • ③ 프린터 출력이 끝나 기다리던 프로세스가 준비 줄로 돌아간다
  • ④ 준비 줄의 프로세스가 스케줄러에게 뽑혀 CPU를 받는다
정답

②입니다. 입력처럼 다른 일이 끝나기를 기다려야 하면, 시간이 남았어도 CPU를 놓고 실행에서 대기로 갑니다.

  • ① 받은 시간을 다 써 실행에서 준비로 가는 타임아웃입니다. 기다릴 일이 있어서가 아닙니다.
  • ③ 기다리던 일이 끝나 대기에서 준비로 가는 웨이크업입니다.
  • ④ 준비에서 실행으로 가는 디스패치입니다.

2. 문서 편집기 프로세스 하나에 다음 일이 일어났습니다. (가)~(라)의 전이 이름을 한글 이름과 영문으로 함께 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

  • (가) 사용자가 저장을 눌러 편집기가 파일 쓰기를 맡기자, 쓰기가 끝날 때까지 CPU를 놓고 물러납니다.
  • (나) 파일 쓰기가 끝났다는 알림을 받고, 다시 CPU 차례를 기다리는 줄로 돌아갑니다.
  • (다) 줄에서 기다리다 스케줄러에게 뽑혀 CPU를 받습니다.
  • (라) 맞춤법 검사를 오래 돌리다 정해진 몫을 다 써, CPU를 내놓고 줄 끝으로 갑니다.
정답

받는 답: (가) 블록(Block) · (나) 웨이크업(Wake Up) · (다) 디스패치(Dispatch) · (라) 타임아웃(Timeout) 또는 할당 시간 초과(Timer Run Out)

(가)의 실마리는 '쓰기가 끝날 때까지 물러난다', (나)는 '알림을 받고 줄로 돌아간다', (다)는 '뽑혀 CPU를 받는다', (라)는 '정해진 몫을 다 썼다'입니다.

  • 틀리는 꼴 타임아웃 — (가)에: 받은 시간을 다 써 준비 상태로 가는 것입니다. (가)는 시간이 남았어도 입출력 때문에 대기 상태로 갑니다.
  • 틀리는 꼴 디스패치 — (나)에: 준비에서 실행으로 가는 것입니다. (나)는 대기에서 준비로 돌아갈 뿐 아직 CPU를 받지 않았습니다.
  • 틀리는 꼴 블록 — (라)에: 다른 일을 기다리러 대기로 가는 것입니다. (라)는 기다릴 일 없이 차례만 내주고 준비로 갑니다.

3. 다음 (가)~(다)에 맞는 이름을 한글 이름과 영문으로 함께 쓰세요. 영문 약어가 있으면 약어도 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

  • (가) 운영체제가 프로세스마다 하나씩 두는 기록으로, 몇 번째 프로세스인지와 다음에 실행할 자리, 우선순위가 적혀 있습니다.
  • (나) CPU를 넘길 때 지금 프로세스가 멈춘 자리를 (가)에 적고, 다음 프로세스의 (가)에서 값을 꺼내 오는 일입니다.
  • (다) 웹 브라우저 한 프로그램 안에서 화면 그리기와 파일 내려받기가 같은 메모리를 보며 함께 돕니다. 이 각각의 실행 흐름입니다.
정답

받는 답: (가) PCB(Process Control Block, 프로세스 제어 블록) · (나) 문맥 교환(Context Switching) · (다) 스레드(Thread) 또는 경량 프로세스(Light Weight Process)

(가)의 실마리는 '프로세스마다 하나씩 두는 기록', (나)는 '적고 꺼내 오는 일', (다)는 '한 프로그램 안에서 같은 메모리를 보며 함께 도는 흐름'입니다. 경량 프로세스는 자료에 따라 부르는 이름이라 함께 받습니다.

  • 틀리는 꼴 디스패치 — (나)에: 준비 상태의 프로세스에 CPU를 주는 전이의 이름입니다. (나)는 넘기는 동안 멈춘 자리를 적고 꺼내는 일 자체입니다.
  • 틀리는 꼴 프로세스 — (다)에: 저마다 따로 메모리를 갖는 실행 중인 프로그램입니다. (다)는 한 프로그램 안에서 메모리를 함께 씁니다.

4. 어떤 프로세스의 상태가 실행 → 대기 → (가) → 실행 차례로 바뀌었습니다. (가)에 들어갈 상태를 쓰고, (가)로 들어갈 때와 (가)에서 나올 때의 전이 이름을 차례로 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.

정답

받는 답: (가) 준비 · 들어갈 때 웨이크업(Wake Up) · 나올 때 디스패치(Dispatch)

대기에서 실행으로 곧장 가는 전이는 없습니다. 기다리던 일이 끝나면 웨이크업으로 준비 상태에 들어가고, 스케줄러가 고르면 디스패치로 실행에 갑니다.

  • 틀리는 꼴 (가) 생성: 생성은 프로세스가 처음 만들어질 때 한 번만 거칩니다. 대기에서 돌아가는 곳이 아닙니다.
  • 틀리는 꼴 나올 때 타임아웃: 타임아웃은 실행에서 준비로 가는, 거꾸로 방향의 전이입니다.

끝까지 내려오면 저절로 표시됩니다. 이 기기에만 저장합니다.

정보처리기사 목차로