본문 바로가기

Computer Science/Operating System

<운영체제> 프로세스와 스레드

 

1. 프로세스

 - 프로세스는 운영체제에서 메모리 영역을 할당받아 실행되는 독립적인 프로그램 인스턴스이다.

 

 - 동적인 개념으로는 실행된 프로그램을 의미한다.

 

 - 더 자세한 내용은 지난 글을 참고하자.

 

 

* 특징

 - 한 프로세스는 다른 프로세스에 접근할 수 없다. 만일 접근하려면 통신을 사용해야한다.

 

 - 프로세스 하나는 독립된 메모리영역을 받으며 내부에는 Code, Data, Stack Heap영역이 있다.

 

 - 프로세스는 최소 1개의 스레드(메인 스레드)를 가지고 있다.

 

* 상태

 - 프로세스는 아래와 같은 생명주기를 갖는다.

 

 

 - CPU는 여러 프로세스를 빠르게 번갈아 가며 작업해야하는데 이 때, PCB(Process control block)을 이용하여 위의 상태들을 관리하며 Context Switching을 한다.

 

 - 각 상태의 의미는 다음과 같다.

 

 - Ready : 프로세스가 CPU에 할당되어 처리되기를 기다리는 상태이다.

 - Running : 명령어들이 실행되고 있는 상태이다.

 - Waiting : 어떤 이벤트의 발생으로 프로세스가 대기중인 상태이다.

 - Terminated : 프로세스가 종료된 상태이다.

 

 - Running 상태의 프로세스가 다른 상태로 바뀌는 경우는 총 3가지이다. 프로세스가 종료되어 terminated 상태가 되는경우, 너무 오래 running 상태일 경우 ready상태로 되돌아 가는 경우, 그리고 IO처리 등의 다른 일이 진행될 경우 waiting상태가 되는 경우가 있다.

 

 - 이처럼 운영체제는 프로세스들의 자원배정을 적절히 돌려가며 동작한다. 이 때 필요한 것이 스케줄링이다. 적절한 스케줄링 기법을 사용하여 다중 프로그래밍을 더 효율적으로 동작하게 해야한다. 스케줄링 기법은 이후의 포스팅에서 다루도록 하겠다.

 

2. 스레드

 - 스레드는 프로세스 내에서 각각의 스택을 할당받아 실행되는 독립적인 단위이다.

 

 - 기본적으로 하나의 애플리게이션(프로그램)은 하나 이상의 프로세스를 갖고 있고, 하나의 프로세스는 하나 이상의 스레드를 갖는다.

 

 

* 특징

 - 스레드는 각각 스택만 따로 할당 받고 코드, 데이터, 힙 영역을 서로 공유한다.

 

 - 한 스레드가 프로세스 자원을 변경하면 다른 스레드도 그 결과를 즉시 확인한다.

 

 

 

 


참고

 

 

[OS] 프로세스와 스레드의 차이 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

 

Process와 Thread 이야기

프로세스(Process)

charlezz.medium.com