目录
冯•诺依曼体系
结构推导
内存提高效率的方法
数据的流动过程
体系结构相关知识
初始操作系统
定位
设计目的
操作系统之上之下分别有什么
管理精髓:先描述,再组织
冯•诺依曼体系
结构推导
计算机基本工作流程图大致如下:
- 输入设备:接受用户输入的数据或指令,例如键盘、鼠标、扫描仪等。
- 中央处理器(CPU):负责执行数据的算术和逻辑运算。包括:
- 算术逻辑单元(ALU):执行所有算术和逻辑操作。
- 控制单元(CU):负责指挥整个计算机系统各个部件的工作。
- 内存:用于存储数据和指令的临时存储区域。包括:
- 随机存取存储器(RAM):存储当前正在使用的数据和指令。
- 只读存储器(ROM):存储重要的固件和系统启动程序。
- 外部存储设备:用于长期存储数据,例如硬盘、光盘、U盘等。
- 输出设备:将处理结果输出显示给用户,例如显示器、打印机、音响等。
计算机的主要作用是解决人们的问题。为了实现这一目标,首先需要将数据或问题输入到计算机中,因此计算机必须配备输入设备。在计算机处理完问题后,还需要将结果显示出来,所以计算机必须配备输出设备。通过输入设备获取数据后,计算机会对这些数据进行一系列的算术运算和逻辑运算,最后通过输出设备将结果输出。整个过程可以总结为以下流程图。
然而,计算机不仅仅需要具备算术运算和逻辑运算功能,还需要具备控制功能,以便控制何时从输入设备获取数据,何时将数据输出到输出设备等。在C语言中,算术运算对应一系列的加、减、乘、除操作,逻辑运算对应一系列的逻辑与、逻辑或等操作,而控制功能则对应于C语言中的条件判断、循环结构以及各个函数之间的跳转等。
因此,我们将这个具有算术运算功能、逻辑运算功能以及控制功能的模块称为中央处理器,简称CPU。
然而,相对于中央处理器,输入设备和输出设备的速度非常慢。因此,在当前的计算机体系中,输入设备和输出设备的速度显得很慢,而CPU的速度非常快。根据木桶原理,整体系统的速度最终会受到最慢部分的限制,因此整个系统的表现速度将会是很慢的。
因此,当前的体系结构显然是不合适的。为了解决这个问题,我们不再让输入设备和输出设备直接与CPU交互,而是在它们之间加入了内存。
内存的一个特点是其速度远快于输入设备和输出设备,但又比CPU慢。因此,内存处于慢设备和快设备之间,作为一个不快也不慢的设备,能够在这个体系结构中起到缓冲作用。
现在的体系运行流程如下:用户输入的数据首先被存放到内存中,CPU需要读取数据时直接从内存中读取。CPU处理完数据后将其写回内存,然后内存再将数据传输到输出设备,最后由输出设备进行输出显示。
这就形成了最终的冯诺依曼体系结构。
注意: 这里存储器只是内存,不包括外存。
内存提高效率的方法
很多人有一个疑惑:先将输入设备的数据交给内存,再由内存将数据交给CPU,这个过程真的比CPU直接从输入设备获取数据更快吗?
在解释这个问题之前,我们首先需要了解:内存具有数据存储的能力。虽然内存的容量只有4G或8G,但既然内存有容量,就意味着它具有预装数据的能力,而这正是提高该体系结构效率的秘诀。
这里不得不提到局部性原理:根据统计学原理,当一个数据正在被访问时,下次很可能会访问其周围的数据。因此,当CPU需要获取某一行数据时,内存可以将该行数据及其周围的数据一同加载进来。CPU处理数据和内存加载数据可以同时进行,这样下次CPU就可以直接从内存中获取数据。
输出数据时也是如此:CPU处理完数据后直接将数据放到内存中,当输出设备需要时再从内存中获取。这就引出了我们常说的缓冲区的概念。例如,缓冲区满了才将数据打印到屏幕上,使用fflush
函数将缓冲区中的数据直接输出等,都是将内存中的数据直接传递到输出设备进行显示输出。
数据的流动过程
要使用QQ,首先需要联网。你和你朋友的电脑都采用冯诺依曼体系结构。在你向朋友发送消息的过程中,你的电脑中键盘充当输入设备,显示器和网卡充当输出设备;而你朋友的电脑中,网卡充当输入设备,显示器充当输出设备。
首先,你在键盘上输入消息,键盘将消息加载到内存。此时,你的显示器可以从内存获取消息并显示在你自己的屏幕上,这样你就能看到自己所发送的消息。
当键盘将消息加载到内存后,CPU从内存获取消息并对其进行各种封装,然后将封装好的消息写回内存。接下来,你的网卡可以从内存获取已封装的消息,并在网络中经过一系列处理(此处忽略网络处理细节)。之后,你朋友的网卡从网络中获取到你发送的消息,并将该消息加载到内存中。
然后,你朋友的CPU从内存中获取消息并进行解包操作,将解包好的消息写回内存。最后,你朋友的显示器从内存中获取消息,并将其显示在他的电脑上。
体系结构相关知识
根据冯诺依曼体系结构,从硬件角度或数据层面来看,CPU只能直接与内存交互,外设也只能通过内存来进行数据交换。这也解释了为什么程序在运行之前必须先加载到内存中:因为可执行程序(文件)存储在硬盘上(外设),而CPU只能从内存中获取数据,所以必须先将程序加载到内存中才能执行。
常见的输入设备和输出设备包括:
- 输入设备:键盘、鼠标、网卡、硬盘、话筒、摄像头、扫描仪等。
- 输出设备:显示器、音响、网卡、硬盘、打印机等。
注意:同一种设备在不同情境下可能作为输入设备或输出设备。
在硬件层面上,各个硬件单元之间通过总线连接。外设与内存之间的总线称为I/O总线,而内存与CPU之间的总线称为系统总线。
在实际操作中,例如键盘输入,键盘会先将获取到的内容存储在自己的寄存器中,然后通过寄存器将数据写入内存。
这种体系结构确保了数据在各个硬件设备之间的有效交换和协作,同时提供了高效的数据传输和处理能力。
初始操作系统
定位
操作系统在计算机系统中的定位非常重要,它是控制和管理计算机硬件与软件资源的核心软件。
设计目的
操作系统设计的目的包括:
资源管理和优化:有效管理和优化计算机系统中的硬件资源。
用户接口:提供良好的用户界面和应用程序运行环境。
执行环境:确保程序安全、稳定地执行。
多任务和并发支持:支持多任务处理和并发执行。
文件和数据管理:有效组织、存储和保护文件和数据。
安全性和隔离:保护系统和用户数据的安全,提供合适的权限控制。
网络和通信:支持网络连接和数据传输。
可扩展性和灵活性:适应不同需求和硬件平台的扩展和定制化配置。
操作系统之上之下分别有什么
首先,我们所看到的是计算机的实体部分,即底层的硬件。这些硬件看似单独罗列,实际上在底层都遵循冯诺依曼的组织结构。
除了硬件部分,单靠这些硬件是不够的,还需要软件来管理它们。例如,确定内存何时从输入设备读取数据、读取多少数据,以及何时将数据刷新到输出设备的缓冲区,是由软件来控制的。这个软件就是操作系统(Operating System)。
在操作系统与底层硬件之间确实存在一层驱动层。操作系统不直接与底层硬件打交道,而是通过驱动程序来管理和控制硬件。例如,键盘有键盘驱动程序,网卡有网卡驱动程序,硬盘有硬盘驱动程序等。这些驱动程序负责直接与硬件通信,执行读取、写入以及获取硬件状态等操作。驱动程序通常由硬件制造商提供,或者由操作系统开发者针对特定硬件开发。
通过引入驱动层,操作系统不需要直接关心具体的硬件细节和操作方式。操作系统只需关注何时需要读取数据或执行操作,而不必关心这些操作是如何在硬件层面实现的,从而实现了操作系统与硬件之间的解耦。
操作系统主要进行以下四项管理:
内存管理:负责内存的分配、共享、保护和扩展等操作。
驱动管理:管理计算机设备的驱动程序,包括分类、更新和删除等操作。
文件管理:管理文件的存储空间、目录结构、文件操作和保护等。
进程管理:负责进程的创建、调度和管理。
在操作系统的顶层是用户层,这里我们可以通过命令行或图形界面进行各种操作。
为了保护自身安全性,操作系统不直接让用户访问其内部,而是通过一系列接口暴露给用户,这些接口被称为系统调用接口。
然而,对于普通用户来说,直接使用系统调用接口的成本较高,因为这需要对系统有一定的了解。因此,在系统调用接口之上,开发出了一批库,如libc和libc++。这些库实际上是对系统调用接口的封装,在语言级别上提供了各种函数(如printf和scanf),我们可以通过调用这些函数来编写各种程序。
管理精髓:先描述,再组织
要理解操作系统的管理概念,可以通过实际角色来解释。
举个例子:假设有三个角色,学生、辅导员和校长。在这个例子中,校长是管理者,学生是被管理者。那么,辅导员则充当中间角色,负责在校长和学生之间传递信息和执行指示,以确保学生得到适当的指导和支持。
深入思考后可以得出,完成任何事情通常需要经历两个关键过程:首先是决策阶段,即确定是否要做某件事以及如何做;其次是执行阶段,即实际去做这件事情。
在校长管理学生的例子中,校长作为管理者负责做出决策,确定学校的方向和政策。然而,校长不会直接执行这些决策,而是委派辅导员作为执行者来实施这些决策,确保学生按照学校规定的方向行事。
因此,辅导员的角色主要是执行者,负责执行管理者(校长)制定的决策和方针。
尽管我们很少在学校看到校长本人,但校长如何在没有直接接触我们的情况下管理我们呢?
举例来说,假设校长要求辅导员提供计算机课程排名前十的学生的成绩和表现记录。校长会从这些数据中选择三名学生参加编程大赛,然后委派老师对这三名学生进行强化训练。在这个过程中,校长从未亲自见过这些学生,而是基于什么进行管理呢?校长主要依赖数据。
实际上,学校对每位学生的各种信息进行管理,包括基本信息、成绩、健康状况等等。校长通过这些数据来做出决策和管理安排,而不必直接与每个学生互动。
每个学生的信息可以看作是一套数据,通过这些数据,校长能够有效地进行学生管理。在C语言中,我们将这种数据组织方式称为抽象结构体;而在C++中,则称为面向对象。
随着学生数量的增多,校长可以将所有学生的信息组织起来。组织的方式有多种选择,如链表、顺序表或树结构,每种方式都有其独特的优势。因此,就有了一门专门教授如何有效管理数据的课程,称为数据结构。例如,假设校长使用双链表来组织学生的信息。
在这种情况下,校长对各个学生的管理实际上就是对这个双链表进行增删查改操作。例如,当有新生时,直接将一个新的节点加入到双链表中;而当学生毕业时,直接从双链表中移除该学生的信息即可。
总结:
管理者管理被管理者的过程实际上包括以下几个步骤:
- 首先描述被管理者的各种信息;
- 然后根据某种数据结构将多个被管理者的描述信息组织起来;
- 最终,管理者通过对这个数据结构进行操作来管理被管理者。