目录
冯诺依曼体系结构
- 输入设备:键盘、鼠标、摄像头、话筒、磁盘、网卡
- 输出设备:显示器、声卡、磁盘、网卡、显示器等......
- CPU:运算器、控制器
- 存储器:内存
注意事项:
- 数据在计算机的体系结构中是流动的,流动过程中,数据会被加工和处理
- 数据从一个设备流动到另一个设备的本质是拷贝
- 数据在设备间的拷贝的效率决定了计算机整机的基本效率
- 设备之间是互相链接的
- 外部设备有数据时会通知控制器要进行数据读取
- 所有冯体系的硬件设备只能直接和内存打交道
问题1:为什么要有存储器?直接将输入设备中的数据传递给CPU不行吗?
答:输入设备读取数据的效率远远低于CPU处理数据的效率,浪费资源
补充知识:
- CPU内部具有多种寄存器和缓存设备,寄存器也可以存储只不过很小
- 距离CPU越近效率越高,但是成本也越高
在硬件数据流动角度,在数据层面:
- 不考虑缓存的情况,CPU不和外设直接打交道,CPU只和内存打交道
- 外设(输入输出)的数据,不是直接给CPU的,而是要先放入内存中
问题2:程序运行前,为什么要加载到内存?(冯诺依曼体系结构规定了)
答:程序 = 代码 + 数据,程序“数据”都要被CPU访问,且CPU只会从内存中读取程序“数据”
程序“数据”:代码 + 数据
问题3:程序没有被加载到内存的时候,在哪里?
答:磁盘(外设)上的二进制文件,需要执行该程序时再将外设中的内容加载到内存中去
结论:冯的体系结构中的硬件设备和计算机软件之间的协调与配合大部分由操作系统来管理和控制
操作系统
基本概念:操作系统是一款进行软硬件资源管理的软件
广义:操作系统的内核 + 操作系统的外壳程序
- 内核:进程管理、内存管理、文件管理、驱动管理等
- 外壳程序:给用户提供使用操作系统的工具,比如图形化界面、命令行等
狭义:操作系统的内核
设计操作系统的原因:(学校保安、食堂阿姨为学生管理好校园安全和食堂,学生可以好好读书)
- (保安对下级,校门,栅栏)对软硬件资源进行管理(手段)
- (保安对上级,学生,领导)为用户提供一个稳定的、安全的、高效的运行环境(目的)
理解操作系统的“管理”
基本概念:管理的本质不是对被管理对象的直接管理,而是对被管理者的数据做管理
情景一:日常生活中我们总是在决策和执行,对于学校校长而言他所做的大多数都是决策,学生是被管理者,校长是管理者,校长管理好学生不需要与学生进行接触
结论一:管理者不需要和被管理者直接接触,只需要拿到你的数据
情景二:一个学生有多种信息,但校长只关心与学习相关的或者一些基本的个人信息的数据,随着学生人数的不断增多,校长管理起来很困难,好在校长会写代码且校长想到了虽然这些数据很多,但是一些属性都是一样的只是值不一样,所以校长决定搞一个excel表格让辅导员安排学生进行填写,同时利用自己二把刀的计算机知识将每一个学生设定为一个特定名的结构体类型变量,最后将excel表格中的信息填入每一个学生的结构体中然后将这些结构体串联成一个链表,当某个学生的属性信息需要更改就遍历链表找到该学生后将结构体中的属性信息进行更改:
结论二:对于任何对象的管理都是先描述后组织
补充:将多个被管理者对象进行描述形成它们各自的数据对象,然后根据这些数据对象选定一种特定的数据结构将这些数据对象组织起来,此时对被管理对象的管理工作就转化成了对特定数据结构的增删查改,这就是一个基本的建模过程:
- 通过详细描述每个被管理者对象的属性、关系和特征,可以建立一个全面且准确的信息框架。这些描述可以包括个人资料、工作职责、项目进展等方面
- 在设计数据结构时需要考虑如何最好地组织这些信息以满足实际需求。常见的数据结构包括树形结构、图形结构或表格等形式,在此基础上选择适合需求场景的存储方式
- 一旦将被管理者对象按照特定数据结构组织起来,就可以利用数据库或软件系统进行增删查改操作。通过添加新成员、删除无效信息、查询所需内容以及更新相关记录等方式来有效地进行管理工作
问题1:为什么要学习数据结构?
答:数据结构讨论的是如何对一个一个对象管理,不同的数据结构决定了管理的策略和效率
问题2:数据结构的本质是?
答:用于组织和存储数据以便有效地访问和修改
问题3:容器(STL等)的本质是什么?
答:数据结构,可以容纳多个元素,并提供对这些元素进行添加、删除、查找等操作的方法
问题4:C++中封装的作用是什么?
答:描述对象
问题5:对于C++而言万物皆什么?在C++写代码前大多数情况都是干什么?
答:对象,对要管理的对象进行描述然后再进行组织
结论三:操作系统对下方层级内容管理的核心思想就是先描述后组织,将特定对象的管理变成对特定数据结构的增删查改(因此操作系统中有大量的数据结构大量的算法,各种队列之类的)
操作系统的六层结构
- 硬件层:冯诺依曼体系结构相关内容
- 驱动层:连接操作系统与硬件设备,为操作系统访问硬件提供接口
- 操作系统层:内存管理、进程管理等
- 系统调用层:存放操作系统为用户提供的接口,用户传参,操作系统操作,并将运行结果返回
- 用户操作接口层:多种标准库,其中放了系统调用接口,库中的函数又会对应相应的调用接口
- 用户层:进行开发,调用各种标准库库
注意事项:
1、驱动层的软件程序是由硬件厂商定义的
2、没有驱动层,在更换同种但不同版本的硬件设备时,新设备不能被操作系统正确识别和使用,有了驱动层,操作系统就不用直接管理硬件只用去调用相应的硬件接口,更换同种不同版本的硬件产生的差异会交给该类硬件对应的驱动程序去解决
3、用户必须使用系统调用的方式间接获取操作系统中的数据
4、操作系统不相信任何用户(害怕用户改数据),但是必须提供获取用户想要的数据的相关服务
5、系统调用层就可以有效避免用户直接访问并修改操作系统中数据而导致系统崩溃的问题(提供访问操作系统时的受管控的接口,你把钱从窗口给银行工作人员,工作人员进行操作,操作完之后工作人员会给告诉你结果,类似于类中的成员函数)
6、printf等想要使用硬件的函数一定是通过操作系统实现的
7、用户操作接口就相当于银行的大堂经理,帮助客户解决不知道该干啥的问题(一些大爷大妈去银行都不知道要干嘛,需要大堂经理进行引导先干什么后干什么)
8、不同操作系统提供的系统调用接口不同(返回值、函数名等),如果用户不用标准库,直接用操作系统提供的系统调用接口,那么Linux中写的代码在windows中就不能运行了,即不具备跨平台性,而使用标准库,标准库会根据不同的操作系统对某一函数可以调用的系统调用接口进行修改,用户只需要正常使用标准库即可,不用关心其它内容(在Linux中使用的C/C++标准库就是Linux版本的库,windows中用的就是windows版本的库)
9、操作系统层 + 系统调用接口层才是真正意义上的操作系统
~over~