当前位置: 代码网 > 服务器>服务器>Linux > Linux - 冯-诺依曼体系结构、初始操作系统

Linux - 冯-诺依曼体系结构、初始操作系统

2024年08月06日 Linux 我要评论
冯•诺依曼体系:结构推导;内存提高效率的方法;数据的流动过程;体系结构相关知识;初始操作系统:定位;设计目的;操作系统之上之下分别有什么;管理精髓:先描述,再组织。

目录

冯•诺依曼体系

  结构推导

  内存提高效率的方法

  数据的流动过程

  体系结构相关知识

初始操作系统

  定位

  设计目的

  操作系统之上之下分别有什么

  管理精髓:先描述,再组织


冯•诺依曼体系

  结构推导

        计算机的主要作用是解决人们的问题。为了实现这一目标,首先需要将数据或问题输入到计算机中,因此计算机必须配备输入设备。在计算机处理完问题后,还需要将结果显示出来,所以计算机必须配备输出设备。通过输入设备获取数据后,计算机会对这些数据进行一系列的算术运算和逻辑运算,最后通过输出设备将结果输出。整个过程可以总结为以下流程图。

        然而,计算机不仅仅需要具备算术运算和逻辑运算功能,还需要具备控制功能,以便控制何时从输入设备获取数据,何时将数据输出到输出设备等。在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++中,则称为面向对象。

        随着学生数量的增多,校长可以将所有学生的信息组织起来。组织的方式有多种选择,如链表、顺序表或树结构,每种方式都有其独特的优势。因此,就有了一门专门教授如何有效管理数据的课程,称为数据结构。例如,假设校长使用双链表来组织学生的信息。

        在这种情况下,校长对各个学生的管理实际上就是对这个双链表进行增删查改操作。例如,当有新生时,直接将一个新的节点加入到双链表中;而当学生毕业时,直接从双链表中移除该学生的信息即可。 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com