【Linux】冯诺伊曼体系结构|操作系统概念理解

news2024/9/22 1:24:43

在这里插入图片描述
在这里插入图片描述

个人主页:🍝在肯德基吃麻辣烫
我的gitee:Linux仓库
个人专栏:Linux专栏
分享一句喜欢的话:热烈的火焰,冰封在最沉默的火山深处

文章目录

  • 前言
  • 一、先谈硬件——冯诺依曼体系结构
    • 1.什么是冯诺依曼体系结构?
    • 2.拆解冯诺依曼体系结构的硬件
    • 3.内存有多重要?
    • 4.数据在体系结构中的流动
  • 二、再谈软件——操作系统
    • 1.操作系统是什么
    • 2. 为什么操作系统要把资源管理好
    • 3.什么是系统调用接口?
  • 三、操作系统如何管理
    • 1. 管理的本质
    • 2.操作系统如何管理?
  • 总结


前言

本文进入Linux较为晦涩的概念——冯诺依曼体系结构和操作系统的理解。


一、先谈硬件——冯诺依曼体系结构

1.什么是冯诺依曼体系结构?

冯诺依曼体系结构是我们日常计算机都遵守的一个整体架构,计算机有很多硬件,比如硬盘,内存条,cpu等等。这些硬件通过冯诺依曼体系结构组装起来就是一台计算机。

在这里插入图片描述
这张图体现的就是冯诺依曼体系结构整体概览。

2.拆解冯诺依曼体系结构的硬件

  • (1)存储器指的是内存
  • 外设:
    • (2)输入设备:鼠标,键盘,摄像头,话筒,磁盘,网卡等等
    • (3)输出设备:显示器,播放器硬件,磁盘,网卡等等
  • CPU(中央处理器):
    • (4)运算器:对数据进行运算任务(算数运算,逻辑运算)
    • (5)控制器:对我们的计算硬件流程进行控制。

上面每一个硬件都是独立的个体。拆解任何一个硬件出来并不会影响其他硬件的正常运行。这些硬件具有独立性

但它们每个硬件直接都会用线连接起来。
CPU和内存之间交互的线叫做系统总线,内存和外设之间交互的线叫做IO总线

有些设备同时作为输入设备和输出设备:比如磁盘
假如我今天下载了一个抖音短视频并保存在磁盘上,这个过程相当于磁盘采集我的抖音数据,就是输入行为。
明天那个用户打开磁盘,播放他的抖音短视频,这个过程是磁盘将数据结果呈现给用户,就是输出行为。

像计算机的存储器,也是分有许多等级:
在这里插入图片描述
不同的等级造价不同,越往下造价越低,但是离CPU越来越远。
并且内存具有掉电易失性,也就是断电之后内存中的数据会丢失,反观磁盘则不会。

3.内存有多重要?


问题1:为什么冯诺依曼体系结构要有一个存储器(内存)?为什么不能让CPU和外设直接进行交互呢?

我们知道,CPU的运行速度是非常快的,是一个纳秒级别的硬件。而外设就显得非常慢,外设的运行速度通常只在毫秒级。你要知道,纳秒和毫秒是相差10的6次方,百万倍的差距。

这里有一个木桶原理:
在这里插入图片描述
一个木桶能盛水多少取决于木桶中最短的那块木板。

如果整机只采用CPU和外设进行交互的话,会极大拖慢CPU的运行效率,因为CPU实在
是太快了,只能等着输入设备缓慢地输入,CPU进行运算完成后,把数据交给输出设
备,输出设备又在缓慢地输出,CPU花费大量时间等待

这使得整机运行效率只取决于外设的运行速度。

这样的环境使得冯诺依曼想到了必须用一个内存来作为媒介,将输入的数据交给内存,CPU再从内存中读取数据运算后再交还给内存,内存再将数据输出到输出设备中。

由于内存的运行速度即不算快,也不算慢,在微秒级别。不至于让CPU过长时间等待,使得整机效率提升到以内存为核心的运行速度上


问题2:既然你说内存不算快,那不也得让CPU在干等着吗?

在实际计算机体系中,输入数据会有一个预加载的过程,也就是把输入的数据提前加载到内存,这样CPU从内存中拿数据时,实现了数据一边加载到内存,CPU一边从内存中拿数据的并行实现方式,让整个体系没有正在等待中的硬件,这样能实现高效地输入,存储,计算,输出的过程。

