프로세스
프로세스란?
프로세스는 실행 중인 프로그램이며 작업의 단위이다
여기서 프로그램이 실행 중이라는 것은 디스크에 저장되어 있던 프로그램을 메모리에 저장한 뒤 운영체제의 제어를 받을 수 있는 상태가 된 것을 의미한다
프로세스 메모리 구조
프로세스에 메모리 구조는
- stack
- heap
- code(text)
- data
이렇게 4가지 영역으로 구성된다
이러한 주소 공간을 우리는 가상 메모리 또는 논리적 메모리라고 부른다
그럼 하나씩 알아보자
Stack
Stack 영역은 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터(지역변수, 매개변수, 리턴값 등)를 임시로 저장하는 공간이다
Stack 특징
- 후입선출(LIFO, Last-In-First-Out) 구조
- 고정 크기 할당
Heap
필요할 때마다 사용하는 메모리 영역
Heap 특징
- 크기가 동적으로 변할 수 있다
- 임의의 위치에 데이터가 저장될 수 있다
Code
Code는 실행 파일에 저장된 프로그램 코드가 저장되는 영역이다
Code 특징
Data
전역 변수와 정적 변수, 배열, 구조체 등이 저장된다
Data 특징
- 초기화된 데이터와 초기화되지 않은 데이터로 구분된다
- Stack과 Heap보다 큰 메모리 공간을 사용한다
- 전역 변수와 정적 변수가 저장된다
스레드
스레드란?
스레드란 프로세스 내에서 실행되는 흐름의 단위를 의미한다
일반적으로 하나의 프로그램은 하나의 스레드를 가지고 있지만, 프로그램의 환경에 따라 다수의 스레드를 동시에 실행할 수 있으며 이러한 실행 방식을 멀티스레드라고 한다
스레드 장점
- 높은 처리량: 다수의 스레드를 활용하여 동시에 작업을 처리함으로써 전체 시스템의 처리량을 향상시킬 수 있다
- 빠른 응답성: 사용자 인터페이스와 같이 대화형 응용 프로그램에서는 스레드를 사용하여 응답성을 향상시킬 수 있다
- 자원 공유: 스레드는 같은 프로세스 내에서 실행되기 때문에 프로세스 내부의 자원(데이터, 메모리 등)을 공유할 수 있다
- 경제성: 프로세스 생성보다 스레드 생성이 비용이 적게 든다
- 멀티태스킹: 다중 스레드를 사용하여 다중 작업을 처리할 수 있다
스레드 단점
- 동기화 문제: 스레드들은 프로세스 내부의 자원을 공유하기 때문에 동기화 문제가 발생할 수 있다
- 교착 상태: 둘 이상의 스레드가 서로 다른 자원을 점유한 채로 대기하는 상태가 되는 교착 상태(deadlock)가 발생할 수 있다
- 코드 복잡성: 스레드를 사용하면 동시에 실행되는 코드를 작성하기 때문에 코드가 복잡해질 수 있다
- 안정성: 스레드는 공유 자원에 대한 경쟁 조건으로 인해 예기치 않은 동작이 발생할 수 있다
- 디버깅 어려움: 스레드를 사용하면 하나의 문제가 여러 스레드에 영향을 미칠 수 있기 때문에 디버깅이 어려울 수 있다
우왕석짅님정말대단해요!!