{{위키데이터 속성 추적}}
{{출처 필요|날짜=2012-12-11}}
[[마이크로프로세서]]에서 '''액세스'''<ref>[http://krdic.naver.com/detail.nhn?docid=25563200 액세스]</ref>(access)는 저장장치의 데이터를 읽거나 쓰는 것을 말한다.<ref>{{웹 인용|url=http://keeleong.tripod.com/tutorial/dct4.pdf|제목=Microprocessor and Random Access Memory}}</ref> 저장장치 중에 메모리가 가장 일반적인 적용 사례이다. 메모리의 기계어 코드를 실행하기 위해 읽거나 또는 메모리의 데이터를 읽거나 쓰는 것을 말한다.

다음과 같은 액세스의 사용을 볼 수 있다:
* RAM([[랜덤 액세스 메모리]], Random '''Access''' Memory) - 메모리의 한 종류로 전원에 휘발성의 특징을 갖는다.
* DMA(Direct Memory '''Access''') - 마이크로프로세서 개입없이 데이터를 메모리나 입출력 장치에 하드웨어적인 방법으로 전송하는 것을 말한다.

메모리에 읽거나 쓰는 과정은 마이크로프로세서의 주도하에 이루어진다. 따라서 읽거나 쓴다는 말은 마이크로프로세서 기준으로 읽거나 쓴다는 말이다. 읽는다는 것은 메모리의 데이터를 마이크로프로세서 쪽으로 데이터를 가져오는 것이고, 쓰기는 마이크로프로세서에서 메모리로 전송하는 것을 말한다.

메모리는 데이터의 위치를 지정하는 [[주소 버스]](address bus)가 있고, 데이터가 전송되는 통로로 [[데이터 버스]](data bus)가 존재한다. 마이크로프로세서에서 읽을 때, 읽을 주소를 메모리에 전송하면, 메모리는 지정된 주소의 데이터를 데이터 버스에 실어 마이크로프로세서가 읽도록 한다. 데이터를 쓸때는 위치 정보인 주소와 데이터를 주고, 제어신호에 의해 해당 주소에 데이터를 쓴다.<ref name="Z80 사용 설명서">{{웹 인용|url=http://www.zilog.com/docs/z80/UM0080.pdf|제목=Z80 사용 설명서|확인날짜=2020년 7월 9일}}</ref><ref>{{서적 인용
|url=https://books.google.co.kr/books?id=S5WuTT1s31MC&pg=PA33&lpg=PA33&dq=microprocessor+access&source=bl&ots=AO56yGreV4&sig=ACfU3U1dVk-S1-udw53wuSNfkri1Z0xfRw&hl=ko&sa=X&ved=2ahUKEwi-1veKrb_qAhWJBIgKHdq_C4gQ6AEwAnoECAYQAQ#v=onepage&q=microprocessor%20access&f=false
|title=Microprocessor and Interfaces
|work=Microcomputer Systems:8085
|last=A.P.Godse
|first=D.A.Godse
|publisher=Technical Publications Pune
|year=2009
|isbn=978-81-8431-609-4
|accessdate=2020-7-9
|archive-date=2020-07-09
|archive-url=https://web.archive.org/web/20200709045053/https://books.google.co.kr/books?id=S5WuTT1s31MC&pg=PA33&lpg=PA33&dq=microprocessor+access&source=bl&ots=AO56yGreV4&sig=ACfU3U1dVk-S1-udw53wuSNfkri1Z0xfRw&hl=ko&sa=X&ved=2ahUKEwi-1veKrb_qAhWJBIgKHdq_C4gQ6AEwAnoECAYQAQ#v=onepage&q=microprocessor%20access&f=false
}}</ref>

마이크로프로세서는 메모리에 주소와 제어 신호를 보내면 메모리는 이를 바탕으로 주소를 사용하여 위치를 결정하고 데이터를 읽거나 쓴다. 데이터를 읽거나 쓸 때, 마이크로프로세서마다 액세스 단위가 결정되어 있다. 8비트 마이크로프로세서는 8비트 단위로, 32비트 마이크로프로세서는 8,16,32비트 단위로 선택적으로 액세스한다.<ref name="x86 InstructionSet">{{웹 인용|url=http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf|제목=Intel 64 & IA-32 명령어 집합|확인날짜=2015년 6월 25일}}</ref>

== 메모리 접근 방식 ==

기계어 코드에서 메모리를 접근하는 방식([[:en:Addressing_modes|Addressing mode]])은 여러가지가 있다. 각각의 방식에 따라 기계어로 나누어 설계되어 있다.

그 중에 몇가지를 보면 다음과 같다:
* Immediate  : 목적 데이터가 기계어 코드에 존재한다.
* 직접주소(direct access mode) : 목적 데이터의 주소가 기계어 코드에 존재한다.
* 레지스터 : 일반 레지스터의 값이 액세스 해야 할 주소값으로 하여, 그 주소를 액세스 한다.
* 인덱스 레지스터 : 인덱스 레지스터의 값이 액세스 해야 할 주소값으로 하여, 그 주소를 액세스 한다.

RISC는 주소접근 방식도 단순화되어 있다.

== 입출력의 [[메모리 맵]] 방식 ==

* [[메모리 맵 입출력]](Memory-mapped I/O, MMIO) : 메모리와 입출력 장치를 구분하여 메모리 체계를 만든다.
* [[입출력 맵 입출력]](I/O mapped I/O) : 메모리 주소공간과 I/O 주소공간을 분리하는 메모리 체계이다.<ref name="Z80 사용 설명서"/><ref name="x86 InstructionSet"/>

보통 입출력 장치가 메모리(RAM, ROM, FLASH) 보다 액세스 속도가 떨어진다. 따라서 입출력과 메모리의 [[주소 공간]]을 분리하여 효율성을 기한다. 그러나 분리를 하면 기계어 명령어를 분리해야 한다.

주로 인텔의 마이크로프로세서는 입출력 맵 입출력 방식을 사용하고, 프리스케일(과거 모토롤라) 마이크로프로세서는 메모리 맵 입출력을 사용하였다.

8085, Z80 마이크로프로세서에서의 메모리 맵:
{| class="wikitable"
! [[주소 공간]] !! 공간지정크기 !! 명령어 예
|-
| 메모리 || 16비트 (64K) || MOV(8085), LD(Z80)
|-
| 입출력 || 8비트 (256) ||IN, OUT (8085, Z80)
|}

[[RISC]]는 단순화 개념에 따라, 주로 메모리 맵 입출력을 사용한다.

== 직접 메모리 접근 ==
데이터를 처리할 때, 마이크로프로세서가 개입해서 읽거나 쓰는 현상이 일반적이다. 그러나 많은 량의 데이터를 옮기거나 아니면 고속으로 옮기려면 [[직접 메모리 접근]](DMA) 방식이 이것은 마이크로프로세서의 기계어 코드 실행없이 보조 하드웨어에 의해 직접 옮긴다.

메모리의 경우 마이크로프로세서와 버스를 공유하는 경우가 일반적이므로 경우에 따라 직접 메모리 접근 하드웨어가 작동할 때, 마이크로프로세서는 잠시 멈춘 상태로 유지 한다. 따라서 마이크로프로세서와 DMA간에 버스 소유권을 처리하는 방식이 필요하다. 임베디드에서는 CPU 코어와 입출력의 버스를 분리하는 경우가 일반적이다. 따라서 버스를 CPU와 분리하면 직접 전송 중에도 CPU가 멈추는 상황은 없을 수 있다.

메모리와 메모리, 입출력 장치와 메모리, 입출력과 입출력 간의 전송이 가능하다. 임베디드의 시스템에서 LCD 표시장치는 보통 그림용 저장메모리로부터 LCD표시 메모리로 직접 메모리 접근 방식으로 전송 한다.

== 같이 보기 ==
* [[마이크로프로세서]]
* [[주소 버스]]
* [[데이터 버스]]
* [[직접 메모리 접근]](DMA)

== 각주 ==
<references/>

== 외부 링크 ==
* [http://blog.naver.com/dolicom/10069548120 마이크로프로세서의 데이터 전송 (Z80, 액세스)]

[[분류:마이크로프로세서]]
[[분류:마이크로컴퓨터]]
[[분류:전자공학]]