实际上,在冯诺依曼体系结构中,输入设备和输出设备并不会直接与CPU进行交互,而是通过内存来实现几个硬件交互。

既然内存叫做存储器,它本身是没有运算能力而只有存储能力的。既然内存比CPU慢,那为什么不将内存全部用寄存器来做?

很简单,太贵了,寄存器虽然非常快,但同时它的造价非常高。我们现在用的笔记本内存通常是8G16G32G等等。如果一个8G的内存全部用装上寄存器,那它的造价会非常高,甚至几十万,几百万,这样的价格会让我们平民百姓难以用得起。

要知道,计算机能在这几十年飞速发展,一个很重要的原因在于计算机的价格不算特别贵,平民百姓有机会去接触计算机,大量的想象力和创造力才得以体现出来。


问题3:一个程序要运行,必须先加载到内存中运行,为什么?

程序中既有代码也有数据,既然有数据代码,就注定要进行运算,并且CPU和输入设备是不会直接交互的,那就注定代码和数据要加载到内存中,CPU才能从内存中拿数据进行计算,结果返回给内存,再输出到输出设备中。

所以,是冯诺依曼体系结构规定的!

4.数据在体系结构中的流动

假如今天我在qq上跟麻辣哥进行聊天。我通过qq对话框向麻辣哥发了一句在吗? 在这个过程数据是如何流动呢?

在这里插入图片描述

首先我会在键盘中输入在吗?,即我的输入设备是键盘,输入完成后,这个数据会被内存进行读取存储,由于计算机只认识二进制,不认识我们中华汉字,所以这个数据一定会被CPU读取进行计算转化等等操作,再将数据返回到内存中存储。这是一个对话框,当我点击发送后,信息会输出到网卡中。
在麻辣哥的冯诺依曼计算机里,我的那一句在吗? 会被麻辣哥的网卡进行读取,即麻辣哥的计算机的输入设备应该是网卡,然后这句话同样会被采集加载到内存中,CPU再拿走这句话进行解码读取等行为,再将数据返回到内存中,最后将在吗? 输出到显示器上。

所以这整个过程就是两台冯诺依曼计算机在进行交互!

关于冯诺依曼,总结几点:

  • 1.这里的存储器指的是内存
  • 2.不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
  • 3.外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。

一句话,所有设备都只能直接和内存打交道

二、再谈软件——操作系统

1.操作系统是什么

我们知道,前面讲的冯诺依曼体系结构都是一大堆硬件,它们虽然提供许多功能,但是它们本身并不聪明,需要有人对它们进行工作分配和资源管理。

简单来说,就是要有人管理好一大批硬件和软件,而这个人就是操作系统

操作系统是一款进行管理的软件!

其中操作系统会对硬件和软件都进行管理。

操作系统由几大块组成:内存管理,进程管理,文件管理,驱动管理。

在操作系统之下,有一些驱动程序和底层的硬件。

在这里插入图片描述

其中底层硬件就是我们上面所讲的冯诺依曼体系结构。
驱动程序就是让硬件动起来的程序,每个硬件都必须有自己对应的驱动程序,我们新买的电脑,大部分都是厂商帮我们安装好了各种驱动程序,有些则是让我们自己去安装的。

2. 为什么操作系统要把资源管理好

我们知道,银行有各种工作人员,有大堂经理,有前台服务人员,有安保等等。
还有各种业务,借贷系统,预约系统等等。

操作系统就像是银行一样,可以帮助来银行办理业务的管理好各种工作。

  • 也就是操作系统可以帮助用户管理好下面的软硬件资源

假如一个银行的安保系统不行,或者我的卡里时不时就不见了几万块钱,或者我的银行每天又扣了点钱,这就是银行的管理没做好。

就相当于操作系统没有管理好它下面的软硬件资源。
所以我们在选择操作系统时,注重的是:

  • 为了给用户提供一个良好(稳定,高效,安全)的运行环境。

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

3.什么是系统调用接口?

我们知道,银行里面有大量资金,如果银行不将这些资金储存并封闭起来,这些资金对任何一个普通人来说无疑是巨大的诱惑。

此时这个银行就像是操作系统,里面有各种数据,可是操作系统,不相信任何用户!

操作系统为了保证数据安全,会把自己封闭起来。

那么,如果操作系统把数据封闭起来了,我又想访问这些数据,怎么办?
正如同银行把自己封闭起来,我又要去取钱,该怎么办?

