系统总线:
1、链接CPU、RAM、I/O设备之间的数据流动。例如:PCI、ISA、EISA、MCA、SCSI、USB
2、任何I\O设备有且仅能链接一条总线。 I\O端口:
1、每个连接到I\O总线上的设备都有自己的I\O地址集,通常称为I\O端口。
2、一共提供了65536个8位的端口
3、可以讲2个8位的看作一个16位的(必须从偶数开始),2个16位的看作一个32位的端口(必须从4倍数开始)
4、对端口对读写命令 in、ins、out、outs
5、为了提高性能提供控制寄存器、状态寄存器、输入寄存器、输出寄存器 I\O接口:
1、专用I\O接口:专门用于一个特定的硬件设备;键盘接口、图形接口、磁盘接口、鼠标接口、网络接口
2、通用I\O接口:用来连接多个不同的硬件设备,通常是外部设备。并口、串口、PCMCIA接口、SCSI接口、USB 设备控制器:
1、复杂的设备需要,典型的是磁盘控制器,可以用来解析高级命令,转换成处理磁盘的低级磁盘操作。
2、简单的设备不需要,比如可编程中断控制器、可编程间隔定时器。
设备驱动程序模型:1、电源管理(控制设备电源线上不同的电压级别)
2、即插即用(配置设备时透明的资源分配)
3、热插拔(系统运行时支持设备的插入和移除)
4、内核全权负责所有硬件设备的电源管理,当计算机进入待机时,内核立即强制每个能够响应‘待机’状态的设备安装一定的顺序进入待机状态
5、为了满足上述功能,为系统中所有的总线、设备以及设备驱动程序提供了一个统一的视图,即设备驱动程序模型。 设备文件:
1、I\O设备可以被当作设备文件(device file)这种所谓的特殊文件来处理,即可以对其使用系统调用read、write
2、根据设备驱动程序的基本特性,设备文件可以分位两种块和字符
3、块设备的数据可以被随机访问,传输数据的时间少,且大致相同。例如硬盘、软盘、CD-ROM驱动器、DVD播放器等
4、字符设备的数据或者不可以被随机访问;或者可以但是访问随机数据的时间很大程度依赖数据在设备内的位置,例如磁带驱动器
5、一般设备文件名是无关紧要的,关键是设备类型、主设备号、次设备号
6、主设备号和次设备号最大为65536,Linux
2.6对其进行了扩展主设备号12位,次设备号20位
7、最好的解决方案时动态分配设备号;动态创建设备文件 设备驱动程序:
1、实现文件对象read方法的foo_read函数
2、处理中断的foo_interrupt函数
3、当用户在设备文件上发出read系统调用,一条命令被发往设备的控制寄存器,一段时间间隔后,设备把一个字节的数据放入输入寄存器,作为read系统调用的结果返回 直接访问内存(DMA):
1、不经过CPU,设备直接和RAM互传数据
2、如果DMA和CPU同时访问同一内存,冲突由叫做内存仲裁器的硬件电路来解决
3、使用最多的是磁盘驱动器和其他需要一次传输大量字节的设备。
4、DMA的设置时间较长,少量数据时使用CPU效率更高
5、同步DMA由进程触发,例如播放电影、音乐;播放音乐时,将内存数据采用DMA传到声卡播放
6、异步DMA有硬件设备触发,例如网卡;网卡接收到数据,产生中断,将数据采用DMA方式传到内存 内核支持的I\O级别:
1、根本不支持:应用程序只能用适当的in、out汇编语言直接与设备I|O端口交互 2、最小支持: 内核不识别硬件设备,但是能识别I\O接口,用户程序将I\O接口视为能够读写字符流的顺序设备
3、扩展支持:内核能识别硬件,并处理I\O接口本身。这种设备可能没有对应的设备文件。 字符设备驱动程序:
1、比较简单,不涉及复杂到缓存策略,磁盘高速缓存
2、有些必须实现复杂到通信协议

