[学点操作系统]初识操作系统

·  阅读 1060
[学点操作系统]初识操作系统

本文正在参加「金石计划 . 瓜分6万现金大奖」

前言

       这是本专栏【学点操作系统】的第一篇文章。本文就来分享一波作者对操作系统的初步认识。

       笔者水平有限,难免存在纰漏,所以下文有些内容可能不太严谨和准确,欢迎指正交流。

冯诺依曼体系结构

       我们常见的计算机(如笔记本)和我们不常见的计算机(如服务器),大部分都遵守冯诺依曼体系,这是一种计算机硬件体系结构。

image-20221030194054311

       这里的存储器指的是什么呢?——内存。

       而内存具有一个特点:带电存储,掉电易失、

       与内存相对的就是外存,它具有永久性存储能力,常见设备有硬盘等,外存不是这里指的存储器,而是外设的一种,属于输入输出设备。

image-20221030194029997

       截至目前,我们所认识的计算机,都是又一个个的硬件组件组成。

       输入单元:包括键盘,鼠标,扫描仪,手写板等

       中央处理器(CPU,又叫芯片):含有运算器和控制器以及其他器件

       输出单元:显示器,打印机等

       输入输出单元:外存和网卡

       cpu其实很“笨”,只能被动地接受别人的指令和数据——执行别人的指令,计算别人的数据。要做到这些需要cpu先能够认识别人的指令,那么它是如何识别的呢?就像是人类的语言体系一样,cpu它有自己对应的一套指令集。我们写的代码通过编译链接得到的二进制可执行程序为什么能被cpu识别呢?本质上是遍历链接过程把高级语言翻译成了cpu能够识别的指令,这样就能让cpu运行我们设计好的程序了。

       关于冯诺依曼体系结构,需要强调的是:这里不考虑缓存情况,CPU能且只能对内存进行读写,不能直接访问外设(输入或输出设备),目的是提高整机效率。

       外设(输入或输出设备)要输入或者输出数据,也只能从内存中读取或者写入内存。

       一句话,所有设备都只能直接和内存打交道。

image-20221030201807036

       而内存一开始就有数据么?没有,一般是从输入设备传入的。那么内存是等到cpu管它要数据的时候才去输入设备取么?不是的,这样的话内存有啥意义啊,不还是相当于让cpu直接和外设打交道嘛,所以内存一般都会预先载入数据,就比如开机时预先载入了操作系统到内存。这样看来,内存其实是一块大大的缓存,用来协调cpu和外设速度不匹配的问题。内存最常打交道的还是硬盘。

       不过有个问题:对内存的管理工作又是谁在做呢?我们提到的冯诺依曼体系结构是计算机硬件层面的组织结构,而对硬件的管理工作一般交给软件去做,就比如操作系统帮我们做决策。

       通过上述内容我们或许就能解答这个问题了:程序要运行为什么必须先加载到内存?

       因为cpu要访问我的程序数据,执行我的代码指令,就必须到内存中去取,而我的程序运行前一直存放在硬盘中,需要先将程序内容从硬盘加载到内存中,然后才能让cpu去访问,由于cpu与硬盘都只能和内存打交道,所以必须让内存作为“数据中转站”。

       对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上,我们试着来解释一下,从我登录上qq和某位朋友聊天开始,数据的流动过程如何。

       从我打开窗口,开始给他发消息,到他收到并看见消息之后的数据流动过程。

image-20221030205510368

       如果是在qq上发送文件呢?

image-20221030205720068

初识操作系统

概念

       任何计算机系统都包含一个基本的程序集合,称为操作系统(OS),它是一个进行软硬件资源管理的软件

       笼统的理解,操作系统包括:

       内核(进程管理,内存管理,文件管理,驱动管理)

       其他程序(例如函数库, shell程序等等)

       为什么操作系统要管理软硬件呢?

image-20221030212525219

       操作系统对下通过合理地管理软硬件资源(手段)对上来为用户提供良好的(稳定的、高效的,安全的)执行环境(目的)。