我们只能通过银行开放的那几个小窗口来进行取存钱业务!
对操作系统也是这样,我们只能通过操作系统开放的接口,来获取内部的数据!

那么,什么是接口?

操作系统是c语言实现的,这个接口只能由操作系统提供,一般来讲,这些接口不难猜到,就是普通的函数。然而,函数需要传递参数,有返回值,就像我们去银行取钱,需要提供身份证等个人信息一样,待银行工作人员验证后,才把我需要的钱给我。
操作系统对我传递的函数参数等验证后,会把我需要的数据返回给我。
这个就是接口

所以接口是操作系统提供的c函数实现的,这个通过调用接口的过程,叫做系统调用!

所有访问操作系统的行为,都只能通过系统调用来实现。

在这里插入图片描述
所以,传说中的shell外壳程序,就是因为系统开放了调用接口,程序员通过系统调用接口访问数据的同时进一步对这些数据进行封装,从而实现了给用户小白提供的用户操作接口,比如xshell

而对系统调用接口函数进行进一步的封装 ,就成了我们日常中所见到的库函数也是这样来的。这些也叫做用户调用接口,对这些shell外壳,库进行再封装,就可以实现门槛极低,小白都能使用的各种软件了。

所以,我们所有对底层硬件的各种操作,都必须经过操作系统,而访问操作系统的数据,则必须通过操作系统开放的系统调用来进行访问。

在这个计算机世界,操作系统是少有的不变的东西,尽管其他东西一直在变,但是操作系统是不变的。

三、操作系统如何管理

1. 管理的本质

在大学生活中,可能管理者不是人人都参与过,但是被管理,我们全都知道。

因为我们每个人都是被管理者。

校长是最典型的管理者。

一个学期过去了,有些同学成绩优异,学分绩点高,有些同学挂科无数,差的不行。而这些数据,都是我们的辅导员获取的,辅导员可以知道我们什么时候上下课,我们每个人的成绩如何。

所以,校长可以通过拿到辅导员手上的数据,也就是我们每个同学的数据,就可以知道我们哪个同学成绩好,发奖学金的时候,直接发给那些成绩好的同学就行,这个过程,并不需要管理者和被管理者见面!

你没有听错,管理者和被管理者不需要见面!
在这里插入图片描述
可是,管理者和被管理者不见面,如何管好?

再细想一下,管理者和被管理者需要见面吗?校长如果知道我的姓名,学号,身份证,籍贯,照片,家庭电话,成绩,课堂表现等各种他想要的数据,就可以通过这些数据,在未来进行管理决策

那么,辅导员是管理者吗?

实际上,事情就分为两种:

  • 1.决策
  • 2.执行

我们生活中的所有事情,就只有这两种,比如我和同学聊天:“你中午想吃点啥?” “中午吃个塔斯汀!” ——这个过程就是事情的决策过程
“好!现在就去!” ——这个过程就是执行过程

可以回答上面的问题了:辅导员也是被管理者,充当执行者

在这里插入图片描述
上面整个过程,就相当于校长是操作系统,辅导员是驱动程序,学生就是软硬件资源一样。

所以,这整个管理的过程,就体现出了管理的本质:

通过对数据的管理,达到对人的管理。

2.操作系统如何管理?

在学校虽然学生有很多,但是他们都有相同的属性:
姓名,年龄,性别,身份,籍贯,电话等等。假如我们的校长是一名程序员,这些各种信息不就可以被放在struct student结构体当中了吗?

上面说到,校长可以拿到辅导员手上我们这堆学生的数据,从而给成绩好的学生发奖学金,那校长怎么知道哪些学生成绩好呢?

很简单,我们需要通过排序,对每个学生的成绩都进行排序。而每个学生的信息那么多,校长又是一个程序员,此时校长有一个想法:把学生的各种数据看作是一个结构体。——这个过程就是描述的过程!

然后我们对这些结构体一一串联起来,就形成了我们熟悉的数据结构——链表

在这里插入图片描述

校长通过对链表按学分绩进行排序,就很容易知道哪些学生成绩最高,奖学金应该发给谁,哪些学生挂科,作弊等等,一目了然。

甚至新的学期来了,有同学从其他学校转学过来,校长从辅导员手里拿到学生信息后,就将该学生的信息定义成一个结构体,再将该结构体插入到链表即可!

如果哪个学生作弊,严重程度达到了勒令退学的程度,校长就将该学生的信息结构体从链表中删除,此后在学校的管理系统就不会再出现该同学了!

