# 프로그램 (Program)
특정 작업을 수행하기 위한 명령어의 모음으로
프로그램을 실행하는 경우 운영체제는 시스템 메모리로 로드를 하고, 이를 실행한다.
# 프로세스 (Process)
CPU에서 실행되고 있는 프로그램이 메모리 상에서 차지하는 공간을 포함한 실행 단위.
프로세스는 하나일수도, 여러 개일수도 있으며 각 프로세스는 메모리와 리소스를 가진다.
이 때, 메모리의 경우 공유하지 않으며 리소스의 경우 서로 공유할 수 있다.
메모리 공간의 경우 크게는 텍스트 영역, 데이터 영역, 힙 영역, 스택 영역, 메모리 매핑 영역이 존재하며 각각의 역할은 다음과 같다.
1. 텍스트 영역: 실행 코드 저장
2. 데이터 영역: 전역 변수와 정적 변수 저장
3. 힙 영역: 동적 메모리 할당
4. 스택 영역: 함수 호출과 지역 변수 저장
5. 메모리 매핑 영역: 파일이나 장치와 매핑된 메모리 공간
이러한 프로세스는 운영 체제에 의해 스케줄링되고 관리된다.
# 스레드 (Thread)
프로세스 내에서 실행되는 작은 작업 단위.
하나의 프로세스에는 여러 개의 스레드가 존재할 수 있으며, 스레드는 프로세스와 달리 스레드 간 메모리를 공유한다.
또한 스레드는 CPU 에서 실행되는 실제 작업을 수행하고 자신만의 레지스터와 스택을 가지지만, 프로세스의 주소 공간을 공유한다.
스레드 간의 통신은 프로세스 간 통신보다 효율적이고 빠르다.
위와 같은 특성으로 인해 멀티 프로세스 환경에서는 한 프로세스가 종료되어도 다른 프로세스에 영향을 주지 않지만, 멀티 스레드 환경에서는 한 스레드에 문제가 생기는 경우 자원이 공유되고 있음으로 인해 연쇄 작용이 일어나, 다른 스레드에도 영향을 주게 되고 이로 인해 프로세스가 종료가 될 수 있다.
흔히 안드로이드 앱 개발을 하다보면 UI Thread 에서 오류가 발생하여 앱이 죽는 경우가 이러한 경우라고 보면 될 것 같다.
'프로그래밍 > CS' 카테고리의 다른 글
[Computer Science] 프로그램의 메모리 구조에 대해 알아보자 (Code, Data, Stack, Heap) (0) | 2025.02.20 |
---|---|
[Computer Science] 프로그래밍 패러다임에 대해 알아보자. (1) | 2025.02.19 |
[Computer Science] OOP 에서 아주 중요한 SOLID 원칙에 대해 알아보자 (2/2) (1) | 2024.12.27 |
[Computer Science] OOP 에서 아주 중요한 SOLID 원칙에 대해 알아보자 (1/2) (0) | 2024.12.20 |
[Computer Science] 객체 지향 프로그래밍 (OOP) 란 무엇일까? (1) | 2024.12.19 |