임베디드
Basic #1
Jooyoung Lee
2024. 8. 26. 14:37
순서 상관없이 마음대로 정리하는 게시글 입니다.
Program
- 프로그램의 실행은 파일 시스템에 존재하던 실행 파일이 메모리에 적재 된다는 뜻
- 파일 시스템에 있는 실행 파일이 메모리에 적재될 때 실행 파일 전체가 메모리에 적재되지 않으며 일부분만 메모리에 올라가고 나머지는 디스크의 특정 영역인 스왑 영역에 존재한다.
- 프로그램이 CPU를 할당받고 명령을 수행하고 있는 상태
Process Address Space
- code
-. 시스템 콜, 인터럽트 처리 코드
-. CPU, 메모리 등 자원 관리를 위한 코드
-. 편리한 인터페이스 제공을 위한 코드 - data
-. PCB(Process Controll Block) : 현재 수행 중인 프로세스의 상태, CPU 사용 정보 등을 유지하기 위한 자료구조
-. CPU, Memory 등 하드웨어 자원을 관리하기 위한 자료구조가 저장 - stack
-. 각 Process의 커널 스택을 저장
-. 프로세스는 함수 호출시 자신의 복귀 주소를 저장하지만, 커널은 커널 내의 주소가 된다.
-. 각각의 프로세스마다 별도의 스택을 두어 관리한다.
커널은 힙메모리를 사용하지 않는다. 커널은 리눅스에서 동적메모리 할당을 위해 필요한 기능들을 커널이 제공하는데, 운영체제는 커널에서 제공하는 기능을 사용해서 메모리 풀(memory pool)을 관리한다.
- Process address space는 프로세스가 코드에서 참조하는 논리적 주소 집합.
→ 허용되는 32비트 주소의 경우 주소 범위는 0에서 0x7FFFFFFF. (2^31개의 가능한 숫자) - 프로세스에는 프로세스 주소 공간 ( 가상 주소 공간) 이라는 논리 메모리 영역이 있으며 물리 주소 영역에 맵핑
- 일반적으로 0에서 최대 주소까지 연속적인 메모리
- 물리적 메모리는 연속적이지 않을 수 있다.
- 프로세스가 동적 메모리를 요청할 때 (예시 : malloc()을 통해), 추가적인 물리적 메모리를 할당받는 것이 아니라, 새로운 범위의 가상 주소 공간을 사용할 권리를 부여받습니다.
주소 유형 | 설명 |
Physical address | 컴파일 후 프로그램이 주 메모리에 로드되면 로더는 물리 주소에 대한 맵핑을 생성 |
Relative address | 컴파일 할 때 컴파일러는 심볼 주소를 상대 주소로 변환 |
Symbolic address | 소스 코드에서 참조되는 주소가 대부분이며, 구성 요소는 변수 명, 상수 및 명령어 레이블 |
Processor : 컴퓨터 시스템 안에 있는 CPU
- 프로세서와 메모리는 컴퓨터 시스템에 있어 중요한 부분
- 프로세서는 컴퓨터의 여러 연산을 담당하는 핵심 부분
- 메모리는 프로세서가 효율적으로 동작을 할 수 있게 도와주는 조력자 역할
- 프로세서는 저장장치에 직접적으로 접근할 수 없고 메모리를 거쳐야 함
Stack / Heap Memory
프로그램이 실행 중일 때 메모리를 차지한다.
때로는 할당되는 메모리를 알지 못할 수도 있으며, 새 변수를 만들 때마다 프로그램은 해당 변수를 저장하기 위해 더 많은 메모리를 할당한다.
Memory Layout
실행 중인 각 프로그램은 다른 프로그램과 분리된 자체 메모리 레이아웃을 가지고 있으며, 레이아웃은 다음을 포함한 많은 세그먼트로 구성된다.
- Stack : 지역 변수 저장
- Heap : 프로그래머가 할당할 수 있는 동적 메모리
- Data : 초기화된 변수와 초기화되지 않은 변수로 구분된 전역 변수를 저장
- Text : 실행되는 코드를 저장
프로그램 메모리의 각 메모리 위치를 정확히 파악하기 위해 메모리의 각 바이트에 주소를 할당하며, 주소는 0에서 가능한 가장 큰 주소까지 이어진다.

주소를 16진법 숫자로 표현한다.
예를 들어, 가능한 가장 작은 주소는 0x00000000(0x는 16진법을 의미함)이고 가능한 장 큰 주소는 0xFFFFFFFF이다.
스택 (Stack)
- 스택 세그먼트는 메모리의 높은 주소에 있다.
- 함수가 호출될 때마다 해당 함수에 스택 메모리를 할당한다.
- 새로운 지역 변수가 선언되면 해당 함수에 변수를 저장하기 위해 더 많은 스택 메모리가 할당된다.
- 할당이 된다면 스택은 아래로 증가한다.
- 함수가 반환되면 함수의 스택 메모리 할당이 해제되고, 모든 로컬 변수가 무효화됨을 의미한다.
- 스택 메모리의 할당 및 할당 해제는 자동으로 수행된다.