Post

운영체제 (7) - process

process

반갑습니다. 이번 글에선, process에 대해 알아보려고 합니다.

process란?

image

참 많이 들어본 단업니다. 컴퓨터를 켜고, ctrl + alt + . 을 누르고, 작업 관리자 버튼을 클릭하면 작업 관리자 페이지로 넘어갈 수 있습니다. 뭐가 참 많아보입니다. 앱에는 크롬 브라우저도 있고, 제가 지금 글을 쓰는 편집기 vscode도 존재하고, 터미널도 존재합니다. 이들은 현재 실행중인 프로세스들입니다. 백그라운드 프로세스는 무엇인가요? 처음으로 알캡쳐가 보입니다. 저 알캡쳐는 제가 자주 사용하는 캡쳐 툴입니다. 캡쳐는 되어있지 않지만 카카오톡도 존재하고, amd 뭐시기도 존재합니다. 하지만 저는 현재 카카오톡을 실행하고 있지 않습니다. amd. . 어쩌고와, 알캡쳐도 사용하지 않는데 왜 작업 관리자에 나와있는 것인가요?

이유는 이들은 백그라운드 프로세스기 때문입니다. 백그라운드 프로세스는 딱 내가 실행하고 있지 않지만, 뭔가 뒤에서 열심히 돌아가고 있는 프로세스들이라고 생각해보면 될 듯 합니다.

이제 프로세스에 대해 알아봅시다. 아니 그에 앞서서 프로그램과 프로세스의 차이에 대해 알아봅시다. 이 둘은 매우 유사한 단어인데, 프로그램이라는 말이 더 익숙합니다. 프로그램은 디스크에 저장되어 있습니다. 이러한 프로그램을 GUI에서, 더블 클릭을 하거나, 아니면 CLI에서 명령어로 직접 실행하거나 등의 방식으로 메모리에 올라간 프로그램을 프로세스라고 합니다. 즉, 현재 CPU에 의해 작업중인 프로그램을 프로세스라고 이해하면 됩니다. 좀 큰 덩어리가 프로그램이고, 실행되는 프로그램이 프로세스라고 이해하면 편해보입니다. 하나의 프로그램은 여러 개의 프로세스로 구성될 수 있습니다. 이 문장은 조금 이해되지 않으실 수 있지만 일단 그렇다 하고 넘어갑시다.

process의 구조

프로세스는 메모리에 올라간 실행중인 프로그램입니다. 프로세스가 메모리에 올라 갔을 때의 구조를 살펴봅시다.

image

현재 그림의 프로세스는 0에서 max까지의 메모리 주소를 사용합니다. stack 지역에선 지역 변수, 주소, return address를 저장합니다. 또한, 함수가 호출이 끝나면 소멸됩니다. SP(stack pointer)를 사용해서 data를 pop/push합니다. heap 지역에선 동적 할당 개체를 저장합니다. data 지역에선 전역 변수와, 정적 변수를 저장합니다. 프로세스 시작과 함께 할당됩니다. text 지역에선 코드가 저장되어 있습니다.

함수 호출과, 프로세스 시작의 차이가 무엇?

stack은 함수 호출, data는 프로세스 시작과 관련되어 있습니다. 프로세스 시작과 동시에, main을 부르는데, 차이가 무엇인가 궁금하실 수 있다고 생각합니다. 간단한 C코드를 예시로 들어보겠습니다.

1
2
3
4
5
6
7
#include <stdio.h>
int x=4;
int main(int argc, char **argv){
    int i=2;
    i=7;
    return 0;
}

차이를 아시겠나요? data 지역에는 전역변수 x가 저장되고, 아래로 내려오면서 main을 만날 때, 메모리의 stack 지역에 i가 할당되는 형식입니다. 그리고 return을 만나면 stack 지역은 사라집니다. 즉, 전역변수 x가 먼저 메모리에 저장된다고 볼 수 있습니다. 저 코드가 실행될 때, data 부분에 x가 할당되고, 그 후 main이 호출된다는 의미입니다!

process state

image

프로세스가 생성되고 있을 때를 new라고 합니다. ready 상태는 실행 준비가 다 된 상태입니다. running 상태는 CPU에 의해 실행되고 있는 상태고, waiting 상태는 I/O or event를 기다리는 상태입니다. I/O와 event가 끝나면, ready 상태에 돌입합니다. running중인 process가 CPU에 의해 작업이 다 끝나면, 종료됩니다.

process가 적절한 상태로 나뉨을 이해했습니다. 이러한 process를 process block(PCB)으로 관리합니다.

This post is licensed under CC BY 4.0 by the author.