메모리 주소

Memory address
가상 메모리를 사용하는 컴퓨터에서는, 메모리 주소에 대응하는 장소에 액세스 하는 것은, 많은 레벨을 수반하는 일이 있습니다.

컴퓨팅에서 메모리 주소는 소프트웨어 및 하드웨어의해 다양한 수준에서 사용되는 특정 메모리 위치를 가리킵니다.메모리 주소는, 통상, 부호 없는 정수로서 표시 및 조작되고 있는 자리수의 고정 길이의 시퀀스입니다.이러한 수치적 의미는 CPU의 기능(명령 포인터 및 증분 주소 레지스터 등)과 다양한 프로그래밍 언어에 의해 보증된 배열처럼 메모리를 사용하는 것에 기초합니다.

종류들

물리 주소

디지털 컴퓨터의 메인 메모리는 많은 메모리 위치로 구성됩니다.각 메모리 위치에는 코드인 물리 주소가 있습니다.CPU(또는 다른 디바이스)는 코드를 사용하여 대응하는 메모리 위치에 액세스 할 수 있습니다.일반적으로 시스템 소프트웨어(BIOS, 운영체제 및 일부 특수 유틸리티 프로그램 등)만이 머신 코드 오퍼랜드 또는 프로세서 레지스터를 사용하여 물리 메모리를 수신처로 지정하며 메모리 컨트롤러라고 불리는 하드웨어 디바이스에 메모리 버스 또는 시스템 버스를 사용하도록 지시하거나 별도의 제어 주소를 지정하도록 CPU에 지시합니다. 데이터 버스를 사용하여 프로그램 명령을 실행합니다.메모리 컨트롤러의 버스는 여러 의 병렬 라인으로 구성되어 있으며, 각 라인은 이진수(비트)로 표시됩니다.버스의 폭, 즉 주소 지정 가능한 스토리지 유닛의 수 및 각 유닛의 비트 수는 컴퓨터마다 다릅니다.

논리 주소

컴퓨터 프로그램은 메모리 주소를 사용하여 머신 코드를 실행하고 데이터를 저장 및 검색한다.초기 컴퓨터에서는 논리 주소와 물리 주소가 대응하고 있었지만, 가상 메모리의 도입 이후, 대부분의 애플리케이션 프로그램은 물리 주소에 대한 지식이 없었습니다.컴퓨터의 메모리 관리 유닛과 operating system의 메모리 매핑을 사용해 논리 주소, 즉 가상 주소를 지정합니다.아래를 참조해 주세요.

주소 해결 단위

대부분의 최신 컴퓨터는 바이트 주소 지정이 가능합니다.각 주소는 1바이트(8비트)의 스토리지를 식별합니다.1바이트보다 큰 데이터는 연속되는 주소의 시퀀스에 격납할 수 있다.워드 주소 지정이 가능한 컴퓨터가 존재하며, 여기서 주소 지정 가능한 최소 저장 단위는 프로세서의 단어입니다.예를 들어 Data General Nova 미니컴퓨터Texas Instruments TMS9900National Semiconductor IMP-16 마이크로컴퓨터16비트 워드를 사용했으며, 바이트 어드레싱이 아닌 18비트 워드 어드레싱을 사용하는 36비트 메인프레임 컴퓨터(예: PDP-10)는 약 2메가 워드, 1메가 워드 공간을18 제공합니다.메모리의 어드레싱 효율은, 주소에 사용되는 버스의 비트 사이즈에 의해서 다릅니다.사용하는 비트가 많을수록, 컴퓨터가 사용할 수 있는 주소의 수가 늘어납니다.예를 들어 20비트 어드레스 버스(인텔 8086)를 갖춘8비트 어드레스 대응 머신은 2개의 메모리 위치(1,048,576) 또는 1개의 MiB 메모리를 어드레스20 할 수 있으며, 32비트 버스(인텔 80386)는 2개의 위치(4,294,967,296) 또는 4개의 공간 주소를 어드레스32 할 수 있습니다.반면, 18비트 주소 버스를 갖춘 36비트 워드 주소 지정 가능한 머신은 2개(262,144)의 36비트 로케이션(9,437,184비트)만을18 주소 지정하며, 이는 8비트바이트(1,179,648 또는 1152KiB 또는 1.125MiB)에 해당합니다.