所以校长对学生数据的管理,转换成了对链表的增删查改

校长将每个学生的结构体串成一个链表,这个过程就是组织的过程!

从此以后,校长手里就拎着一个链表走天下!

至此我们知道,这整个管理的过程,总结起来就是:
先描述,再组织
同时,这句话将来会贯穿整个Linux,所以这里再提一遍。
如何进行管理?
先描述,再组织

总结管理的以下几点:

1.管理的本质是:先描述,再组织
2.事情分为两种:1)决策 2)组织
3.如何进行管理:先描述,再组织

总结

本篇文章讲述了两大概念:冯诺依曼体系结构和操作系统。

  • 冯诺依曼体系结构是每一台计算机都必须遵守的体系结构,再冯诺依曼体系结构中尤为重要的是存储器(内存),有了内存的存在,整机效率得到大幅度提升,核心效率转变成内存的运行效率。
  • 操作系统是少有的不变的东西,操作系统存在的意义是通过对软硬件资源进行管理,从而给用户提供一个良好的运行环境。操作系统之下管理者各种驱动程序和软硬件资源,对上来说,只开放一个系统调用接口来供外部访问数据,因为操作系统要保证安全性,必须要把自己封闭起来。程序员通过系统的接口进一步封装,实现了我们程序员常用的shell外壳程序,对函数进一步封装,实现了我们常见的库和库函数,而对这些shell外壳和库进一步封装,就可以给普通的小白用户使用了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/855735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java | 异常处理

目录 一、异常概述 二、异常的抛出与捕捉 2.1 抛出异常 2.2 捕捉异常 2.2.1 try-catch语句块 2.2.2 finally语句块 三、Java常见的异常类 四、自定义异常 五、在方法中抛出异常 5.1 使用throws关键字抛出异常 5.2 使用throw关键字抛出异常 六、运行时异常 七、异…

O2OA开发平台实施入门指南

O2OA(翱途)开发平台,是一款适用于协同办公系统开发与实施的基础平台,说到底,它也是一款快速开发平台。开发者可以基于平台提供的能力完成门户、流程、信息相关的业务功能开发。 既然定位为开发平台,那么开…

QInputDialog

QInputDialog API静态函数简单使用方式 QInputDialog类是QDialog的子类, 通过这个类我们可以得到一个输入对话框窗口 API静态函数 // 得到一个可以输入浮点数的对话框窗口, 返回对话框窗口中输入的浮点数 /* 参数:- parent: 对话框窗口的父窗口- title: 对话框窗口显示的标题…

【云原生-Uptime Kuma】自动化运维监控工具-Uptime Kuma

文章目录 简介基础信息开源信息 在线安装docker安装Uptime Kuma安装docker-compose安装 在线访问账号创建基础配置 监控管理监控看板添加监控组配置http监控监控异常通知消息 自定义监控页面特性支持支持计划维护特性总结 总结 简介 基础信息 uptime-kuma是一款开源的、多功能…

【Linux】网络层、数据链路层、DNS、ICMP协议、NAT技术

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录 👉网络层&a…

Deep Image Prior:《Deep Image Prior》经典文献阅读总结与实现

文章目录 Deep Image Prior1. 方法原理1.1 研究动机1.2 方法 2. 实验验证2.1 去噪2.2 超分辨率2.3 图像修复2.4 消融实验 3. 总结 Deep Image Prior 1. 方法原理 1.1 研究动机 动机 深度神经网络在图像复原和生成领域有非常好的表现一般归功于神经网络学习到了图像的先验信息…

各种查找算法的效率分析

