【Linux】第十一站:冯诺依曼与操作系统

简介: 【Linux】第十一站:冯诺依曼与操作系统


一、冯诺依曼体系结构(硬件层面)

1.冯诺依曼体系结构

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系

  1. 存储器指的是什么?

这里的存储器指的就是内存

  1. 输入设备有哪些?

键盘、摄像头、话筒、磁盘、网卡…

  1. 输出设备有哪些?

显示器、播放器、磁盘、网卡…

我们也将输入和输出设备称作外设

有的设备是纯的输入,输出,也有的既是输入,又是输出设备

  1. 运算器

对我们的数据进行计算任务(算数运算,逻辑运算)

  1. 控制器

对我们的计算硬件流程进行一定的控制

我们将运算器和控制器合起来称作CPU

不过上面的这五部分都是独立的个体!

所以各个硬件单元必须用“线”链接起来,这些线就是总线,有如下两种总线

  1. 系统总线
  2. IO总线

2.数据流向

在冯诺依曼体系中,它的数据流向是这样的

输入设备的的数据不能直接传送到CPU中,必须先传入存储器(内存)中,然后由存储器交给CPU,经过运算后,在由CPU交给存储器,最后才能到输出设备

存储的效率

设立分级主要原因是因为CPU太快了,而外设太慢了,即类似于木桶原理,这也就是为什么CPU的数据要从存储器中拿去

以上这个过程是由操作系统来完成的

这个存储器就可以看作一个硬件级别的缓存空间。

即我们不需要让CPU和外设直接去交互,而是通过内存,先让CPU将数据都放到了存储器中,这样CPU就可以闲置下来了,然后就可以做其他的事情了,至于与输入输出设备相关的交给存储器来做。这样就可以提高计算机的效率了。

所以说存储器是处于核心地位的

  1. 一个程序要运行,必须得先加载到内存中运行?为什么?

因为我们的程序是在外设中的,而它要想进入CPU就必须得先进入到存储器中,所以说,一个程序要运行,必须得先加载到内存中运行。

这是由冯诺依曼体系结构所规定的!

  1. 为什么我们当时写的进度条,默认显示的数据,是可能会缓存起来的,在哪里缓存?

因为内存就相当于于一个硬件级别的缓存空间,我们在运算完以后必须要进入到内存中,所以我们必须得要刷新才可以显示出来。这也是由于冯诺依曼体系才决定的。

比如说当我们与朋友使用QQ进行聊天的时候,如下图所示,在不考虑网络的情况下,它的数据流动是什么样呢?

应该是如下所示的,无论如何他们的数据必须先加载到内存中去

又比如当我将一个实验报告通过qq发送给朋友的时候,数据流通还是类似的,只不过输入设备成为了我的磁盘,而输出设备成为了他的磁盘。(因为这个数据文件即便我们将电脑关机了他还是不会消失的,还是会存在的)

3.总结

  • 这里的存储器指的是内存
  • 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
  • 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
  • 一句话,所有设备都只能直接和内存打交道

二、操作系统

我们知道操作系统是一款进行管理的软件!

这里的管理,可以是对硬件的管理,也可以是对软件的管理。

那么就有下面几个问题了。操作系统为什么要进行管理?操作系统管理的是什么?操作系统是怎么管理的?

1.概念

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

  • 内核(进程管理,内存管理,文件管理,驱动管理)
  • 其他程序(例如函数库,shell程序等等)

2.设计操作系统的目的

如上图所示,所有的硬件必须要有驱动程序,必须要有这个驱动程序才能去访问硬件,他是直接和硬件打交道的程序。

类似于我们的鼠标链接上电脑以后,必须要先等一会才能使用,这就是驱动程序在启动的过程。

所以这里就可以回答为什么要有操作系统去管理的这个问题了

  1. 操作系统帮助用户,管理好下面的软硬件资源(为什么要有?)
  2. 为了给用户提供一个良好(稳定,高效,安全)的运行环境(目的,为什么要管理好)

所以操作系统通过管理好底层的软硬件资源(手段),为用户提供一个良好的执行环境(目的)(对下管理)

不过要注意这里的用户

分为两种人:普通用户和程序员

普通用户用的其实是程序员开发出来的软件

