【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函数当我们使用的时候,他会自顶向下贯穿整个操作系统,从而完成这个打印操作

所以说

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

相关文章
|
6天前
|
运维 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot 是阿里云推出的一款操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行和系统运维调优等功能。通过简单的命令行操作,用户可以快速获取所需信息并执行任务,极大提升了Linux系统的使用效率。安装步骤简单,只需在阿里云服务器上运行几条命令即可完成部署。使用过程中,OS Copilot不仅能帮助查找命令,还能处理文件和复杂场景,显著节省了查找资料的时间。体验中发现,部分输出格式和偶尔出现的英文提示有待优化,但整体非常实用,特别适合Linux初学者。
51 10
|
6天前
|
Linux
Linux 操作系统
在 Linux 中,UID(用户 ID)是标识用户身份的重要概念。UID 唯一标识每个用户,通过 UID 可区分不同用户类别:UID 0 为超级用户,1-999 为系统用户,1000 及以上为普通用户。因此,正确选项为:UID 标识用户、可区分用户类别、普通用户 UID 大于 1000。
|
1月前
|
弹性计算 运维 Ubuntu
os-copilot在Alibaba Cloud Linux镜像下的安装与功能测试
我顺利使用了OS Copilot的 -t -f 功能,我的疑惑是在换行的时候就直接进行提问了,每次只能写一个问题,没法连续换行更有逻辑的输入问题。 我认为 -t 管道 功能有用 ,能解决环境问题的连续性操作。 我认为 -f 管道 功能有用 ,可以单独创建可连续性提问的task问题。 我认为 | 对文件直接理解在新的服务器理解有很大的帮助。 此外,我还有建议 可以在非 co 的环境下也能进行连续性的提问。
75 7
|
1月前
|
存储 运维 安全
深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功能和优势。
68 6
|
1月前
|
安全 大数据 Linux
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
|
1月前
|
缓存 安全 Linux
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
112 23
|
1月前
|
弹性计算 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot是由阿里云推出的操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行等功能,极大提升了Linux系统的使用效率。用户只需通过简单的命令或自然语言描述问题,OS Copilot即可快速提供解决方案并执行相应操作。例如,查询磁盘使用量等常见任务变得轻松快捷。此外,它还支持从文件读取复杂任务定义,进一步简化了操作流程。虽然在某些模式下可能存在小问题,但总体上大大节省了学习和操作时间,提高了工作效率。
136 2
OS Copilot-操作系统智能助手-Linux新手小白的福音
|
2月前
|
存储 缓存 网络协议
Linux操作系统的内核优化与性能调优####
本文深入探讨了Linux操作系统内核的优化策略与性能调优方法,旨在为系统管理员和高级用户提供一套实用的指南。通过分析内核参数调整、文件系统选择、内存管理及网络配置等关键方面,本文揭示了如何有效提升Linux系统的稳定性和运行效率。不同于常规摘要仅概述内容的做法,本摘要直接指出文章的核心价值——提供具体可行的优化措施,助力读者实现系统性能的飞跃。 ####
|
2月前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
113 1
|
2月前
|
缓存 监控 网络协议
Linux操作系统的内核优化与实践####
本文旨在探讨Linux操作系统内核的优化策略与实际应用案例,深入分析内核参数调优、编译选项配置及实时性能监控的方法。通过具体实例讲解如何根据不同应用场景调整内核设置,以提升系统性能和稳定性,为系统管理员和技术爱好者提供实用的优化指南。 ####