리눅스는 다중 사용자, 다중 작업 운영체제로 여러 개의  프로세스가 동시에 실행 될 수 있습니다. 각 프로세스는 독립적인 메모리 공간을 할당받아 실행되며, 이를 통해 프로세스간에 서로 독립적으로 메모리를 사용할 수 있습니다. 

 

리눅스는에서는 프로세스 메모리 구조는 크게 5가지 영역으로 나뉩니다. 

 

코드(code) 세그먼트

코드 세그먼트는 실행 가능한 기계 코드가 위치하는 메모리 영역입니다. 이 세그먼트는 일반적으로 텍스트 세그먼트로드 불립니다. 이 세그먼트는 프로그램의 명령어들이 저장되어 있으며, 읽기 전용으로 메모리에 로딩됩니다. CPU는 코드 세그먼트의 명령어들을 가져와 실행하게 됩니다. 

 

데이터(Data) 세그먼트

데이터 세그먼트는 전역 변수와 정적변수가 위치하는 영역입니다. 이 세그먼트에는 초기화된 데이터가 저장되어 있어, 프로세스가 실행될 떄 메모리에 로딩됩니다. 데이터 세그먼트는 읽기 및 쓰기가 가능하며, 프로세스 내에서 전역 변수와 정적 변수에 접근할 수 있습니다. 

 

BSS 세그먼트

BSS 세그먼트는 초기화되지 않은 전역 변수와 정적 변수를 저장하는데 사용됩니다. 초기화되지 않은 변수는 프로그램에서 명시적을 ㅗ값을 할당하지 않았을때, 컴파일러가 자동으로 0으로 초기화해주는데, 이러한 변수들이 BSS 세그먼트에 할당됩니다. 따라서 BSS 세그먼트는 0으로 초기화된 데이터를 저장하는 메모리영역이라고 할 수 있습니다.

 

스택(stack) 세그먼트

스택 세그먼트는 함수의 호출과 관련된 정보를 저장하는 메모리 영역입니다. 스택은 지역 변수, 함수의 매개변수, 함수의 반환 주소 등을 저장하며, 함수 호출될 때마다 스택이 새로운 프레임을 생성하여 사용합니다. 스택은 후입선출 구조로 동작하며, 스택 포인터라는 레지스터를 통해 현재 스택의 상태를 관라 합니다. 

 

힙(Heap) 세그먼트

힙 세그먼트는 동적으로 할당된 메모리가 위치하는 영역입니다. 프로세스가 실행 중에 동적으로 할당된 메모리를 할당하고 해제하는데 사용됩니다. 힙은 사용자가 직접 메모리를 할당하고 해제해야하며, 메모리 누수와 같은 문제를 주의하여 관리해야 합니다. 

 

'보안공부' 카테고리의 다른 글

어셈블리어 살짝 맛보기  (0) 2023.04.14
Shodan이란??  (0) 2023.04.10
리눅스는 어디에 사용될까?  (0) 2023.04.05
LINUX란 무엇일까??  (0) 2023.04.02
컴퓨터 구조와 작동원리  (0) 2023.03.28

+ Recent posts