1.冯诺伊曼体系结构

1.基本介绍:
输入设备:键盘,鼠标,话筒,网卡,磁盘(也叫外存)...
输出设备:显示器,网卡,磁盘,打印机...
这两部分也叫外设。
CPU = 运算器+控制器。
储存器:就是内存。
内存与磁盘之间读/写数据的操作叫做I/O(input/output)。
2.有一些共识:
(1)程序就是文件,未运行前存储在磁盘
(2)CPU自能从内存中获取/写入数据
(3)CPU是运行我们的代码,操作我们的数据的核心
因此数据必须加载到内存中才能进行处理。
3.内存和缓冲区出现的原因
外部设备传输数据的效率为毫秒,而CPU传输数据的效率为纳秒,因此没有内存过度的话,CPU的性能会极大的被外部设备而限制,如果使用大量CPU又会造成成本高。
因此使用内存(效率在外部设备与CPU之间)来进行媒介来平衡二者在性能上的差距而缓存区就是更平滑的过度的体现。
且CPU在内存出现后就无法直接对外部设备的数据访问了(核心是层序结构的实现),只能对内存传输的数据进行处理以及处理完的数据只能传回内存。
从整体上看,输入设备的数据传给内存,内存与CPU之间对数据进行交换与处理,然后内存将处理完的数据给输出设备。整个过程数据的流动就像不断的从一个设备拷贝到另一个设备上。
2.进一步的理解数据流动
一台计算机的本质就是一个体系结构。
首先以qq传信息为例:
一个用户用键盘往内存中的qq传数据,内存中的qq将数据传给CPU,经CPU处理后的数据传回给内存,内存传给网卡,网卡通过网络传给其他人的网卡,其他人的网卡再将数据传给他的内存中的qq,内存中的qq将数据传给CPU,经CPU处理后的数据传回给内存,最后内存就将数据传给了显示器上。
再以qq传文件为例:
一个用户将磁盘中的文件往内存中的qq传数据,内存中的qq将数据传给CPU,经CPU处理后的数据传回给内存,内存传给网卡,网卡通过网络传给其他人的网卡,其他人的网卡再将数据传给他的内存中的qq,内存中的qq将数据传给CPU,经CPU处理后的数据传回给内存,最后内存就将数据传给了他的磁盘上。
总的而言可以发现数据的传输必然离不开体系结构,且数据转运的过程都是不断的拷贝。
3.操作系统
概念:对所有基础程序的集合就是操作系统。同时操作系统就是一款用于软硬件管理的软件。
操作系统包括:

(1)内核(各种管理)
(2)其他程序(如函数库,shell程序)(也可以说是内核的外壳)
例:安卓的底层是linux的意思是安卓的内核是linux,但操作系统的外壳是安卓自身开发。
4.设计操作系统(OS)的目的
1.OS所在体系

对图的基本解释:最底层是各种硬件(硬件之间的关系由体系结构管理),每一种硬件的启动都要有对应的驱动程序。
2.驱动程序的上一层才是OS,因此OS有两个用处。
(1)对下是与硬件交互,管理所有的软硬件资源。
(2) (1)的目的就是为了对上给用户提供良好的程序执行环境。
3.该图也叫软硬件体系结构层序结构
特点:
(1)高内聚:同功能代码放一层。低耦合:层与层之间只通过接口调用,联系度低。
(2)访问操作系统必须通过系统提供的接口进行调用(就是OS自己提供的函数)。
(3)整体的层序结构不允许跨层访问,即我们的程序只要访问到了硬件,该程序就必然会贯穿整个软硬件体系结构。(也就是我们的开发处于最表层,想要调用硬件就必须一层一层的往下走)
(4)库函数的底层可能封装了程序调用接口来简化了用户的操作难度。
5.理解OS
在整个软硬件体系结构层序结构中,OS充当着管理员的身份。
一件事情的处理过程可以被分为两步:决策+执行。
1.管理的实现
(1)管理中,管理者与被管理者不需要直接接触.
(2)管理者与被管理者之间通过"数据"来进行交流.
(3)"数据"的交流传输是通过中间层实现的.
而OS进行管理的方式就是将每一个进程的属性用一个struct管理,每一个struct用指针连接起来,而管理的操作就是对这个链表进行增删查改。
总结:任何的管理系统都是先描述再组织。
所有面向对象的语言都要先描述再组织的能力,例:
有C++中的类就可以实现描述的功能(例上面的struct),STL中的容器实现组织的功能(例上面的链表)。
此处也能明白数据结构就是将现实中的各种组织语言数字化个计算机看懂的过程。而OS就是将软硬件的各种数据用类包装并用容器组织,最后通过修改容器来向驱动程序传达修改意图从而实现间接管理软硬件的软件。
6.理解系统调用
OS不相信用户但依旧要向用户提供服务而系统调用就是OS给我们的调用接口。
OS是用C写的,因此系统调用接口就是C函数,说白了就是用户给OS参数,OS给用户返回值的过程。因此系统调用可以说就是用户与OS之间的数据交互。
库,shall,指令就是包装了系统调用接口的代码,我们通过这些功能就能减少使用系统调用接口的学习成本。总结就是OS自身的接口不好用,因次有人进行的二次加工来让用户间接调用系统调用接口,实现操作简化。