질문란과 조금은 동떨어져있지만...memory-mapped io에 대해서

소맛라면의 이미지

memory-mapped io가 도대체 뭐에요??
www.kelp.or.kr에 가서 글을 읽어 봤는데..
아직 많이 부족해서 이렇게 질문을 드립니다.
음..될수 있으면 예를 들어서 좀 설명 부탁드립니다.

아니면 좋은 사이트라도 소개부탁드립니다.즐거운하루보내세요

hb_kim의 이미지

메모리 주소의 일부를 I/O 가 차지하고 있는겁니다.

많은 CPU 가 메모리 주소 영역과 별도로 IO 주소 영역을 가지고 있습니다. 예로 PC 의 프린터 포트 같은것은 IO 액세스 명령을 써서 건드려야죠. 임베디드 시스템에 많이 쓰는 ARM core 같은 경우는 I/O 주소 영역이 없어 memory mapped I/O 만 쓰고 있을 겁니다.(추측)

익명 사용자의 이미지

ARM core 같은 경우는 I/O 주소 영역이 없어 memory mapped I/O 만 쓰고 있을 겁니다

<- 아마 초보이실 때 작성하신 것 같은데 터무니 없는 말입니다.

cinsk의 이미지

I/O를 위해서 특정 instruction을 (예 inp/outp, inb/outb) 쓰지 않고, I/O device의 register가 CPU의 memory space에 그대로 mapping되어 있는 것을 말합니다. 예를 들어 A device의 3번 register에 쓰기 위해, 메모리 번지 N에, 일반적인 load/store instruction으로 읽고 쓸 수 있는 형태의 system을 memory mapped I/O를 쓰는 system이라 할 수 있습니다. (대부분이 다 memory mapped I/O를 씁니다.)

소맛라면의 이미지

쉽게 말하면 I/O를 입출력으로 설정한후 레지스터에 읽기/쓰기 명령을 해주면 별도의 장치나 명령어가 필요없이 I/O입출력이
가능하다는 말씀이군요...
단지 제한사항이 CPU가 접근할수 있는 메모리 크기내에서만 가능하다는 것...감사합니다..

무엇을 위해 사는가..

익명 사용자의 이미지

장 단점이 있습니다.

일단 문의 하신 memory-mapped io의 장점은 주소로 CPU의 레지스터에 접근이 가능합니다.
따라서 별도의 명령이 필요 없어짐으로 명령어 개수와 C에서 직접 컨트롤 가능한 장점이 있습니다.

단점은 메모리 주소 공간을 차지함으로서 실제 가용 메모리 용량을 떨어뜨린다는 것이죠.

익명 사용자의 이미지

지나가다 덧붙입니다.

컴퓨터에 외부장치가 붙어 있는 방식 그리고 그것을 접근하는 방식이 여러가지가 있어요.
x86에서는 '포트'라고 불리는 별도의 (그것은 메모리와는 별개의) 영역이 존재하고 이 영역을 접근하는 별도의 인스트럭션도 (inp/outp) 있었어요.
예를들어, COM1,COM2, LPT1, LPT2 이런 장치들이 붙어있는 포트가 정해져 있어요. 요즘 나오는 PC의 바이오스에도 이런 것을 설정하는게 아직 남아 있기도하고... 예전 ISA 방식으로된 모뎀 카드에는 점퍼가 있어서 어떤 포트에 모뎀을 매핑시킬 건지 정할 수 있기도 했습니다.
이렇게 장치가 매핑된 포트 주소에 inp/outp 인스트럭션으로 읽거나 쓰면, 장치로부터 읽거나 쓰거나하는 게 됩니다.
가령, COM1이 연결된 포트에는 RS232C 시리얼 포트 컨트롤러의 레지스터가 매핑되어 있고, 여기에 읽거나 쓰거나 함으로서, 시리얼 포트의 속도, 패리티, 흐름제어 등등 조절하기도 하고 시리얼 포트로 뭔가를 읽거나 쓰거나 할 수 있습니다.
마찬가지로 키보드도 그렇고 마우스도 그렇고 (단, 요즘의 USB 키보드/마우스는 다릅니다.)
이렇게 주변 장치들이 포트매핑된 것이 x86에서 그러하였고.............. (지금도 마찬가지입니다)

ARM같은 RISC머신에서는 포트라는 개념이 없고, 포트만을 읽거나 쓰는 인스트럭션도 없습니다. 오직 LDR/STR뿐.
주변장치들이 주소공간에 직접 매핑되어 있습니다.
가령, 어떤 주소에 UART 컨트롤러가 바로 매핑되어 있어요. 그 주소공간에 뭔가를 쓰거나 읽거나 하면 시리얼포트에 뭔가 쓰거나 읽거나 하게 됩니다. 요런 걸 memory-mapped i/o 라고 하죠.

혹시 님이 전공자시라면, 컴퓨터 아키텍처 교과서를 정독하시는게 좋겠네요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.