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

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

个人主页:🍝在肯德基吃麻辣烫
我的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.rhkb.cn/news/83425.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud整体架构概述

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! SpringCloud整体架构概述 SpringCloud对常见的分布式系统模式提供了简单易用的编程模型,帮助开发者构建弹性、可靠、协调的应用程序。 SpringCloud是在Spr…

汽车IVI中控开发入门及进阶(十):车载摄像头接口CVBS、AHD和MIPI

文章目录 前言一、CVBS是什么?二、AHD是什么?三、MIPI是什么?前言 汽车电子电气架构正在由传统的分布式架构向域集中式架构转变,也就是将多个应用程序集中在一个域中,正如提到IVI,有些已经开始导入域控,除了一带多的显示屏、一带多的雷达传感器,当然还有一带多的摄像头…

unity 修改默认脚本

using System.Collections; using System.Collections.Generic; using UnityEngine; //***************************************** //创建人: xxxx //功能说明: //***************************************** #ROOTNAMESPACEBEGIN# public class #SCRI…

Jenkins集成appium自动化测试(Windows篇)

一,引入问题 自动化测试脚本绝大部分用于回归测试,这就需要制定执行策略,如每天、代码更新后、项目上线前定时执行,才能达到最好的效果,这时就需要进行Jenkins集成。 不像web UI自动化测试可以使用无痕浏览器做到无界…

03微服务到底是什么

一句话导读 微服务是一种架构模式,英文翻译 microservice,微服务架构的核心理念是将大型、复杂的单体应用拆分成更小的、自治的组件,每个组件即为一个微服务 目录 一句话导读 一、微服务的定义 二、微服务的特点 1.独立性 2.松耦合 3.可伸…

营收、净利同比微增,喜临门品牌升级“临门一脚”?

8月8日晚,喜临门发布2023上半年业绩报告。根据财报,2023年上半年,喜临门营业收入约38.05亿元,同比增加5.53%;归属于上市公司股东的净利润约2.22亿元,同比增加1.2%。 如果仅从这份财报看,喜临门…

操作系统—调度算法

进程调度算法 进程调度算法也称CPU调度算法 调度发生时期 当进程从运行状态转到等待状态;当进程从运行状态转到就绪状态;当进程从等待状态转到就绪状态;当进程从运行状态转到终止状态; 其中发生在 1 和 4 两种情况下的调度称为…

electron+vue3全家桶+vite项目搭建【13.1】ipc通信的使用,主进程与渲染进程之间的交互

文章目录 引入IPC通信[主/渲染]进程对应渲染进程>主进程代码测试测试效果 主进程>渲染进程代码测试测试效果 双向通信代码测试测试效果 引入 electron项目常常由一个主进程和多个渲染进程构成,渲染进程之间是隔离的,而所有渲染进程都和主进程共享…

学习左耳听风栏目90天——第一天 1-90(学习左耳朵耗子的工匠精神,对技术的热爱)【洞悉技术的本质,享受科技的乐趣】

洞悉技术的本质,享受科技的乐趣 第一篇,我的感受就是 耗叔是一个热爱技术,可以通过代码找到快乐的技术人。 作为it从业者,我们如何可以通过代码找到快乐呢?这是一个问题? 至少目前,我还没有这种…

Vue [Day6]

路由进阶 路由模块的封装抽离 src/router/index.js import VueRouter from vue-router // 用绝对路径的方式来写目录 相当于src import Find from /views/Find import Friend from ../views/Friend import My from ../views/Myimport Vue from vue Vue.use(VueRouter)con…

在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配

1.Cadence 17.2 配置CIS数据库报:ERROR(ORCIS-6245): Database Operation Failed 安装cadance17.2以上版本时,ERROR(ORCIS-6245): Database Operation Failed_收湾湾的博客-CSDN博客 原因是ODBC数据库没有配置,或者没有驱动, 驱…

Linux(进程间通信详解)

进程间通信,顾名思义,就是进程与进程之间互通信交流,OS保证了各进程之间相互独立,但这不意味着进程与进程之间就互相隔离开,在不少的情况下,进程之间需要相互配合共同完成某项6任务,这就要求各进…

产品体系架构202308版

1.前言 当我们不断向前奔跑时,需要回头压实走过的路。不断扩张的同时把相应的内容沉淀下来,为后续的发展铺垫基石。 不知从何时起,产品的架构就面向了微服务/中台化/前后端分离/低代码化/分布式/智能化/运行可观测化的综合体,让…

SpringCloud实用篇4——MQ RabbitMQ SpringAMQP

目录 1 初识MQ1.1 同步和异步通讯1.1.1 同步通讯1.1.2 异步通讯 1.2 技术对比 2.快速入门2.1 安装RabbitMQ2.1.1 单机部署2.1.2集群部署 2.2 RabbitMQ消息模型2.3.导入Demo工程2.4 入门案例2.4.1 publisher实现2.4.2 consumer实现 3 SpringAMQP3.1 Basic Queue 简单队列模型3.1…

Linux命令200例:mkdir用于创建目录(常用)

🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 &…

唐刘:TiDB 研发工程实践及 TiDB 人才观丨CCF 中国数据库暑期学校

在刚刚结束的 CCF 中国数据库暑期学校上, PingCAP 的研发副总裁唐刘分享了在 TiDB 研发过程中的工程实践经验和人才培养方法。目前,TiDB 已广泛应用于各行各业,有着庞大的用户基数,面临多样化的数据处理需求。PingCAP 通过开源、敏…

Git介绍及常用命令详解

一、Git的概述 Git是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。 Git 会跟踪我们对文件所做的更改,因此我们可以记录已完成的工作,并且可以在需要时恢复到特定或以前的版本。Git 还使多人协作变得更加容易&…

研发工程师玩转Kubernetes——PVC通过storageClassName进行延迟绑定

不同的PV可以使用相同的StorageClass,它们是一对多的关系。 PV可以设置节点亲和性。比如下图,local-storage-class-waitforfirstconsumer-pv-ubuntuc只能在节点ubuntuc上;local-storage-class-waitforfirstconsumer-pv-ubuntud只能在节点ubu…

C语言笔试训练【第六天】

大家好,我是纪宁。今天是C语言笔试训练的第6天,加油! 往期回顾: C语言笔试训练【第五天】 C语言笔试训练【第四天】 C语言笔试训练【第三天】 C语言笔试训练【第二天】 C语言笔试训练【第一天】 1、以下叙述中正确的是&…

学习Maven Web 应用

Maven Web 应用 本章节我们将学习如何使用版本控制系统 Maven 来管理一个基于 web 的项目,如何创建、构建、部署已经运行一个 web 应用。 创建 Web 应用 我们可以使用 maven-archetype-webapp 插件来创建一个简单的 Java web 应用。 打开命令控制台,…