일부 오래된 컴퓨터(십진수 컴퓨터)는 십진수 주소 지정이 가능했습니다.예를 들어 IBM 1620의 자기 코어 메모리에 있는 각 주소는 패리티 비트, 플래그 비트 및 4개의 숫자 비트로 구성된 단일 6비트 이진 코드 십진수를 식별했습니다.1620 에서는 5 자리수의 10 진수 주소를 사용했기 때문에, 이론적으로 가장 높은 주소는 99,999였습니다.실제로 CPU는 20,000개의 메모리 로케이션을 지원했습니다.또, 각각 20,000개의 주소를 서포트하는 옵션의 외장 메모리 유닛을 최대 2개까지 추가할 수 있어 합계 60,000개(00000~5999)가 됩니다.

워드 크기 대 주소 크기

워드 사이즈는 CPU가 한 번에 처리할 수 있는 비트 수를 나타내는 컴퓨터 아키텍처의 특성입니다.임베디드 시스템을 포함한 최신 프로세서는 보통 8, 16, 24, 32 또는 64비트의 워드 크기를 가집니다.현재의 범용 컴퓨터 대부분은 32비트 또는 64비트를 사용합니다.8, 9, 10, 12, 18, 24, 36, 39, 40, 48 및 60비트 등 다양한 크기가 사용되었습니다.

현대 컴퓨터의 단어 크기를 언급할 때 그 컴퓨터의 주소 공간 크기를 설명하는 경우가 많습니다.예를 들어, "32비트"라고 불리는 컴퓨터도 일반적으로 32비트 메모리 주소를 허용합니다. 바이트 주소 지정 가능한 32비트 컴퓨터는 2 = 4,294,967,296바이트의 메모리 또는 4기가바이트(GiB) 주소를 지정할32 수 있습니다.이를 통해 하나의 메모리 주소를 한 단어로 효율적으로 저장할 수 있습니다.

그러나 이것이 항상 해당되는 것은 아닙니다.컴퓨터는 워드 크기보다 크거나 작은 메모리 주소를 가질 수 있습니다.예를 들어, MOS Technology 6502와 같은 많은 8비트 프로세서는 16비트 주소를 지원했습니다. 지원하지 않았다면 메모리 주소 지정은 256바이트에 불과했을 것입니다.16비트 인텔 8088인텔 8086세그먼트화를 통해 20비트 어드레싱을 지원하여 64KiB가 아닌 1MiB의 메모리에 액세스할 수 있었습니다.Pentium Pro 이후의 모든 인텔 Pentium 프로세서에는 36비트의 물리 주소를 32비트의 가상 주소에 매핑하는 물리 주소 확장(PAE)이 포함되어 있습니다.많은 초기 프로세서는 36비트 프로세서와 같이 워드당 2개의 주소를 가지고 있었습니다.

이론적으로 최신 바이트 주소 지정이 가능한 64비트 컴퓨터는 2바이트(16EB)를64 처리할 수 있지만 실제로는 메모리 용량이 CPU, 메모리 컨트롤러 또는 프린트 기판의 설계(물리 메모리 커넥터 수 또는 납땜 메모리 양 등)에 의해 제한됩니다.

각 메모리 위치의 내용

기억된 프로그램 컴퓨터 내의 각 메모리 위치는 2진수 또는 어떤 종류의 10진수를 유지한다.데이터 타입의 데이터 또는 명령으로서의 해석과 사용은 그것을 검색하고 조작하는 명령에 의해 결정됩니다.

