프로세스: 실행 중인 프로그램을 뜻하는 말.
프로세스의 메모리 영역
하나의 프로세스는 사용자 영역에 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장됩니다.
코드 영역
: 실행할 수 있는 코드, 기계여로 이루어진 명령어를 저장하는 공간
코드 영역에는 CPU가 실행할 명령어가 담겨있기 때문에 쓰기가 금지된 읽기 전용 공간입니다.
영역의 크기가 변하지 않는다는 특징이 있습니다. (읽기 전용이기 때문) -> 정적 할당 영역
데이터 영역
: 프로그램이 실행되는 동안 계속해서 유지할 데이터를 저장하는 공간
대표적으로 전역변수와 같은 데이터들이 저장될 수 있습니다.
코드 영역과 마찬가지로 영역의 크기가 변하지 않습니다. (계속 유지될 데이터들을 담고 있기 때문) -> 정적 할당 영역
힙 영역
: 프로그래머가 직접 할당할 수 있는 저장 공간
프로그래밍 과정에서 프로그래머가 직접 메모리 공간을 할당하고 반환하는 과정을 진행하여 영역의 크기가 동적으로 변화합니다.
여기서 프로그래머는 적절하게 메모리공간을 반환해 주어야 하며, 그렇지 않으면 메무리의 낭비, 즉 메모리 누수가 발생하기 때문에 주의해야합니다.
= 메모리의 크기 변화 -> 동적 할당 영역
스택 영역
: 데이터를 일시적으로 저장하는 공간
데이터의 영역과 반대의 쓰임으로 잠깐 쓰고 말 값들이 저장됨이다. 함수의 매개변수, 지역변수들을 대표적으로 예로 들 수 있습니다.
일시적으로 저장하는 데이터는 스택 영역에 푸시, 그리고 필요하지 않으면 팝을 통해 사라집니다.
= 메모리의 크기 변화 -> 동적 할당 영역
힙 영역과 스택 영역 두가지는 동적 할당의 영역이기 때문에 데이터를 쌓을 떄, 힙 영역은 메모리의 낮은주소부터 높은 주소로, 스택 영역은 높은 주소에서 낮은 주소로 할당합니다. 그래야만 둘의 데이터가 쌓여도 새로 할당되는 주소의 충돌을 막을 수 있기 때문입니다.
멀티프로세스 (Multi-process)
멀티프로세스는 하나의 프로그램을 여러 프로세스로 나누어 병렬적으로 작업을 수행하는 방식입니다. 각 프로세스는 독립적인 메모리 공간을 가지므로 안전성이 높지만, 메모리 침범 문제는 운영체제(OS) 차원에서 해결됩니다.
- 장점: 각각 독립된 메모리 영역을 가지고 있어 안전성이 높음.
- 단점: 여러 프로세스가 독립적인 메모리를 가지므로, 작업량이 많을수록 오버헤드가 발생하여 성능 저하가 있을 수 있음.
스레드
: 실행 단위. 프로세스를 구성하는 실행의 흐름 단위
대부분의 프로세스 안에는 실행의 흐름 단위인 스레드가 여러개 존재합니다.
쉽게 말해서 스레드는 각 프로세스 내에서 각기 다른 스레드ID, PC값, 레지스터값, 스택 등으로 구성됩니다. 그렇기 때문에 스레드마다 각기 다른 코드를 실행할 수 있습니다.
프로세스의 스레드들은 실행에 필요한 최소한의 정보만을 유지하며 프로세스 자원 공유 및 실행을 진행합니다.
-> 여기서 자원 공유는 스레드의 핵심입니다.
스택 영역 안에 여러개의 스레드
->그리고 나머지 힙 영역, 데이터 영역, 코드영역들은 스레드끼리 서로 공유함.
멀티스레드 (Multi-thread)
멀티스레드는 하나의 응용 프로그램 내에서 여러 스레드를 생성하여 각 스레드가 병렬로 작업을 처리하는 방식입니다. 멀티프로세스와 달리 스레드는 자원을 공유하므로 메모리 자원을 효율적으로 사용할 수 있습니다.
- 장점:
- 스레드들은 공유 메모리를 사용하여 시간과 자원을 절약할 수 있음.
- 전역 변수와 정적 변수를 통해 자료 공유가 가능함.
- 단점:
- 스레드는 공유 메모리를 사용하기 때문에, 안전성 문제가 발생할 수 있음. 예를 들어, 하나의 스레드가 데이터 공간을 손상시키면 다른 스레드들이 모두 영향을 받아 작동 불능 상태에 빠질 수 있음.
- 해결책: 이런 문제를 해결하기 위해 크리티컬 섹션(Critical Section) 기법을 사용합니다. 이는 한 스레드가 공유 데이터를 수정할 때 다른 스레드가 그 값을 읽지 못하도록 동기화하는 방법입니다.
프로세스와 스레드의 차이
- 프로세스는 자신만의 고유한 공간과 자원을 할당받아 독립적으로 실행됩니다.
- 스레드는 프로세스 내에서 실행되며, 다른 스레드와 메모리와 자원을 공유하면서 실행됩니다.
요약
- 프로세스는 프로그램의 실행단위로, 고유 주소공간을 가지고 있으며 그 주소공간은 코드, 데이터, 힙, 스택 총 4개의 영역으로 나뉘어있고, 여러개의 프로세스를 실행하는 멀티 프로세스의 개념이 존재한다.
- 스레드는 프로세스안에 존재하는 실행 흐름으로써 프로세스 안에 여러개의 스레드가 병렬적으로 처리되는 멀티스레드 과정에서는 프로세스의 주소공간 중, 코드, 데이터, 힙 영역을 다른 스레드와 함께 공유한다.
https://band-sunset-f9e.notion.site/2-4cb539b53fc3403c9b000c29703ebd81?pvs=4
컴퓨터 밑바닥의 비밀 2장 | Notion
2.1 운영체제, 프로세스, 스레드의 근본 이해하기
band-sunset-f9e.notion.site
과거에 제가 열심히 정리해둔 책 요약본을 공유합니다.
내용이 많음 주의
내용 출처: 서적: 혼자 공부하는 컴퓨터 구조 + 운영체제
'개발 > CS' 카테고리의 다른 글
[컴퓨터개론] - CPU 스케줄러 (0) | 2024.10.21 |
---|---|
[컴퓨터개론] - PCB와 문맥교환(context switching) (2) | 2024.10.16 |
[컴퓨터개론] - 운영체제 개요와 커널 (1) | 2024.04.27 |
[컴퓨터개론] - 메모리의 주소 공간과 저장장치(캐시 메모리, 레지스터) (1) | 2024.04.26 |
[컴퓨터개론] - 클럭, 코어, 스레드 알아보기 (0) | 2024.04.26 |