【Linux】冯诺依曼体系结构与操作系统概念理解-2

简介: 【Linux】冯诺依曼体系结构与操作系统概念理解

4、感性理解操作系统对硬件做管理【✔】

既然操作系统是做管理的,那它是怎么“管理”的呢?本小节我会通过一些现实的场景案例带读者来进行理解

  • 说起管理,如果读者是一个大学生,一定体会过管理和被管理的不同,如果你只是一名普通的学生,也没什么职务,可能你只有被管理的份;但若是你在班里面或者学生会担任一些职务的话,就会了解到管理别人是什么感觉,但你也只能管管学生,放眼学校,比你权利大的人多的是,例如:辅导员、校长

image.png

若是有校长和辅导员的存在,那我们就肯定是那个被管理的人了,那我现在想要问一个问题:对于这二者来说谁是管理者呢?

  • 此时很同学就会异口同声地说到:那肯定是辅导员呀!校长什么时候管过我们😎

但是我想告诉你的是,真正的管理者却是校长,只是你没有察觉而已,要理解这一点,我们要先来看看“决策” 与 “执行”这两个概念

① “决策” 与 “执行”

💬 首先我想问:对于一个管理者来说,它为什么被称为管理者呢?

  • 在我们现实生活中所做的各种事情,无非可以分为两种:1.决策  2.执行
  • 那什么叫做==决策==呢?决策也就是你决定是否要去做某件事情,比方说今天有一节水课~,这个老师讲得云里雾里的,听得你都要睡着了,那你可以决定不去听他的课。但是呢若有一些课你觉得很重要,老师也讲得不错,那你会决定去听这节课
  • 那什么又叫做==执行==呢?上面说到我们自己可以决定是否要去上这个课、或者不上,但这也只是决定,还没有行动呢!执行其实就是行动:不去上这个课的话就考虑做其他有意义的事,去上这个课的话就会需要将对应的教科书、笔记放到书包然后背着书包去教室

image.png

初步理解了“决策” 与 “执行”的概念后,我们就将它映射到刚才所说的校长、辅导员和学生中来

  • 其实对于我们学生来说,“决策” 与 “执行”是混在一起的,因为做决定和执行都是我们自己,就像你来上大学你妈妈一定会和你说:把自己管好,不要去外面瞎晃;饭要吃好,不要为了省钱去吃一些垃圾食品,那这前者就是决策,后者便是执行
  • 那其实在我们生活中的其他地方,决策和执行其实是会被分得很明确的,例如说在公司中,你的领导一定是一个决策者,而不是一个执行者,它只是决定哪些事情要去做,具体怎么做还是交给手底下的人去实现

image.png

那经过我上面这么一番叙述的话,你应该可以明白什么是【决策】和【执行】了,此时我想再让你回答前面的那个问题,到底谁才是管理者

  • 校长!它才是真正的管理者,虽然在很多地方并没有看到他在“执行”,因为这些不是他做的,他要做的是“决策”
  • 举些很简单的例子,比方说学校近期要举办一些大型活动,但是贸然在学校内部搞一些活动也没有成文规矩,此时就需要得到高层领导的批准才可以,那么就需要层层上报给校长进行审批,通过一些会议后上面同意了,那下面才可以部署实施

那有的同学就好奇了,难道学生可以直接和校长打交道吗?这又成何体统,这些审批通过后就是直接当面告知学生吗?

  • 如果你是一个正常的大学生的话,一定不会有这样的经历, 校长是不会直接和学生打交道的,除非它真得非常亲民,每天无所事事,一般都需要一个中间人,它是谁呢?也就是我们“亲爱的辅导员”:heart:

image.png

  • 当校长做完决策之后,辅导员就会落实这些决策,做好一些大体的规划后就可以交给一些学生会的人来负责了

这里再举个例子把上面的知识做个总结回顾

  1. 那比方说现在我们学校要举办一个程序设计大赛,以此来选拔出编程能力强的一些同学代表我们学校去参加外面的比赛,此时当校长决策好这件事后,就把计算机学院的辅导员小王叫过来说:我们学校近期决定举办一场编程大赛💻,这是属于你们计算机学院的范畴,就交给你来办了,这里的话是一万块钱的资金,找财务处去领就行,用于布置场地和购置一些材料、奖品
  2. 那辅导员在收到任务后就立马召集学院中的各个实验室的负责人,也安排开了会议,将本次活动相关的情况说明后就安排不同的人从事不同的事务,继而这个决策就被执行下去了
  3. 那当一切都安排就绪后,就在学校的官网上发放了这次活动的详情概述,并通知通过们留意并积极报名参加,那学生属于参与执行的人

那上面的这三点就可以像下图这样表示出来

image.png

