본문 바로가기
Computer Science/컴퓨터공학(김용담 강사님)

프로세스 상태 전이도(feat. 프로세스 vs 프로그램 용어 차이)

by 코듀킹 2023. 4. 24.

1. 프로세스 vs 프로그램 무슨 차이일까?

  • 프로그램(Program): 저장공간에 저장되어 있는 명령어 목록 파일
  • 프로세스(Process): 메모리에서 실행되고 있는 프로그램

 

.프로세스는 OS에서 가장 중요한 기본적인 개념이다. 프로그램이라는 말이있고, 프로세스가 있는데 컴퓨터에서 이 2가지는 이제부터 다른 개념이라고 생각해야한다.

 

프로그램은 한 마디로 말하면, 명령어 목록이 있는 파일이다. 즉, 프로그램은 SSD/HDD같은 Storage에 저장되어있는 명령어 집합을 이야기한다. 카카오톡 프로그램이라고 하면, 내 컴퓨터 어딘가에 카카오톡을 실행할 수 있는 여러가지가 깔려있다. 윈도우는 C드라이브 안에 Program files라는 폴더 안에 들어가 있다. 그 폴더 이름이 Program files인 이유이다. 그 프로그램을 컴퓨터에서 OS가 카카오톡 켜주라고 하면, OS에서 프로그램들을 불러와서 메모리에 올려놓는 개념을 프로세스라고 한다. 즉, 메모리 위에 올라와서 실행되고 있는 프로그램을 프로세스라고 한다.

 

운영체제에서 컨트롤 할 때는 이 둘을 다른 용어로 쓰게 된다. 프로세스는 Job, Task라고 부른다. Job이나 Task라고 불릴려면, 메모리에 올라와 있어야한다. Job, Task라고 불리는 프로세스는 OS에서 모두 PCB(Process Control Block) 안에서 관리한다. PCB라고 하는 자료구조 안에 지금 프로세스가 어떤 것들이 들어가 있고, 그게 무엇인지 이런 개념들이 들어가 있다. 

 

 

2. 프로세스 상태 전이도

프로그램을 불러와 컴퓨터 메모리 위에 올리면, 프로세스라고 했다. 이 프로세스는 다시 5가지의 상태로 구분되며, 요청에 따라 상태가 계속 전환된다.

 

1) New: 프로세스가 처음 켜지면, new라는 상태로 올라온다. 사용자가 시스템 콜을 통해 카카오톡을 실행해달라고 요청을 보내면, 운영체제가 요청을 받아서 프로그램을 메모리에 로드한다. 처음 로드된 상태가 바로, new 상태이다. 즉, 프로세스가 새롭게 생성됐다는 뜻이다.

2) Ready: new 상태인 프로세스가 내부에서의 어떤 과정을 거쳐서 돌아갈 수 있는 상태가 되면 ready라고 부른다. ready 상태가 되면, 이제부터 CPU의 부름을 받을 수 있다.

3) Running: CPU가 ready 상태의 프로세스를 가지고, 작업을 하면 running 상태가 된다. 즉, 실행중인 프로세스라는 뜻이다. 프로세스는 거의 대부분 ready 아니면, running 상태이다.

4) Waiting: 가끔 running 상태의 프로세스가 사용자의 입출력같은 요청에 의해서 일부러 기다리고 있는 상태가 있다. 그게 waitng이다. 

5) Terminated: 프로세스가 끝나면 ternimated가 된다. 

 

컴퓨터에서 카카오톡을 처음 키게 되면, OS는 프로그램을 불러와서 프로세스를 생성한다. 그러면, new라는 상태가 된다. 이 상태가 되면, OS는 PCB를 만들어서 내 컴퓨터가 카카오톡이라는 프로그램을 사용할 수 있는 상태로 만든다. 즉, CPU의 부름을 받을 수 있는 상태로 만든다. 그러면 프로세스 상태가 ready가 된다. ready가 되어있는 프로세스들은 ready queue라는 곳에 enqueue된다.(queue의 특징은 FIFO(First In, First Out)이다.) 프로세스가 ready queue에 들어가면, CPU는 ready queue만 본다. 그리고나서 dequeue를 시킨 프로세스가 나오고, running을 한다.

 

이런걸 관리하는 OS 내에 시스템 소프트웨어인 Scheduler라는 것이 있다. 작업 반장같이 "너 들어가 있어, 너 나와" 이런걸 하는 역할이다. scheduler는 프로세스를 dispatch 한다. “너 이제 일하자 일로와”하면서 ready queue에서 dequeue를 한다. dequeue가 된(CPU를 만날 준비가 된) 프로세스는 running 상태가 된다. running상태가 되면, 그만하라고 할 때까지 일한다. 이걸 전문용어로 interrupt라고한다. 시스템 소프트웨어가 “야 너 일 그만해”라고 하면, running상태인 프로세스가 그만하고 다시 ready queue로 들어간다. ready queue에 들어가면, 다시 차례를 기다려야한다.

 

running에서 ready로 바로 들어가는 프로세스가 있고, running에서 waithing으로 가는 프로세스가 있다. 키보드 입력을 예로들면, 키보드가 들어올 때 inerrupt를 걸면, 프로세스를 ready queue로 보내는 것도 있고, 잠깐 기다리는 것도 있다. 키보드 입력하는 동안 굳이 실행 중인 프로세스를 종료를 할 필요는 없으니까 키보드 명령을 먼저 처리 하고, 그 다음에 다시 사용하기 위한  waiting 상태이다. ready로 바로 들어가는 프로세스와 waiting으로 가는 프로세스의 차이는, ready queue에 들어가는 순서를 결정한다. waiting은 잠깐 기다렸다가 queue에 들어가는 구조이다. 

 

카카오톡을 끄면, 즉 프로세스를 종료하면 terminated가 된다. 종료한다고 하는 것은 프로세스가 메모리에서 내려간다는 뜻이다. 필요한 것이 있다면 세이브를 하고, 그렇지 않으면 바로 종료한다. terminated 상태가 되면, 다시 킬 때 new부터 시작해야한다. 프로세스의 생애 주기가 new로 시작해서 terminated로 끝이 난다.

 

이게 프로세스의 5가지 상태이고, 이 상태가 바뀌는 것들을 Proccess transitions이라고 한다. interrupt, admitted, exit, scheduler dispatch 등과 같은 것들이다. 이게 컴퓨터를 사용하는 동안 계속 일어나는 일이다.

 

 

윈도우에서 작업관리자를 켜보면, CPU점유율을 나온다. CPU의 % 숫자가 켜져있는 것들이 뭔가를 하고 있는 것들이다.  0%인  것들은 ready 상태에 있는 프로세스들이다. 예를 들면, 카카오톡이 0%이면, ready 상태에 있는 것이다. 안쓰고 있기 때문이다. 그런데 중요한건 프로세스는 올라와 있다. 카카오톡을 안눌렀기 때문에 카톡 안쓰네 하고 레디에 넣어둔 것이다. 중요한건 여기에 있다는 건 켜놨다는 뜻이다. 오만가지 것들이 레디큐에 들어가 있다. 이게 실시간으로 ready갔다가 running갔다가 한다. 이러한 과정이 굉장히 빠르게 컴퓨터 내부에서 일어나보니, 프로그램 여러개가 동시에 실행되고 있는 것처럼 보인다. (참고글 - 운영체제: 유저모드, 커널모드, 시스템콜)

댓글