4、感性理解操作系统对硬件做管理【✔】
既然操作系统是做管理的,那它是怎么“管理”的呢?本小节我会通过一些现实的场景案例带读者来进行理解
- 说起管理,如果读者是一个大学生,一定体会过管理和被管理的不同,如果你只是一名普通的学生,也没什么职务,可能你只有被管理的份;但若是你在班里面或者学生会担任一些职务的话,就会了解到管理别人是什么感觉,但你也只能管管学生,放眼学校,比你权利大的人多的是,例如:辅导员、校长
若是有校长和辅导员的存在,那我们就肯定是那个被管理的人了,那我现在想要问一个问题:对于这二者来说谁是管理者呢?
- 此时很同学就会异口同声地说到:那肯定是辅导员呀!校长什么时候管过我们😎
但是我想告诉你的是,真正的管理者却是校长,只是你没有察觉而已,要理解这一点,我们要先来看看
“决策” 与 “执行”
这两个概念
① “决策” 与 “执行”
💬 首先我想问:对于一个管理者来说,它为什么被称为管理者呢?
- 在我们现实生活中所做的各种事情,无非可以分为两种:1.决策 2.执行
- 那什么叫做==决策==呢?决策也就是你决定是否要去做某件事情,比方说今天有一节水课~,这个老师讲得云里雾里的,听得你都要睡着了,那你可以决定不去听他的课。但是呢若有一些课你觉得很重要,老师也讲得不错,那你会决定去听这节课
- 那什么又叫做==执行==呢?上面说到我们自己可以决定是否要去上这个课、或者不上,但这也只是决定,还没有行动呢!执行其实就是行动:不去上这个课的话就考虑做其他有意义的事,去上这个课的话就会需要将对应的教科书、笔记放到书包然后背着书包去教室
初步理解了
“决策” 与 “执行”
的概念后,我们就将它映射到刚才所说的校长、辅导员和学生中来
- 其实对于我们学生来说,“决策” 与 “执行”是混在一起的,因为做决定和执行都是我们自己,就像你来上大学你妈妈一定会和你说:把自己管好,不要去外面瞎晃;饭要吃好,不要为了省钱去吃一些垃圾食品,那这前者就是
决策
,后者便是执行
- 那其实在我们生活中的其他地方,决策和执行其实是会被分得很明确的,例如说在公司中,你的领导一定是一个决策者,而不是一个执行者,它只是决定哪些事情要去做,具体怎么做还是交给手底下的人去实现
那经过我上面这么一番叙述的话,你应该可以明白什么是【决策】和【执行】了,此时我想再让你回答前面的那个问题,到底谁才是管理者
- 校长!它才是真正的管理者,虽然在很多地方并没有看到他在
“执行”
,因为这些不是他做的,他要做的是“决策”
。 - 举些很简单的例子,比方说学校近期要举办一些大型活动,但是贸然在学校内部搞一些活动也没有成文规矩,此时就需要得到高层领导的批准才可以,那么就需要层层上报给校长进行审批,通过一些会议后上面同意了,那下面才可以部署实施
那有的同学就好奇了,难道学生可以直接和校长打交道吗?这又成何体统,这些审批通过后就是直接当面告知学生吗?
- 如果你是一个正常的大学生的话,一定不会有这样的经历, 校长是不会直接和学生打交道的,除非它真得非常亲民,每天无所事事,一般都需要一个中间人,它是谁呢?也就是我们“亲爱的辅导员”:heart:
- 当校长做完决策之后,辅导员就会落实这些决策,做好一些大体的规划后就可以交给一些学生会的人来负责了
这里再举个例子把上面的知识做个总结回顾
- 那比方说现在我们学校要举办一个程序设计大赛,以此来选拔出编程能力强的一些同学代表我们学校去参加外面的比赛,此时当校长
决策
好这件事后,就把计算机学院的辅导员小王叫过来说:我们学校近期决定举办一场编程大赛💻,这是属于你们计算机学院的范畴,就交给你来办了,这里的话是一万块钱的资金,找财务处去领就行,用于布置场地和购置一些材料、奖品 - 那辅导员在收到任务后就立马召集学院中的各个实验室的负责人,也安排开了会议,将本次活动相关的情况说明后就安排不同的人从事不同的事务,继而这个
决策就被执行
下去了 - 那当一切都安排就绪后,就在学校的官网上发放了这次活动的详情概述,并通知通过们留意并积极报名参加,那学生属于
参与执行
的人
那上面的这三点就可以像下图这样表示出来
② “管理者” 与 “被管理者”
充分地理解了
“决策” 与 “执行”
之间的关系,接下去我们来看看“管理者” 与 “被管理者”
之间的联系
💬 首先我想问你一个问题,从上大学到现在,你有见过你们学校的校长吗?
- 那同学们肯定是异口同声地回答说:开学典礼的时候见过!
- 那现在这么一想,既然我们连管理者的面都没见过,为什么他可以把我管得这么好呢?给我安排入学、安排床位、安排就餐、安排学业,似乎一切都井然有序,不过连面都没有见过诶
- 其实这样的想法就不对了,谁说不见你面都不能把你管理好呢?校长手底下人可多了去了,各种领导干部、辅导员、部门、学生会,那不是把你管得妥妥的。不看学校,看工作中的话其实也是一样的,拿到你在工作的时候就要你的老板天天跟在你身边管你吗,公司里面有也有各种领导,和部门经理,照样也可以把你给管理好
⭐那我们就得出了第一个结论:管理者和被管理者,其实是不需要直接沟通的!
💬 此时又有同学疑惑说:既然我们都没见过面的话,它是怎么把我管理好的呢?
- 相信你一定也很清楚了,校长才不需要去时常关心你的生活,只要一句话就可以获取你在学校的各种情况:你是哪个学院的、哪个班的、学号是多少、上个学年的学分绩点是多少等等各种信息,为什么它可以拿到这些呢?
- 还记得你刚入学的时候填的各种信息吗?
- 还记得你进入学校的官网查询学期成绩吗?
- 还记得你在班群里日常填写的各种信息搜集吗?
- 这些其实都记录在了档案里📰,不然你的辅导员平常也没跟在你的屁股后头,为何期末可以找到你并且和你聊这么多呢,那校长通过辅导员不就可以看到这些了
💬 不仅是你和你的校长,你和你的父母也是一样
- 设想在高中的时候,为何你在学校发生了什么他们可以立马知道呢?原因就在于他们通过某种途径获取到了你在学校的各种数据,继而才了解到了这些,才可以更好地管理你
⭐那我们就得出了第二个结论:管理的本质:对被管理对象的数据做管理!!
③ 管理的本质:先描述,再组织
💬 上面我在图中只是列出了几个学生,但是真正地在大学中,可能存在着成千上万的学生,那校长是如何去管理这些海量数据的呢?
- 虽然要搜集的学生信息很多,但这些信息其实都是存在重复的,因为对于每个人而言,校长只要搜集那些基本的信息就可以了,例如:姓名、年级、电话、成绩、紧急联系人,那根据我们C语言中所学的 结构体 和C++中所学的 类和对象 就可以对这些信息去做一个封装,如下所示
struct Student{ char name[20]; char grade[10]; int tele; double score; int emerge; };
- 那么每个学生的信息我都可以使用这个结构体去进行描述,那现在每个学生可以进行描述了,但是要怎么组织好这么做学生呢?此时我们可以想到使用我们在数据结构中学习过的链表,我们可以将每个学生看做是一个结点,当前结点的指针域指向下一个结点,就这样把它们一个个串起来
typedef struct StudentListNode{ char name[20]; char grade[10]; int tele; double score; int emerge; struct StudentListNode* next; }SLNode;
那既然有了链表之后,我们就可以对里面的结点进行增、删、查、改了,接下去我结合具体的情景来描述一下
💬 此时校长说:我要找全校数学成绩最好的学生代表我们学校去参加数学竞赛🎯
- 那我们就要根据
score
这字段去链表中查找每一名学生,然后找到他们里面数学成绩最高的一位,那其实也就演变成了对【链表的遍历】
💬 此时校长又说:为了整顿学风,我打算在所有学生中找到综合成绩最差的一名,然后把他开除!❌
- 这一点的话,我们可能需要对链表中的每个结点去记性一个升序或者降序排序,那此时就可以使用到我们所学习过的【头插】【尾插】相关的操作,当链表呈现有序后,找到那个成绩最低的学生结点,然后使用【头删】【尾删】相关的操作就可以将这个结点从当前链表中剔除了
💬 此时校长还说:我发现最近某个寝室的两个学生小王和小李曾经有过斗殴的记录,为了降低再次发生的风险,败坏风气,把它们的班级做一个调整:bed:
- 那首先还是一样,我们需要通过他们的名字去遍历链表,然后查找到它们所在的这个结点,接着将他们分配到不同的班级中即可,算是对链表结点的一个修改。但这个操作的话因为有不同的班级,所以可能需要涉及【哈希桶】,这里不做详解
💬 此时校长最后说:隔壁XX大学最近来了一个转校生,要把加入xx学院的xx班级中
- 这个需求其实很明确,就是当前所在链表添加结点而已,校长可以新
new
出来一个结点,把新增的这名同学的相关属性设置好后就可以将其插入到链表中去了,如果不需要考虑顺序,那直接【尾插】就可以了,若是要考虑顺序的话,还是要使用【插入】
好,以上就是对于我们所构建出来的学生信息链表的相关增删查改属性,即完成了对校长管理工作的建模过程:house:
【总结一下】:
- 当我们要对特定的事物进行管理的时候,管理的思路是:我们不能天天和他打交道,要通过数据去管理它,但数据可能很多,而且要管理的对象有很多信息可能都是重复的,比说我是一个工厂老板,手底下就会有很多员工,它们的很多属性类别基本都是重复的,因此我们可以通过将这些信息先通过一个结构体或者类描述出来,将它们封装在一起,获取到每个员工的信息后再将每一个结点定义初始化出来
- 但是这样还不够,因为他们都是离散的,而不是绑在一起的,所以我们要将它们都组织起来,此时可以使用到之前所学习过的数据结构,例如:链表,那既然有了数据结构将其组织了起来,那就可以对这些数据进行操作了,类似的增、删、查、改或者是排序、搜索都可以,随意地去拿捏这些数据
👉一句话,管理的本质就是:先描述,再组织👈
④ 小结
经过了上面这一系列对硬件管理的感性理解,我们来做一个小结
- 本节我们主要理解的是操作系统如何对硬件做管理,那它是怎么做管理的呢?其实归纳起来就是我们上面所说六个字:先描述,再组织。那对于硬件来说,其实和我们所描述的学生是同一个道理,也有它自己的属性,比如说这个硬件的名称是什么、编号是什么、归类是什么、状态是什么,我们使用最基础的【C语言】就可以去描述这些属性,构成一个个的结点,使用【数据结构】就可以将这些离散的结点组织起来,更好地做数据的管理和修改,即我们上面==对学生信息的管理变成了对链表的增删查改==
- 因此对于上面这一系列的过程,
描述
的过程就是【面向对象】的封装过程,组织
的过程就是【数据结构】的操作过程。所以为什么我们要学习语言呢?为什么我们要学习数据结构呢?本质上我们未来所写的软件或多或少都和管理有关 - 所以语言帮我们完成描述的过程,数据结构帮我们完成组织的过程,只有理解了先描述再组织,才能理解管理的本质,进而去理解操作系统;换言之,想要理解操作系统,就必须得懂语言和数据结构!
⑤ 操作系统、硬件驱动与硬件
上面说了这么半天,继续回归我们开头所讲的校长、辅导员、学生,我们便可以重新去定义一下它们之间的关系
- 校长【发布决策】 ⇒ 操作系统
- 辅导员【执行决策】 ⇒ 硬件驱动
- 学生【参与执行】 ⇒ 硬件
- 对于操作系统和硬件我们上面都有提到过了,不过这里的硬件驱动可能有些读者不太明白,我来讲一讲这个
一般我们每一种硬件设备都会为其配置一个驱动程序,鼠标、键盘、网卡、声卡、显卡都具备驱动程序
- 那有了这些驱动程序后,操作系统就可以管理到下面的硬件了,就和校长有了辅导员之后便很好地对学生做管理一样。首先它会通过各种驱动程序对各种硬件的信息做提取,然后将这些信息全部抽象,面向对象式地将其封装为一个结构体或者类,然后填充设备结构体,构造设备结点,然后将这些结点以某种数据结构管理起来,然后对操作系统对设备的管理就转换为了对链表的增删查改
💬 那操作系统怎么知道一个硬件出问题了呢?
- 那肯定是通过驱动程序的报告来随时查看硬件的状态,或者驱动程序直接在驱动层直接改了某一个结点的状态,然后操作系统在遍历链表结点的时候发现某个结点的状态是
band
就知道他出现问题了
👉 所以操作系统对硬件和软件的耦合过程其实就是对管理做建模的过程
⑥ 操作系统管理的目的
在上一小节中我们谈论到的都是操作系统对下,也就是对硬件的管理,那一开始我有说起过它是一个对软硬件资源进行管理的软件,但是为什么要对它们进行管理呢?就像校长为什么要管理好我们呢?本小节来谈谈这个话题
- 要知道,对于一款操作系统来说,它的生态取决于它的使用人数,如果使用它的人多了,那么它自己也就会被广泛地使用起来,就像Linux一样,因为有其开源社区的存在,它是一块开源的OS,而且安全、可靠,所以使用的人才会这么多,不过这也要取决于用户是否用得舒心
- 为什么这么说呢?加个比方,有一天你下课了准备回宿舍打开电脑玩原神,怪打得好好的,但是电脑五分钟黑屏一次,八分钟蓝屏一次,那你的使用体验感一定不会很好。此时你一定会选择重装系统或者干脆换一个系统
- 因此操作系统必须管理好当前机子的软硬件,给用户一个良好的体验感才可以留住用户
再举个贴近我们生活的例子,日常我们肯定会去餐厅吃饭,那你是会去服务好的餐厅还是服务差的呢?
- 毋庸置疑,一定是【服务好到】,因为有了好的服务,首先心情就会好了,若是一家餐厅🏠连服务都无法保证的话,即使它做得菜再好吃那食客也不会太多
- 因此餐厅的老板必须管理好它手底下的人,那些服务员、吧台人员我们可以视为硬件,那谁是软件呢?你可以认为是菜品🍱,在硬件没有问题的情况下首先可以保证机器可以跑起来,但是我们还要进入操作系统去使用各种软件来满足我们日常的需求。因此在有了一个良好的服务后,我们还会想要一个美味的菜品,对于餐厅老板来说,能对客人满足上面这两点那它的餐厅一定不会太差
【总结一下】:
- 操作系统通过对下管理好软硬件资源,这是它的手段;对上给用户提供 安全、稳定、高效、功能丰富 的执行环境,让用户有一个最佳体验,这就是目的!