转自:
Number=570846&page=0&view=collapsed&sb=5&o=31&fpart=1#Post637212
设备有IO地址,想了解一下,这些IO地址是怎么分配的,
是弄始写死的吗?
还是和主板上的插槽有关?
如CGA/EGA/VGA的端口是(0x3d0~0x3df),这是谁定的呀?
PCI插槽上的地址等,是怎么来的,想了解一些。
Re: 问个IO地址的来源问题! [re: newniu]
Reply to this postReply
这个问题讲起来内容很多,所以高手都懒的敲键盘。我不是高手,随便说两句。
回答这个问题要从最开始ibm的pc机开始讲,由于那个时候的人的短视,或者说是处于节省经济成本,最初的pc机上的io设备的端口都是定死的。硬盘,鼠标,软驱等等,他们的端口都是定死的。这样就很好理解了,cpu执行指令,指令是又程序员编写的,程序员知道鼠标的端口是多少,所以把这些端口使用硬代码的方式写入程序。cpu执行这样的指令,在总线上发出要访问鼠标端口的指令,鼠标的接口硬件发现cpu要找的是自己,然后鼠标就接受其后的命令。那其他的软驱的接口硬件等设备发现cpu发出的端口号和自己的端口不同,所以就忽略。
这样的做法延续了几年,随着pc不断的发展,人们发现这样方式越来越不可行。比如说,一个电脑上要插两块网卡,如果网卡的io端口都是一样,那么对整个电平时序系统会造成混乱。所以,那个时候有些板卡上面会有跳帽,bios设置选项中也会有设置,用来动态设置io端口。但是这种方式,还是很不方便。
intel和ms这个时候推出了pnp的概念。pnp讲到底,其实就是动态分配io端口,memory映射。比如,插一块网卡,这时网卡不知道自己的io端口是多少,所以,网卡不会接受cpu的命令。当cpu对网卡中的configuration space中的io base设置后,网卡的接口硬件便知道,我现在的io端口是多少了,只要总线上有我这个io端口的命令,我就要响应。
所以pnp是一个概念,注意不要和pci isa等搞混了。现在这些io端口的分配工作都是由bios来做。当然有些os会不用bios初始化好的东西,自己再来重新分配一下。比如windows就是这样。
阅读(2708) | 评论(0) | 转发(0) |