🕺作者: 主页
我的专栏 C语言从0到1 探秘C++ 数据结构从0到1 探秘Linux 菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言
🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要,有问题可在评论区提出,感谢阅读!!!
文章目录
- 操作系统概念
- 设计操作系统的目的
- 操作系统定位
- 操作系统的内容
- 如何理解 "管理"
- 系统调用和库函数概念
- 后记
操作系统概念
什么是操作系统?
任何计算机系统都包含一个基本的程序集合,进行软硬件资源管理的一个软件,称为操作系统(OS)。
设计操作系统的目的
- 与硬件交互,管理所有的软硬件资源
- 为用户程序(应用程序)提供一个良好的执行环境
为什么要有操作系统?
答:它负责管理和控制计算机的硬件资源,提供用户与计算机之间的接口,协调和调度各个程序的执行,以及确保系统的安全和稳定运行。简而言之,操作系统存在的目的是为了有效地管理计算机系统的资源,提供良好的用户体验,并保证系统的正常运行。
操作系统定位
- 在整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件
以银行系统为例:
首先大家都知道是有一个银行系统的,那么银行本身上面肯定有各种各样的硬件单元,比如说桌椅、宿舍、电脑、设备、仓库、保险柜。
虽然我们进过银行里面看它是什么样子,但我们看到那些电影脑补的时候,我们应该知道,其中每一种就叫做银行系统当中的一些硬件组件,那么硬件组件其中就需要有人专门去管理这些硬件。其中桌椅板凳我们有后勤的人员,宿舍有宿舍阿姨,电脑设备有公司的 IP 部门,仓库保险柜有受过专业训练的各种保安,那么再往上,只要我们保证桌椅、宿舍、电脑、设备、仓库、保险柜我们全都有了,有了之后给他配上人。
比如说每一个人都能够把自己的各种硬件都能管好,那么桌椅板凳相关数据,宿舍的相关数据,电脑的相关设备各种数据它能够帮我采集上来就可以了。它这里面其中就是我们所谓的叫做银行的一套体系。然后怎么办?就给大家举个例子,比如说我是一个银行的行长,我想决策更换一下老的电脑,那我就要做这个决策是前提条件,是不是我得先让这个管电脑的 it 部门给我汇总一下我们现在的电脑大概都是什么年份的?什么配置,然后那么其中我们可能有一半是老的,一半是新的,那我这个时候就可以做这个决策了。
我说it 部门,给你们拨一笔预算,把电脑设备给我更新一下,好吧?我们不管 15 年之前的,我们全部更换好。当然如果我作为一个行长,我发现这个电脑都挺新的,那我就放弃他这个更新,放弃本身就是决策。
总之我只要能够在上面能够通过某些人获取到电脑设备相关的数据,我也就能够知道对该硬件做好管理,这个其实不难理解,但是同学们,那么大家要明白一个非常重要的道理,就是我们的银行系统当中银行的一套系统,首先需要有一个模块,这个模块功能点需要把所有的这些硬件以驱动程序驱动,那么把它全部管理起来,就相当于有一个专门的负责人把这些硬件全部管理起来。也就是说银行的桌椅、宿舍、电脑设备、仓库都应该被统一的一个人管理起来,这是管理我们硬件,
第二个大家可以看到我们能够理解的一个非常关键的点,就是在银行当中,他主要是给我们提供服务,比如说我去银行办事,那么就会有银行的工作人员来告诉我怎么办,而这批工作人员他根本就不关心桌椅是什么样子,宿舍什么样子,然后电脑设备什么样,保险柜在哪里?他最关心的是你要干啥?你这个客户你是要取钱还是存钱?所以银行当中还会存在大量的员工,这里就是我们所对应的正儿八经银行,在银行体系当中进行银行业务管理的相关人员。
好,下面你再想想,因为我们这些业务人员,他的业务能力其实是有的,他能够帮我们进行存取我们对应的钱,银行里面也有钱,那么这个银行的业务人员就叫做所对应的软件,桌椅板凳以及配套的这些管理人员,他就类比到对应的硬件,所以软件和硬件相结合我们就能够完成某些事情。
比如说我是银行的工作人员,有人专门给我把桌椅关好了,宿舍管好,电脑设备给我调配成最新,各种软件全给我装上,然后仓库、保险柜那么各种管理给我做好,然后我作为银行的工作人员,那么我只需要对接客户,那么这个客户想存钱,好,那么钱给我,我来给用户的账上把钱增加上去,然后把钱放到仓库里。然后如果这个用户想贷款,我就直接根据他的征信,然后评估出他能贷多少钱,甚至他如果有抵押,那我就看下他的抵押额,给他再贷钱。其中你会发现其中如果我们的业务人员和我们的硬件相配合,我们就能够完成某些贷款或者存钱或者取钱的相关业务。
好,那么其中对我们来讲这是银行的工作人员,那么其中银行里面还有各种各样的什么保安,什么大堂经理,乱七八糟的这种人,当然这些其实都是在银行当中办事的,他们的更多角色其实是属于一个共同构成我们银行系统的一些环节。所以对我们来讲,只要有了这样的一套系统,那么只需要让我们的银行行长统一把这批人管理起来好就可以。而其中比如说桌椅板凳出问题了,那么上层这部分就能做管理,那么同样的这一批工作人员,那么他的业务能力怎么样?有没有出问题?其中我们也是需要由我们的行长来对他进行管理,我们可以把这一套东西统一可以看作成叫做银行的管理。
操作系统的内容
操作系统包括什么?
- 内核(进程管理,内存管理,文件管理,驱动管理)
- 其他程序(例如函数库,shell程序等等)
用户部分:自主开发,指令,yum。
用户操作接口部分:库函数,把系统调用的函数再次封装了一遍,提供出来的函数。
system call部分:操作系统为程序员提供的接口。
操作系统部分:内存管理,进程管理,文件管理,驱动管理。
驱动程序:网卡驱动,硬盘驱动,其他驱动,有多少种硬件就对应对少驱动。
硬件部分:网卡,硬盘,其他。
如何理解 “管理”
主要理解好一下两点:
-
1.描述被管理对象
- 描述起来,用struct结构体。
-
2.组织被管理对象
- 组织起来,用链表或其他高效的数据结构。
操作系统是怎么做管理的?
比如说实际上我们在学校当中,校长和学生之间就是典型的管理和被管理者,但是我们实际发现校长和学生是管理者和被管理者,但是他们并不直接沟通,我们从来没见过他,也没见过我,我也没见过他,但是他照样把我管理得明明白白的。
那么为什么呢?是因为那么他本质上不是对我人身做管理,而是对我的个人相关信息做管理,所以所谓的管理本质就是对数据做管理。所以我们需要在校长和学员之间有一个执行者的角色,包括我们的驱动程序,这个其实就叫做辅导员或者是驱动程序帮我能够采集到我们普通客户或者被管理对象的相关数据,然后同时还会执行一些特定的管理命令,那么其中我们的辅导人就是典型的执行者角色,而实际上,那么我们最终被管理对象的数据一定会涉及得非常多,不要觉得你计算机上学校里几万人很直观,你也不要认为计算机上那种硬件它的那些相关数据就不多,实际上它还非常多。
然后再加上操作系统内部可能也会有各种设计方式,所以那么我们最终操作系统就通过驱动程序的存在,就能够帮我们去对硬件或者软件资源进行管理,变成对数据的管理。但这种数据量比较大,操作系统如果没有一个有序的、有组织化的结构的方式把我们的数据组织起来,那么最终也就没办法管理,所以我们最后就得出了一个结论,有的操作系统要管理数据,数据管理没错,但也必须把我们对应的数据采集到之后,然后将它以特定的数据结构组织起来。
所以所谓的对进程做管理,本质上就对我们对应的对软硬件资源做管理,本质上就已经变成了对某种数据结构的管理。
假设我们以通讯录为例建立了一个管理,其实它就可以被我们在计算机当中抽象出来,让我们能够从管理的角度去理解,将管理转化成对某种数据结构的管理,所谓的管理动作最后落实到操作系统内核里,就变成了对某种结构的增删查改,然后那么有了这样的宏观认识之后,最终得出来的结论就是管理的理念。管理的理念就叫做先描述再组织好,也就是说我们要先将被管理对象描述抽象成特定的结构,那当然定义对象肯定是少不了,然后我们新增一个管理对象,其实在内核当中就是新增一个描述类别,也就是我们抽象出来的类或者是struct,用它来定义一个变量,并且的话就是 Malloc new 一个对象,然后将该对象再投入到我们所对应的链表或者各种数据结构当中。
最终操作系统得到的代码,它就转化成了对于这些数据结构的各种数据结构算法,也就变成了所谓的操作实践,叫做链表。比如说链表又可以实现我们所听过的增删查改,以及链表的各种各样其他的一些方式如删节点或者是查节点其实是一样的,对我们来讲,只要能够反过来有了这样的结构,我们就可以很有序地将我们的数据管理起来。数据一旦能够被我们使用特定算法管理起来之后,操作系统就可以将我们的数据再进一步地和驱动程序结合,就能够对硬件做相关管理。
系统调用和库函数概念
-
在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
-
系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。
系统,不管是银行系统还是所谓的叫做操作系统,它不相信任何人,所以他们两个对外暴露提供接口的时候,都是以统一的接口的方式去提供的,没有其他方式,只能使用系统调用接口来访问操作系统。就如同只能通过柜台的方式来访问,那么来跟银行内部的工作人员去沟通,来完成某项工作。
操作系统是一套体系,和银行体系是一样,那银行体系有自己的软件等硬件驱动,还有个所谓的管理者角色还有各种接口,基于这个接口之上就有人帮我们去搭建了各种各样的上层文件。
最典型的就是银行服务,在窗口之外的那些服务人员给我们提供出同样的操作系统,它也有它自己对外的接口,暴露的是不会暴露自己任何细节的,它只会对外以接口的方式去给用户开放适当的权限,怎么让用户去访问呢?这些操作性接口都觉得不方便,所以就有人基于系统接口去完成了各种那封装,然后有的是为了方便操作了必须具有的图形化界面,有了,是为了方便我们编程的,所以就有了我们的更多语言第三方标准后,然后甚至还有各种其他比较。所以当我们不断再去网上搭建的时候,我们会发现其实用起来就应该越来越舒服,越来越简单。
后记
我们最终得出来了两个大结论,第一个,所谓操作系统进行管理,需要先描述,再组织。第二个结论,操作系统对外提供服务是通过系统这种接口的方式来完成对外提供服务的。其他只要理解一下就好了,本篇就结束了~