본문 바로가기
Computer Science/OS (Operating System)

[OS] 프로그램, 프로세스, 스레드

by 연제원 2021. 6. 3.

운영체제(OS)란?

이전에 운영체제가 하는 일을 잠시 알아봤다. 그 중 하나는 시스템 자원 관리를 하는 것이었는데, 이에 대해 알아보자.

 

우리는 컴퓨터를 사용하면서 프로그램을 실행시킨다고 한다. 이 프로그램은 사용자가 원하는 일을 처리할 수 있도록 미리 명령어(코드)와 데이터들을 종합해 놓은 묶음 즉, 실행파일이다. 이를 컴퓨터(보조기억장치 - 하드디스크,SSD)에 미리 저장해 놓는다. 예를 들면 파워포인트, 게임, 워드 등이 있다. 그렇다면 우리가 컴퓨터를 켰을 때 알아서 켜지고 작동하는가? 를 생각해보면 아니다. 우리는 실행시키기 위해 더블클릭을 한다.

 

우리가 더블 클릭을 하면 이때 운영체제가 클릭한 프로그램에 메모리, CPU를 할당해준다. 그러면 우리는 원하는 행동을 할 수 있다. ppt를 만들거나, 게임을 하는 등 실행되고 있는 이 상태를 프로세스라고 한다. 즉, 프로그램이 메모리에 올라와 CPU를 할당받은 상태인 것이다. 그리고 프로세스 당 기본적으로 하나의 스레드를 가지고 있다. 갑자기 왠 스레드? 라고 할 수 있지만 프로세스가 큰 개념이라고 한다면 그 속의 작은 실행 단위, 즉 프로세스의 특정한 수행 경로를 스레드라고 할 수 있다.

 

요약해보자면 다음과 같다.

프로그램 (Program) - 파일시스템에 존재하는 실행 파일

프로세스 (Process) - 프로그램이 실행 된 상태

스레드 (Thread) - 프로세스 내에서 실행되는 실행 흐름

 

멀티 스레드 vs 멀티 프로세스


그런데 우리는 컴퓨터를 사용하면서 한 가지 프로그램만 사용하지 않는다. 게임을 하다 웹 서핑도 하고, 카카오톡도 하고 여러가지 프로그램을 실행시켜 놓는다. 어떻게 가능할까? 사실 프로그램을 여러개 실행할 때 동시에 실행되는 것이 아니다. CPU는 한 번에 하나의 프로세스만 처리할 수 있다.(물론 멀티코어를 통해 가능하지만 제외!) 

여기서 중요한 단어들이 있는데 우선 동시성이다. 동시성이란 인간이 느낄 수 없을 정도로 빠른 속도로 작업이 번갈아 진행되기에, 동시적으로 일어나는 것 처럼 느껴진다는 뜻이다. 게임과 웹 서핑을 동시에 실행한다고 느끼지만, 사실 게임을 할 땐 게임만 실행하고, 알트탭을 눌러 웹을 켜면 게임은 잠시 대기 상태로 두고 웹만 실행하는 것이다. 이 경우를 컨텍스트 스위칭이라고 한다.

 

이제 컴퓨터가 여러가지 일을 수행할 수 있는 이유에 알아보기 프로세스에 대해 조금만 더 알아보자. (정리가 어렵다 ㅠㅠ)

운영체제는 앞서 말했듯 프로세스마다 메모리, CPU등을 할당해준다고 했다. 이 중 메모리를 할당 할 때 각각 독립된 Code, Data, Stack, Heap의 구조로 메모리를 할당해준다. 각각 독립된 메모리 영역을 할당해주기 때문에 프로세스는 다른 프로세스에 접근할 수 없다.

 

Code - 실행 명령을 포함하는 코드들

Data - 일련의 데이터

Stack - 지역변수와 매개변수 자료 보관

Heap - 동적 메모리 영역

 

 

 

다시 어떻게 컴퓨터가 여러가지 일을 한 번에 처리할 수 있는지에 대해 간단히 생각해보면

1. 프로세스 내부에 스레드를 여러개 만든다.

2. 프로세스를 여러개 만든다.

로 생각해 볼 수 있다. 1번의 경우를 멀티 스레드 2번의 경우를 멀티 프로세스 라고 한다. 멀티 스레드는 하나의 프로그램을 여러개의 스레드로 구성하고 각 스레드 당 하나의 작업을 처리하게 된다. 이 경우 각 스레드는 프로세스가 할당받은 Code, Data, Heap을 공유한다. 멀티 프로세스는 하나의 프로그램(부모 프로세스)을 fork 후, 여러개의 자식 프로세스로 구성하고 각 프로세스가 하나의 작업을 처리하게 한다. 이 경우 프로세스마다 독립된 메모리 영역을 가진다.

 

두 가지가 비슷해 보이지만 차이점에 대해 알아보자.

 

멀티 스레드는 프로세스 1개의 내부에서 여러개의 스레드를 갖고 메모리를 공유하기 때문에 상대적으로 적은 메모리 공간을 차지하고, 컨텍스트 스위칭이 빠르다는 장점이 있다. 하지만 공유한다는 뜻은 다른 하나가 바뀔 때 마다 서로 동기화를 시켜줘야 하고, 오류가 나면 전체적으로 오류가 난다는 뜻이다. 예를 들면, 익스플로러를 사용할 때 다음과 같은 경험을 많이 했을 것이다. 여러개의 브라우저를 켜놨을 때 한 브라우저가 오류가 나면 전체적으로 다 꺼진다. 이 경우가 멀티 스레드다.

 

멀티 프로세스는 위와 같은 오류가 없이 각각 독립적으로 진행되기 때문에 안전하다는 장점이 있다. 하지만 그만큼 독립된 메모리 영역을 차지하기 때문에 자원, 메모리를 더 소비해야한다. 또한 컨텍스트 스위칭 과정이 멀티스레드에 비해 느리다는 단점이 있다.

'Computer Science > OS (Operating System)' 카테고리의 다른 글

[OS] 운영체제(OS)란?  (0) 2021.06.03

댓글