맨위로가기

메모리 맵

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

메모리 맵은 프로세서가 메모리를 사용하는 방식을 나타낸다. C/C++ 언어와 마이크로프로세서에서 변수와 코드를 메모리에 배치하는 방식, 메모리 맵 입출력과 입출력 맵 입출력 방식, PC BIOS가 메모리 레이아웃을 가져오는 데 사용하는 루틴 등을 설명한다.

2. 프로세서의 메모리 배치

C/C++ 언어 등의 변수가 선언되면 각각의 데이터 처리 변수 방식에 따라 특정 묶음으로 분리된다. 프로그래밍으로 작성된 코드는 기계어 코드의 묶음으로 분리된다. 프로그램 실행에 필요한 요소들의 묶음은 메모리에 나누어 배치된다.

각각의 기능적 묶음은 실행파일에서 구별하여 저장되며, 사용자에 의해 실행되면 메모리에 묶음을 나누어 배치하고 기계어 코드 영역을 실행한다.

2. 1. C/C++ 언어의 메모리 배치

C언어에 의한 메모리 맵 예시 (일반화 및 단순화)


C/C++ 언어 등에서 변수를 선언하면, 각 변수는 데이터 처리 방식에 따라 특정 묶음으로 분리된다. 프로그래밍으로 작성된 코드는 기계어 코드 묶음으로 분리된다. 프로그램 실행에 필요한 요소들은 메모리에 나누어 배치된다.

각 기능별 묶음은 실행 파일에서 구별되어 저장된다. 사용자가 프로그램을 실행하면, 이 묶음들이 메모리에 배치되고 기계어 코드 영역이 실행된다.

2. 2. 마이크로프로세서의 메모리 배치

마이크로프로세서에서 입출력(I/O) 장치를 메모리 공간에 배치하는 방식은 메모리 맵 입출력과 입출력 맵 입출력 두 가지로 나뉜다.[1]

마이크로프로세서의 입출력 메모리 배치 방식
방식설명
메모리 맵 입출력입출력 장치를 일반 메모리처럼 취급하여, 메모리의 일부로 할당한다.
입출력 맵 입출력입출력 장치를 메모리 공간과 분리된 별도의 주소 공간에 할당한다.


2. 2. 1. 메모리 맵 입출력 (Memory-mapped I/O)

입출력의 메모리 배치 방식에는 다음과 같은 것들이 있다.

  • 메모리 맵 입출력: 입출력을 하나의 메모리의 일부로 보아 구별하지 않는다. 따라서 주소 디코딩할 때 입출력을 메모리의 일부로 설계한다.
  • 입출력 맵 입출력: 입출력을 메모리 주소 공간에서 분리하여, 입출력 주소 공간을 따로 갖는다.

2. 2. 2. 입출력 맵 입출력 (Port-mapped I/O)

입출력 맵 입출력은 입출력을 메모리 주소 공간에서 분리하여, 입출력 주소 공간을 따로 갖는 방식이다.

분류:컴퓨터 구조

3. PC BIOS 메모리 맵

IBM PC 및 IBM PC 호환 기종용 BIOS는 운영 체제 또는 응용 프로그램에서 메모리 레이아웃을 가져오는 데 사용할 수 있는 루틴 세트를 제공한다.

'''BIOS 기능: INT 0x15, AX=0xE801:'''[1]

이 BIOS 인터럽트 호출은 64MB 이상의 메모리 구성을 가진 시스템에서 메모리 크기를 가져오는 데 사용된다. 1994년 8월 23일 이후의 AMI BIOS에서 지원된다. 호출 시 AX 레지스터를 0xE801로 설정하고 INT 0x15를 실행한다. 오류가 발생하면 CF(Carry Flag)가 1로 설정되고, 오류가 없으면 CF가 0으로 설정되며 레지스터 값은 다음과 같다.

레지스터값 설명
EAX1MB에서 16MB 사이의 확장 메모리 크기 (KB 단위). 최대값은 0x3C00 (15360KB)이다.
EBX16MB 이상의 메모리 크기 (64KB 블록 단위).
ECX1MB에서 16MB 사이의 구성된 메모리 크기 (KB 단위).
EDX16MB 이상의 구성된 메모리 크기 (64KB 블록 단위).



'''BIOS 기능: INT 0x15, AX=0xE820 - 시스템 메모리 맵 가져오기:'''[2]

이 기능은 시스템의 전체 메모리 맵을 가져오는데 사용된다. 운영체제는 이 기능을 통해 메모리 맵의 각 영역에 대한 정보를 얻을 수 있다.

3. 0. 1. 입력

레지스터값 설명
EAX0x0000E820
EBX연속 값 또는 맵 시작을 위한 0x0.
ECX결과 버퍼 크기(20바이트).
EDX0x534D4150 (SMAP의 ASCII)
ES:DI결과 버퍼의 세그먼트:오프셋 위치.



