操作系统实战(十一)

一、计算机的结构

芯片并非独立存在,而是以总线为基础链接在一起的,相互配合,共同实现用户的要求的功能。
在这里插入图片描述
总线有层级关系,各种设备通过总线相连。

二、如何管理设备?

1.分而治之

每个设备对应一个设备控制代码模块,操作系统内核要控制哪个设备,就加载相应的设备代码模块,以后如果不使用这个设备,就可以删除对应的设备控制代码模块。

2.设备分类

操作系统内核所感知的设备,并不需要和物理设备对应,这取决于设备控制代码自身的行为。操作系统内核所定义的设备,可以成为内核设备或者逻辑设备。例如,NETWORK_DEVICE网络设备,不管它是有线网卡还是无线网卡,或者是设备控制代码虚拟出来的虚拟网卡.

3.设备驱动

将操作每个设备的相关代码独立出来——设备驱动程序。

1.设备

用一个包含设备类型、设备名称、设备状态、设备id、设备驱动程序等的数据结构来表示一个逻辑设备。在操作系统中建立这个数据结构的实例变量,就表示操作系统内核中存在一个逻辑设备了。用包括设备类型号、设备子类型号、设备序号的数据结构devid_t来表示设备ID,子设备号是为了解决多个相同设备的,还有一个指向设备驱动程序的指针,用于访问设备时调用设备驱动程序的。只要建立一个设备结构的实例变量,内核就能感知到设备的存在。

2.驱动

控制设备的代码就是驱动程序,定义一个数据结构来表示一个驱动程序,数据结构应该包含驱动程序名,驱动程序ID,驱动程序所管理的设备,最重要的是完成功能设备相关功能的函数。Cosmos内核每加载一个驱动程序模块,就会自动分配一个驱动程序结构数据并将其实例化。
Cosmos内核在首次启动程序时,就会调用这个驱动程序的入口点函数,在这个函数中驱动程序会分配一个设备数据结构,用相关信息将其实例化,比如填写正确的设备类型、设备ID号、设备名称等。
Cosmos内核负责建立驱动数据结构,而驱动程序又建立了设备数据结构。

3.设备驱动的组织

用一个叫做***设备表***的数据结构,来组织这些驱动程序数据结构和设备数据结构。
devtable_t(设备表)结构中,devtlst_t时每个设备类型一个,表示一类设备,但每一类可能有多个设备,所以在devtlst_t结构中,有一个设备计数和设备链表。Cosmos肯定需要一个devtable_t(设备表)数据结构的全局变量。
在这里插入图片描述
devtable_t 结构中能找到所有的设备和驱动,然后从设备能找到对应的驱动,从驱动也能找到其管理的所有设备 ,最后就能实现一个驱动管理多个设备。

4.驱动程序功能

驱动程序为操作系统内核提供哪些基本功能?
写驱动程序就是为了操控相应的设备,主要包括,输入数据、处理数据、输出数据,然后完成一些特殊功能。我们可以把每一个操作定义成一个函数,让驱动去实现这些函数。驱动driver_t结构中哪个函数指针数组drv_dipfun函数指针,正是存放上述那12个驱动程序函数的指针,这样,操作系统内核就能通过driver_t结构,调用对应的驱动程序函数操作对应的设备。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值