深入理解Linux内核-I/O体系结构和设备驱动程序的更多相关文章

  1. 读书笔记之Linux系统编程与深入理解Linux内核

    前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linu ...

  2. 《深入理解Linux内核》 读书笔记

    深入理解Linux内核 读书笔记 一.概论 操作系统基本概念 多用户系统 允许多个用户登录系统,不同用户之间的有私有的空间 用户和组 每个用于属于一个组,组的权限和其他人的权限,和拥有者的权限不一样. ...

  3. 【读书笔记::深入理解linux内核】内存寻址【转】

    转自:http://www.cnblogs.com/likeyiyy/p/3837272.html 我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0 ...

  4. 【读书笔记::深入理解linux内核】内存寻址

    我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0xC0000000:这是内核地址空间的地址转换关系. 这句话瞬间让我惊呆了,根据我的CPU的知识,开 ...

  5. 【深入理解Linux内核架构】第3章:内存管理

    3.1 概述 内存管理涵盖了许多领域: 内存中物理内存页的管理: 分配大块内存的伙伴系统: 分配小块内存的slab.slub.slob分配器: 分配非连续内存块的vmalloc机制: 进程的地址空间. ...

  6. 【深入理解Linux内核架构】6.6 资源分配

    一段摘自<Linux设备驱动程序>的话: 每种外设都通过读写寄存器进行控制.大部分外设都有多个寄存器,不管是内存地址空间还是I/O地址空间,这些寄存器的访问地址都是连续的. 在硬件层,内存 ...

  7. 理解Linux内核之中断控制

    乍一看下边的Linux内核代码,貌似L3389有bug,于是我就绕有兴趣地阅读了一下local_irq_save/local_irq_restore的源代码. /* linux-4.14.12/mm/ ...

  8. Linux内核0.11体系结构 ——《Linux内核完全注释》笔记打卡

    0 总体介绍 一个完整的操作系统主要由4部分组成:硬件.操作系统内核.操作系统服务和用户应用程序,如图0.1所示.操作系统内核程序主要用于对硬件资源的抽象和访问调度. 图0.1 操作系统组成部分 内核 ...

  9. Linux内存管理(深入理解Linux内核)

    Linux的内存管理,实际上是借助80x86的硬件分段和分页电路,将逻辑地址转化为物理地址的. 物理内存中,有一部分是一直(Permanently)映射给内核使用的,这部分主要用于保存内核的代码,以及 ...

随机推荐

  1. mysql日期/时间转换为字符串

    将日期时间2016-05-13 16:07:50转化为字符串20160513 date_format select phone,  date_format(time, '%Y%m%d%H%i%s') ...

  2. Vista/Win7以上系统查看和清除本地DNS缓存新方法

    你是否因修改网站DNS解析后,却因本机DNS缓存而需要等待... 你是否遇到修改了本机的hosts文件后,必须重起firefox和ie才起作用... 其实只要清空DNS缓存这些问题都可以解决. 查看D ...

  3. iOS UILabel设置行间距和字间距

    实现UILabel的文字,设置行间距和字间距. 效果图: 代码: let lblTitle = UILabel(frame: CGRect(x: , y: , width: KScreenWidth- ...

  4. CreateDialog 注意事项

    CreateDialog创建非模态对话框时 其内部 会发送几条消息例如: WM_INITDIALOG,WM_SETFONT  DS_SETFONT , DS_SHELLFONT. 所以如果在另一个Ca ...

  5. codeM 2018 资格赛

    比赛链接:https://www.nowcoder.com/activity/2018codem/index?from=meituan 1.下单 给定若干商品,可以选择打折.满减两种方式. #incl ...

  6. 支持向量机-SVM 学习

    一 .支持向量机(SVM) 1.1 符号定义 标签 y 不再取 0 或 1,而是: y∈{-1, 1} 定义函数: 向量,没有第 0 个维度,b 为截距,预测函数定义为: 1.2 函数间隔与几何间隔 ...

  7. 单个APP页面支持屏幕旋转

    1.info中支持所有的方向 2.APPDelega.h中添加属性 @property (nonatomic,assign) BOOL allowRotate; APPdelegate.m中实现方法 ...

  8. openssl req 证书请求及自签名证书

    介绍 openssl req 用于生成证书请求,以让第三方权威机构CA来签发,生成我们需要的证书.req 命令也可以调用x509命令,以进行格式转换及显示证书文件中的text,modulus等信息.如 ...

  9. HDU 2227 Find the nondecreasing subsequences (数状数组)

    Find the nondecreasing subsequences Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/3 ...

  10. jquery.inputmask 输入框input输入内容格式限制插件

    jQuery Input Mask plugin http://robinherbots.github.io/jquery.inputmask README.md jquery.inputmask C ...