Computer Science/Operating System

프로세스 메모리 구조, 프로세스/스레드 차이

settong 2024. 10. 22. 09:55
반응형

프로세스 메모리 구조

프로세스 :  실행중인 프로그램의 작업 단위

 

Stack 영역

지역변수, 매개변수, 함수가 저장되는 영역. 컴파일시 크기가 결정됨.
동적 할당 : 함수 호출 시 프레임을 할당하고, 함수 호출이 끝나면 해당 프레임을 해제하는 방식
LIFO(Last In, First Out) 방식으로 동작.
스택 오버플로우가 발생하지 않도록 주의!
 

Heap 영역

런타임에 할당된 객체나 배열 등 동적으로 할당된 메모리가 저장되는 영역.
동적 할당 : malloc, calloc, realloc 등의 함수로 메모리 할당이 이루어지며, free 함수로 메모리 해제
메모리 누수가 발생하지 않도록 주의!
 

Data 영역

BSS(Block Started By Symbol) 영역과 Data 영역으로 나뉘어져 있다.

BSS(Block Started By Symbol)Data
0으로 초기화 or 초기화되지 않은 전역/정적 변수가 저장되는 영역
프로그램 시작 시 이 영역의 변수들은 0 으로 초기화됨
초기화된 전역/정적 변수가 저장되는 영역
프로그램 시작 시 초기화된 데이터로 채워짐

위의 두 영역 다 읽기/쓰기 모두 가능.
정적 할당 : 프로그램 시작 시 고정된 크기로 할당.
 

Text 영역

실행할 코드가 저장되는 영역.
다수의 프로세스가 동일한 프로그램을 실행할 경우, 이 영역을 공유할 수 있음.
보통 읽기 전용으로 설정되어 있어 코드가 수정되는 것을 방지함.
정적 할당 : 프로그램 시작 시 고정된 크기로 할당.
 
 
 
 
 
 

프로세스와 스레드

 
프로세스는 실행중인 프로그램의 작업 단위라고 했다. 스레드프로세스 내 작업의 흐름을 이야기한다.
즉, 스레드는 프로세스보다 더 작은 단위이다.
 
 

스레드의 탄생

하나의 프로세스는 독립적인 메모리 공간을 할당받기 때문에 동시에 여러 작업을 수행하기에는 다음과 같은 단점이 존재함.
1. 프로세스끼리의 데이터 공유가 까다로움
2. 높은 컨텍스트 스위칭 비용
때문에 단일 프로세스 내에서 여러 작업을 동시에 처리하기 위해 스레드 개념 도입.
 
 

싱글스레드 / 멀티스레드

프로세스는 스레드 개수에 따라 싱글스레드 프로세스, 멀티스레드 프로세스로 나뉜다.

프로세스는 각각 독립적인 메모리 공간을 할당받고, 스레드는 해당 프로세스의 메모리 영역을 공유한다.
또한 스레드만의 고유한 영역도 존재한다.(pc, stack)
 
❗️멀티 스레드 한경에서 한 스레드가 공유 데이터를 손상시키면? 모든 스레드에 영향을 줄 수 있음. 이를 대비해야함

  • Critical Section 기법
    • 상호배제 : 하나의 스레드가 임계구역에서 실행 중이면, 다른 스레드들은 임계 구역에서 실행 될 수 없음
    • 진행 : 임계구역에 실행되고 있는 스레드가 없으면 들어갈 스레드를 적절히 선택
    • 한정된 대기 : 한번 임계구역에서 실행된 프로세스는 다음 실행에 대한 제한을 둠. (여러 스레드가 공유 자원을 사용하려고 할 때 일부 스레드가 계속 자원을 얻지 못하는 상황을 방지)

 

프로세스와 스레드 비교

프로세스스레드
코드, 데이터, 스택, 힙 메모리 영역을 기반으로 작업메모리 영역을 프로세스 내의 다른 스레드들과 공유 (메모리적 이점)
* 단, 스택 메모리는 독립적
다른 프로세스와 격리되어 있어 서로 통신하기 위해서는 IPC가 필요다른 스레드와 격리되어 있지 않아 통신이 프로세스보다 빠름
한 프로세스에 문제가 생기면 다른 프로세스에 영향을 끼치지 않음한 스레드에 문제가 생기면 다른 스레드에도 영향을 미쳐
프로세스까지 영향을 줄 수 있음.
생성과 종료에 비교적 더 많은 시간이 듦생성과 종료에 비교적 더 적은 시간이 듦

 
 

728x90
반응형