做一个网站需要多少人,途牛网站建设功能需求分析,保山网站建设多少钱,百度提交入口的网址I/O 体系结构
与外设的通信通常称之为输入输出#xff0c;一般都缩写为I/O。 在实现外设的I/O时#xff0c;内核必须处理3个可能出现的问题#xff1a; #xff08;1#xff09;必须根据具体的设备类型和模型#xff0c;使用各种方法对硬件寻址#xff1b; #xff08…I/O 体系结构
与外设的通信通常称之为输入输出一般都缩写为I/O。 在实现外设的I/O时内核必须处理3个可能出现的问题 1必须根据具体的设备类型和模型使用各种方法对硬件寻址 2内核必须向用户应用程序和系统工具提供访问各种设备的方法。但凡有可能都应当采用统一的方案确保程序设计的工作量不会过多同时保证应用程序能够在不考虑特定硬件方法的情况下进行互操作 3用户空间需要知道内核中有哪些设备可用
硬件设备可能以多种方式连接到系统主板上的扩展槽或外部连接器最常见的方法当然扩展硬件也可以直接集成到主板上。 1.系统总线
尽管外设的范围可能看上去是无限的它们并不直接连接到CPU而是通过总线连接起来。 总线负责设备与CPU之间及各个设备之间的通信。
如下为代表性的总线 a.PCIPeripheral Component Interconnect定义了 32 位数据总线且可扩展为 64 位。PCI 总线主板插槽的体积比原 ISA 总线插槽还小其功能比 VESA、ISA 有极大的改善支持突发读写操作最大传输速率可达 132MB/s可同时支持多组外围设备。PCI局部总线不能兼容现有的 ISA、EISA、MCAmicrochannelarchitecture总线但它不受制于处理器是基于奔腾等新一代微处理器而发展的总线。 b.ISAIndustrial Standard Architecture总线标准是 IBM 公司 1984 年为推出 PC/AT 机而建立的系统总线标准所以也叫AT总线。它是对XT总线的扩展以 适应 8/16 位数据总线要求。它在 80286 至 80486 时代应用非常广泛以至于现在奔腾机中还保留有ISA总线插槽。ISA总线有98只引脚。 c.SBus全称Serial Bus即串行通信总线。本质上是一种串口通信协议采用100K的波特率8位数据位2位停止位偶效验即8E2的串口通信。 d.IEEE1394 e.SCSISmall Computer System Interface f.USBUniversal Serial Bus通用串行总线USB是由Intel、Compaq、Digital、IBM、Microsoft、NEC、NorthernTelecom等7家世界著名的计算机和通信公司共同推出的一种新型接口标准。它基于通用连接技术实现外设的简单快速连接达到方便用户、降低成本、扩展PC连接外设范围的目的。它可以为外设提供电源而不像普通的使用串、并口的设备需要单独的供电系统。 g.并口与串口Parallel and Serial Interface
总线的分类和区别
2.与外设交互
与外设通信的方法有几种方法可以与连接到系统的硬件通信 a.I/O端口 使用 IA-32 和很多其他体系结构上都有 I/O 端口在这种情况下内核发送数据给 I/O 控制器。数据的目标设备通过唯一的端口号标识数据被传输到设备进行处理。处理器管理一个独立的虚拟地址空间可以用于管理所有 I/O 地址。I/O 地址空间不关联到普通的系统内核。因为端口也可以映射到内存中这样会引起混淆。 在IA-32体系结构上端口地址空间由 2 的 16 次方(大约 64000 )个不同的8位地址组成通过0x0到0xFFFF之间的数字唯一标识。
1、每个连接到I\O总线上的设备都有自己的I\O地址集通常称为I\O端口。 2、一共提供了65536个8位的端口可以把两个连续的8位端口看成一个16位端口但是这必须从偶数地址开始。 3、可以讲2个8位的看作一个16位的必须从偶数开始2个16位的看作一个32位的端口必须从4倍数开始 4、对端口对读写命令 in、ins、out、outs 5、为了提高性能提供控制寄存器、状态寄存器、输入寄存器、输出寄存器
深入理解Linux内核I/O体系结构和设备驱动程序
b.I/O内存映射 程序员必须寻址很多设备与内存的处理方式类似。因此现在处理器提供对 I/O 端口进行内存映射将特殊外设的端口地址映射到普通内存中。
c.轮询和中断 轮询(polling)策略比较简单只需要重复询问设备数据是否可用如果可用则处理器取回数据。 中断策略比较好。每个CPU都提供中断线可由各个系统设备共享每个中断通过一个唯一号码标识内核对使用的每个中断提供一个服务例程。
3.通过总线控制设备
并非所有设备都是直接通过I/O语句寻址也有通过总线系统访问的。具体的方式与所使用的总线和设备相关。并非所有设备类别都可以连接到所有总线系统比如将硬盘和CD记录机连接到SCSI接口但图形卡就行。
访问设备
设备特殊文件设备文件用于访问扩展设备。这些文件并不关联到硬盘或任何其他的存储介质上的数据段而是建立了与某个设备驱动程序的连接以支持与扩展设备的通信。 就应用程序而言普通文件和设备文件的处理有一定差别。二者都是可以通过同样的库函数处理。
字符设备、块设备和其他设备
根据外设与系统之间交换数据的方法可以将设备分为几种类别。有些设备非常适合于面向字符的数据交换因为数据传输量很低。其他的设备则更适合于处理包含固定数目字节的数据块。内核会区分字符设备和块设备。
1、/dev目录下一些成员特别在访问权限上面访问之前的字母是 b 或 c分别代表块设备和字符设备设备文件没有文件长度而增加另外两个值分别是主设备号和从设备号。 2、/dev/hda/dev/hdb/dev/sdadev/sdbhda(一般指IDE接口的硬盘sda-般指sata接口硬盘)
标识设备文件
查询/dev目录中与sda硬盘有关的其他设备文件
3、热插拔消息新设备 每当内核检测到一个设备时都会创建一个内核对象 kobject。该对象借助于 sysfs 文件系统导出到用户层内核还向用户空间发送一个热插拔消息。 sysfs文件系统是一种特殊的文件系统被安装于/sys目录下的/proc文件系统相似。 /proc文件系统是首次被设计成允许用户态应用程序访问内核内部数据结构的一种文件系统。 /sysfs文件系统本质上与/proc有相同的目的但是它还提供关于内核数据结构的附加信息此外/sysfs的组织结构比/proc更有条理。或许在不远的将来/proc和/sysfs将会继续共存。 sysfs文件系统的目标是要展现设备驱动程序模型组件间的层次关系。该文件系统的相应高层目录是 block块设备它们独立于所连接的总线。 devices所有被内核识别的硬件设备依照连接它们的总线对其进行组织。 bus系统中用于连接设备的总线。 drivers在内核中注册的设备驱动程序。 class系统中设备的类型同一类可能包含由不同总线连接的设备于是由不同的驱动程序驱动。 power处理一些硬件设备电源状态的文件。 firmware处理一些硬件设备的固件的文件。 4、网卡及其它设备 字符设备和块设备不是内核管理的全部设备类别。 网卡在内核中具有特殊地位它无法融入到分类方案当中事实很明显网卡没有设备文件。相反用户程序必须使用套接字与网卡通信。套接字就是一个抽象层对所有网卡提供一个抽象视图。标准库的网络相关函数调用socketcall系统调用与内核通信交互。进而访问网卡。
5、字符设备与块设备 字符设备提供连续的数据流应用程序可以顺序读取通常不支持随机存取相反此类设备支持按字节字符读取。比如调度解调器是典型的字符设备。 块设备应用可以随机访问设备数据程序可自行确定读取数据的位置。比如:硬盘是块设备应用程序可以寻址磁盘上的任何位置并由此读取数据。
动态创建设备文件 /dev 中的设备结点一般是在基于磁盘的文件系统中静态创建的。随着支持设备越来越多必须安置和管理越来越多的项典型发布版大约包含 20000 项。几乎所有的发布版都将 /dev 内容的管理工作切换到 udevd这是一个守护进程允许从用户层动态创建设备文件。 udevd 基本思想即使从用户层管理设备文件内核的支持也是绝对必须的否则就无法判断系统上有哪些设备可用。
字符设备 a.设备号 主设备号是用来标识与设备文件相连的驱动程序主设备号用来反映设备类型次设备号被驱动程序用来辨别操作的是哪个设备并区分同类型的设备。
设备号就是系统分配一个编号设备号是一个无符号的 32 位整型包括主设备号次设备号主设备号为高12位次设备号为低20位。
设备文件需要设备号才能够创建设备驱动也需要设备号才载装载设备文件正是通过主设备号找到它的驱动设备驱动正是利用次设备号才知道他要操作的具体是哪一个设备。
b.字符设备管理框架
c.字符设备数据结构
d.管理设备驱动程序函数的数据结构
I/O体系结构和设备驱动程序