프로세스란
- 운영체제 위에서 실행되고 있는 프로그램을 의미한다
단순히 저장된 프로그램 자체가 아니라,
실행되어 메모리와 cpu 자원 등을 활용하고 있는 동적인 실행 단위 이다
멀티 프로세스란?
- 하나의 프로그램이 여러개의 프로세스로 이루어져있으면 멀티 프로세스 프로그램이라고 부름
- 예) 크롬을 예로 들면 정확하진 않지만 탭하나당 하나의 프로세스이거나,
확장프로그램 하나당 하나의 프로세스이거나 하는 식이다
멀티 프로세스 구현 방식
- 단일 코어 cpu
- 단일 코어에서는 병렬적으로 프로세스가 돌아가게는 불가능
- 대신 운영체제가 동시성(Concurrency)을 활용하여
여러 프로세스가 교대로 실행되도록 스케줄링합니다.
- 다중 코어 cpu
- 다중 코어에서는 실제로 병렬적으로 동시에 프로세스가 동작하는것이 가능
- 코어가 프로세스를 하나씩 맡아서 처리 가능
프로세스의 중요 구성 요소
- 프로세스 ID(PID):
각 프로세스는 고유한 식별자인 PID를 가진다
이는 운영체제가 프로세스를 관리하고 추적하는 데 사용됨 - 프로세스 상태:
- 생성(New): 프로세스가 생성되는 단계
- 준비(Ready): 실행될 준비가 된 상태, CPU를 할당받기를 기다림
- 실행(Running): CPU를 할당받아 명령을 실행 중인 상태
- 대기(Waiting/Blocked): 특정 이벤트나 자원을 기다리는 상태
- 종료(Terminated): 실행이 완료되어 프로세스가 종료된 상태
- 프로세스 제어 블록(PCB):
- 운영체제가 프로세스를 관리하기 위해 사용하는 데이터 구조로,
프로세스의 상태, 레지스터 값, 메모리 관리 정보, 우선순위 등을 포함합니다. - 이 PCB 데이터는 메모리의 커널영역에 저장된다 ( 메모리(ram)은 크게 '사용자공간', '커널공간'으로 나뉘어서 사용된다)
- 운영체제가 프로세스를 관리하기 위해 사용하는 데이터 구조로,
- 주소 공간:
프로세스가 사용할 수 있는 메모리 공간으로,코드 영역
,데이터 영역
,힙 영역
,스택 영역
등으로 구성됩니다.
프로세스가 할당 받는 자원
- 코드 영역 :
- 실행할 프로그램의 코드가 저장되는 영역
- 프로그램 명령어가 기계어 형태로 저장됨
- 읽기 전용 영역으로, 프로그램 실행 중 변경되지 않음
- 데이터 영역 :
- 전역 변수, 정적(static) 변수가 저장되는 영역
- 프로그램이 시작될 때 할당되고, 프로그램이 종료될 때 해제됨
- 읽기와 쓰기가 모두 가능한 영역
- 힙 영역 :
- 동적으로 할당되는 메모리를 관리하는 영역
- 프로그래머가 직접 관리하는 영역 (malloc, free 등의 함수 사용)
- 메모리의 낮은 주소에서 높은 주소 방향으로 할당됨
- 런타임 시 크기가 결정되며, 필요에 따라 확장 또는 축소 가능
- 스텍 영역 :
- 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역
- 함수 호출 시 생성되고, 함수가 끝나면 소멸됨
- 후입선출(LIFO: Last In First Out) 방식으로 동작
- 메모리의 높은 주소에서 낮은 주소 방향으로 할당됨
- 재귀 호출이 너무 깊어지면 스택 오버플로우가 발생할 수 있음
"메모리의 낮은 주소에서 높은 주소 방향으로 할당됨" 의 의미
아래 그림 참조하면 힙은 밑에서 부터 올라오고 스택은 위에서 부터 내려와서 메모리를 효율적으로 사용할 수 있도록함
프로세스 간의 자원 공유
기본 적으로 프로세스는 다른 프로세스와 자원을 공유 할 수 없다.
하지만 멀티 프로세스 프로그램에서 서로 자원을 공유 해야할 때가 있는데
그떄는 아래와 같은 방법으로 통신을 할 수 있다
'Operating System' 카테고리의 다른 글
데드락(deadlock)이란 (0) | 2024.10.15 |
---|---|
스레드(Thread) (1) | 2024.10.15 |
[linux] curl 명령어 (0) | 2024.07.24 |
리눅스 및 패키지관리자 종류 (yum,rpm,apt,dpkg) (0) | 2023.03.29 |
win32, win64 차이 (0) | 2022.10.14 |