最終更新:2016-09-17 (土) 02:31:39 (2770d)  

I/Oポート
Top / I / Oポート

CPUの入出力端子

概要

  • 1本の端子に0か1(具体的には0Vか5Vなどの電圧)を選択して出力することができる回路、および1本の端子の電圧に応じて0か1を判別しその状態を読み取ることができる回路のことをI/Oポートと呼ぶ。
  • 多くの場合入力と出力の両方が行える回路構成になっており、レジスタの設定により入力か出力を切り替えて使うことができる。
  • 8本単位で構成される場面が多く、パラレルI/Oとも呼ばれる。

I/Oレジスタ?

  • 値を書き込むと、内蔵されたさまざまな装置に何らかの動作を行わせたり、内蔵された様々な装置に外部から与えられた情報を読み取ることができる仕掛けがなされた特殊なレジスタ
  • I/Oポートとも呼ばれる。8ビット幅とか。
  • 入出力ポートはそれぞれ固有のI/Oポートアドレスを持ち、識別されています。

  • アドレス0~34~78~BC~F
    0x000xDMAコントローラ
    0x001x予約済み
    0x002x割り込みコントローラ#1 (0x20~0x21)
    0x003x予約済み
    0x004xシステムタイマー予約済み
    0x005x予約済み
    0x006xキーボードとPS/2マウス(0x60)、システムコントロールポート?B(0x61)キーボードとPS/2マウス(0x64)
    0x007xRTC/CMOSNMI予約済み
    0x008x
    0x009x予約済み
    0x00Ax割り込みコントローラ#2 (0xA0~0xA1)予約済み
    0x00Bx予約済み
    0x00Cx
    0x00Dx
    0x00Ex予約済み
    0x017x
    0x01Fx
    0x02FxCOM2
    0x037xLPT1
    0x03FxCOM1

アクセス方法

  • プロセッサからI/O ポートにアクセスするには、次の2 つの方法がある。

メモリマップドI/O

  • 割り当てはBIOSがコンピュータの立ち上げ次に行う
  • MMIO領域は通常4GB直下の1GB領域に割り当てられる

I/OマップドI/O

I/Oアドレス空間

Linux

関数

ポート割り当て (linux/ioport.h)

読み書き (asm/io.h)

  • 1バイト8ビットoutb?inb?
    2バイト16ビットoutw?inw?
    4バイト32ビットoutlinl
  • _pってのは高速なCPU性能にデバイスの処理が間に合わないことを考慮してウェイトを加味した関数

ページテーブル?

  • ページテーブル?が必要 - IOメモリ?に直接アクセス
  • ページテーブル?が必要 - ioremapを使うことでアクセス

関連

参考