系统总线:
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. yml转properties

    推荐一个在线工具,可以将yaml转换为properties,同时也支持反向转换 http://www.toyaml.com 非常好记的地址,to yaml,直接在地址栏里输入toyaml.com,省去 ...

  2. ASP.NET 动态查找数据 并且生成xml文档 同时使用xslt转换为xhtml

    前言 xsl是一门标签解析语言,很适合做动态网页的前台标签 www.bamn.cn 1 首先是aspx页面 添加一个输入框 按钮 还有一个用来显示解析后的xhtml代码的控件 <form id= ...

  3. 持续集成工具hudson

     2008-07-08  一.什么是持续集成 持续集成的核心概念 CI 过程会经常构建软件组件:在许多情况下,每当源代码存储库(比如 Subversion 或 ClearCase)中的代码发生变化时, ...

  4. [POST] What Is the Linux fstab File, and How Does It Work?

    If you’re running Linux, then it’s likely that you’ve needed to change some options for your file sy ...

  5. ajax, jQuery, jQueryeasyUI

    1.ajax与jQueryajax是jquery库里面的一个被封装好的函数,可以拿来直接使用.没有jquery的话,ajax的使用就得用原生的javascript去写,比较麻烦. 2.jQuery E ...

  6. 如何写UI及屏幕适配的一些技巧

    总结一下关于UI布局及屏幕适配的一些实战技巧,尤其使用纯代码,会对提升效率及代码易于维护等方面有明显帮助,这里提到的没有使用任何Xib, 如果不是在外包公司,也推荐大家多使用甚至完全使用纯代码布局UI ...

  7. sid-msg.map文件概述

    我这边编写了magic对应的指定文件规则,但是运行的时候发现储存的文件中包含我未指定的数据文件: 在rules下边看的时候,发现有sid-msg.map文件,上网了解下这个文件是干啥的.. 下边文章来 ...

  8. 浅谈bitmap算法

    一.bitmap算法思想 32位机器上,一个整形,比如int a; 在内存中占32bit位,可以用对应的32bit位对应十进制的0-31个数,bitmap算法利用这种思想处理大量数据的排序与查询.  ...

  9. php数组添加元素的方法

    PHP数组添加一个元素的方式: push(),  arr[], Php代码   $arr = array(); array_push($arr, el1, el2 ... eln); 但其实有一种更直 ...

  10. Bootstrap VS Semantic VS Foundation

    相信多数科技公司都没有自己动手设计UI的能力! 看到这个开头,预计非常多程序员非常不服气,我们那个美工可NB了,各种切图,各种特效! 假设你跟我讲这些,就说明你还没有明确UI详细指什么.通常我们所讲的 ...