而程序员才是主要与操作系统打交道的,所以这里的用户主要指的是程序员

而我们的程序员是无法直接与底层的硬件打交道的,所以我们只能通过操作系统去与底层的硬件打交道。

操作系统里面会有各种数据,可是操作系统不相信任何用户!

类似于银行也不相信用户,所以才搞出来了玻璃窗,但是又得服务用户,所以留出来一点口

而操作系统也是一样的,为了保证自己数据安全,也为了保证给用户能够提供服务,操作系统以接口的方式给用户提供调用的入口,来获取操作系统内部的数据(对上提供接口)

这些接口是操作系统提供的,用C实现的,自己内部的函数调用 ----系统调用

所以说,所有访问操作系统的行为,都只能通过系统调用完成!

3.定位

**整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件 **

4.如何管理

我们知道任何一件事情都可以分为两种 1.决策 ,2.执行

比如下面这个例子

在大学中,假设只有校长、辅导员、学生三种身份

校长就是最典型的管理者、决策者

学生就是最典型的被管理者

那么辅导员属于什么身份呢?

而我们知道,我们和校长几乎是无法见面的,所以说

  1. 管理者和被管理者是不需要见面的
  2. 管理者在不见被管理者的情况下,如何做好管理呢?只要能够得到管理信息,就可以在未来进行管理决策-----所以说管理的本质:是通过对数据的管理,达到对人的管理
  3. 管理者和被管理者面都不见,我们怎么拿到对应的数据呢?当然是通过执行者

而我们知道,校长是通过辅导员拿到学生的数据的。

所以说辅导员其实就是执行者角色,他并不属于管理者

而操作系统、驱动程序、软硬件资源这三者的关系就如同校长、辅导员、学生三者的关系

操作系统就如同校长

驱动程序如同辅导员

软硬件资源如同学生

所以操作系统才能在连软硬件资源面都不见的情况下拿到对应的数据。就是因为驱动程序在帮操作系统拿数据。

比如当下面的软硬件资源出现故障的时候,驱动程序往操作系统上报,如果操作系统无法解决,就继续向用户上报

我们知道,如果校长想要去进行决策的话,那么就需要让辅导员将学生的数据全部上报。但是这里出现的问题是,如果数据量太大的时候,做出一个决策是非常困难的。比如说找到升高最高的一些人。是非常困难的。

所以我们就会做出一个表格,因为每个人都有共同的一个特征,只不过这个特征都有所差异罢了。比如这个表有这些信息:姓名、性别、身高、体重、学号、身份证号、电话、籍贯…,这个过程就是一个描述的过程,将每个人给描述出来

当每个辅导员将这个表整理好以后,现在我们的任务就是遍历这个表,找到我们想要的数据即可。

不过描述好之后,我们最好能够将这些信息给组织起来

比如我们用一个结构体,来存储每一个人的信息

struct student
{
  char _college[]; //学院
  char _name[];  //姓名
  char _class[];  //班级
  ......
    struct student* next;
};

然后我们就可以定义一个结构体数组,比如定义10000个结构体对象,当然我们也可以用链表来组织

这样的话,我们的这个校长就可以得到一个链式的结构,这个结构就包括了全部的学生信息

我们就只需要把这个学生链表结构管理好就可以了!

然后我们就成功的将对学生的管理工作,转换成为了对链表的增删改查

而上面的将每一个学生用链表的过程就是组织的过程

总之先描述、后组织的过程

包括我们前面的代码很多都是先描述后组织的过程

比如对于通讯录,就是先描述一个人,然后用链表去组织

比如在C++中,面向对象就是描述类,STL容器就是组织

比如对于三子棋,就是先描述坐标,然后用一个二维数组管理起来

这个先描述,后组织的过程也可以看作建模的过程

那么为什么要先描述后组织呢?这是因为计算机只能这么做!

所以关于如何管理,他的答案就是先描述,后组织

而操作系统要对这些硬件做出管理,就需要对这些设备进行描述,比如用一个结构体描述,不同的设备填上不同的属性值,然后就可以用一个链表管理起来。然后对设备的管理就变为了对这个链表的管理

5.系统调用和库函数概念

  • 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
  • 系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

所以说,像这个printf函数当我们使用的时候,他会自顶向下贯穿整个操作系统,从而完成这个打印操作

