프로세스 & 스레드

Taehun Jeong·2023년 2월 20일
0
post-thumbnail

프로세스

프로세스(Process)란 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 실행 중인 프로그램으로, 디스크로부터 메모리에 적재되어 CPU 의 할당을 받는다. 운영체제로부터 주소 공간, 파일, 메모리 등을 할당받으며 이것들을 총칭하여 프로세스라고 한다.


프로그램의 컴파일 과정

프로세스는 프로그램이 인스턴스화된 것을 일컫는다. 프로그램은 컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번역되어실행될 수 있는 파일이 되는 것을 의미하며 과정은 다음과 같다. (C언어 기준)

C 컴파일 과정 - 큰돌의 터전
  • 전처리 과정에서 주석을 제거하고 헤더 파일을 병합하여 매크로로 치환한다.
  • 컴파일러에서 오류 처리, 코드 최적화 작업을 통해 어셈블리어로 치환한다.
  • 어셈블러에서 어셈블리어를 목적 코드(object code)로 변환한다.
  • 링커에서 프로그램 내에 있는 라이브러리 함수 또는 다른 파일들과 목적 코드를 결합하여 실행 파일을 만든다.

프로세스의 메모리 구조

운영체제는 프로세스에 적절한 메모리를 할당한다.

  • 스택 : 스택에는 지역변수, 매개변수, 함수가 저장되고 컴파일 시에 크기가 결정되며 ‘동적’인 특징을 갖는다. 스택 영역은 함수가 함수를 재귀적으로 호출하면서 동적으로 크기가 늘어날 수 있는데, 이때 힙과 스택의 메모리 영역이 겹치면 안 되기 때문에 힙과 스택 사이의 공간을 비워 놓는다.
  • 힙 : 동적 할당 때 사용되며 런타임 시 크기가 결정된다. '동적'인 특징을 갖는다.
  • 데이터 영역 : 데이터 영역은 전역변수, 정적변수가 저장되고 정적인 특징을 갖는 프로그램이 종료되면 사라지는 변수가 들어있는 영역이다. BSS 영역과 Data 영역으로 나뉘고, BSS 영역은 초기화가 되지 않은 변수가 0으로 초기화되어 저장되며 Data 영역(Data segment)은 0이 아닌 다른 값으로 할당된 변수들이 저장된다.
  • 코드 영역 : 프로그램에 내장되어 있는 소스 코드가 들어있는 영역. 수정 불가능한 기계어로 저장되어 있으며 정적인 특징을 갖는다.

스레드

스레드는 프로세스의 가장 작은 실행 단위이며, 프로세스는 여러 스레드를 가질 수 있다.(반드시 1개 이상을 갖는다) 한 프로세스 내에 2개 이상의 스레드를 갖는 경우 멀티 스레딩이라 한다. 코드, 데이터, 힙은 스레드끼리 서로 공유한다.

멀티스레딩

멀티스레딩은 프로세스 내 여러 작업을 멀티스레드를 처리하는 기법으로 서로 자원을 공유하므로 효율성이 높다. 웹 요청을 처리할때 새 프로세스를 생성하는 대신 스레드를 사용하는 웹 서버의 경우 훨씬 적은 리소스를 소비하며, 한 스레드가 중단(blocked)되어도 다른 스레드는 실행(running) 상태일 수 있기 때문에 중단되지 않은 빠른 처리가 가능하다. 또한, 동시성에도 큰 장점이 있다. 한 스레드에 문제가 생길 경우, 다른 스레드에도 영향을 끼칠 수 있다는 단점도 갖고 있다. 멀티스레드의 예시로는 웹 브라우저의 렌더러 프로세스를 들 수 있다.


References

Interview_Question_for_Beginner) OS
큰돌의터전) [CS전공지식면접] 프로세스와 스레드의 차이는?
Fast campus) CS 기술면접 단골질문! <프로세스와 스레드 차이>
널널한 개발자 TV) Process와 Thread의 차이

profile
안녕하세요

0개의 댓글