【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【总结一下】:

  • 操作系统通过对下管理好软硬件资源,这是它的手段;对上给用户提供 安全、稳定、高效、功能丰富 的执行环境,让用户有一个最佳体验,这就是目的
相关文章
|
7月前
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
6月前
|
存储 Linux iOS开发
【Linux】冯诺依曼体系与操作系统理解
本文深入浅出地讲解了计算机体系的两大核心概念:冯诺依曼体系结构与操作系统。冯诺依曼体系作为现代计算机的基础架构,通过中央处理器、存储器和输入输出设备协同工作,解决了硬件性能瓶颈问题。操作系统则是连接硬件与用户的桥梁,管理软硬件资源,提供运行环境。文章还详细解析了操作系统的分类、意义及管理方式,并重点阐述了系统调用的作用,为学习Linux系统编程打下坚实基础。适合希望深入了解计算机原理和技术内幕的读者。
154 1
|
2月前
|
监控 Linux 开发者
理解Linux操作系统内核中物理设备驱动(phy driver)的功能。
综合来看,物理设备驱动在Linux系统中的作用是至关重要的,它通过与硬件设备的紧密配合,为上层应用提供稳定可靠的通信基础设施。开发一款优秀的物理设备驱动需要开发者具备深厚的硬件知识、熟练的编程技能以及对Linux内核架构的深入理解,以确保驱动程序能在不同的硬件平台和网络条件下都能提供最优的性能。
129 0
|
4月前
|
NoSQL Linux 编译器
GDB符号表概念和在Linux下获取符号表的方法
通过掌握这些关于GDB符号表的知识,你可以更好地管理和理解你的程序,希望这些知识可以帮助你更有效地进行调试工作。
188 16
|
4月前
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
93 20
|
4月前
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
113 18
|
4月前
|
开发框架 关系型数据库 Java
Linux操作系统中JDK、Tomcat、MySQL的完整安装流程以及J2EE后端接口的部署
然后Tomcat会自动将其解压成一个名为ROOT的文件夹。重启Tomcat,让新“植物”适应新环境。访问http://localhost:8080/yourproject看到你的项目页面,说明“植物”种植成功。
126 10
|
3月前
|
存储 Linux Shell
Linux进程概念-详细版(二)
在Linux进程概念-详细版(一)中我们解释了什么是进程,以及进程的各种状态,已经对进程有了一定的认识,那么这篇文章将会继续补全上篇文章剩余没有说到的,进程优先级,环境变量,程序地址空间,进程地址空间,以及调度队列。
66 0
|
3月前
|
Linux 调度 C语言
Linux进程概念-详细版(一)
子进程与父进程代码共享,其子进程直接用父进程的代码,其自己本身无代码,所以子进程无法改动代码,平时所说的修改是修改的数据。为什么要创建子进程:为了让其父子进程执行不同的代码块。子进程的数据相对于父进程是会进行写时拷贝(COW)。
70 0
|
6月前
|
存储 Linux 调度
【Linux】进程概念和进程状态
本文详细介绍了Linux系统中进程的核心概念与管理机制。从进程的定义出发,阐述了其作为操作系统资源管理的基本单位的重要性,并深入解析了task_struct结构体的内容及其在进程管理中的作用。同时,文章讲解了进程的基本操作(如获取PID、查看进程信息等)、父进程与子进程的关系(重点分析fork函数)、以及进程的三种主要状态(运行、阻塞、挂起)。此外,还探讨了Linux特有的进程状态表示和孤儿进程的处理方式。通过学习这些内容,读者可以更好地理解Linux进程的运行原理并优化系统性能。
223 4

热门文章

最新文章