所以说

库函数和系统调用的关系就是,上下层调用和被调用的关系

相关文章
|
3天前
|
存储 Linux C语言
Linux:冯·诺依曼结构 & OS管理机制
Linux:冯·诺依曼结构 & OS管理机制
9 0
|
2天前
|
存储 Shell Linux
操作系统实战(一)(linux+C语言)
本篇文章重点在于利用linux系统的完成操作系统的实验,巩固课堂知识
|
3天前
|
Linux Shell
Linux操作系统下查找大文件或目录的技巧
Linux操作系统下查找大文件或目录的技巧
10 2
|
3天前
|
算法 Ubuntu Linux
为什么Linux不是实时操作系统
本文探讨了Linux为何不是实时操作系统(RTOS)。实时性关乎系统对事件的确定性响应时间,而Linux虽能保证调度执行的实时任务,但无法确保中断响应时间、中断处理时间和任务调度时间的确定性。中断响应时间受中断屏蔽时间影响,Linux中无法确保;中断处理时间因不支持中断嵌套而不确定;任务调度时间虽快,但调度点的限制影响实时性。Linux的定位是通用操作系统,追求平均性能而非绝对实时性。为改善实时性,Linux提供了不同抢占模型,如可抢占内核(Low-Latency Desktop)和PREEMPT-RT补丁,后者接近硬实时但牺牲了吞吐量。PREEMPT-RT正逐渐成为Linux实时增强的标准。
10 1
为什么Linux不是实时操作系统
|
3天前
|
存储 Ubuntu Linux
xenomai3+linux构建linux实时操作系统-基于X86_64和arm
Xenomai是一个实时性解决方案,通过在Linux上添加实时内核Cobalt来增强实时性能。它有三个主要部分:libcobalt(用户空间实时库)、Cobalt(内核空间实时内核)和硬件架构特定层(ipipe-core或dovetail)。ipipe-core适用于Linux 5.4以下版本,而dovetail用于5.4及以上版本。本文介绍了在X86 Ubuntu环境下,如何编译Xenomai内核,搭建应用环境,包括配置、编译、安装和实时性测试。对于其他硬件架构,如ARM和ARM64,步骤类似。文章还提到了Xenomai与Linux内核版本的兼容性和实时性测试结果。
12 0
xenomai3+linux构建linux实时操作系统-基于X86_64和arm
|
3天前
|
消息中间件 测试技术 Linux
linux实时操作系统xenomai x86平台基准测试(benchmark)
本文是关于Xenomai实时操作系统的基准测试,旨在评估其在低端x86平台上的性能。测试模仿了VxWorks的方法,关注CPU结构、指令集等因素对系统服务耗时的影响。测试项目包括信号量、互斥量、消息队列、任务切换等,通过比较操作前后的时戳来测量耗时,并排除中断和上下文切换的干扰。测试结果显示了各项操作的最小、平均和最大耗时,为程序优化提供参考。注意,所有数据基于特定硬件环境,测试用例使用Alchemy API编写。
10 0
linux实时操作系统xenomai x86平台基准测试(benchmark)
|
14天前
|
存储 Oracle 关系型数据库
linux操作系统相关资源优化
【4月更文挑战第21天】基于操作系统的性能优化也是多方面的,主要是系统安装、系统内核参数、网络参数、文件系统等几个方面进行衡量
25 2
|
19天前
|
存储 缓存 安全
【linux基础(八)】计算机体系结构--冯诺依曼系统&操作系统的再理解
【linux基础(八)】计算机体系结构--冯诺依曼系统&操作系统的再理解
|
1月前
|
监控 Unix Linux
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
34 0
|
1月前
|
Linux 编译器 开发者
Linux设备树解析:桥接硬件与操作系统的关键架构
在探索Linux的庞大和复杂世界时🌌,我们经常会遇到许多关键概念和工具🛠️,它们使得Linux成为了一个强大和灵活的操作系统💪。其中,"设备树"(Device Tree)是一个不可或缺的部分🌲,尤其是在嵌入式系统🖥️和多平台硬件支持方面🔌。让我们深入了解Linux设备树是什么,它的起源,以及为什么Linux需要它🌳。
Linux设备树解析:桥接硬件与操作系统的关键架构