운영 체제는 메모리에 SMAP 버퍼(20바이트 버퍼)를 할당해야 한다.[2] 그런 다음 위에 있는 "입력" 표에 지정된 대로 레지스터를 설정한다. 첫 번째 호출 시 EBX를 0으로 설정해야 한다. 다음 단계는 INT 0x15를 호출하는 것이다. 오류가 없으면 인터럽트 호출은 CF를 지우고 메모리 맵의 첫 번째 영역을 나타내는 데이터로 버퍼를 채워 반환한다. EBX는 BIOS에 의해 업데이트되므로, 운영 체제가 루틴을 다시 호출하면 다음 영역이 버퍼에 반환된다. BIOS는 완료되면 EBX를 0으로 설정한다.

3. 0. 2. SMAP 버퍼 구조

오프셋크기값 설명
0QWORD (8바이트)EBX가 참조하는 메모리 맵 영역의 기본 주소.
8QWORD (8바이트)바이트 단위의 길이.
16DWORD (4바이트)주소 범위 유형.



사용 방법: 운영 체제는 메모리에 SMAP 버퍼(20바이트)를 할당해야 한다. 그런 다음 "입력" 표에 지정된 대로 레지스터를 설정한다. 첫 번째 호출 시 EBX를 0으로 설정해야 한다. 다음 단계는 INT 0x15를 호출하는 것이다. 오류가 없으면 인터럽트 호출은 CF(Carry Flag)를 지우고 메모리 맵의 첫 번째 영역을 나타내는 데이터로 버퍼를 채워 반환한다. EBX는 BIOS에 의해 업데이트되므로, 운영 체제가 루틴을 다시 호출하면 다음 영역이 버퍼에 반환된다. BIOS는 완료되면 EBX를 0으로 설정한다.[2]

3. 0. 3. 사용 방법

BIOS는 운영 체제나 응용 프로그램이 메모리 레이아웃을 파악하는 데 사용할 수 있는 여러 루틴을 제공한다.

'''BIOS 기능: INT 0x15, AX=0xE801'''[1]

이 BIOS 인터럽트 호출은 64MB 이상의 메모리 구성을 가진 시스템에서 메모리 크기를 가져오는 데 사용된다. 1994년 8월 23일 이후의 AMI BIOS에서 지원된다. 호출 시 AX 레지스터를 0xE801로 설정하고 INT 0x15를 실행한다. 오류가 발생하면 CF(Carry Flag)가 1로 설정되고, 오류가 없으면 CF가 0으로 설정되며 레지스터 값은 다음과 같다.

레지스터값 설명
EAX1MB에서 16MB 사이의 확장 메모리 크기 (KB 단위). 최대값은 0x3C00 (15360KB)이다.
EBX16MB 이상의 메모리 크기 (64KB 블록 단위).
ECX1MB에서 16MB 사이의 구성된 메모리 크기 (KB 단위).
EDX16MB 이상의 구성된 메모리 크기 (64KB 블록 단위).



'''BIOS 기능: INT 0x15, AX=0xE820 - 시스템 메모리 맵 가져오기'''[2]

이 기능을 사용하려면 운영 체제는 먼저 메모리에 20바이트 크기의 SMAP 버퍼를 할당해야 한다. 그런 다음 아래 표에 따라 레지스터를 설정한다. 처음 호출할 때는 EBX 레지스터를 0으로 설정해야 한다.

레지스터값 설명
EAX0x0000E820
EBX0 (처음 호출 시) 또는 이전 호출에서 반환된 연속 값.
ECX20 (결과 버퍼 크기, 바이트 단위).
EDX0x534D4150 (SMAP의 ASCII 값)
ES:DI결과 버퍼의 메모리 주소 (세그먼트:오프셋).



INT 0x15를 호출하면, BIOS는 오류가 없는 경우 CF를 0으로 설정하고, SMAP 버퍼를 메모리 맵의 첫 번째 영역 정보로 채운다. EBX 레지스터는 BIOS에 의해 업데이트되므로, 운영 체제는 이 값을 사용하여 다음 영역 정보를 요청할 수 있다. BIOS는 모든 메모리 영역 정보를 반환한 후 EBX를 0으로 설정하여 완료를 알린다.

오프셋크기값 설명
0QWORD (8바이트)메모리 영역의 시작 주소.
8QWORD (8바이트)메모리 영역의 크기 (바이트 단위).
16DWORD (4바이트)메모리 영역의 유형.


참조

[1] 웹사이트 INT 15 - Phoenix BIOS v4.0 - GET MEMORY SIZE FOR >64M CONFIGURATIONS http://www.delorie.c[...]
[2] 웹사이트 INT 15 - newer BIOSes - GET SYSTEM MEMORY MAP http://www.delorie.c[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com