设备管理

  • 设备管理
    除CPU和内存外的设备都可以称为外设
    按交互对象分类,按交互方向分类,按外设特性分类(信息组织特征Linux)
    鼠标

    键盘
打印机
硬盘

设备管理的主要功能,设备分配,设备映射,设备驱动

  • 设备分配是设备管理的基本任务,由设备分配程序按一定的策略为申请设备的进程分配设备,记录设备的使用情况。
  • 设备映射是逻辑设备映射到物理设备的功能,从软件角度,逻辑设备是物理设备的抽象,从设备管理角度,物理设备是逻辑设备的实例。

物理设备,I/O系统中实际安装的设备,物理名为ID或字符串(128位)。
逻辑设备,应用软件使用的设备,逻辑名或友好名

  • 设备独立性
    物理设备对用户透明,用户使用统一的规范使用设备,用户编程时使用设备逻辑名,由系统实现逻辑设备映射到物理设备上。
  • 设备驱动是对物理设备进行控制,实现I/O操作,接收应用的服务请求,转换为具体的I/O指令,控制设备完成相关操作。向用户提供统一接口,提供read/write/open等,把外设作为特别的文件处理。
    设备驱动程序与硬件密切相关,每类设备都要配置特定的驱动程序,驱动程序一般由设备厂商根据操作系统要求编写,操作系统仅对设备驱动的接口提出要求。
独占型设备 共享型设备
包含所有的字符型设备 包括所有块型设备
任意时间段内只能被一个进程占用
使用时,进程首先向操作系统申请,可能进入阻塞状态
当设备可用时,唤醒一个等待进程,使用完毕后,进程必须释放设备。
I/O传输单位是块
宏观上,可以被多个进程同时占用,微观上,多个进程交替使用
进程使用时无所申请和释放,也不存在进程占用
  • 虚拟技术是在一类物理设备上模拟另一类物理设备的技术(如虚拟光驱,VM),借助辅存部分区域模拟独占设备,将独占设备转化为共享设备

  • 虚拟设备是用来模拟独占设备的部分辅存,虚拟独占设备。输入井:模拟输入设备的辅存区域;输出井:模拟输出设备的辅存区域。

  • 虚拟分配指当进程需要与独占设备交互信息时,采用虚拟技术将与独占设备相应得虚拟设备分配给进程。

  • Spooling是Linux系统中虚拟技术和虚拟分配的实现,是Simultaneous Peripheral Operations Online外部设备同时联机操作,也称为假脱机输入/输出操作。
    Spooling系统提高了I/O的效率,将独占设备改造为虚拟共享设备。


    Spooling系统

    输入和输出监控进程模拟脱机系统的卫星机
    当用户需要数据时,直接从输入井读入所需数据(提前读)
    当用户输出数据时,先将数据传送到输出井,在输出设备空闲时再输出(延后写)

  • linux内核模块
    Loadable Kernel Module:LKM
    解决单体整体式内核机制的不足,是一种未经链接的可执行代码,类似DDL,经过装载称为内核一部分,可动态加载或卸载


    Linux模块机制

编译模块 ->安装模块->删除模块(打印到内核printk)
查看内核信息 $dmesg
查看模块 $lsmod

  • Linux驱动程序(LDD)
    应用程序通过驱动程序间接访问设备,应用程序工作在用户态,驱动程序和操作系统工作在内核态
  • Linux设备分类
    字符设备,以字节为单位进行I/O操作,如串口设备
    块设备,通过buffer和cache进行存取,可以随时访问,如IDE硬盘,支持可安装文件系统
    网络设备,通过BSD套接口访问(Socket)
  • 设备文件
    硬件设备作为文件看待,用文件接口完成设备操作,操作如打开、关闭、读写和I/O控制等
    字符设备和块设备通过设备文件访问,在Linux系统中可以找到设备文件(ls -l/dev)
设备文件

主设备号标识该设备种类,标识驱动程序,范围1-255,linux内核支持动态分配主设备号
次设备号标识同一个驱动程序下不同的硬件设备,次设备号只在驱动程序内部使用,系统内核直接把次设备号传递给驱动程序,由驱动程序进行管理。

*LDD结构完整功能
必须:驱动程序注册、驱动程序注销、设备打开、设备释放、设备读写操作(至少其一)
可能:设备控制操作、设备中断和轮询处理、
自定义操作函数需要与文件结构体操作关联,在设备注册(初始化)完成
设备注册和设备注销需要登记到模块,通过make进行编译称为模块后,可按照模块加载进内核。

文件操作结构体
  • Windows驱动程序
    Window固定采用DriverEntry作为入口函数(类似main)
    给pDriverObject->DriverUnload赋值退出函数指针
    Linux则module_init和module_exit
    其他功能通过pDriverObject->MajorFunction数组完成,如IRP_MJ_CREATE,IRP_MJ_CLOSE,IRP_MJ_WRITE等
    Linux则采用关联文件结构体操作完成

  • Windows声明设备的文件操作函数

应用程序函数 MajorFunction[IRP代码]
CreateFile IRP_MJ_CREATE
ReadFile IRP_MJ_READ
WriteFile IRP_MJ_WRITE
DeviceInControl IRP_MJ_DEVICE_CONTROL
CloseHandle IRP_MJ_CLOSE/CLEANUP
  • 驱动程序开发工具
工具 开发效率 执行效率
Windows DDK
Driver Works+DDK 较高 较高
WinDriver

DDK是最底层,其他工具对DDK进行封装
DDK包含运行库(runtime library),文档(帮助文档),编译器(C/C++编译器/链接器),调试/分析工具(内核调试工具、分析工具),与内核API函数相关的头文件(如ddk.h,wdm.h等),与内核API函数相关的库文件(wdm.lib等)

  • 编译驱动时不能调用的函数
    Windows用户模式API函数
    ISO C/C++标准函数库

  • 驱动程序和应用程序关联
    1.驱动程序中创建设备对象并命名
    2.应用程序通过符号链接访问设备对象
    使用内核API的IoCreateDevice创建并命名设备对象,内核可通过设备名访问,但应用程序没有访问权
    使用内核API的IoCreateSymbolicLink创建符号链接让应用程序访问该设备
    用户模式下内核的??子目录为\.\子目录,可以通过访问\.\下的符号链接访问设备

你可能感兴趣的:(设备管理)