본문 바로가기

프로그래밍/프로그래밍 용어

운영체제 - 프로세스(Process)

프로세스란?


프로세스는 다음과 같이 2가지로 정의될 수 있습니다.


1. 실행중인 프로그램

2. 프로그램이 메모리에 올라간 상태


사실 두 정의 모두 같은 말입니다. 결국 프로그램이 실행중인 상태를 의미하기 때문이죠.


개발자는 어떠한 목적을 수행하기 위한 과정인 프로그램을 작성하고, 그 목적을 실제로 수행하기 위해 프로그램을 실행시킵니다. 수행하는 주체인 CPU가 사용하기 위해 메모리에 프로그램 정보를 올려두고 사용하는 상태, 그것이 바로 프로세스입니다.


CPU는 여러개의 프로세스를 동시에 수행하기도 합니다.


복수의 프로세스를 단일 프로세서에서 동시에 실행시키는 기법이 있는데, 그 기법의 이름은 컨텍스트 스위칭context switching입니다.

해석하면 "문맥 맞바꾸기" 인데 , 잘 어울리는 단어인 것 같습니다.


컨텍스트 Context


프로세스가 실행되게 되면 하나의 컨텍스트를 이루게 됩니다. cpu입장에서 본다면 그 문맥은 '해당 프로세스의 어떤 명령어까지 수행했는가' 정도로 이해가 되겠네요. 이러한 정보들을 통틀어 컨텍스트라고 부릅니다.


cmd프로그램에서 hello.exe라는 프로그램을 실행한다고 가정해봅시다. cmd또한 프로그램이기 때문에 실행 흐름, 즉 컨텍스트를 형성하게 되겠죠. 그러나 cmd창에서 hello.exe를 실행하게 되면 , hello.exe가 실행되게 됩니다. 

단일 프로세서 컴퓨터에서는 프로세스를 한개만 실행시킬 수 있는데 , 두개의 프로세스가 실행되려고 하기때문에 문제가 발생합니다. cmd창이 실행되고있는 상황에 , hello.exe를 실행하게 된 상황 말입니다. 그러나 컨텍스트 스위칭 기법을 사용한다면 , 이러한 단일프로세서 문제가 해결이 됩니다.


cmd창에 hello.exe를 실행하라는 문자들이 입력이됩니다. 이 또한 cpu에 명령을 하는 것이기 때문에 , 사용자 입장에서 생긴 명령어라고 하여서 유저코드User Code라고 부릅니다.

자 이제 hello.exe를 실행하려고하는데 , 이미 cmd.exe라는 프로그램이 실행중에 있습니다. 종료를 하면 되겠지만 cmd 제작자는 그러한 상황을 원하지 않았습니다. 계속 실행중으로 냅뒀기 때문에 , 복수의 프로그램이 실행되어야 하는 상황이 온겁니다.

이것을 감지한 운영체제os는 cmd의 현재 컨텍스트를 저장하라는 명령을 내립니다. 운영체제의 커널이라는 시스템이 생성한 명령어라고 해서 이러한 명령어를 Kernel code라고 부릅니다.


자 이제 cmd의 컨텍스트가 저장이 되었습니다. 프로세스를 실행하기 위해 필요한 공간을 hello.exe를 위해 다시 형성합니다. 그리고 그제서야 hello.exe를 실행하게 되는겁니다. hello.exe는 "hello world!"라는 문장을 출력하는 단순한 프로그램이였습니다.


hello.exe가 종료되고 , 다시 cmd.exe로 돌아오기 위해서 저장된 컨텍스트를 토대로 프로세스 실행에 필요한 내용을 불러옵니다. 이 과정또한 컨텍스트 스위칭입니다. 실행 흐름을 다시 얻게된 cmd.exe는 아무일도 없었던 것처럼 다시 입력을 기다리는 상태로 들어가게 되는거죠.