目录
一、冯诺依曼体系结构
标题一讨论对冯诺依曼计算机体系结构的理解。
- 在2024年,几乎所有的计算机,都遵守冯诺依曼体系结构。
- 冯诺依曼体系结构是应用在硬件层面的,而硬件层面的每一个部件都是独立的,同时又是相互联系的。
独立是指:
CPU:运算器&&控制器。
输入设备:话筒、摄像头、鼠标、键盘、硬盘、网卡。
输出设备:显示器、扬声器、打印机、显卡、网卡。
存储器:内存。
相互联系指:硬件又由主板总线联系在一起。
问题1
- 为什么冯诺依曼的体系结构要设计内存?
内存出现的原因:
存储元件的性能和价格有下面这样的特点。
物理上,距离CPU越近,存储元件的速度越快,容量越小,价格越高;
距离CPU越远,存储元件的速度越慢,容量越大,价格越低。
那么,这样的特点就导致,在传统的计算机中,即只有CPU、输入输出设备的计算机,输入输出设备的速度和CPU速度之间的差异巨大无比,在实际运行过程中,CPU大部分时间处于等待响应的状态,因此外设拖慢了计算机整体的速度。
设计了内存这一部件,由于内存的速度介于CPU和外设之间,让CPU只和内存做交互,外设只和内存做交互,这样一来,计算机整体的运行效率就和内存的效率接近。
问题2
请解释:程序在运行之前,必须先将程序加载到内存中。
所谓的程序,即可执行文件,本质还是文件,存储在硬盘中,而硬盘属于外设IO。
程序文件的内容是一条条的指令和数据,需要CPU来执行。
在冯诺依曼体系结构的计算机中,外设不能直接和CPU交互,因此,需要内存扮演中间角色。
以上就是标题一在计算机硬件层面对冯诺依曼体系结构的计算机的讨论,标题二则讨论软件层面的结构。
二、操作系统管理硬件
操作系统的概念:操作系统是进行软硬件资源管理的软件。
你的计算机开机后,执行的第一个软件就是操作系统。
操作系统的管理大致有:
- 内核(进程管理、文件管理、线程管理)
- Shell程序等
- 如何理解管理?
操作系统管理底层硬件的思想,本质上就是高级编程语言面向对象的思想(将管理硬件转换为管理硬件的数据)+数据结构思想(将管理硬件的动作转换为数据结构的“增删查改”)。
- 管理的物理实现:底层硬件,诸如内存、主板、硬盘、各种外设等,种类成千上万,而操作系统是统一的,不可能实现让操作系统直接管理硬件,而是让操作系统调用驱动程序,驱动程序一般由硬件制造商提供,由用户下载,操作系统通过调用驱动程序来管理不同的硬件。
- 管理的逻辑实现:但是,操作系统对硬件发出的命令,即操作系统真正对硬件的管理,总结为六个字:先描述,再组织!!!
描述:即面向对象的思想,操作系统管理的硬件都有相似的属性,操作系统定义结构体或类对象来描述硬件的属性。
组织:即行为管理,企业中管理层对员工可能有一系列行为,程序中函数对对象可能有一系列操作,操作系统也是类似,操作系统对硬件也有类似“增删查改”的行为,这些行为本质都不是对目标做操作,而是对目标的数据(这里的数据,就是第一步“描述”出来的属性)做操作,要实现这些行为所利用的就是数据结构,把对数据的管理转换为对数据结构的“增删查改”。
先描述,再组织,其实就是对要管理的对象做计算机建模的过程,操作系统管理硬件,就是一个计算机建模的过程。
三、操作系统服务用户
- 为什么要设计操作系统?
想回答这个问题,第一步先要理解,操作系统的角色。用户使用计算机所产生的动作,包括打游戏、发消息等等行为,都是由独立的硬件相互联系在一起完成的,那么,如果没有操作系统,硬件之间的联系是由用户自己来实现的,显示,这不现实,于是设计操作系统来扮演这个管理硬件之间联系的角色。
- 那么,为什么要诞生操作系统的管理?
计算机宏观的看,就是使用者、操作系统、硬件这三层。而中间这一层 操作系统的管理,它的意义就是:对下管理好软硬件资源(手段)——来实现——对上稳定运行的用户环境(目的)。
那么,在操作系统上方有:
- 系统调用接口system call
由操作系统提供,本质是由C语言实现的函数。
设计系统调用接口的目的很明显,和操作系统内核的交互不能直接由用户来操作,而是由用户调用系统调用接口来操作。
- 用户操作接口
由于复杂性和安全性,在用户这一层并不都是直接调用系统调用接口,也提供了用户操作接口,来和操作系统交互,比如库Lib、Shell外壳、部分指令等,注意,用户操作接口在上层,系统调用接口在下层。
通过对比这两者,也能明白为什么C语言程序可以移植,C语言程序是调用用户操作接口,而用户操作接口封装系统调用接口,即使是不同的操作系统,仅仅是封装内部的一个条件语句而已。C语言的程序员并不关心是Linux还是Windows的系统调用接口规则,因为这部分内容已经由库Lib完成了。