Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4611939
  • 博文数量: 385
  • 博客积分: 21208
  • 博客等级: 上将
  • 技术积分: 4393
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-30 13:40
文章分类

全部博文(385)

文章存档

2015年(1)

2014年(3)

2012年(16)

2011年(42)

2010年(1)

2009年(2)

2008年(34)

2007年(188)

2006年(110)

分类: LINUX

2007-01-04 22:19:17


转自:
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) |
给主人留下些什么吧!~~