일부 초기 프로그래머들은 메모리를 절약하기 위한 방법으로 명령어와 데이터를 단어에 조합했습니다.Manchester Mark 1은 40비트 워드에 작은 데이터를 저장할 수 있는 공간이 있었습니다.프로세서는 워드 중간에 작은 부분을 무시했습니다.또한 이 공간은 종종 여분의 데이터 [citation needed]스토리지로 이용되었습니다.바이러스등의 자기 복제 프로그램은, 자신을 데이터로서 취급하거나 지시로서 취급하거나 합니다.자기 수정 코드일반적으로 권장되지 않습니다.이는 테스트와 유지보수가 불균형적으로 어려워지기 때문입니다.또한 컴파일러나 프로세서의 머신 상태에 대한 가정 때문에 잘못된 결과를 얻을 수도 있지만, 여전히 의도적으로 신중하게 사용되는 경우도 있습니다.

응용 프로그램 프로그래밍의 주소 공간

현대의 멀티태스킹 환경에서 응용 프로그램프로세스는 보통 주소 공간에 다음 유형의 메모리 청크를 가지고 있습니다.

주소 공간의 일부가 전혀 매핑되지 않을 수 있습니다.

시스템에 따라서는 머신 코드, 상수 및 데이터가 다른 위치에 있고 주소 크기가 다를 수 있는 "분할" 메모리 아키텍처가 있습니다.를 들어 PIC18 마이크로컨트롤러는 플래시 메모리 내의 머신 코드와 상수를 수신처로 하는 21비트 프로그램카운터와 SRAM 내의 데이터를 수신처로 하는 12비트 주소 레지스터를 갖추고 있습니다.

어드레싱 방식

컴퓨터 프로그램은 명시적으로 지정된 주소에 액세스할 수 있습니다.저수준 프로그래밍에서는 보통 절대 주소 또는 특정 주소라고 불리며 상위 수준 언어에서는 포인터 데이터 유형이라고 합니다.그러나 프로그램은 다른 곳(기본 주소)과 관련된 위치를 지정하는 상대 주소를 사용할 수도 있습니다.그 밖에도 간접 주소 지정 모드가 많이 있습니다.

논리 주소를 물리 메모리 및 가상 메모리에 매핑하면 몇 가지 수준의 간접도 추가됩니다.아래를 참조해 주세요.

메모리 모델

많은 프로그래머는 물리 메모리 및 가상 메모리(상기 참조)와의 구별이 없는 메모리 주소 지정을 선호합니다.즉, 수치적으로 동일한 포인터는 정확히 같은 바이트의 RAM을 가리킵니다.

그러나 많은 초기 컴퓨터는 이러한 플랫 메모리 모델을 지원하지 않았습니다.특히 하버드 아키텍처 머신은 프로그램 스토리지를 데이터 스토리지와 완전히 분리하도록 강요했습니다.최신 DSP(Motorola 56000 등)에는 프로그램 스토리지, 계수 스토리지 및 데이터 스토리지의 3가지 스토리지 영역이 있습니다.일반적으로 사용되는 일부 명령어는 3개의 영역 모두에서 동시에 가져옵니다.스토리지 영역이 적어지면(스토리지의 총 바이트 수가 같아도), 이러한 명령어의 실행 속도가 느려집니다.

x86 아키텍처 메모리 모델

초기 x86 컴퓨터는 메모리 세그먼트와 해당 세그먼트 내의 오프셋이라는 두 숫자의 조합을 기반으로 세그먼트 메모리 모델 주소를 사용합니다.

일부 세그먼트는 명령, 스택 세그먼트 또는 일반 데이터 세그먼트로 암묵적으로 처리됩니다.용도는 다르지만 세그먼트에는 이를 반영하는 메모리 보호 기능이 다르지 않습니다.플랫 메모리 모델에서는 일반적으로 모든 세그먼트(세그먼트 레지스터)가 0으로 설정되며 오프셋만 가변적입니다.

「 」를 참조해 주세요.

레퍼런스