理解管理

       在整个计算机软硬件架构中,操作系统的定位是: 一款纯正的“搞管理”的软件。

       如何理解 "管理"?

       比如在大学里,大学生的就近管理者是辅导员,但是说实话大部分学生一学年下来都没见过辅导员,那他又是如何管理大学生的呢?

       对于管理者要建立这样的理解:管理者不需要和被管理者直接交互,依旧能管理好被管理对象。

       所以说这是怎么做到的呢?

       一般与大学生直接交互的都是各班班干或学生会,他们可不算是管理者,真正的管理者需要对重大事宜有决策的能力。对于管理者而言,他们的任务便是审时度势,做决策和做执行。而做决策是需要一定依据的,而依据来源于什么?来源于管理者所获取的数据

       虽然大学生不直接与辅导员打交道,但是他们的所有数据早就被辅导员拿到了,而且数据还在一直更新。辅导员的一切决策都是基于手中的数据和学院政策与规定的,比如看哪些学生绩点太低,需要push一下这些学生学习。

       管理者对于被管理者的管理,在本质上其实是对于被管理者的数据进行管理。

       说了一大堆,可还是不知道所谓的数据是从哪来的,管理者不直接和被管理者交互又该如何拿到数据呢?而且被管理者的数据是持续更新的,管理者又该如何一直拿到更新的数据呢?

       所以说,在管理者和被管理者之间应当还有一个中间层——执行者

       管理者负责根据上报的数据做决策,执行者负责两个任务:一是和被管理者接触以拿到对应数据,二是执行管理者分派的指令。

       以上所述其实都能适用于操作系统和硬件,它们之间也有一个中间层——驱动程序

image-20221101091157401

       我们接着聊,管理者拿到数据后该如何操作和管理呢?就比如辅导员拿到学生的数据,直接看的话会发现杂乱无章,不过其实学生的信息种类是一样的,就像姓名、性别、电话、家庭住址、成绩等等,可以把信息高度提炼出来,抽象为一个struct结构体,再把学生数据填充到一个个结构体中来进行管理。

       然而要管理的学生数量是在有点大,为了便于管理,可以建议辅导员建立链表,这样一来,原本对学生数据做管理就变成了对链表做管理。

image-20221101092958305

       这实际上是一个对被管理对象进行建模的过程,重点在于管理者要做到“先描述,再组织”,也就是先根据被管理者的数据进行概括和抽象,再对这一抽象用数据结构进行组织,因此对于数据的管理也就变成了对于数据结构的管理,这就是我们操作系统的管理手段。

小结一下

       管理的本质是对数据做管理,管理的方法是“先描述,再组织”。

       计算机管理硬件的方法:

       1.描述起来,用struct结构体或其他(和语言有关)

       2.组织起来,用链表或其他(和数据结构有关)

理解接口

       在现实生活中,为什么银行不让我进入它们的仓库或者用他们的电脑,反而柜台都用厚厚的玻璃围起来只留下一个小口来办理业务?因为银行不相信任何人,即使我确实没有坏心思也不会准许我,若要一一甄别来者是否图谋不轨的代价太大了,于是乎不管你是谁都不允许进入柜台以内(除了银行相关工作人员)。

       你想啊,要是银行真的傻傻暴露自己的仓库和电脑的话,就算你是个好人,但保不准下一秒就有别人强制非法地搞破坏,那银行就毫无抵抗之力了。

image-20221105095007703

       总的来说就是银行不相信任何人,而且自己非常容易受到伤害,所以它要将自己保护起来。那好,干脆直接把银行里三层外三层的设防,直接与外界隔绝,这样不就安全了嘛。但是这样银行就失去了其存在的意义了,银行本来就是为人们提供存取等服务来满足需求的,要是全封闭起来了还怎么提供?

       遇到这种情况就可以取个折中的法子:用玻璃围住柜台而只流出小口来提供服务,既提供了服务又保证了安全。

       操作系统也是如此。在开发角度,操作系统对外会表现为一个较为封闭的整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用接口。

       系统调用在使用上,功能比较基础,对用户的要求相对也比较高,也就是用户比较难直接用,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于上层用户或开发者进行二次开发。所谓的用户操作接口就是添加再次封装的中间层,用来方便上层用户使用的。

计算机软硬件体系结构

image-20221030211939294


以上就是本文全部内容,感谢观看,你的支持就是对我最大的鼓励~

src=http___c-ssl.duitang.com_uploads_item_201708_07_20170807082850_kGsQF.thumb.400_0.gif&refer=http___c-ssl.duitang.gif

收藏成功!
已添加到「」, 点击更改