프로세스와 스레드

이상민·2024년 11월 5일

CS공부

목록 보기
15/18
post-thumbnail

프로세스 & 스레드 개념에 대해 알아보자

  • 먼저 둘의 개념을 정의 하자면 다음과 같다.
  • 프로세스(Process)
    • 운영체제로부터 자원을 할당 받은 작업의 단위
  • 스레드(Thread)
    • 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위

프로세스란?

우리가 윈도우에서 사용하고 있는 *.exe 나 Mac의 *.dmg 와 같이 컴퓨터에서 실행할 수 있는 프로그램들은 자바나 자바스크립트, C언어와 같이 언어를 이용해 코드를 작성해 완성된 코드 덩어리 라고 할 수 있다.

그러면 프로세스는 뭐일까 ?
프로그램이 그냥 코드 덩어리면 프로세스는 프로그램을 실행 시켜 정적인 프로그램이 동적인 프로그램으로 돌아가고 있는 상태를 말한다. 즉, 컴퓨터에서 작업 중인 프로그램을 의미한다.

한번쯤은 다들 어떤 프로그램을 종료하기 위해 CTRL + ALT + DEL 을 눌러 늘 들어가던 작업관리자를 보면 실행중인 프로그램 즉, 프로세스들이 줄지어 있는것을 확인 한 적이 있을 것이다. 모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당해 줘야 실행될 수 있는데, 프로그램을 실행하는 순간 파일은 컴퓨터 메모리에 올라가게 되고, 운영체제로부터 시스템 자원(CPU)을 할당받아 프로그램 코드를 실행시켜 우리가 서비스를 이용할 수 있게 되는 것이다.

결국 프로그램과 프로세스의 차이는 어플리케이션을 실행 하냐 안하냐 차이일 뿐이라서, 일반적으로 프로세스와 프로그램을 같은 개념으로 이야기할 때가 많지만, 정의를 보았듯이 엄밀히 따지면 이 둘은 다른 개념인 것이다.

스레드란?

그럼 스레드란 무엇일까 ?
과거에는 프로그램을 실행할 때 프로세스 하나만을 사용해서 이용했었다고 한다. 하지만 기술이 발전됨에 따라 프로그램이 복잡해지고 다채로워짐으로써 프로세스 작업 하나만을 사용해서 프로그램을 실행하기에는 한계가 있었다.

스레드는 이러한 한계를 해걸하기 위해 태어난 개념으로 하나의 프로세스 내에서 동시에 진행되는 작업 갈래로 흐름의 단위 를 말한다.
이해하기 쉽게 비유를 들자면, 우리가 검색을 위해 크롬 브라우저가 실행 하면 프로세스 하나가 생성될 것이다. 그런데 우리는 브라우저에서 파일을 다운 받으며 온라인 쇼핑을 하면서 게임을 하기도 한다.(1석 3조)즉, 하나의 프로세스 안에서 여러가지 작업들 흐름이 동시에 진행되기 때문에 가능한 것인데, 이러한 일련의 작업 흐름들을 스레드라고 하며 여러개가 있다면 이를 멀티(다중) 스레드 라고도 부른다.

일반적으로 하나의 프로그램은 하나 이상의 프로세스를 가지고 있고, 하나의 프로세스는 반드시 하나 이상의 스레드를 갖게 된다. 즉, 프로세스를 생성하면 기본적으로 하나의 main 스레드가 생성되게 된다. 만약 스레드가 2개, 3개..인 경우에는 프로그램을 개발한 개발자가 직접 프로그래밍하여 위치 시켜주어야 한다.

프로세스 & 스레드의 메모리

프로세스의 자원 구조

프로그램이 실행되어 프로세스가 만들어지면 아래 그림과 같이 4가지의 메모리 영역으로 구성되어 할당 받게 된다.위 그림에서 Stack과 Heap 영역이 위아래로 화살표가 쳐 있는 것을 볼 수 있는데, 이는 코드 영역과 데이터 영역은 선언할 때 그 크기가 결정되는 정적 영역이지만, 스택 영역과 힙 영역은 프로세스가 실행되는 동안 크기가 늘어났다 줄어들기도 하는 동적 영역이기 때문에 이를 표현한 것이다.

코드 영역(Code / Text)

코드 영역은 맨 아래 위치한 영역으로 프로그래머가 작성한 프로그램 함수들의 코드가 CPU가 해석 가능한 기계어 형태로 저장되어 있다.

데이터 영역(Data)

데이터 영역에는 코드가 실행되면서 사용하는 전역 변수나 각종 데이터들이 모여있다. 데이터영역에는 .data ,.rodata, .bss 영역으로 세분화 된다.

  • .data : 전역 변수 또는 static 변수 등 프로그램이 사용하는 데이터를 저장
  • .BSS : 초기값 없는 전역 변수, static 변수가 저장
  • .rodata : const같은 상수 키워드 선언 된 변수나 문자열 상수가 저장

스택 영역(Stack)

스택 영역은 지역 변수와 같은 호출한 함수가 종료되면 되돌아올 임시적인 자료를 저장하는 독립적인 공간으로, Stack은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다. 만일 stack 영역을 초과하면 stack overflow 에러가 발생한다.

힙 영역(Heap)

힙 영역은 생성자, 인스턴스와 같은 동적으로 할당되는 데이터들을 위해 존재하는 공간으로, 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.

0개의 댓글