EDA365电子论坛网

标题: Linux系统对IO端口和IO内存的管理 [打印本页]

作者: mytomorrow    时间: 2019-9-19 15:43
标题: Linux系统对IO端口和IO内存的管理
一、I/O端口
: X- g/ v3 \8 R9 _
/ H) X; C4 ?& R3 a8 B
      端口(port)是接口电路中能被CPU直接访问的寄存器的地址。几乎每一种外设都是通过读写设备上的寄存器来进行的。CPU通过这些地址即端口向接口电路中的寄存器发送命令,读取状态和传送数据。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。
- h  l9 t% z# U, y7 r* t, X/ T2 c. k& D' g  ]9 e% u4 q
二、IO内存
4 ^/ O8 u) A! R$ `0 B( _/ j; w

2 P0 H% V# n7 H+ u$ D       例如,在PC上可以插上一块图形卡,有2MB的存储空间,甚至可能还带有ROM,其中装有可执行代码。( v$ |1 U+ U& ]9 Q* N- R
- |  S% C5 H, H" K# M% `1 F$ w
三、IO端口和IO内存的区分及联系' G: M7 d, M% E0 A/ I6 h
% {. e$ c. y( G  m9 J; R; z
         这两者如何区分就涉及到硬件知识,X86体系中,具有两个地址空间:IO空间和内存空间,而RISC指令系统的CPU(如ARM、PowerPC等)通常只实现一个物理地址空间,即内存空间。
8 f1 K  M3 X2 G6 P. H. [内存空间:内存地址寻址范围,32位操作系统内存空间为2的32次幂,即4G。
- r' g4 w- I5 u6 b7 b8 H; MIO空间:X86特有的一个空间,与内存空间彼此独立的地址空间,32位X86有64K的IO空间。
8 K# G1 y  F+ A6 U" y! j% n# x& i7 u& B3 m' n  _0 b8 e4 W% L9 J
IO端口:当寄存器或内存位于IO空间时,称为IO端口。一般寄存器也俗称I/O端口,或者说I/O ports,这个I/O端口可以被映射在Memory Space,也可以被映射在I/O Space。
: D! h& H& ?5 W% q  N
7 [% y' g5 Z: t  a. @IO内存:当寄存器或内存位于内存空间时,称为IO内存。  r' O: P: C& H" K( F; _% ]2 n
+ j* a. c3 F6 y" R% b9 S
四、外设IO端口物理地址的编址方式7 b5 f) ^' V! ~% @" E* T
- J' A6 t7 t6 M
        CPU对外设IO端口物理地址的编址方式有两种:一种是I/O映射方式(I/O-mapped),另一种是内存映射方式(Memory-mapped)。而具体采用哪一种则取决于CPU的体系结构。3 }5 K; p* Q  F. g8 p: n
: l+ Z% H& G: ~# _; B3 E
1、统一编址
) @' B6 [/ g6 u* s
/ ]- G4 K$ |( M# x/ u' ^

9 F+ ^8 c! e7 b0 N3 m1 E: M$ }5 x! Q; B5 p, G+ i9 ~

9 i- `4 X, N3 [1 P7 @; s4 h, s
- |( W, L, s) s! |; M

5 K  I5 ~4 `: i1 p- A# t9 Q" m! j4 f' p# E

作者: wu68aq    时间: 2019-9-19 18:00
Linux系统对IO端口和IO内存的管理。




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2