各种查找算法的效率 顺序查找 一般顺序表(没有顺序,随机排列) 成功时平均查找长度: 1 . . . n n n 1 2 \frac{1...n}{n}\frac{n1}{2} n1...n​2n1​失败时平均查找长度: n n n 有序顺序表(按照递增或递…

541. 反转字符串 II+557.反转字符串中的单词 3

一、541.题目 541. 反转字符串 II - 力扣&#xff08;LeetCode&#xff09; 二、代码 class Solution { public:void reverse_begin_end(string& s, int begin, int end) {while (begin < end){swap(s[begin], s[end]);begin;end--;} } string reverseStr(string s, i…

个人用C#编写的壁纸管理器 - 开源研究系列文章

今天介绍一下笔者自己用C#开发的一个小工具软件&#xff1a;壁纸管理器。 开发这个小工具的初衷是因为Windows操作系统提供的功能个人不满意&#xff0c;而且现在闲着&#xff0c;所以就随意写了个代码。如果对读者有借鉴参考作用就更好了&#xff0c;能够直接代码段复用即可。…

爬虫014_文件操作_打开关闭_读写_序列化_反序列化---python工作笔记033

报错,没有指定路径,没有指定路径无法创建文件 这样可以在当前目录下创建一个可写的文件 可以看到找到刚才生成的文件,看看内容

分布式搜索ElasticSearch-ES(一)

一、ElasticSearch介绍 ES是一款非常强大的开源搜索引擎&#xff0c;可以帮我们从海量的数据中快速找到我们需要的内容。 ElasticSearch结合kibana、Logstash、Beats&#xff0c;也就是elastic stack(ELK)&#xff0c;被广泛运用在日志数据分析&#xff0c;实时监控等领域。 …

财务管理系统javaweb会计账房进销存jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 财务管理系统javaweb java,Struts2,bootstrap,mysql,…

Centos8上加速git clone

首先通过命令获取域名对应的IP地址 [rootggbond ~]# nslookup github.global.ssl.fastly.net [rootggbond ~]# nslookup github.com 之后如上获取到的IP地址 以IP-域名的格式加入到hosts文件中 [rootggbond ~]# vim /etc/hosts Centos8上更新DNS缓存 [rootggbond ~]# nscd -…

【LangChain学习】基于PDF文档构建问答知识库(三)实战整合 LangChain、OpenAI、FAISS等

接下来&#xff0c;我们开始在web框架上整合 LangChain、OpenAI、FAISS等。 一、PDF库 因为项目是基于PDF文档的&#xff0c;所以需要一些操作PDF的库&#xff0c;我们这边使用的是PyPDF2 from PyPDF2 import PdfReader# 获取pdf文件内容 def get_pdf_text(pdf):text "…

Kubernetes Calico

Calico以其性能、灵活性和网络策略而闻名&#xff0c;不仅涉及在主机和Pod之间提供网络连接&#xff0c;而且还涉及网络安全性和策略管理。(还可以配置防火墙规则来隔离不同应用的网络) 对于同网段通信&#xff0c;基于第3层&#xff0c;Calico使用BGP路由协议在主机之间路由数…

浅谈高校宿舍水电表远程智能管理的研究与应用

安科瑞 华楠 摘要&#xff1a;本系统的设计是基于485总线技术与TCP/IP网络技术相结合的方式来实现的&#xff0c;充分考虑了目前高校后勤水电表管理控制的实际情况&#xff0c;以传输可靠性高、技术成熟、成本低的485总线技术为基础&#xff0c;并与应用广泛的TCP/IP网络相结合…

LoRaWan网关设计架构介绍

LoRa 数据包转发器是在基于 LoRa 的网关(带或不带 GPS)主机上运行的程序。它将集中器(上行链路)接收到的 RF 数据包通过安全的 IP 链路转发到LoRaWAN 网络服务器( LNS )。它还通过相同的安全 IP 将 LNS(下行链路)发送的 RF 数据包传输到一台或多台设备。此外,它还可以传…

错误: XXXAdapter不是抽象的, 并且未覆盖Adapter中的抽象方法onBindViewHolder(ViewHolder,int)

一、问题描述 在学习Android可侧滑删除的RecyclerView的时候&#xff0c;遇到了下面的报错 错误: SwipeDelAdapter不是抽象的, 并且未覆盖Adapter中的抽象方法onBindViewHolder(ViewHolder,int) public class SwipeDelAdapter extends RecyclerView.Adapter { ^ 在上面的…

【报错】ModuleNotFoundError: No module named ‘websocket‘

1 报错 ModuleNotFoundError: No module named websocket 2 解决方法 pip install websocket 1 报错 AttributeError: module websocket has no attribute enableTrace 2 分析 一般是由于websocket的依赖包没有安装造成的。websocket.enableTrace()方法是在websocket-cli…

【C# 基础精讲】循环语句:for、while、do-while

循环语句是C#编程中用于重复执行一段代码块的关键结构。C#支持for、while和do-while三种常见的循环语句&#xff0c;它们允许根据条件来控制代码块的重复执行。在本文中&#xff0c;我们将详细介绍这三种循环语句的语法和使用方法。 for循环 for循环是一种常见的循环结构&…