【Linux&操作系统】2. 操作系统

102 阅读8分钟

2 操作系统 -- Operator_System

2.1 概念

  • 操作系统(OS)是一个基本的软件集合,是用于管理软硬件的软件

  • 狭义上说的操作系统,其实应该指的是操作系统的内核(内核由 进程管理 内存管理 文件管理 设备管理 四大部分构成)

  • 比方说,我们说安卓的底层是Linux,其实指的是安卓系统的内核使用的是Linux内核

  • 但广义上,操作系统除了内核之外,还包括提供的库,shell软件,其他预装的软件等等

  • 比方说,咱不可能指望着用户看着这一堆操作系统内核,就知道怎么使用手机,还得需要为了这么个小型移动计算机做其他适配,比方说预装文件管理软件,相机,短信,联系人等等,还要专门搞一个适配触摸屏的驱动,使用户能到手即用,同时还得配备一些开发用的库,方便开发人员的开发

  • 所以我们说的安卓系统,是泛指广义上的安卓系统,包括有其他附加程序和Linux内核

2.2 系统的层级概念和设计OS的目的

  • 我们在学习编程语言时就了解过,程序设计就讲究一个"高内聚低耦合",以方便后续维护

  • 而计算机也是如此,我们引入一个系统层级的概念 alt text转存失败,建议直接上传图片文件

  • 操作系统向下兼容硬件,与硬件进行交互沟通

  • 以此向上为用户的使用创造良好稳定的环境

  • 比方说用户想玩游戏,就需要显卡提供良好的3D处理能力

  • 其中,驱动程序用于帮助系统沟通硬件,驱动程序能够直接访问硬件

  • 系统调用接口用于沟通用户操作接口和操作系统,什么叫做系统调用接口?

  • 比方说有一个函数叫做printf(),这个函数底层使用了很多C语言的库函数(即用户操作接口),然后库函数又调用了很多系统级接口,而系统调用接口其实就是对操作系统的某些功能的封装,所以我们可以通过调用系统调用接口来让操作系统帮我们做一些事情

  • printf通过库函数和系统调用接口,将数据传输到系统,系统又会将数据通过驱动程序与硬件沟通并传递数据,最终输出到用户的显示器上,并且,看上去是一个多么简单的步骤,实际上底层做了很多很多事情

  • 此时就意味着,如果一个用户操作的接口,能控制硬件完成某些事情,就意味着这个接口一定会贯穿整个软硬件层级体系结构

  • 总结:

    1. 设计OS的目的,是为了沟通硬件,为用户创造更稳定的使用环境
    2. 软硬件体系结构一定是层级的
    3. 要访问操作系统,就需要系统调用接口来访问
    4. 一个用户层接口如果沟通了硬件,则这个接口一定贯穿了整个软硬件体系结构
    5. 库有可能封装了系统调用接口,以此沟通系统

2.3 理解操作系统

2.3.1 操作系统在整个体系中的功能
  • 准确来说,操作系统是用于管理的软件
2.3.2 理解管理(包含个人理解)
  • 操作系统的地位在整个计算机软硬件架构中都是非常重要的存在,类似于高级官员的地位,一人之下万人之上,管理着所有硬件

  • 而硬件就属于平民百姓,受操作系统管理,但是事实是,硬件数量特别多,操作系统无法管理这么多硬件,并且,操作系统也没有必要一个人管理所有硬件

  • 如何理解操作系统没有必要一个人管理所有硬件?

  • 要搞懂这个问题,首先要明白,操作系统是如何管理底下的硬件的

  • 如果你是高级官员,需要直接和百姓沟通吗?事实是一般情况下不需要直接沟通,不沟通如何管理呢?靠的是基层官员,社区工作人员的工作报告等等

  • 例如社区工作人员对社区的一些调查,上访,等等得出的信息,总结成工作报告,汇报给上级部门

  • 于是上级官员就可以根据工作报告,对基层管理做出要求和意见,比方说哪哪绿化要改善,哪哪投入更多基层建设经费等等

  • 发现没有,管理者靠什么管理民众?靠的是数据!

  • 所以事实是,操作系统管理管理硬件,靠的是驱动程序传给操作系统的数据,操作系统通过驱动程序间接管理底下的硬件

  • 所以说,社区工作人员可以为每个百姓建一个表格,每个表格上都写明百姓的各种信息,例如姓名,年龄,证件号码,职位,以及其他反馈等等,这些信息都会直接给到上级官员,当上级官员看到一些信息不太妥当之后,就会及时做出调整,例如对某些事物的反馈,以及某地老龄化是否严重等等

  • 并且,我们还发现,所有的人都可以套用这个表格模板,都可以写一份一样的类似于调查问卷的东西,合订成一个册子

  • 于是,我们就得出一句至关重要的话:"先描述,再组织"

  • 操作系统管理底层硬件是一个"建模"的过程

  • 所有的硬件信息,都可以套用进同一个类,即搞一个调查问卷,再搞一个容器,例如链表去存好这些类,即合订成一个册子,这样操作系统就可以很好地了解底层情况

  • 我们说的,"设计类"就是"先描述",或者说"先'面向对象'描述",而"再组织"就是"设计容器来管理"

  • 以"先描述,再组织"为核心,以此就可以管理生活中的任何事物

  • 为什么说不用管理所有硬件呢?因为很多硬件管理它,根本没有意义,例如电感,电容这些东西,根本不需要管理,只有非常核心的部分才需要管理,比方说显卡中的显存和核心等等

  • 就好比,社区有必要获取一个常年不出门的技术宅的信息吗?没必要获取对吧,获取了也不会改善社区问题,他又不出门

2.3.3 系统调用和库函数的概念
  • 在上面的小节中,我们了解到,系统扮演者管理者的角色,他会向底层硬件索取数据,然后搞容器管理起来,方便以后或者现在用到

  • 问题是,用户能直接增删查改这些数据吗?答案是不行,因为操作系统过于复杂,所以操作系统不相信任何人都是操作系统级的开发者,把所有人都一棒子打死,没有人可以直接访问数据

  • 计算机界有一个非常经典的话:"没有什么问题是加一层中间层不能解决的,如果不行,就再加一层"

  • 同时,我们也在学习CPP的时候了解过封装的概念,就是向外部提供接口,不把底层细节暴露给外部,也不允许外部访问底层细节,这样做是为了一定的可维护性,也是为了安全

  • 于是,系统级调用就出现了,他就扮演者这个封装操作系统数据的角色,只向外部提供一定的接口

  • 此时新的问题又产生了,有句老话说得好:"人和人的差距有时候比人和狗的差距还大"

  • 比方说为什么计算机底层硬件要搞这么多防呆式接口?就是因为有的人完全不懂计算机硬件,也想给电脑换换内存,加个硬盘啥的

  • 而用户操作接口层,就是因此而诞生,它默认各位都是傻子,不懂系统及级调用的使用方式,于是再给你套一层,你要是懂,我也没有封装,只是套了一层,你仍然可以访问到系统级调用,你要是不懂,也可以用我提供给你的呆瓜式接口,涵盖绝大部分常用功能,也能间接访问到系统调用接口

  • 这也是很多库函数,shell外壳等等的设计理念


  • 如有问题或者有想分享的见解欢迎留言讨论