操作系统实战 45 讲
彭东
网名 LMOS,Intel 傲腾项目关键开发者
65203 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 60 讲
尝尝鲜:从一个Hello到另一个Hello (2讲)
特别放送 (1讲)
操作系统实战 45 讲
15
15
1.0x
00:00/00:00
登录|注册

28 | 部门分类:如何表示设备类型与设备驱动?

访问设备所需的参数
访问设备的接口函数
函数指针数组
驱动程序的标准方法
设备表结构
驱动程序数据结构
设备数据结构
分权而治的管理方式
设备的抽象分类
设备的多样性
思考题
驱动程序功能
设备和设备驱动的信息
计算机结构

该思维导图由 AI 生成,仅供参考

你好,我是 LMOS。
小到公司,大到国家,都有各种下属部门,比如我们国家现在有教育部、科学技术部、外交部,财政部等,这些部门各自负责完成不同的职能工作,如教育部负责教育事业和语言文字工作,科学技术部负责推动解决经济社会发展的重大科技问题。
既然大道相通,那我们的 Cosmos 中是否也是类似这样的结构呢?
答案是肯定的,在前面的课中,我们搞定了内存管理和进程管理,它们是内核不可分隔的,但是计算机中还有各种类型的设备需要管理。
我们的 Cosmos 也会“成立各类部门”,用于管理众多设备,一个部门负责一类设备。具体要怎么管理设备呢?你不妨带着这个问题,正式开始今天的学习!
这节课的代码,你可以从这里下载。

计算机的结构

不知道你是否和我一样,经常把计算机的机箱打开,看看 CPU,看看内存条,看看显卡,看看主板上的各种芯片。
其实,这些芯片并非独立存在,而是以总线为基础连接在一起的,各自完成自己的工作,又能互相打配合,共同实现用户要求的功能。
为了帮你理清它们的连接关系,我为你画了一幅图,如下所示。
计算机结构示意图
上图是一个典型的桌面系统,你先不用管是物理上怎么样连接的,逻辑上就是这样的。实际可能比图中有更多或者更少的总线。但是总线有层级关系,各种设备通过总线相连。这里我们只需要记住,计算机中有很多种类的设备,脑中有刚才这幅图就行了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了操作系统中设备分类和设备驱动的相关概念。作者通过比喻国家部门的分类引出操作系统中设备的分类,强调了设备管理的重要性。文章讲解了计算机结构中各种设备的连接关系,并探讨了如何管理设备的问题。作者提出了“分权而治”的管理方式,即将设备控制代码独立出来,与操作系统内核分开、独立开发,以提高操作系统内核的灵活性和可扩展性。此外,文章还介绍了设备的分类和设备驱动程序的概念,强调了设备驱动程序的重要性。驱动程序的组织和设备表的数据结构也得到了详细阐述。通过生动的比喻和清晰的逻辑,读者能够深入了解操作系统内核管理设备的基本知识。整体而言,本文为读者提供了深入了解操作系统内核管理设备的基本知识,对于理解操作系统中设备分类和设备驱动的相关概念具有重要参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《操作系统实战 45 讲》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • neohope
    置顶
    一、数据结构 有一个全局devtable_t结构变量osdevtable,用于管理全部驱动程序及设备,其中包括: A、全局驱动程序链表,保存全部驱动【driver_t结构】 B、全局设备链表,包括各种设备类型的链表【devtlst_t结构】,每个devtlst_t中包括了某一类型的全部设备链表【device_t结构】 device_t用于描述一个设备,其中包括: A、devid_t用于描述设备ID【包括设备类型、设备子类型、设备序列号等】 B、driver_t指针用于指向设备驱动程序,从设备可以找到驱动 driver_t用于描述一个驱动程序,其中包括: A、驱动功能函数指针数组drivcallfun_t[] B、包括使用该驱动程序的全部设备的列表,从驱动可以找到设备 二、驱动程序,函数有三类 设备中断处理函数 驱动入口和退出函数 驱动功能函数 三、初始化 init_krl->init_krldevice->devtable_t_init ->初始化全局设备列表 ->初始化全局驱动列表 ->对于每类设备,初始化devtlst_t结构

    作者回复: 总结的好

    2021-07-19
    11
  • 青玉白露
    访问一个设备的接口函数大致如下: drvstus_t device_getdata(device_t* devp,void* iopack); 其中,device* 指向设备本身的结构体,相当于给这个函数传入了设备的属性值; 而void* iopack是一个无属性的内存块,具体需要传入什么参数,根据访问该设备将要实现的功能而定。 彭老师加油!我这两天终于把之前囤的十几节课看完了,等周末写几篇博客总结一下!

    作者回复: 好的

    2021-07-13
    2
    2
  • 🙃
    叮~ 先打个卡 上一节进程调度讲的太精彩了,相信这一篇也是宝藏文章

    作者回复: 哈哈 我努力让大家满意

    2021-07-12
    2
  • 艾恩凝
    代码看的越来越轻松了,也更容易理解了,进度也加快了,打卡

    作者回复: 加油

    2022-05-07
    1
  • pedro
    照葫芦画瓢: //读设备数据函数 drvstus_t device_read(device_t* devp,void* iopack);

    作者回复: 可以 可以

    2021-07-12
    1
  • coconut
    接口参数应该包含:设备id,操作类型,操作数

    作者回复: 对的

    2021-11-30
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部