프로세스의 메모리 구조
1) Code 영역
- 실행할 프로그램의 코드가 저장. CPU는 이 영역에서 명령어를 하나씩 가져와 처리
2) Data 영역
- 전역변수와 정적변수가 저장
- 이 변수들은 프로그램이 시작될 때 할당되어 프로그램 종료 시 소멸
- BSS(Block Stated Symbol) 영역
- BSS 영역에는 초기화 되지 않은 전역변수가 저장.
- 초기화 된 전역변수는 Data 영역에 저장되어 비휘발성 메모리인 ROM에 저장되는데, 이 부분은 비용이 많이 들어 RAM에 저장될 것과 ROM에 저장될 것을 구분하기 위해 영역을 구분해 사용
3) Stack 영역
- 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터(지역변수, 매개변수, 리턴값 등)를 임시로 저장하는 공간
- 이 영역은 함수 호출시 기록하고 함수의 수행이 완료되면 사라진다. 메커니즘은 자료구조(stack)에서 배운 LIFO(Last In First Out) 방법으로 저장/출력
- 컴파일 시 stack 영역의 크기가 결정되기 때문에 무한정 할당 할 수 없음
- 따라서 재귀함수가 반복해서 호출되거나 함수가 지역변수를 메모리를 초과할 정도로 너무 많이 가지고 있다면 stack overflow가 발생
위 세 영역은 컴파일 할 때 data, stack 영역의 크기를 계산해 메모리 영역을 결정
4) Heap 영역
- 동적 데이터 영역
- 메모리 주소 값에 의해서만 참조되고 사용되는 영역. 따라서, 프로그램 동작 시(런타임)에 크기가 결정.
- 예를 들어, stack에서 pointer 변수를 할당하면 pointer가 가리키는 heap 영역의 임의의 공간부터 원하는 크기만큼 할당해 사용.
- heap 영역은 런타임에 결정. 자바에서는 객체가 heap영역에 생성되고 가비지 컬렉터에 의해 정리.
커널 프로세스의 메모리
커널(kernel)
- 커널은 대부분의 운영 체제(OS)의 주요 구성 요소이며 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스. 그리고 두가지 관리 리소스에서 최대한 효과적으로 통신합니다.
- '커널 == 운영체제'가 아니라, 커널은 운영체제의 주요 구성 요소
- 커널은 메모리 관리, 프로세스 관리, 하드웨어와 프로세스 사이에서 명령을 즉시 실행할 수 있는(인터프리터) 역할을 수행하거나 시스템의 호출이나 보안등의 기능을 수행.
- 즉, 대부분의 OS에서 커널은 하나의 프로세스가 아니라 컴퓨터 하드웨어와 프로세스를 잇는 인터페이스
- OS에서 응용 프로그램 조회해서 강제 종료 할 수 있는 기능도 커널 프로세스의 역할
Code 영역
- 시스템 콜, 중단(인터럽트) 처리 코드
- CPU, 메모리 등 자원 관리를 위한 코드
- 편리한 인터페이스 제공을 위한 코드
Data 영역
- CPU, Memory 등 하드웨어 자원을 관리하기 위한 자료구조가 저장
- PCB(Process Controll Block) 자료구조가 저장
- 현재 수행 중인 프로세스의 상태, CPU 사용 정보 등을 유지하기 위한 자료구조
- 프로세스 제어 블록이란, 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료구조.
- PCB는 각 프로세스에 대한 다양한 정보를 담고 있는 데이터로써 사람으로 따지면 주민등록증과 유사.
- 각 프로세스의 PCB는 OS내부의 Process Management 부서에서 관리되며, PC, Register, MMU 정보, Process의 상태, CPU Time, PID(Process ID)등 많은 정보들이 포함. 구조체와 같이 구성.
- 즉 간단히 말해서 운영체제가 프로세스에 대한 정보를 담고있는 구조체.
- PCB는 중요한 정보들이 담겨있기 때문에 운영체제->커널 내부에 보관.
PCB는 해당 프로세스의 실행 정보와 상태 정보를 저장하는 자료구조로 커널 프로세스에 존재
Stack 영역
- 각 Process의 커널 스택을 저장
- 프로세스는 함수 호출시 자신의 복귀 주소를 저장하지만, 커널은 커널 내의 주소로 됨
- 각각의 프로세스마다 별도의 스택을 두어 관리.
- 커널은 힙메모리를 사용하지 않음
- 커널은 운영체제(리눅스)에서 동적메모리 할당을 위해 필요한 기능들을 커널이 제공하는데, 운영체제는 커널에서 제공하는 기능을 사용해서 메모리 풀(memory pool)을 관리
'메모 > ETC' 카테고리의 다른 글
CS - 프로세스와 쓰레드 (0) | 2023.11.21 |
---|---|
CS - 프로세스의 생명주기-스케줄링,주-보조 교환,Context Switching (0) | 2023.11.08 |
CS - 프로세스의 생명주기-프로세스 상태,대기 큐 (0) | 2023.10.31 |
CS - 페이지 교체 알고리즘 (0) | 2023.10.27 |
CS - 메모리 (1) | 2023.10.23 |