本文主要从两个方面来详细介绍计算机体系结构:
1.冯诺依曼体系结构(硬件)
2.操作系统(软件)
硬件——深入理解冯诺依曼体系结构
软件——全面认识操作系统
1946年美籍匈牙利科学家冯·诺依曼提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式存储,并确定了存储程序计算机的五大组成部分和基本工作方法。
半个多世纪以来,计算机制造技术发生了巨大变化,但冯诺依曼体系结构仍然沿用至今,人们把冯诺依曼称为“计算机鼻祖”。
1.为什么输入/输出设备的数据,不直接给CPU,反而给内存呢?
[这里引入存储分级(存储金字塔)概念]
是因为,外设和CPU的速度相差太大。
在输入设备在接收输入数据的时候,CPU只能等。如果没有存储器,CPU将会长时间处于等待状态,这样的话,效率其实是很低的,输出同理。
所以,如果允许外设把它的数据直接和CPU进行交互,那么整个计算机的效率将会以外设为主(木桶原理——效率由短板决定),会变得非常慢。
在认识层面上,可以认为内存整体是外设和CPU的“缓存”(快的设备给慢的设备做缓存)。那么整个计算机的效率就以内存为主了,变得快起来。
2.为什么程序运行的时候,要先加载进内存?
对数据进行了预加载,把程序缓存起来了。CPU读取这个程序效率就会高了。
3.存储器是如何起到缓存作用的?
只要有了存储器,就能对数据进行预加载和预写入,解决了CPU和外设之间的效率相差过大而导致CPU长时间处于等待的问题。
预加载:是把输入设备的数据加载到存储器。
预写入:把CPU处理完的数据,来不及放到输出设备中的,先写入存储器。
总结:
站在数据层面上,CPU不和外设打交道,直接和内存打交道。
站在外设角度,数据不和CPU打交道,直接和内存打交道。
内存:是计算机数据的核心。
场景一:给朋友发一条消息
键盘(我)—> 写入存储器 —> CPU(封包)—> 写回存储器 —> 我的网卡(具备从网络中接收数据的能力)—> 朋友的网卡 —> 写入存储器 —> CPU(解包)—> 写回存储器 —> 显示器(朋友)
场景二:拖拽文件 数据流走向
把硬盘上的文件(本身也是数据)放在内存当中,经过封包解包,写回内存,再经过网卡传出去,对方网卡接收,放入存储器,再进行封包解包,写回存储器,最后放到对方的硬盘。
操作系统是一款做软硬件管理的软件。
硬件:冯诺依曼中的所有设备。
软件:1.安装软件,卸载软件 2.在系统层面,文件,进程,驱动等都属于软件范畴
管理:真正的管理是要有“决策权”。重要的是,区分“决策”和“执行”。
把操作系统比喻成一所封闭的学校:
那么在学校中,
底层硬件、部分软件:学生(被管理者)
驱动程序:导员,宿管,教师等
操作系统:校长(管理者,有真正的决策权)
管理者和被管理者从来都没有见过面,如何进行管理?
所以操作系统是如何进行底层的硬件管理呢?
在操作系统启动之时,通过中间的驱动程序,拿到底层的硬件信息,对其数据进行管理和决策。
也就是,先描述,再组织。
使用操作系统有难度且有风险,所以操作系统一般是被封装起来的。对外提供少量的接口(函数),要使用好系统调用接口,也需要一定的背景知识,且也要有一定的成本。
所以可以把系统调用接口封装成某些库函数。
库函数 和 系统调用的关系:具有上下级的关系,库函数(用户级别的库)可能调用系统调用
在一套系统中,必须一定要有管理者进行统筹。
对上,给用户一个稳定高效的执行环境;
对下,管理好软硬件资源,提供稳定的软硬件环境。
Shell英译汉:外壳。
从技术角度, Shell的最简单定义:命令行解释器。
主要包含:
将使用者的命令翻译给核心(kernel)处理。
同时,将核心的处理结果翻译给使用者
在认识了操作系统的管理的概念后,我们知道,管理的本质是为了让用户使用成本更小,使用方便。
两种常见降低使用成本方案(本质相似,都是为了解决用户使用计算机的成本,只不过解决的程度不同罢了):
什么是shell外壳:包裹在操作系统外层的软件层,方便用户和操作系统进行沟通。
shell作用:
(1)交互:接受用户的输入,交给os执行,得到结果反馈给用户。(为了对用户屏蔽内核的复杂性)
(2)保护操作系统:如果用户输入了一些错误或非法的指令,在外层直接就拒绝掉了。(为了保护内核以免用户误操作造成损害)
shell和bash:shell是所有外壳程序的统称,bash是具体的一款shell。
1. 冯诺依曼体系中的存储器指的是内存。
2. 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)。外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
3. 所有设备都只能直接和内存打交道。
4. 操作系统是一款搞软硬件管理的软件。
5. 管理最重要的是要有决策权。
6. 如何进行管理:先描述,再组织。
7. Linux使用C语言编写,C语用struct描述对象。
数据结构表示的是数据的组织方式,组织方式决定结构,结构决定算法。
8.shell是包裹在操作系统外层的软件层,方便用户和操作系统进行沟通。