2022-08-17

프로세스와 스레드

프로그램과 프로세스는 무엇이 다르고 스레드는 무엇일까? 프로세스와 스레드에 대해 알아보자!

프로그램과 프로세스 차이

프로그램은 명령문들이 메모리에 올라가지 않고 저장장치에 정적으로 저장되어있는 상태를 말한다.
프로세스는 운영체제에 의해 명령문들이 메모리에 올라가고 제어블록(PCU)이 생성되어있는 준비 상태를 말한다.

제어블록(Process Control Block)

운영체제가 프로세스 관리함에 있어 필요한 메타 정보가 담긴 자료구조다.
프로그램이 실행되면 운영체제에 의해 제어블록이 생성된다.

구조

제어블록에는 여러 메타 정보가 담겨있는데 간략하게 아래와 같다.

프로세스 상태

프로세스가 생성되고 종료되어 제거되기까지 과정에서 상태에 변화가 발생한다.
크게 활성, 휴식, 보류 상태로 구분된다.

활성 상태

휴식 상태

프로세스가 일시중단 되어 있는 상태로, 사용하던 데이터는 메모리에 남아있고 제어블록도 그대로 유지된다.
프로세스를 모니터링해 재개될 때까지 대기 상태로 유지된다. 재개되는 경우 준비 상태로 전환되어 준비 큐로 추가된다.
예를 들어 브라우저에서 유튜브를 시청하다 일시 정지하고 다른 프로세스로 화면을 전환하게 되면,
제어블록과 데이터는 메모리에 남아있는 상태로 대기 상태로 유지되었다가, 다시 시청하게 되면 준비 큐로 전환되었다 실행된다.

보류 상태

악의적인 공격이라 판단하거나, 입출력이 지연될 경우, 메모리 부하로 해당 프로세스를 스왑영역으로 이동해야 할 때
대기에서 보류 대기로, 준비에서 보류 준비로 전환된다. 프로세스가 재시작될 경우 다시 활성 상태로 들어간다.

프로세스 문맥 교환

CPU를 점유한 프로세스가 나가고 새로운 프로세스를 받아들이는 작업을 말한다.
제어 블록에 작업 내용을 저장하고 상태를 변경한 후 다른 프로세스 제어 블록과 교환한다.

프로세스 구조

읽기 전용인 정적 할당 영역과 크기가 유동적인 동적 할당 영역이있다.

정적 영역

동적 영역

프로세스 생성과 복사

스레드

프로세스 코드에 정의된 절차에 따라 CPU에 작업 수행을 요청하는 실행 단위다.
기본적으로 하나의 프로세스에는 하나의 스레드가 반드시 존재한다.
운영체제 입장에선 프로세스가 작업 단위이고, CPU 입장에선 스레드가 작업 단위다.
예로 인테리어(프로세스)라는 큰 작업에서 타일 깔기 전등 설치하기 등의 작은 작업을 스레드라 할 수 있다.

작업의 크기를 나누어 보자면 JobTask(프로세스)Operation(스레드)다.

멀티 스레딩

스레드가 2개 이상 존재할 때를 멀티 스레딩이라 한다.
스레드들은 프로세스 내부에서 강하게 연결되어 있으며, 하나의 스레드에서 발생하는 문제가
전체 스레드에 영향을 미친다. CPU는 여러 스레드를 동시에 처리하는 병렬 처리 기법을 사용한다.


프로세스 복사 호출(fork())은 자식 프로세스를 생성할 때 부모의 모든 환경을 그대로 가져오기 때문에,
메모리에 중복되는 데이터들이 발생한다. 하지만 프로세스를 생성하는 것보다 스레드를 추가하게 되면,
같은 프로세스 안에 하나의 스레드로 존재하게 되면서 자원이 중복되는 메모리 낭비가 발생하지 않게 된다.

참조

쉽게 배우는 운영체제 - 한빛 아카데미
널널한 개발자 - Process와 Thread의 차이
널널한 개발자 - 프로세스와 스레드 매우중요
널널한 개발자 - 프로세스 상태와 문맥교환
널널한 개발자 - 프로세스 생성과 복사 fork()와 exec()