目录
- 一、冯诺依曼体系结构
-
- [1.1 为什么要有内存?](#1.1 为什么要有内存?)
-
- [1.1.1 存储分级的问题](#1.1.1 存储分级的问题)
- [1.1.2 体系结构效率问题](#1.1.2 体系结构效率问题)
- 程序要运行,为什么要先加载到内存?
- [1.2 不同设备之间数据流动的过程](#1.2 不同设备之间数据流动的过程)
- 二、操作系统
-
- [2.1 操作系统的概念](#2.1 操作系统的概念)
- [2.2 为什么要有操作系统?](#2.2 为什么要有操作系统?)
- [2.3 理解操作系统管理的本质](#2.3 理解操作系统管理的本质)
- [2.4 系统调用和库函数概念](#2.4 系统调用和库函数概念)

个人主页:矢望
一、冯诺依曼体系结构
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

其中上图中:
中央处理器(CPU):含有运算器和控制器等
输入设备:键盘,鼠标,扫描仪,写板,摄像头等。
输出设备:显示器,打印机等。
我们把这些输入设备、输出设备成为外围设备,简称外设。
那这里的存储器是什么? 很多地方地方喜欢把它叫做存储器,这里指的就是内存 。内存通常以"内存条"的形式出现,插在主板的内存插槽上。而我们的硬盘,U盘等就属于外存。
1.1 为什么要有内存?
1.1.1 存储分级的问题

从上到下,存储设备的特点可以概括为 :速度越来越慢,容量越来越大,每字节的成本越来越低,CPU的访问距离越来越远。
上面的主存也就是我们所说的内存,像我们的输入设备磁盘,相比于内存,它的容量更大,但速度慢,同样的它的价格更便宜,而我们的内存,它离CPU更近,速度快,但它的容量会小一点。
1.1.2 体系结构效率问题
计算机的本质就是输入->计算->输出,那为什么需要内存呢?直接输入->CPU->输出不就好了吗?
上面提到了我们的输入设备和输出设备统称为外设,而外设和CPU相比,它的速度特别慢 。CPU是纳秒级别的,而我们的输入输出设备通常是毫秒级别的,它们之间差了整整106,一百万倍!
如果直接输入->CPU->输出,它们之间的速度差异就决定了CPU大部分时间都在等,根据木桶原理,输入输出设备就是那块短板,那么如果这样设计,我们计算机的效率就取决于输入输出设备的效率,这样的计算机太慢了。
为了解决这样的问题,计算机科学家在设备和CPU之间引入了存储器,也就是内存。

在这个体系结构下,CPU不直接和外设打交道,它只和内存打交道。
那不和之前一样吗?那块短板还是输入设备和输出设备,那计算机的速度还是取决于输入设备和输出设备呀,从硬件角度看,的确是这样。但是还有操作系统这个软件,这个软件会把数据预处理加载到内存中,也就是说数据可以提前加载,大部分情况下处理数据的时候,就可以转化成CPU和内存的交互,这样计算机的效率就取决于内存了。内存可比输入输出设备快多了。
从现实角度出发,假设你是一个土豪,你不差钱,你要求技术人员把内存换成寄存器,并且要求寄存器内存和内存相当,能行吗?当然可以,这样的计算机效率也相当高,但是它的造价会相当高昂,无法被普通人所接受。所以使用内存能够让普通人以较低的价格,获得效率不错的计算机,可以说冯诺依曼体系结构为电脑提供了性价比,这就使计算机被人们广泛接受,这样才有可能形成全球范围内的网民数量,才可能孵化出互联网!
技术的提升推动了生产力的发展!技术作为底层驱动力,重塑了整个社会结构和发展模式!
程序要运行,为什么要先加载到内存?
程序存储在磁盘上,程序就是数据,而根据冯诺依曼体系结构,CPU不直接和外设打交道,它只和内存打交道,所以程序要运行,必须先加载到内存里,这是体系结构规定。
扩充 :数据从磁盘加载到内存、CPU从内存中读取、输出数据它们的本质都是拷贝!也就是说计算机数据流动的过程本质就是拷贝,计算机的效率问题由设备的拷贝效率决定。
1.2 不同设备之间数据流动的过程
你有一个好友,你们两个相隔超过几百公里,今天你在聊天软件上发送了一句"上号?",那么这个数据是如何流动的呢?

首先你输入的信息会加载到内存中,然后CPU从内存中读取你输入的数据,在进行一些加密操作,再加载进内存中,之后,内存中的数据会通过你的网卡/显示器通过网络发送到你朋友的网卡设备上,他的设备会将收到的信息加载到内存中,之后经过CPU的读取解密工作,再次回到内存,然后内存中的数据就会在你的显示器上呈现。
二、操作系统
2.1 操作系统的概念
操作系统OS是一个系统软件,它作为计算机硬件与用户/应用程序之间的中介,负责管理所有的硬件资源(CPU、内存、硬盘、外设等),并为上层提供简单的、统一的、安全的服务接口。
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:内核(进程管理,内存管理,文件管理,驱动管理),任何计算机类的设备都需要这四大功能。其他程序(例如函数库,shell程序等等)。

扩展 :为什么说安卓是基于Linux内核的?因为安卓最核心的部分用的是Linux内核。然后在外壳层面上设计出一套显示库,让用户更好的操作,这就叫安卓。安卓的本质是Linux内核上的一层外壳程序。
之前有的手机厂商会说,我们的操作系统是基于安卓深度定制化的,其实就是把安卓的图形化界面改了改,也就是改了改皮肤。
2.2 为什么要有操作系统?
对下 :操作系统要把软硬件资源管理好。对上 :提供服务,保障稳定。它存在的意义是把软硬件资源管理好,从而给用户提供良好的使用环境。

2.3 理解操作系统管理的本质
在校园这个大环境下,校长是管理者,学生是被管理者。中间还有一个辅导员。
人执行的工作有两种,一种是做决策,一种是做执行,很明显,校长是做决策的,学生是做执行的。学生一学期基本上没和校长见过面,但他依旧被管理了,所以管理者管理被管理者,不需要和被管理者见面。
那他是如何管理学生的呢?他只需要获取学生身上的数据就可以进行管理了,所以管理学生本质是对学生身上的数据做管理。
那校长是如何拿到学生数据的呢? 通过中间层的辅导员 ,比如辅导员在开学时组织签到,学生每次考试的上报等。假设校长现在要让好学生去参加一个比赛,他会选择各项数据指标都不错的学生去。所以数据是提供决策依据的。
现在校长看着几千人的excel表格,他感到很无力,碰巧他会C语言,于是他就用编程把学生信息管理起来了。
c
struct StudentNode
{
char name[50]; // 学生姓名
int score; // 学生成绩
char student_id[20]; // 学号
char class_name[30]; // 班级名称
struct StudentNode* next; // 指向下一个节点的指针
};
将学生的信息组织形成一个链表,这样他就把他现实中要做的内容,建模变成了对这个链表的增删查改。这样就通过先描述,再组织 的方式把学生管理起来了。 OS将这些描述性的结构体通过链表、树等数据结构有效地"组织"起来,OS对系统的管理,就变成了对这批数据结构的增、删、改、查。
在上述例子中校长就是操作系统,学生就是底层硬件,辅导员就是驱动程序。

操作系统大部分都是C语言写的,所以操作系统内部,最核心的东西就是数据结构。
扩充:C++中为什么要有类 和STL?我们在所有的语言中都能够找到类和STL的影子,类就是先描述,STL就是再组织,要管理各种事物就需要用类描述起来,再用各种结构组织起来就可以管理这个类所对应的对象。类是对现实事物的抽象描述,解决了这是什么的问题;STL是对多个对象的组织结构,解决了如何管理的问题。这是把现实问题进行计算机建模的核心规律!
2.4 系统调用和库函数概念

如上图所示操作系统管理着软硬件资源,如果直接让用户访问操作系统内核进行软硬件资源的访问,这是不安全的。所以上层进行了系统调用接口的封装,它的本质是函数。
在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
然而系统调用在使用上,功能偏底层,对用户的使用要求较高,所以开发者对系统调用进行了适度的封装,这就形成了库。有了库,就利于上层用户或开发者进行二次开发。很多C语言或者C++函数都是对系统调用的封装。
用户操作接口:这是用户和开发者真正直接接触的部分,包括:
Shell外壳:命令行界面,其背后执行的命令(如 ls, cp)最终都会调用系统调用。- 库
lib:这是对系统调用的封装。 - 部分指令:一些系统管理工具。
总结:
以上就是本期博客分享的全部内容啦!如果觉得文章还不错的话可以三连支持一下,你的支持就是我前进最大的动力!
技术的探索永无止境! 道阻且长,行则将至!后续我会给大家带来更多优质博客内容,欢迎关注我的CSDN账号,我们一同成长!
(~ ̄▽ ̄)~