IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 操作系统实战(十一) -> 正文阅读

[开发工具]操作系统实战(十一)

一、计算机的结构

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

二、如何管理设备?

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结构,调用对应的驱动程序函数操作对应的设备。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-09-08 10:56:38  更:2021-09-08 10:57:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/23 4:52:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计