본격적인 운영체제 관리 기능을 배워보자.
process 관리 기능 - 운영체제가 프로그램을 실행시키고 실행 제어하는 일 담당
Definition of a Process and its States
- Process ?
프로그램이 실행상태에 있는 것을 말한다.
컴퓨터에 '.txt 파일'과 '.exe 파일'이 있다고 가정하자. '.txt'는 텍스트 파일이다. 실행 가능한 프로그램이 아니고 그저 내용을 저장한 파일이다. 반면에 .exe는 실행 파일, 즉 프로그램에 해당된다.
- 그렇다면 이 .exe 프로그램은 프로세스인가?
: 아니다. 단지 하드 디스크에 저장된 실행 가능한 파일일 뿐.
이제 '.exe 문서' 편집을 위해 더블 클릭해 '실행' 했다고 하자 -> 이는 곧 프로세스가 하나 만들어지는 것이다.
즉, .exe 프로그램이 실행되었을 때만 프로세스라고 한다.
- 누가 프로세스를 생성하는가 ?
- By a human
- By a process (프로세스에 의해 또 다른 프로세스가 생성됨) -> 부모 프로세스-자식 프로세스 관계 성립된다.
process는 실행되어야 하기에, instruction들의 연속으로 구성된다.
정리)
프로세스는 프로그램 instruction들을 실행하는 것. (= 사람과 유사 : 사람도 일을 할 때가 있고 잠을 자며 쉴 때가 있음. 이렇게 동작하는 방식이 많은 것 처럼 프로세스도 상태라고 하는 것이 있다.)
Process

user가 프로그램을 실행시키면 운영체제가 그 프로그램에 해당되는 프로세스를 만든다.
프로세스는 실행할 instruction들이 모인 code(=text) 부분과, instruction들의 실행 대상이 되는 data, 기타 실행에 필요한 운영체제 자원들(execution context)의 집합이다.
정리)
process는 instruction이 모인 code, 그 code의 실행 대상 값이 들어있는 data, 그리고 그 code와 data 가 실행되기 위해서 써야할 기타 computing 자원들의 집합이다.
상단 그림 참고하면, cpu 내에 여러개의 register들이 있다.
- pc 레지스터
: 프로그램 카운터로서, 다음에 실행할 instruction 주소를 저장하고있다. (상단 그림에서는 B 프로세스의 code부분을 가리키고있다. ) (= cpu가 현재 B를 실행하고있다.)

Main memory는 byte들이 연속해서 이루어진 저장공간이다. 각 byte에는 주소값이 부여되어있으며, 주소값을 보고 특정 byte를 찾아갈 수 있다. 또한 값을 읽거나 저장하는 행위가 가능하다.
반도체 Main memory는 RAM(Random Access Memory)이라 해서 주소를 주면 한번에 주소에 해당하는 byte 위치를 찾아갈 수 있다.
Process States (프로세스 상태)
프로세스 상태를 설명하기 위해서 어떤 상황을 하나 가정해보자.

5000번지부터 process A가 메모리에 저장돼있고, 8000번지부터 process B, 12000번지 부터 process C가 들어가있다.
그리고 5000번지 전에 운영체제가 들어있다. (회색 부분)
os 안에 있는 Dispatcher(kernel function)는 실행될 프로세스에게 cpu를 배정해주고, 프로세스가 실행되도록 준비하는 일을 담당하는 커널의 함수다.
cpu(프로세서) 안의 Program Counter(pc)는 다음에 실행할 프로그램의 주소를 저장하고있다.
위의 그림에서 메모리 주소값 8000이 들어있으므로, 프로세스 B가 다음에 실행할 차례라는 것을 알 수 있다.
cpu 프로세서는 메모리 공간에 직접 가는 것이 아니라, 컴퓨터 시스템 'BUS를 경유'해서 메모리로 간다.
(위 상단의 컴퓨터 구조 그림 2번을 참고할 것.)
Trace of Processes

프로세스 A의 코드 -> 5000~5012 번지에 들어있다.
5000~5012까지 실행하면 프로그램 A의 실행을 끝마친것이다.

