인프런 커뮤니티 질문&답변

민동열님의 프로필 이미지
민동열

작성한 질문수

Arm 아키텍처: 메모리 모델과 배리어 [저자직강 3부-3]

메모리 맵드 I/O에 대해서

작성

·

103

·

수정됨

0

안녕하세요 강의를 정말 잘 듣고 있습니다!!

메모리 맵드 I/O에 대해 궁금한게 있어서 질문을 남깁니다.

강의 내용 중 메모리 맵드 I/O 된 영역은 device memory라고 말씀을 하시면서 메모리 맵드 I/O가 된 경우 ldr str와 같은 명령어에 의해 그 영역에 값을쓰면 그와 연결된 포트를 통해 I/O장치 또는 레지스터에 값이 쓰여진다라고 말씀을 하셨는데요, 그러면 mcr mrc msr mrs와 같은 명령어를 통해 레지스터에 값을 써야 하는 것들은 메모리 맵드 I/O가 아닌건가요? 메모리 맵드 I/O된 것들은 전부 ldr str과 같은 명령어를 사용하여 값을 읽고 쓸 수 있는건가요???

 

추가로 궁금한것이, 제가 잘못 알고있는것일 수도 있지만, 임베디드 레시피라는 책에 보면 메모리 맵드 I/O 같은 경우 Register 크기 만큼씩 Access 가능하다고 나와있습니다. 그렇다면 memory mapped I/O된 영역에 레지스터 크기가 4바이트인데 strb 또는 strh와 같은 명령어를 통해 read를 하면 에러가 난다고 이해하면 될까요??? 만약에 strb strh와 같은 명령어를 통해 에러가 발생한다면 그때 발생하건 exception인가요 아니면 그냥 ignore 되는건가요???

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

메모리 맵드 I/O와 관련하여 질문 주신 내용에 답변드리겠습니다.

메모리 맵드 I/O에서는 특정 메모리 영역에 대한 접근을 통해 I/O 장치와 상호작용합니다. 여기서 ldr, str과 같은 명령어를 사용하여 메모리 영역에 접근하는 것이 일반적입니다. 이는 해당 영역이 메모리 주소 공간에 매핑되어 있기 때문입니다.

반면, mcr, mrc, msr, mrs와 같은 명령어는 시스템 제어 레지스터에 접근하기 위해 사용하는 것으로, 메모리 맵드 I/O와는 구별됩니다. 이 명령어들은 주로 프로세서의 상태를 제어하거나, 특정 시스템 레벨의 정보를 읽고 쓰는 데 사용되며, 메모리 맵드 I/O와 연관된 I/O 장치 또는 외부 레지스터와는 직접적인 관련이 없습니다.

메모리 맵드 I/O 영역에서 레지스터 크기와 관련하여, 일반적으로 메모리 맵드 I/O 영역은 특정 크기를 갖고 있으며, 이는 I/O 장치나 대상 레지스터가 처리할 수 있는 데이터의 단위를 의미합니다. strb, strh와 같은 명령어를 사용하여 이러한 영역에 접근할 때 발생하는 행동은 장치나 시스템의 구현에 따라 다를 수 있습니다. 일부 시스템에서는 더 작은 단위로의 접근을 허용하여 별도의 예외 없이 처리할 수 있지만, 다른 시스템에서는 지원되지 않는 접근 방식으로 인해 예외가 발생할 수 있습니다. 예외가 발생하는 경우, 해당 시스템의 예외 처리 메커니즘에 따라 다루어지게 됩니다. 그러나 구체적인 대응 방식은 해당 임베디드 시스템이나 프로세서의 아키텍처 문서를 참고하는 것이 가장 정확합니다.

질문에 완전히 답변되었는지 모르겠으나, 이상의 설명이 도움이 되기를 바랍니다. 추가적인 궁금증이 있으시다면, 언제든지 더 질문해주세요.

민동열님의 프로필 이미지
민동열

작성한 질문수

질문하기