② “管理者” 与 “被管理者”

充分地理解了“决策” 与 “执行”之间的关系,接下去我们来看看“管理者” 与 “被管理者”之间的联系

💬 首先我想问你一个问题,从上大学到现在,你有见过你们学校的校长吗?

  • 那同学们肯定是异口同声地回答说:开学典礼的时候见过!
  • 那现在这么一想,既然我们连管理者的面都没见过,为什么他可以把我管得这么好呢?给我安排入学、安排床位、安排就餐、安排学业,似乎一切都井然有序,不过连面都没有见过诶
  • 其实这样的想法就不对了,谁说不见你面都不能把你管理好呢?校长手底下人可多了去了,各种领导干部、辅导员、部门、学生会,那不是把你管得妥妥的。不看学校,看工作中的话其实也是一样的,拿到你在工作的时候就要你的老板天天跟在你身边管你吗,公司里面有也有各种领导,和部门经理,照样也可以把你给管理好

image.png

⭐那我们就得出了第一个结论:管理者和被管理者,其实是不需要直接沟通的!

💬 此时又有同学疑惑说:既然我们都没见过面的话,它是怎么把我管理好的呢?

  • 相信你一定也很清楚了,校长才不需要去时常关心你的生活,只要一句话就可以获取你在学校的各种情况:你是哪个学院的、哪个班的、学号是多少、上个学年的学分绩点是多少等等各种信息,为什么它可以拿到这些呢?
  • 还记得你刚入学的时候填的各种信息吗?
  • 还记得你进入学校的官网查询学期成绩吗?
  • 还记得你在班群里日常填写的各种信息搜集吗?
  • 这些其实都记录在了档案里📰,不然你的辅导员平常也没跟在你的屁股后头,为何期末可以找到你并且和你聊这么多呢,那校长通过辅导员不就可以看到这些了

💬 不仅是你和你的校长,你和你的父母也是一样

  • 设想在高中的时候,为何你在学校发生了什么他们可以立马知道呢?原因就在于他们通过某种途径获取到了你在学校的各种数据,继而才了解到了这些,才可以更好地管理你

image.png

⭐那我们就得出了第二个结论:管理的本质:对被管理对象的数据做管理!!

③ 管理的本质:先描述,再组织

💬 上面我在图中只是列出了几个学生,但是真正地在大学中,可能存在着成千上万的学生,那校长是如何去管理这些海量数据的呢?

  • 虽然要搜集的学生信息很多,但这些信息其实都是存在重复的,因为对于每个人而言,校长只要搜集那些基本的信息就可以了,例如:姓名、年级、电话、成绩、紧急联系人,那根据我们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;

image.png

那既然有了链表之后,我们就可以对里面的结点进行增、删、查、改了,接下去我结合具体的情景来描述一下

💬 此时校长说:我要找全校数学成绩最好的学生代表我们学校去参加数学竞赛🎯

  • 那我们就要根据score这字段去链表中查找每一名学生,然后找到他们里面数学成绩最高的一位,那其实也就演变成了对【链表的遍历

💬 此时校长又说:为了整顿学风,我打算在所有学生中找到综合成绩最差的一名,然后把他开除!❌

  • 这一点的话,我们可能需要对链表中的每个结点去记性一个升序或者降序排序,那此时就可以使用到我们所学习过的【头插】【尾插】相关的操作,当链表呈现有序后,找到那个成绩最低的学生结点,然后使用【头删】【尾删】相关的操作就可以将这个结点从当前链表中剔除了

💬 此时校长还说:我发现最近某个寝室的两个学生小王和小李曾经有过斗殴的记录,为了降低再次发生的风险,败坏风气,把它们的班级做一个调整:bed:

  • 那首先还是一样,我们需要通过他们的名字去遍历链表,然后查找到它们所在的这个结点,接着将他们分配到不同的班级中即可,算是对链表结点的一个修改。但这个操作的话因为有不同的班级,所以可能需要涉及【哈希桶】,这里不做详解

💬 此时校长最后说:隔壁XX大学最近来了一个转校生,要把加入xx学院的xx班级中

  • 这个需求其实很明确,就是当前所在链表添加结点而已,校长可以新new出来一个结点,把新增的这名同学的相关属性设置好后就可以将其插入到链表中去了,如果不需要考虑顺序,那直接【尾插】就可以了,若是要考虑顺序的话,还是要使用【插入

好,以上就是对于我们所构建出来的学生信息链表的相关增删查改属性,即完成了对校长管理工作的建模过程:house:

