目录:
一、冯诺依曼体系结构
(一)什么是冯诺依曼
(二)为什么需要冯诺依曼
(三)冯诺依曼如何操作
二、操作系统概念
(一)对下硬件管理
(二)对上服务用户
一、冯诺依曼体系结构
讲解思路:什么是冯诺依曼,为什么要冯诺依曼,冯诺依曼怎么运行的

(一)什么是冯诺依曼
冯诺依曼由:输入/输出设备、存储器、CPU(运算器、控制器)构成。
CPU-运算器:算术运算,逻辑运算
CPU-控制器:执行代码,进行逻辑控制(弱化)
输入设备:键盘、话筒、摄像头网卡、磁盘....
输出设备:显示器、磁盘、网卡、打印机.....
(二)为什么需要冯诺依曼
我们平时写的c/c++代码会生成一个可执行程序,可执行程序必须加载到内存中,为什么?
首先给出一个结论:CPU在数据层面不和外设(输入/输出设备)打交道!外设不和CPU打交道只和内存(存储器)打交道,这又是为什么呢?
在内存中存在效率问题:CPU效率>内存>外设
-
若CPU直接从外设获取数据,输入设备信息还没准备好CPU要等很长一段时间,而从内存中获取信息虽然也要等,但是相对前者快很多提高了效率。所以输入设备将信息加载到内存,再由内存向CPU传送数据。
-
在下图中,效率越快的寄存器价格越高空间还小,无法实现用户普及性,引入内存可以让用户不怎么高的成本或得一台计算机,人人用得起计算机也就推动计算机的发展。
内存的本质是外设和CPU的缓存

回到问题:为什么需要冯诺依曼,因为计算机的硬件都遵循冯诺依曼体系结构,冯诺依曼体系结构决定可执行程序必须预加载到内存,CPU只和内存打交道(效率有关)。
这也反应了为什么我们写程序要包含头文件,输入设备到存储器的过程称为input,存储器到输出设备的过程称为output;input和output就是IO流--->用于外设和内存进行数据交换--->要使用IO流必须包含指定头文件。
(三)冯诺依曼如何操作
Linux下一切皆文件!!数据流动的本质:其实是拷贝,计算机整体效率也就是设备间拷贝的效率!
- 信息通信
你要和你朋友远程实现QQ上的信息交流,看似两个人在交流实际上是两台冯诺依曼通过网路进行数据的传递。
你和朋友打开QQ软件就是将软件预加载到内存,然后你从键盘输入你好拷贝到内存,内存将信息拷给CPU-运算器进行加密从"xxx"再将加密后的信息拷回给内存,内存拿到后通过输出设备(网卡)进行网络传输到你朋友的冯诺依曼上。
你朋友就输入设备从网卡上获取到加密信息"xxx"--->内存--->CPU-运算器进行解密成"你好"----->内存--->显示器上显示"你好"

- 文件发送
文件发送也和信息传输的操作是一样的,因为计算机的硬件都遵循冯诺依曼体系结构。不一样的是文件是通过磁盘输入输出,而不是网卡。
二、操作系统概念
结论:操作系统是进行软硬件管理的软件,软硬件体系结构本质是层状的。
(1)什么是Linux内核
Windows上,我们认为的操作系统包含图形界面、WPS软件等,以程序员的角度,接下来谈论的Linux操作系统只说Linux内核,内核进行内存管理、进程管理、文件管理、驱动管理。

也就是下图我圈起来的这一部分称为Linux内核:

(2)操作系统是怎么进行硬件管理?
结论:通过每个硬件的驱动程序间接管理和控制每个硬件。
硬件全部遵循冯诺依曼体系结构,是不能直接与操作系统打交道,比如你给你电脑插上手写板在插上的几秒钟内手写板是没有反应的,因为手写板在安装对应驱动程序,只有安装好驱动程序才能与操作系统建立联系。操作系统通过每个硬件的驱动程序间接管理和控制每个硬件。
(3)为什么要操作系统
对下:通过驱动程序管理好硬件------>手段
对上:给用户提供一个良好(稳定、安全、高效)的运行环境------>目的
总不能两天一黑屏,三天一重启,这样这个操作系统就很不稳定、安全。
我们使用操作系统本质上使用什么?
通过软件访问计算机的硬件资源!!我们对于操作系统的各种需求是无限的,比如电脑啊,给我打开QQ,打开微信,打开网易云、打开爱奇艺...而计算机的硬件资源就那么点很有限。
这时候就需要操作系统把有限的硬件资源管理好,通过软件来匹配我们无限的需求。
接下来我将操作系统拆分为两部分进行讲解
(一)对下硬件管理
结论:对硬件的管理本质是对硬件数据的管理,管理的做法是:先描述再组织
(1)原理
在学校中有校长、辅导员和你。假设校长就是最高管理者,辅导员是辅助校长管理你(执行者),而你是被管理者。那么校长管理你需不需要天天和你见面呢?不仅不需要而且你还被管理者安排的明明白白(固定时间上课、吃饭),所以要管你见面不是必要条件!而是获取到你的信息,像电话号码、宿舍号、学籍档案,这样校长就可以通过这些个人数据间接管理你,想找你聊天一个电话就可以找到你。怎么获取到你信息?这时候就靠辅导员了,他们协助校招收集你们档案再交给校长,这样校长什么都不用做就把你们信息拿到。
以上例子对应操作系统就是:校长--->操作系统,辅导员--->驱动程序,你--->硬件设备
这也再次说明了:操作系统通过驱动程序获取到硬件信息实现对硬件的管理、控制
(2)做法
这时校长是一名程序员,它自己管10几个学生信息可以,几千个就不行了,于是对学生的管理工作变成让计算机管理!!而操作系统大部分由C语言编写,C在描述学生属性是通过创建结构体,于是学生信息通过一个个结构体来描述,每个结构体中再定义一个指向下一个结构体的指针,这样就把全部学生数据串起来形成链表,再定义个链表头结点,就实现对学生管理工作的建模,将管理所有学生问题转化为对链表的增删查改管理!

管理本质是对数据进行管理,做法是:先描述再组织
将生活中问题描述成一个个结构体,再将这些结构体组织起来。语言中类就是描述,容器技术是组织,所以操作系统中是存在很多数据结构的!
(二)对上服务用户
结论:操作系统是层状结构,和操作系统交互只能通过系统调用,本质是让用户安全的访问操作系统
操作系统不允许用户直接访问,因为内部有很多信息不允许直接随意删改,对计算机小白用户就更不用说了。例如你去银行存钱不可能直接修改内部金额数据,得由银行窗口的服务者进行修改。
所以操作系统给用户提供一个封装系统调用的接口,进行入参返回实现系统调用

这还不够,操作系统在这之上再将这些接口封装为各种库(iostream/ stdio / lib ...)这也就是C语言在使用scanf、printf....时需要包含头文件,这样你直接用函数而系统帮你调硬件接口(键盘、显示器...)

而这仅仅是对于操作系统程序员用户而言,非程序员根本不懂代码,于是基于下面的库和接口开发出一系列软件给用户使用(Windows是各种图形化界面,Linux是shell外壳)辅助用户进行接口调用。

以上就是操作系统向上对用户提供一个良好的运行环境,向下管理好硬件的全过程。
感谢观看,希望利己同时也对大家有帮助~