#그림 해석
: 왼쪽 1 ~ 52까지의 숫자는 시간의 흐름을 나타낸다. (instruction 실행 순서)
1번 time에 5000번지에 가서 instruction을 실행했다~
-> Time out (Time sharing system에서 프로세스에게 주어진 시간이 경과되었다는 뜻)
- A 프로세스가 다 실행되지 못 했는데 다음 프로세스 B나 C로 넘어감
-> 운영체제는 그 넘어가는 일을 담당한다. (하늘색으로 표시된 것 처럼 A -> 100~105번지 instruction 실행(Dispatcher/ 즉 os code가 실행됨 -> 그 다음 실행될 프로세스 결정 : 8000번지) (그림 3 참고)
-> 프로세스 B 실행
->Time slice가 끝나지 않았는데 입/출력문 진행(입출력이 끝날 때 까지 프로세스 B는 대기 상태, System call이 일어남 / 운영체제에게 IO 서비스 요청한 것)
-> 다시 디스페처 실행
-> 다음 프로세스 C가 선택되어 실행
우체국 예시에 대입해보면 다음과 같다.
직원이 고객 A를 서비스 상담 -> 일정 시간이 경과되면 고객 A에게 기다려달라함 -> 책상에 있는 A 관련 서류들 잠깐 정리 + 다음 어떤 고객? -> 고객 B 서비스 -> B 서비스/ 신청서 -> 다음 고객 C , Time out -> 기다리고있던 A 작업, time out -> C 작업 (왜 B를 건너뛰었을까? - B 아직 신청서를 쓰고 있는 상태) (B 입출력 진행 상태 = 실행할 수 없는 상태 / cpu를 줄 필요가 없음)
CPU가 한 개이고, A를 실행하고 있었을 때 -> 운영체제 코드 실행(하늘색 부분) -> A와 B 등 사용자 프로그램을 실행하고 있을 땐 운영체제는 실행이 되지 않는다(하얀색 부분- 운영체제 동작 x)
Two-State Process Model

이제 프로세스 상태를 정의해보자.
어떤 프로그램을 실행시켜 프로세스 세계로 Enter -> 프로세스 실행 -> Exit
내부 변화 모습을 그려놓은 (a) State transition diagram (상태 변화도) 를 참고하자.
* state, 상태(파란색 원) - Not Running(cpu가 주어질 때까지 대기) / Running
* 상태와 상태를 연결하는 화살표(transition) - Dispatch (Not Running -> Running) / Pause (Running -> Not Running)
우체국 비유
Enter (우체국 (=컴퓨터 시스템) 문을 손님이 열고 들어오는 상태)
-> Not Running(앞의 대기 손님이 있어 기다리는 상태)
-> Running(서비스 받음) / 직원이 서비스하는 상태 (= cpu가 실행중인 상태)
-> Pause 잠시 중단되어야하는 상황
-> Exit (우체국을 떠남)
+ 한 상태도에 한 프로세스만 연결시켜 생각 해야한다. (하나의 프로세스가 실행중일 때 not running에 또 다른 프로세스가 실행될 수도 있겠다~ 등의 생각은 하면 안 된다.)
각 상태도는 각 프로세스의 상태를 저장하고 있다.
- (b) Queuing diagram ((a) 프로세스 상태도를 하드웨어 관점에서 본 것)
* Queue (=대기열)
: (main memory 공간 / not running 상태, cpu를 기다릴 때의 대기 공간)
-> 대기하다가 순차적으로 processor(직원)이 일 처리
-> puase /or/ 일 끝마치고 exit
Reasons for Process Creation
프로그램을 실행하면 프로세스가 만들어진다 했다.
구체적으로 프로세스가 만들어지는 이유를 살펴보자.
- 프로세스가 만들어지는 경우 세 가지
1. Created by user command
: 사람이 command를 내려 프로그램이 실행되고, 프로세스가 생성되는 경우
-* 프로세스 즉시 실행 (foreground 모드로 실행 / 대화식 프로그램(워드프로세서,웹브라우저...))
-* 처리할 일이 많은 프로그램 (background(뒷마당) 모드로 실행) (& + enter)
2. Created by OS to provide a service
: 운영체제가 부팅하면서 서비스 프로세스를 만드는 것. (주기적으로 한번씩 실행됨) - 운영체제가 사용해야하는
프로그램들(유령 프로그램)
3. Created by an existing process
: 기존 프로세스가 운영체제에 요청해 자식 프로세스를 만드는 것.
- 언제 프로세스를 끝(exit) 내는가?
1. Normal completion
: 마지막 instruction까지 호출해 프로그램이 끝마쳐지는 경우.
2. Parent request
: 부모 프로세스가 자식 프로세스를 없애달라고 요청하는 경우.
3. Arithmetic error, I/O failure, Invalid instruction, etc.
: 프로그램 실행 도중 error가 발생하는 경우.
ex) 분수 계산 시 분모가 0인 경우,입출력 실패, 정의되지 않은 instruction 사용 등..
4. Protection error
: 허용되지 않는 메모리에 접근하는 경우.
'CS 대비 > 운영체제(OS)' 카테고리의 다른 글
| 운영체제 #8 Process Control Block (PCB) (0) | 2023.08.22 |
|---|---|
| 운영체제 #7 Process States Model (0) | 2023.08.22 |
| 운영체제 #5 OS Architecture : Monolithic Kernel, Microkernel (0) | 2023.08.22 |
| 운영체제 #4 Components of OS(분산 시스템, Command-Interpreter System) (0) | 2023.08.20 |
| 운영체제 #3 Timesharing System (0) | 2023.08.13 |