🪐🪐🪐欢迎来到程序员餐厅💫💫💫
主厨的主页:Chef‘s blog
所属专栏:青果大战linux
前言废话:
很好,距离上次更新已经过去5个月了,我这五个月干嘛去了呢,首先是当时学校快期末了我就在复习,我也不是计算机专业,要复习的和计算机没什么关系,所以博客就暂时停了,本来打算暑假好好学习,结果又迷上算法了,我学算法也不太爱写笔记,所以也没发博客,除此之外暑假还要学游泳和开车,就这样暑假过去了,开学第一个月,我又在摆烂打游戏当天命人,看番,直到国庆假期最后一天终于是觉得玩尽兴了,开始学习。
这边的知识落下很多了,Linux的课还有很多,c++那边的知识点也忘了还要去复盘,大二了可以变多了,有一大堆实验,总之很忙,任重而道远啊。
一、冯诺依曼体系结构
我们都知道cpu的全称是中央处理器,可以说是电脑里的老大哥,软件和硬件都得靠他办事,那么我请问cpu和硬件之间的交互是如何的呢?
A:直接交互 B:间接交互
看图可知,其实是间接交互的。
输入设备的数据进入存储器,存储器把数据交给cpu处理,cpu处理后返回给存储器,存储器再把数据传送给输出设备 。
为什么这样设计,直接让cpu和外设直接交互不是更省时间吗,还搞个中介?
所以我们接下就要开始解答这个问题了
硬件介绍
- CPU
价格高昂,制作工艺复杂,高精尖技术,访问速度极快,空间极小(几十kb)
- 内存
价格较贵,制作较复杂,访问速度快,空间较大(8/16G)
- 普通外设
价格较低,访问速度慢,
结构分析
假如直接让cpu和外设交互
由于CPU的运算速度极快,所以数据刚送到CPU就立刻被计算出结果,对CPU来说就是等了很久才来活,结果刚发力就做完了,这就导致CPU强大的性能完全无法体现出。
这其实就是木桶原理,即一个木桶可以存储的水的容量取决于最短的木板而不是最长的木板。
但是如果要提高外设的速度,就要升级他的工艺,更换更好的材料,但是外设那么多,如果都做很大的提升,就会导致计算机成本极高,甚至于普通人工作一辈子也无法买一台电脑。
于是内存就出现了,他的造价和性能都处于外设和CPU之间,用它当一个中介,就可以提升计算机的性能了,,,,,,,,,吗?
并不是,因为木桶效应依旧存在,其实内存有个神器的功能,他可以对CPU未来要使用的数据进行预加载,也就是预判CPU的行为,这样当CPU忙完这个活,才歇一小会就会发现下一个活已经送过来了,于是他的性能就会被充分利用。
于是乎,我们并没有提高太多成本,就提高了计算机的性能,所以现在我们普通人也可以用上计算机了。
而这个让内存充当中介的结构就叫做冯诺依曼体系结构,他于1945年提出,现在cpu、外设、内存都在更新迭代,但它沿用至今。
混淆点:
- 存储器就是内存,它是一个硬件设备,他可以存储一定的数据,他的硬件名称叫做内存条,我们电脑现在基本都是8G或16G的内存。
- 磁盘也是硬件设备,也可以存储数据,空间是500G,但我们将它当作输入输出设备看待
二、OS概念及功能
开宗明义:OS是一款帮助用户进行软硬件资源管理的软件。
计算机的软硬件架构如下图
首先OS是一款软件,我们在电脑C盘目录下即可找到文件名是windows的文件夹,这里放的就是操作系统的系统驱动程序、DLL文件、系统配置和其他重要的操作系统文件
OS对硬件进行管理
story time
小明经过自己三年的努力后成功考入一所984.5高校,在校期间,他依旧刻苦学习,钻研知识,尤其喜欢编程,甚至期末拿了满分成绩。后来,学校想选拔一些学生去编程比赛,由校长亲自选人,那么问题来了,校长该怎么找到合适的人呢,其实很简单,把学生的c语言成绩排个序,找出最高的几个人就可以了。于是乎,小明就被校长发现,获得了参赛名额。
答:不需要,它只需要处理学生的“c语言成绩”即可。
事实上,不只是比赛,奖学金,保研,加学分,记过,是否可以毕业,这些对学生的管理操作都不
需要校长和学生一个个亲自接触,而只需要去观察学生的的绩点、综测、被举报的信息等等即可。
即:只需要对学生的个人信息进行处理即可。
现在是信息化时代了,用一张张个人信息表来记录已经过时了,我们可以直接把这些数据存到电脑
中,具体就是建立一个结构体,里面包含了学生的种种属性(身高,体重,爱好,特长,绩点等
等),然后给每个学生都赋值为一个结构体对象,为了防止数据丢失,我们可以把他们用链表再串
在这个过程中我可以发现,管理的本质不在于对你本人(这个看得见摸得着的存在)做管理,而在于对你的信息做管理。管理者的核心工作,就是根据你的数据来做决策
而这其实就是OS对硬件干的事!操作系统在管理硬件时,并不是管理它本身,而是管理他的数据。那么,如何拿到硬件的数据呢?这就是驱动的工作了。
每一个硬件都有自己的驱动,驱动是一份文件,它里面存储了硬件的详细信息
有些外设的驱动是你的电脑自带的,而有些,例如你自己买的鼠标,他就会提醒你去官网先下载好驱动,这也是为什么你直接把鼠标的usb接口插进去,电脑要等个一两秒才能被鼠标操作,因为这是OS去加载驱动的时间,加载完后OS才可以开始对鼠标的操作做出回应。
所以我们就知道了OS其实是先把驱动管理起来,然后再以驱动对硬件进行管理的。
就像校长要管理一堆学生一样,OS也要管理一堆硬件,他是如何管理的呢?
这就要提出OS管理机制的核心了。(重点!!!)
先描述,再组织
现在我要接入一个鼠标和键盘,那么首先OS会把他们的驱动加载进去,然后分别获得他们的信息
接着会建立一个结构体来存储他们的信息,
struct P
{
char* name;
bool st;
int priority_num;
//........
};
于是这个鼠标和键盘就被转化成了计算机中的数据,而这个过程就叫做“描述”,计算机有几十个外设就要建立几十个结构体,为了方便管理,我们就建立一个链表,把他们挨个连接起来。而当这鼠标被拔了,OS只要从链表里删掉这个节点就好了。为了达到其他目的,也可以用优先级队列,栈,队列进行管理,这个用数据结构把它们管理的操作叫做组织。这一整套操作就是OS的管理秘籍:先描述,后组织。
OS对用户提供服务
再上图的结构中,操作系统向上提供了系统调用接口,那OS为什么要这么做,还留一个接口,你直接让我随便用不好吗。
因为,操作系统不相信用户!!
OS把权限全给你打开了,万一你不小心删了这个重要文件怎么办,万一你给电脑搞出bug怎么办,万一你随便更改重要文件怎么办。毕竟哪怕顶尖程序员都会写出bug,又何况很多人都是电脑小白呢。但于是OS既要给你提供服务,还要保证你不乱来害了它,那他就只能把自己内部重要信息隐藏起来,以接口的方式提供服务了。
接着走是用户操作接口,包括shell外壳,库函数,指令
-
lib(库函数)
我们知道上层的很多就是我们日常用的软件,比如抖音,b站这种短视频的,王者,蛋仔这种游戏软件,PS,pr这种剪视频图片的,还有Proteus,matlab这种工作学习等等。他们显然是被程序员开发的,程序员是怎么开发的呢?有人立刻回答“写代码啊”
对,确实是c,c++等语言写出来,但我请问,为什么你写一个printf“666”,你的显示器就可以输出666,事实上printf是一个函数,而他底层调用的时系统的接口,系统给我们提供了几十种接口来进行各种操作,但他的使用门槛太高了,于是c,c++,java这些语言就把这些接口封装了一下,让程序员使用,当然,只要你够厉害想直接用系统接口写代码也是ok的。
-
指令
对于指令也是同理,在linux为什么我写了ls敲一下回车,他就打印文件信息了,其实也是对相关接口的封装。
-
shell外壳
为什么你点一下图标的×号,就可以删除一个页面,双击一个文件就可以打开,这也是开发商在操作系统的接口基础之上,所进行的封装,显然用鼠标点击操作比输入指令代码来说学习成本低多了。
用户操作接口优点:
-
代码的跨系统移植,加入不封装我们写代码直接用对系统里的东西进行操控,那么在windows才可以跑的代码就无法在linux下跑,因为linux和windows是不一样的,于是你就要分别学习在两个系统怎么写代码,但现在可以直接让开发商写两个库,函数名都一样,但调用接口一个是windows一个是linux,那代码就可以跨平台跑了。
-
系统接口学习成本更高,用户操作接口降低了使用门槛
现在有了库函数,有了指令,有了shell外壳,程序员就可以开始更好的开发软件了,开发之后
那么普通用户就可以尽情的使用软件了。至此我们就简单的讲完了一款帮助用户进行软硬件资源管理的软件。
总结:
-
因为外设和cpu速度差异太大导致cpu性能不高,于是引入存储器充当二者交互的媒介,在预加载的作用下,提高了计算机效率。
-
OS对下以先描述再组织的方式管理驱动进而管理外设,对上封装了功能接口,既保护了自己的安全也为用户提供了服务。
-
用户调用接口降低使用门槛,且具备跨系统移植能力
但是,OS到底是如何管理软件呢,这就涉及了进程的概念,于是乎,下节课继续吧。
-----------------------------------------觉得有用的话,就关注一下吧------------------------------------------------