【总结一下】:

  • 当我们要对特定的事物进行管理的时候,管理的思路是:我们不能天天和他打交道,要通过数据去管理它,但数据可能很多,而且要管理的对象有很多信息可能都是重复的,比说我是一个工厂老板,手底下就会有很多员工,它们的很多属性类别基本都是重复的,因此我们可以通过将这些信息先通过一个结构体或者类描述出来,将它们封装在一起,获取到每个员工的信息后再将每一个结点定义初始化出来
  • 但是这样还不够,因为他们都是离散的,而不是绑在一起的,所以我们要将它们都组织起来,此时可以使用到之前所学习过的数据结构,例如:链表,那既然有了数据结构将其组织了起来,那就可以对这些数据进行操作了,类似的增、删、查、改或者是排序、搜索都可以,随意地去拿捏这些数据

👉一句话,管理的本质就是:先描述,再组织👈

④ 小结

经过了上面这一系列对硬件管理的感性理解,我们来做一个小结

  • 本节我们主要理解的是操作系统如何对硬件做管理,那它是怎么做管理的呢?其实归纳起来就是我们上面所说六个字:先描述,再组织。那对于硬件来说,其实和我们所描述的学生是同一个道理,也有它自己的属性,比如说这个硬件的名称是什么、编号是什么、归类是什么、状态是什么,我们使用最基础的【C语言】就可以去描述这些属性,构成一个个的结点,使用【数据结构】就可以将这些离散的结点组织起来,更好地做数据的管理和修改,即我们上面==对学生信息的管理变成了对链表的增删查改==
  • 因此对于上面这一系列的过程,描述的过程就是【面向对象】的封装过程,组织的过程就是【数据结构】的操作过程。所以为什么我们要学习语言呢?为什么我们要学习数据结构呢?本质上我们未来所写的软件或多或少都和管理有关
  • 所以语言帮我们完成描述的过程,数据结构帮我们完成组织的过程,只有理解了先描述再组织,才能理解管理的本质,进而去理解操作系统;换言之,想要理解操作系统,就必须得懂语言和数据结构!

⑤ 操作系统、硬件驱动与硬件

上面说了这么半天,继续回归我们开头所讲的校长、辅导员、学生,我们便可以重新去定义一下它们之间的关系

  • 校长【发布决策】 ⇒ 操作系统
  • 辅导员【执行决策】 ⇒ 硬件驱动
  • 学生【参与执行】 ⇒ 硬件

image.png

  • 对于操作系统和硬件我们上面都有提到过了,不过这里的硬件驱动可能有些读者不太明白,我来讲一讲这个

一般我们每一种硬件设备都会为其配置一个驱动程序,鼠标、键盘、网卡、声卡、显卡都具备驱动程序

image.png

  • 那有了这些驱动程序后,操作系统就可以管理到下面的硬件了,就和校长有了辅导员之后便很好地对学生做管理一样。首先它会通过各种驱动程序对各种硬件的信息做提取,然后将这些信息全部抽象,面向对象式地将其封装为一个结构体或者类,然后填充设备结构体,构造设备结点,然后将这些结点以某种数据结构管理起来,然后对操作系统对设备的管理就转换为了对链表的增删查改

💬 那操作系统怎么知道一个硬件出问题了呢?

  • 那肯定是通过驱动程序的报告来随时查看硬件的状态,或者驱动程序直接在驱动层直接改了某一个结点的状态,然后操作系统在遍历链表结点的时候发现某个结点的状态是band就知道他出现问题了

👉 所以操作系统对硬件和软件的耦合过程其实就是对管理做建模的过程

⑥ 操作系统管理的目的

在上一小节中我们谈论到的都是操作系统对下,也就是对硬件的管理,那一开始我有说起过它是一个对软硬件资源进行管理的软件,但是为什么要对它们进行管理呢?就像校长为什么要管理好我们呢?本小节来谈谈这个话题

  • 要知道,对于一款操作系统来说,它的生态取决于它的使用人数,如果使用它的人多了,那么它自己也就会被广泛地使用起来,就像Linux一样,因为有其开源社区的存在,它是一块开源的OS,而且安全、可靠,所以使用的人才会这么多,不过这也要取决于用户是否用得舒心
  • 为什么这么说呢?加个比方,有一天你下课了准备回宿舍打开电脑玩原神,怪打得好好的,但是电脑五分钟黑屏一次,八分钟蓝屏一次,那你的使用体验感一定不会很好。此时你一定会选择重装系统或者干脆换一个系统

image.png

  • 因此操作系统必须管理好当前机子的软硬件,给用户一个良好的体验感才可以留住用户

