目录
前言
在进行讲解之前,我们先统揽全局

一、冯诺依曼体系结构
1.基本讲解
冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。现代计算机发展所遵循的基本结构形式始终是冯·诺依曼机结构。

冯洛伊曼体系结构主要由输入设备、输出设备 、存储器、运算器与控制器五部分构成:
(1)输入、输出设备统称外设。有的设备既是输入,又是输出设备。
输入设备: 鼠标、键盘、摄像头、网卡、话筒、磁盘......
输出设备:显示器、播放器硬件、磁盘、网卡......
(2)存储器一般指内存。
(3)其中运算器、控制器,再加上其他的一些寄存器统称为中央处理器 (CPU);
它们都是独立个体,各硬件单元必须用"线"连接(系统总线、IO总线)。
2.关于内存的注意事项
1.内存掉电易失,只能用作临时存储;而磁盘是不带电存储的,可以用于永久存储
2.不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
3.外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
4.为了保证读取和写入速度,CPU只和内存打交道
一句话,所有设备都只能直接和内存打交道。
3.CPU
1、CPU如何能够识别我们传递给它的数据和指令?
CPU内部有一套自己的指令集,它会把指令对应到指令集,然后完成相应的操作;
2、CPU需要的数据从哪里获取?
内存 (此处不考虑缓存);
虽然我们的数据是存放在磁盘中的,但是由于磁盘读取与写入数据的速度太慢了,而磁盘的运算速度则是以毫秒甚至秒为单位;CPU如果直接从磁盘中读取和写入数据,会有大量的等待时间,所以为了提高计算机的整体效率,CPU只会向内存中读取和写入数据;内存再向磁盘中读取和写入数据;其中,内存向磁盘读取和写入数据就是IO的过程。
4.程序运行必须加载到内存
CPU需要从程序中读取数据,但是CPU只和内存打交道,而我们的程序是存储在磁盘中的。
举个例子:

发送消息 --> 接受消息的数据流动:A 的键盘 --> A的内存 --> A的CPU (加密) --> A的网卡 --> B的网卡 --> B的内存 --> B的CPU (解密) --> B的显示器;
发送文件 --> 接受文件的数据流动:A 的磁盘 --> A的内存 --> A的CPU (加密) --> A的网卡 --> B的网卡 --> B的内存 --> B的CPU (解密) --> B的磁盘;
二、操作系统
操作系统是一个进行软硬件资源管理的软件。
它通过对下管理好各种软硬件资源,来对上为用户提供良好的 (安全、稳定、高效) 运行环境。
前者是管理手段 ,后者是管理目的。
笼统地理解操作系统:
内核 :进程管理、文件系统、内存管理、驱动管理。
其他程序:例如函数库,shell程序等
三、系统调用
1.银行与操作系统
操作系统的理解可以以银行为例:银行需要对客户提供存取服务来进行资金管理,但是银行肯定不能让我们直接接触他们内部的"金库",这是因为他们不信任我们。但是银行有需要和我们接触,怎么接触呢?留出"柜台窗口"。操作系统同理,它会给我们留出一系列系统接口,这些接口就叫做系统调用。
2*.系统调用和库函数概念
1.在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分 由操作系统提供的接口,叫做系统调用。
2.系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。
四、用户操作接口
虽然操作系统为我们提供了各种系统调用接口让我们来访问软硬件,但系统调用接口在使用上功能比较基础,对用户的要求也相对较高,所以人们在系统调用接口的基础上开发出了用户操作接口,比如 Linux 下的外壳程序 shell,各种函数库 (C/C++等)、windows图形化界面。
用户通过这些操作接口进行指令操作、开发操作以及管理操作等;比如 Linux 下外壳程序 bash 提供的 ls,本质上是调用系统接口,将磁盘中文件信息写入到显示器;touch 本质是调用系统接口,在磁盘上创建文件;又比如 C语言的 scanf/printf 函数,底层都是调用系统调用接口从键盘读入数据/向显示器上打印数据。
五、总结
一方面,操作系统对所有软硬件资源进行管理,同时为用户提供访问软硬件资源的系统调用接口,由操作系统来完成资源的各种访问;另一方面,用户为了降低成本,使用各种用户操作接口来访问软硬件资源,用户操作接口的底层再来调用系统调用接口。所以说,操作系统将硬件、软件和用户有机联系了起来。