再举个贴近我们生活的例子,日常我们肯定会去餐厅吃饭,那你是会去服务好的餐厅还是服务差的呢?

  • 毋庸置疑,一定是【服务好到】,因为有了好的服务,首先心情就会好了,若是一家餐厅🏠连服务都无法保证的话,即使它做得菜再好吃那食客也不会太多
  • 因此餐厅的老板必须管理好它手底下的人,那些服务员、吧台人员我们可以视为硬件,那谁是软件呢?你可以认为是菜品🍱,在硬件没有问题的情况下首先可以保证机器可以跑起来,但是我们还要进入操作系统去使用各种软件来满足我们日常的需求。因此在有了一个良好的服务后,我们还会想要一个美味的菜品,对于餐厅老板来说,能对客人满足上面这两点那它的餐厅一定不会太差

image.png【总结一下】:

  • 操作系统通过对下管理好软硬件资源,这是它的手段;对上给用户提供 安全、稳定、高效、功能丰富 的执行环境,让用户有一个最佳体验,这就是目的
相关文章
|
21天前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
46 1
|
1月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
59 0
Vanilla OS:下一代安全 Linux 发行版
|
22天前
|
安全 Linux 数据安全/隐私保护
深入Linux操作系统:文件系统和权限管理
在数字世界的海洋中,操作系统是连接用户与硬件的桥梁,而Linux作为其中的佼佼者,其文件系统和权限管理则是这座桥梁上不可或缺的结构。本文将带你探索Linux的文件系统结构,理解文件权限的重要性,并通过实际案例揭示如何有效地管理和控制这些权限。我们将一起航行在Linux的命令行海洋中,解锁文件系统的奥秘,并学习如何保护你的数据免受不必要的访问。
|
23天前
|
搜索推荐 Linux
深入理解Linux操作系统的启动过程
本文旨在揭示Linux操作系统从开机到完全启动的神秘面纱,通过逐步解析BIOS、引导加载程序、内核初始化等关键步骤,帮助读者建立对Linux启动流程的清晰认识。我们将探讨如何自定义和优化这一过程,以实现更高效、更稳定的系统运行。
|
21天前
|
存储 缓存 网络协议
Linux操作系统的内核优化与性能调优####
本文深入探讨了Linux操作系统内核的优化策略与性能调优方法,旨在为系统管理员和高级用户提供一套实用的指南。通过分析内核参数调整、文件系统选择、内存管理及网络配置等关键方面,本文揭示了如何有效提升Linux系统的稳定性和运行效率。不同于常规摘要仅概述内容的做法,本摘要直接指出文章的核心价值——提供具体可行的优化措施,助力读者实现系统性能的飞跃。 ####
|
22天前
|
缓存 监控 网络协议
Linux操作系统的内核优化与实践####
本文旨在探讨Linux操作系统内核的优化策略与实际应用案例,深入分析内核参数调优、编译选项配置及实时性能监控的方法。通过具体实例讲解如何根据不同应用场景调整内核设置,以提升系统性能和稳定性,为系统管理员和技术爱好者提供实用的优化指南。 ####
|
24天前
|
运维 监控 Linux
Linux操作系统的守护进程与服务管理深度剖析####
本文作为一篇技术性文章,旨在深入探讨Linux操作系统中守护进程与服务管理的机制、工具及实践策略。不同于传统的摘要概述,本文将以“守护进程的生命周期”为核心线索,串联起Linux服务管理的各个方面,从守护进程的定义与特性出发,逐步深入到Systemd的工作原理、服务单元文件编写、服务状态管理以及故障排查技巧,为读者呈现一幅Linux服务管理的全景图。 ####
|
26天前
|
消息中间件 安全 Linux
深入探索Linux操作系统的内核机制
本文旨在为读者提供一个关于Linux操作系统内核机制的全面解析。通过探讨Linux内核的设计哲学、核心组件、以及其如何高效地管理硬件资源和系统操作,本文揭示了Linux之所以成为众多开发者和组织首选操作系统的原因。不同于常规摘要,此处我们不涉及具体代码或技术细节,而是从宏观的角度审视Linux内核的架构和功能,为对Linux感兴趣的读者提供一个高层次的理解框架。
|
28天前
|
人工智能 安全 Linux
Linux操作系统的演变与未来趋势###
本文深入探讨了Linux操作系统从诞生至今的发展历程,分析了其开源模式对技术创新和IT行业的影响,并展望了Linux在未来技术生态中的角色。通过历史回顾、现状分析和未来预测,本文旨在为读者提供一个关于Linux操作系统全面而深入的视角。 ###
|
28天前
|
缓存 并行计算 Linux
深入解析Linux操作系统的内核优化策略
本文旨在探讨Linux操作系统内核的优化策略,包括内核参数调整、内存管理、CPU调度以及文件系统性能提升等方面。通过对这些关键领域的分析,我们可以理解如何有效地提高Linux系统的性能和稳定性,从而为用户提供更加流畅和高效的计算体验。
30 2