当前位置: 首页 > news >正文

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

👑作者主页:@安 度 因
🏠学习社区:StackFrame
📖专栏链接:Linux

文章目录

  • 一、前言
  • 二、冯诺依曼体系结构
    • 1、体系简述
    • 2、内存的重要性
    • 3、硬件方案解释软件行为
    • 4、体系结构中的数据流动
    • 5、拓展
  • 三、操作系统简述
    • 1、概念
    • 2、重要性
    • 3、定位
    • 4、如何管理
    • 5、管理目的
  • 四、系统调用
  • 五、结语

如果无聊的话,就来逛逛 我的博客栈 吧! 🌹

一、前言

小伙伴们,新年好!距离上次创作已经过去半个月了,anduinanduinanduin 最近也去学习了一些新知识,但是目前还在整理笔记,所以估计得等到三月份才能逐渐写出博客来。

但是 anduinanduinanduin 也不能闲着,于是今天我就为大家带来一篇干货文章。本篇文章对于冯诺依曼体系结构作出了详细讲解,特别是对于内存、数据流动;另一部分则是 anduinanduinanduin 对于操作系统的一些理解,对于其中的管理我也做出了剖析,相信看完一定会有所收获。

话不多说,让我们赶快开始学习吧!

二、冯诺依曼体系结构

1、体系简述

学习过计算机组成原理的小伙伴们应该对冯诺依曼体系结构并不陌生。冯诺依曼体系结构是一种将程序指令存储器和数据存储器合并在一起的存储器结构。

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

image-20230126134442839

目前的计算机,单靠计算机本身是无法完成交互工作的,所以需要 人将数据“喂”计算机 ,说白了就是 输入设备 ;同样的 计算机也需要把处理数据的结果呈现给用户 ,说白了就是 输出设备

而这一过程中依赖的两个设备就是体系结构中的输入输出设备,两种常见的设备如下:

  • 输入设备:键盘、话筒、摄像头、网卡、磁盘、鼠标…
  • 输出设备:显示器、磁盘、网卡、声卡、音箱…

对于同一个设备而言,可以同时充当输入设备和输出设备,例如 磁盘

磁盘上的文件就是用户保存的文件。用户保存就说明 采集了用户的数据 ,再将文件进行运行,如:计算机计算、加密等… ,这一过程就是 输入

同样的,用户在磁盘上下载了一个文件,例如一部电影,那么磁盘上的文件需要被用户观看,这就相当于把 结果呈现给用户 ,这一过程为 输出

而对于结构中的 存储器、运算器、控制器 我们也需要拎一下概念:

  • 存储器不是磁盘,而是 内存
  • 计算机的本质工作是计算,所以一定需要运算器和控制器,它们被合称为 cpu

输入、输出设备被称为外围设备,即外设

外设包含输入输出,所以外设一般都会比较慢,比如磁盘。而内存则在磁盘的基准上高了许多量级。

但是外设比较便宜,比如买电脑时,电脑磁盘动不动 512g, 1t ,但是内存只有 8, 16g

对于它们两个都可以存储数据,但是对于内存存储数据是有时效性的。内存属于掉电易失介质 ,若突然关机,内存数据就会丢失;但是对于磁盘则不会。

但是内存储存数据的时效性短,为什么价格还是比外设贵?因为一个字,

2、内存的重要性

可能大家会有疑惑,计算机中内存并不是最快的,cpu速度是最快的 ,那么既然这样,为什么要有内存呢?直接舍弃内存,让输入设备直接连到 cpu 不行吗?比如这样

image-20230126150538080

我让输入设备通过 cpu 计算后,直接输出,这样岂不是更快?

方案确实可以,但是会有代价。 因为外设是极其慢的,而 cpu 太快了。

这就涉及到一个理论 —— 木桶原理

木桶原理:一只木桶盛水的多少,并不取决于木桶壁上最高的那块木板,而是取决于最短的那块。

对于体系结构来说也是这样。如果对应的输入很慢,但是 cpu 很快,整体表现出来的整体效率就以外设为主。

所以这时,冯诺依曼大神就引入了 内存 。内存比外设快的多,但是比 cpu 慢。

举个例子,外设可以理解为毫秒级,内存是微秒级,cpu 是纳秒级。这中间的差距都很大,但是可以互补。

内存可以临时存储数据,并且不慢。而在 cpu 计算数据的同时,DMA又可以把外设的数据搬到内存,等 cpu 把数据执行完毕后,再直接执行刚刚搬进来的数据。

因为内存的存在,就可以大大缓解木桶原理带来的效率下降。

所以这里得出一个结论:在数据层面,一般 cpu 不和外设直接沟通,而是直接和内存打交道,由此看出内存的重要性。

那么有没有可以代替内存的存储设备?

通过上面的了解,我们发现内存是没有制造数据的能力的,它就像一个驿站,用来中转数据。但是既然是一个中转站的功能,如果谈到速度和功能,cpu 中还有个 寄存器 ,它的速度是极快的,那么 为什么不拿寄存器作为存储单元来缓解木桶效应?

一个字: ,寄存器在 cpu 中只有极小部分。我们当前的计算机实际上是通过技术手段打造的一个性价比产品,因为一些存储设备太贵了。所以就用内存来平衡内设和 cpu 之间的速度不均衡。从而达到既能完成工作,并且效率均衡且便宜的特点。

3、硬件方案解释软件行为

说到这儿,我们其实可以理解之前一些难以解答的问题:

为什么一个程序必须要选加载到内存才能执行?

我们自己写的 c 代码,生成的可执行程序就是一个文件,是文件就在磁盘中保存,而磁盘属于外设。

而当可执行程序运行时,需要 cpu 帮忙执行,而现在的计算机符合冯诺依曼体系结构,所以 cpu 访问你的代码和数据时就必须问内存要,所以数据需要被加载到内存,以便让 cpu 读取数据!

而程序加载到内存在 windows 上是双击,在 linux 上则是 ./ 运行。

而这一切的一切就是因为体系结构,这就是用 硬件方案解释软件行为

4、体系结构中的数据流动

学习了冯诺依曼体系结构,我们再来谈谈数据之间的流向。

假设你和你的朋友在聊天,当你向你朋友发送 “吃了吗” 信息时,数据时在体系结构中如何流动的?

假设你和你的朋友的点电脑都符合冯诺依曼体系结构,且不考虑中间网络层的传输,假定发送出去就能被接收:

image-20230126173311605

对于 anduinanduinanduin 也就是我,我通过输入设备(键盘)输入“吃了吗”,从硬件层面上数据被输入到内存,软件层面上数据被输入到 qq 。

这里我们 只考虑硬件层面 ,当数据输入后,数据被加载到内存这时数据就要进行计算(例如加密),这时 cpu 就需要从内存中拿数据,再计算完毕之后,将数据返回内存,数据再被显示到输出设备。

而这里有 两个刷新动作 ,一个是数据当被发送时,显示在自己电脑的显示框,这种很简单。

第二个刷新动作就是把数据刷新到 GuldanGuldanGuldan 的电脑上 ,这其中的流动规则如下:

anduinanduinanduin 的数据输出后,输出到输出设备(网卡)上,网卡再刷新到网络。GuldanGuldanGuldan 通过输入设备(网卡),将数据加载到内存中,cpu计算(解密操作),再写回内存,再次刷新数据到输出设备(对方显示屏)上。

而这过程实际上是符合体系结构的,并不是说,当信息发送出去后,就直接一步到位到 GuldanGuldanGuldan 的显示屏。

而对于一些加密,解密,以及将数据从外设读到内存这些都是软件提供的,这些我们暂时不要考虑。

讲到这里再提一嘴:其实从外设获取数据,我们也天天在用,比如 c 语言的 scanf ,就是从外设读数据的。所以这里就不难理解为啥软件可以获得外设的输入。

至此我们就得出结论:数据在流动的时候必须从外设到达内存,并不能直接到达目标地点,完全遵守冯诺依曼体系结构。说白了就是 外设只和内存打交道

5、拓展

实际上对于外设只和内存打交道在之前是有歧义的:

因为早期芯片集成数据的能力较差。会把输入设备的数据直接打给 cpu ,读取的时候再通过 cpu 把数据放到内存里。再把数据缓存起来,需要使用的时候再把数据拿出来。

而现在 cpu 里面通常还带了 dma 芯片,就是专门把外设数据搬到内存的,这样外设和 cpu 和外设之间就无需直接沟通了,所以咱们当前认为 cpu 不直接和外设沟通。

还有一点需要补充的是:

外设和cpu虽然数据层面不直接交互,但是对于一些控制信号,它们之间是要交涉的,比如外设要给cpu发控制信号,需要让cpu帮外设做事情。但是当前我们还不考虑这点,还是考虑数据层面上,cpu和外设不直接沟通。

而冯诺依曼我们就聊到这儿。

三、操作系统简述

我们知道 Linux 是一个操作系统,但是什么是操作系统?对于这个概念我们了解起来也许模棱两可,所以今天的另一个话题就是谈谈操作系统。

首先看一下计算机体系图,接下来的内容会涉及到体系中的内容:

image-20230126210433221

1、概念

任何计算机系统都包含一个基本的程序集合,称为操作系统,也就是 OS 。如果笼统的理解操作系统,它就包含两部分:

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

2、重要性

当讲冯诺依曼的时候,我们说过,数据是被加载到内存中,再供 cpu 进行内存读取的。

但是中间涉及了一大堆工作,例如,预加载的数据是哪一部分数据,内存如果不够了这时候怎么办?

随便抛出一个数据可能我们都说不出来,而这些工作其实都是软件做的,这个软件就是操作系统。

打个比方,硬件就好比是医院里的检测仪器,输出仪器。但是只有机器能看病吗?肯定不行,还得需要医生,而这其中面临很多问题,比如症状的分流,人员的分配,病人找到医生的方式,这么些抽象的问题仅仅依靠仪器是不能处理的。

这就说明软件是必须的,而这些繁杂的工作都由操作系统来处理。

3、定位

接下来我们看看 OS 的定位。其实 OS 定位很简单,它就是一款软件。

所有程序想要运行,都必须加载到内存中,而在开机加载的时候操作系统就被加载到了内存中,这样软件就可以被 cpu 跑了。

操作系统本身是一款对软硬件资源进行管理的软件。

4、如何管理

对于管理,一共有 三个结论 ,我们通过例子中间穿插着概念来感性理解它们:

首先明确一下管理者和被管理者

日常生活中,我们需要进行各种决策(想干什么)和执行(做什么)。

而在一个组织结构中,真正的管理者做的就是决策。其实这么说还不够详细,应该说管理者不是完全不做执行,但是管理者大部分时间都在决策。

若当前背景是一个学校,我们就将学校抽象成三部分:校长、辅导员、学生,如下:

image-20230126200615005

而辅导员和校长都可以进行管理,但是他们谁是真正的管理者?校长 ,因为校长本身的工作大部分都在决策。

举个例子:

比如学校举办一个运动会。对于运动会场地,经费都是校长来决策,而剩下的就是学生执行。

那么辅导员再干什么?辅导员就是把校长的决策落地,部分决策让学生去干什么,部分执行去执行校长的决策。

也就是校长把决策给辅导员,辅导员执行嚣张的决策。相当于辅导员做的就是 伪决策

所以辅导员不是一个真正的管理者,辅导员只是对校长的决策做落地的角色,而学生就是纯粹的执行者。

所以校长才是真正的执行者

通过这一过程,角色就划分成了三块:

image-20230126202140991

而这一过程校长(管理者)和被管理者(学生)见过面了吗?很明显没有。可能在大学中,学生见到校长也就是开学典礼的时候,只是一面之缘。

到这里,我们得出第一个结论:管理者和被管理者是不需要直接沟通的。

问题来了,既然管理者和被管理者没有直接沟通,它是如何管理我的?

再来举个例子:

比如说你的父母,在高中可能可以天天看着你,属于直接管理。但是上了大学父母不能进行直接管理,但是可以通过别人,例如你的室友,你的辅导员,获得你最近的行动,这样也可以进行管理。

而这一行为不就是管理者(父母)和被管理者(我)没有直接沟通,但是依然管理了。而管理方式就是通过数据。

至此,我们得出了第二个结论:管理的本质是对被管理对象的数据做管理。

通过这个结论,又衍生出了两个问题:

1)管理者是如何拿到被管理者的数据的

这就好比校长从没见过我,但是它是如何管理到我的,怎么拿到我的数据?

这个过程就需要辅导员来进行,辅导员拿到数据,然后把数据给校长。

2)如果被管理者基数庞大,管理者是如何处理海量数据,筛选出特定数据?

虽然学生的数据不一样,但是学生的属性信息类型是一样的,比如:姓名、年级、电话、成绩、紧急联系人 …

而如果,我是说如果,校长一看这个,就想起了结构体,那么完全可以 把信息抽象成一个结构体 structstustruct\ stustruct stu 。而对于信息管理,可以将其抽象成一个链表,这时每个学生的信息就是一个节点:

image-20230126203722780

这时如果要筛选出数据,就只需要根据关键值筛选就可以,从而将管理行为转换成对链表的管理。

而如果需要对学生进行信息删除,就只需要找到节点,然后释放,之后这个节点就被移除了,这个节点也消失,不需要再管理了。

这时决策就转换成对链表的增删查改。

而一个决策被转换为对数据结构的管理,这就相当于完成了一个建模的过程,把具体场景转换为计算机语言,就是建模的过程。

所以这里体现出语法和数据结构的重要性

这里就是先用结构体进行描述,再采集信息,构建对象,再形成某种结构,再把节点组织起来,并根据某种特性进行特殊化构建。

这其中就涉及到了面向对象和数据结构。

好了,现在也就引出了第三个结论:管理的方法是先描述,再组织。 而这句话也会被贯穿到之后 Linux 的学习中,一定要记好了。

管理的方法我们说完了,那么校长,辅导员和学生都代表着计算机里的什么角色?

  • 学生:硬件(软件),这里的软件包括应用层和操作系统内的软件
  • 辅导员:硬件驱动
  • 校长:操作系统

image-20230126205311543

而硬件驱动,实际上就是驱动程序,它和硬件交互,拿到硬件传输的数据。操作系统发布决策给驱动,而操作系统是真正的管理者。

管理到这就讲完了,总结一下管理的特性和本质

  • 管理者和被管理者是不需要直接沟通的
  • 管理的本质是对被管理对象的数据做管理
  • 管理的方法是先描述,再组织

5、管理目的

上面说了这么多管理的方法,但是操作系统为什么要对软硬件资源进行管理呢?它图啥呢?

为了更好地给用户提供服务,不让软件老是出 bug 。

要知道,一款操作系统能否生存,就是依赖于生态链和用户人数。不妨设想一下,如果操作系统动不动就蓝屏,打着打着游戏就关机了,还有人用吗?

肯定没有,这样子用户人数急剧减少,操作系统的生存问题就会出现了。而人们挑选操作系统的依据就是 是否好用 ,所以操作系统必须优化体验。

所以操作系统通过对下管理好软硬件资源,对上(用户层)给用户提供 安全、稳定、高效、功能丰富 的执行环境,让用户有一个最佳体验,这就是目的!

四、系统调用

刚说完管理目的,操作系统也为我们提供者服务,但是有一个问题,操作系统相信我吗?

这个问题可能很无厘头,是什么意思?提供服务不就完了,什么是相信?

同样的,我们举一个例子:

好比现在我们把银行当做一个操作系统,当我们去银行存钱的时候。银行人员看到你会说:“先生,往直走转弯就是金库,你把钱放在那边,不要拿走里面的钱,你就自己去存钱吧!”

这显然是不可能的,这也就反映了,虽然操作系统给我们提供了很好的服务,但是OS不相信我们,不相信任何人。

相反,操作系统会进行一些措施进行自我保护,比如银行配备了保安,操作系统也有对应的封装。

而生活中,银行是通过柜台来通过工作人员的操作,帮助我们存钱,就比如:

img

通过柜台窗口,把需求给员工,让员工完成操作,对于银行为了提供服务和保证自身安全,提供的是窗口式服务。

而对于操作系统,这个窗口式服务就是系统调用,而说到这边,我们就可以画出计算机软硬件体系结构图:

image-20230126213825889

操作系统选择将对应的功能以接口的形式让别人访问,这一批接口,就被称为操作系统的系统调用。

而这一操作既帮助我们完成了功能,又保护了操作系统本身。

其实我们也都用过系统调用接口,但是它是以一种更简单的方式提供给我们使用了。

因为系统调用接口的使用成本很高,于是就有相关人员对系统接口进行二次的软件开发,例如:图形化界面,shellshellshell 和工具集

而通过 shell 工具,我们就可以通过操作系统,对硬件或软件进行交互,例如 touch 这就是通过指令,依靠封装后的系统调用,从而贯穿体系结构,往磁盘(硬件)写入,从而生成文件。

同理对于语言,也就是库函数,也调用了系统调用

例如 printf 显示的设备是硬件,而向硬件写入的就是通过操作系统进行软硬件资源管理。printf 就是 C 语言通过包含头文件,而它的底层就调用了系统调用接口。

而我们当前的开发,还在系统调用二次开发的上层,也就是用户层

五、结语

到这里,本篇博客就到此结束了。

相信看完文章,大家应该都对冯诺依曼体系结构和操作系统以及系统调用有了一定的了解。尤其是在管理部分一定要记住:先描述、再组织 ,这句话可以说是本篇文章的核心之一。

由于本篇是纯概念,所以建议看完可以好好消化一下,毕竟没有代码那么好记。

如果觉得 anduinanduinanduin 写的不错的话,可以 点赞 + 收藏 + 评论 支持一下哦!我们下期见~

相关文章:

数据库的物化视图

数据库的物化视图 数据库的物化视图(Materialized View)是一种预先计算和存储的查询结果集,可以提高查询性能和减少查询开销。与普通视图不同,物化视图是实际存储在磁盘上的表,而不是只是一个查询语句。物化视图可以在需要时更新,以保持其数据的实时性。 优点提高查询性能…...

【微信小程序】解决分页this.setData数据量太大的限制问题

1、原始方法,每请求一页都拿到之前的数据concat一下后整体再setData loadData() {let that thislet data {}data.page this.data.pagedata.size this.data.sizefindAll(data).then(res > {if (res.data.code 1) {this.setData({dataList: this.data.dataLi…...

[转载]mtu值怎样设置才网速最快

推荐看原文链接 mtu值怎样设置才网速最快-百度经验 背景:什么是mtu 答:mtu本地大于网络mtu, 传输就会拆包,mtu本地设置小于mtu,就发挥不了网络最大传输能力,合适最好 测试最佳mtu值 ping -l 1500 -f www.baidu.com如果出现超时结果正在 Ping www.baidu.com 具有 1500 字节的…...

运维自动化之账单系统

费用分摊计算是个十分复杂的工作,尤其是在多云的环境下,尤其是公司严谨需要按项目分摊成本的情况下,尤其是一个项目还分布在不同云厂商不同云账户的场景下,尤其是云厂商toB的业务模式还会有超级复杂的资源折扣加持下,想要把帐算清楚难度巨大 我们每个月都需要计算项目成本…...

【2024-04-18】连岳摘抄

23:59在世上人人都应该首先爱生活。爱生活胜于爱生活的意义,一定得这样。——陀思妥耶夫斯基每个阶段,婚姻的目标不同。到了50多岁,婚姻主要的功能不再是青年期的性与生育,所以帅不帅不重要;也不再是中年期的获取更多资源,财富、权力、影响力、社会关系,基本定型,所以工…...

乌龙错误导致远程连接服务器上的MySQL数据库失败例子一则

今日使用DataGrip连接阿里云服务器上的数据库,无法连接。经排查发现是端口规则没放开。...

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

👑作者主页:安 度 因 🏠学习社区:StackFrame 📖专栏链接:Linux 文章目录一、前言二、冯诺依曼体系结构1、体系简述2、内存的重要性3、硬件方案解释软件行为4、体系结构中的数据流动5、拓展三、操作系统简述…...

protegeproject/mapping-masterPublic

protegeproject/mapping-masterPublicWatch 10 Fork 7Fork your own copy of protegeproject/mapping-masterStar 44CodeIssues15Pull requests3ActionsProjectsWikiSecurityInsightsMappingMasterDSL编辑新页面马丁奥康纳编辑了此页面 on Oct 29, 2020 85 修订页面4家Mapping…...

大数据分析案例-基于随机森林算法构建人口普查分析模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…...

【数据结构和算法】认识线性表中的链表,并实现单向链表

本文接着上文,上文我们认识了线性表的概念,并实现了静态、动态顺序表。接下来我们认识一个新概念链表。并实现单向链表的各种操作。顺序表还有不明白的看这一篇文章 (13条消息) 【数据结构和算法】实现线性表中的静态、动态顺序表_小王学代码的博客-CSDN…...

2023-1-28

具有给定数值的最小字符串 题目描述 小写字符 的 数值 是它在字母表中的位置(从 1 开始),因此 a 的数值为 1 ,b 的数值为 2 ,c 的数值为 3 ,以此类推。 字符串由若干小写字符组成,字符串的数…...

Linux_常见命令

1.ls ls -l 列出隐藏文件,并显示10项权限,类似如同下图 在部分发行版本的linux下,ll等同于ls -l 首先,第一列为-则代表着这一列是文件, 第一列为d则代表这一列为目录 除了第一位,那么其他还有9位,分为3组…...

【Linux】基础IO --- 系统级文件接口、文件描述符表、文件控制块、fd分配规则、重定向…

能一个人走的路别抱有任何期待,死不了 文章目录一、关于文件的重新认识二、语言和系统级的文件操作(语言和系统的联系)1.C语言文件操作接口(语言级别)1.1 文件的打开方式1.2 文件操作的相关函数1.3 细节问题2.系统级文…...

ffmpeg无损裁剪、合并视频

我用的版本是 ffmpeg version git-2020-06-23-ce297b4 官方文档 https://ffmpeg.org/ffmpeg-utils.html#time-duration-syntax 时间格式 [-][HH:]MM:SS[.m...] 或 [-]S[.m...][s|ms|us]裁剪视频 假设需要裁剪视频aaa.mp4,第5秒到第15秒 ffmpeg -ss 5 -to 15 -i…...

ATAC-seq分析:Annotating Peaks(9)

1. 注释开放区域 将已识别的无核小体区域与基因组特征(如基因和增强子)相关联通常很有趣。 一旦注释到基因或增强子的基因,我们就可以开始将 ATACseq 数据与这些基因的特征相关联。 (功能注释、表达变化、其他表观遗传状态&#x…...

蓝桥杯刷题015——最少刷题数(二分法+前缀和)

问题描述 小蓝老师教的编程课有 N 名学生, 编号依次是 1…N 。第 i 号学生这学期刷题的数量是 Ai​ 。 对于每一名学生, 请你计算他至少还要再刷多少道题, 才能使得全班刷题比他多的学生数不超过刷题比他少的学生数。 输入格式 第一行包含一个正整数 N 。 第二行包含 N 个整数:…...

Linux——进程

目录 冯诺依曼体系结构 操作系统(Operator System) 概念 设计OS的目的 定位 如何理解 "管理" 总结 系统调用和库函数概念 承上启下 进程 基本概念 描述进程-PCB task_struct-PCB的一种 task_ struct内容分类 组织进程 查看进程 通过系统调用获取进程…...

Junit单元测试框架【基础篇】

Junit单元测试框架【基础篇】🍎一.Junit单元测试框架🍒1.1 注解🍒1.2 断言🍒1.3 用例执行顺序🍒1.4 测试套件🍉1.4.1 指定类🍉1.4.1 指定包🍒1.5 参数化🍉1.5.1 单参数&a…...

高通平台开发系列讲解(WIFI篇)什么是WLAN无线局域网

文章目录 一、什么是WLAN1.1、WLAN发展史1.2、WLAN工作频段二、高通相关文件2.1、配置文件2.2、开机启动2.3、wpa_supplicant沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文将基于高通平台介绍什么是无线局域网。 一、什么是WLAN 在WLAN领域被大规模推广和商用的是…...

JavaScript 变量

JavaScript 变量 变量是什么? 变量是计算机中用来存储数据的“容器”,它可以让计算机变得有记忆,通俗的理解变量就是使用【某个符号】来代表【某个具体的数值】(数据) JavaScript 变量 与代数一样,JavaScript 变量…...

C语言进阶——文件管理

每当我们写好一段代码运行结束之后,再次运行的时候就会发现,之前在终端上输入的数据都会消失,那么如何把之前输入的数据保存下来呢? 我们一般把数据持久化的方式有把数据存放在磁盘文件中、存放到数据库。打印等方式进行保存。 …...

[Rust笔记] 规则宏的“卫生保健”

规则宏代码的“卫生保健”规则宏mbe即是由macro_rules!宏所定义的宏。它的英文全称是Macro By Example。相比近乎“徒手攀岩”的Cpp模板元编程,rustc提供了有限的编译时宏代码检查功能(名曰:Mixed Hygiene宏的混合保健)。因为rust…...

芒果改进YOLOv7系列:超越ConvNeXt结构,原创结合Conv2Former改进结构,Transformer 风格的卷积网络视觉基线模型,高效涨点

💡该教程为改进进阶指南,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀💡本篇文章 基于 YOLOv5、YOLOv7芒果改进YOLO系列:芒果改进YOLOv7系列:超越ConvNeXt结构,原创结合Conv2Former改进结构,Transformer 风格的卷积网络视觉基线模型,高效涨点、…...

Java---微服务---RabbitMQ部署

RabbitMQ部署1.单机部署1.1.下载镜像1.2.安装MQ1.3访问管理端2.集群部署2.1.集群分类2.2.设置网络1.单机部署 我们在Centos7虚拟机中使用Docker来安装,如未安装dockr,请参考《Centos7安装Docker》 1.1.下载镜像 方式一:在线拉取 docker …...

别总写代码,这130个网站比涨工资都重要

今天推荐一些学习资源给大家,当然大家可以留言评论自己发现的优秀资源地址 搞学习 找书籍 冷知识 / 黑科技 写代码 资源搜索 小工具 导航页(工具集) 看视频 学设计 搞文档 找图片 搞学习 TED(最优质的演讲)&#xff1…...

Python 类方法简记

文章目录前言必须实例化的类方法使用静态装饰器的类方法使用类装饰器的类方法省流版本ref:前言 Python 的类可以有特定的方法。下面是三种设计类方法的模板。 class A(object):a adef foo1(self, name):print hello, namestaticmethoddef foo2(name):print hello, nameprint…...

分享136个ASP源码,总有一款适合您

ASP源码 分享136个ASP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 136个ASP源码下载链接:https://pan.baidu.com/s/11db_K2QXns5pm8vMZBVPSw?pwds0lb 提取码&#x…...

【Python百日进阶-Web开发-Peewee】Day241 - Peewee 安装和测试、快速开始

文章目录 一、安装和测试1.1 使用 git 安装1.2 运行测试1.3 可选依赖项1.4 关于 SQLite 扩展的注意事项二、快速开始2.1 模型定义2.2 存储数据2.3 检索数据2.3.1 获取单条记录2.3.2 记录列表2.3.3 排序2.3.4 组合过滤器表达式2.3.5 聚合和预取2.3.6 SQL 函数2.4 数据库2.4.1 使…...

手机提供GMS支持(适用安卓和鸿蒙系统)

手机提供GMS支持 - 适用安卓和鸿蒙系统前言方式1:安装GMS套件(不推荐)方式2:安装OurPlay(推荐)方式3:安装Gspace(推荐)前言 本文提供多种为手机(安卓和鸿蒙系…...

[JavaEE]线程池

专栏简介: JavaEE从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录: 1. 线程池是什么? 2. 线程池的实现原理 3. 标准…...

Redis缓存污染了怎么办?

我们应用Redis缓存时,如果能缓存会被反复访问的数据,那就能加速业务应用的访问,但是,如果发生了缓存污染,那么,缓存对业务应用的加速作用就减少了。 在一些场景下,有些数据被访问的次数非常小&…...

特斯拉印证成本仍是工业制造取胜的关键,反证中国制造的优势

近20年来,业界对于工业制造的竞争优势开始逐渐偏离成本控制,然而如今特斯拉在全球的成功却正在印证着工业制造的成功仍然在于成本,成本才是工业制造取胜的关键,其他任何被吹嘘的个性化、创新等全都是骗人的把戏。特斯拉的成功曾被…...

工具及方法 - 斗地主技巧

斗地主游戏起源 斗地主是流行于湖北武汉、汉阳一带的一种扑克游戏。游戏需由3个玩家进行,用一副54张牌(连鬼牌),其中一方为地主,其余两家为另一方,双方对战,先出完牌的一方获胜。斗地主起源于湖北武汉汉阳一带&#xf…...

BIO NIO AIO IO多路复用的区别

1、基础概念 1.1、阻塞非阻塞和同步异步的结合 下面通过例子来具体说明: 同步阻塞: 小明一直盯着下载进度条,到100%的时候完成。 同步体现在:小明关注下载进度条并等待完成通知。(可以看成同步是我主动关注任务完成的…...

数学建模——降维算法

降维 降维的意义 降低无效、错误数据对建模的影响,提高建模的准确性少量切具有代表性的数据将大幅缩减挖掘所需的时间降低存储数据的成本 需要降维的情况 维度灾难。很难有一个简洁的模型在高维空间中依旧具有鲁棒性,而随着模型复杂度的增加&#xf…...

04_iic子系统

总结 iic_client和iic_driver 加入iic总线的思想和paltform总线的玩法一样 把iic设备和驱动注册到iic总线中 构造出字符设备驱动和设备节点供app进行操作 但是iic硬件设备是挂在iic控制器下面的 所以iic控制器也会有自己的驱动和设备树节点 厂家一般都会帮做好 我们写的iic_dr…...

离散系统的数字PID控制仿真-3

离散PID控制的封装界面如图1所示,在该界面中可设定PID的三个系数、采样时间及控制输入的上下界。仿真结果如图2所示。图1 离散PID控制的封装界面图2 阶跃响应结果仿真图:离散PID控制的比例、积分和微分三项分别由Simulink模块实现。离散PID控制器仿真图&…...

如何好好说话-第12章 理清楚问题就是答案

生活中该不该积极主动与别人展开社交活动?有些时候社交活动并不开心,仅仅只是无聊的闲才。但他确实能拉拢人际关系,帮我们获得近身套路。而且有一种观点认为不善于社交的人是不成功的。注意以上说的这些都是偏见。当我们站在一个更高的维度认…...

ice规则引擎==启动流程和源码分析

启动 git clone代码 创建数据库ice,执行ice server里的sql,修改ice server的配置文件中的数据库信息 启动ice server 和ice test 访问ice server localhost:8121 新增一个app,默认给了个id为1,这个1可以看到在ice test的配置文件中指定…...

进度管理(上)

规划进度管理 定义:规划进度管理是为实施项目进度管理制定计划的过程。 输入: 1、项目管理计划 2、项目章程(包含里程碑,这个和规划进度有直接干系) 3、组织过程资产 4、事业环境因素。 输出:进度管…...

2021 XV6 8:locks

实验有两个任务,都是为了减少锁的竞争从而提高运行效率。Memory allocator一开始我们是有个双向链表用来存储空闲的内存块,如果很多个进程要竞争这一个链表,就会把效率降低很多。所以我们把链表拆成每个CPU一个,在申请内存的时候就…...

JUC面试(十一)——LockSupport

可重入锁 可重入锁又名递归锁 是指在同一个线程在外层方法获取锁的时候,再进入该线程的内层方法会自动获取锁(前提,锁对象得是同一个对象),不会因为之前已经获取过的锁还没释放而阻塞。 Java中ReentrantLock和synchronized都是可重入锁&am…...

Datawhale 202301 设计模式 | 人工智能 现代方法 习题

Exercise 1 绪论 Q:用您自己的话来定义:(a)智能,(b)人工智能,(c)智能体,(d)理性,(e)逻…...

k8s安装dashboard面板

k8s dashboard github地址:https://github.com/kubernetes/dashboard注意:dashboard版本要和k8s版本匹配,具体参考release里的Compatibility:https://github.com/kubernetes/dashboard/releases安装命令wget https://raw.githubus…...

最详细、最仔细、最清晰的几道python习题及答案(建议收藏哦)

名字:阿玥的小东东 学习:python。c 主页:没了 今天阿玥带大家来看看更详细的python的练习题 目录 1. 在python中, list, tuple, dict, set有什么区别, 主要应用在什么样的场景? 2. 静态函数, 类函数, 成员函数、属性函数的区别? 2.1静态…...

逆水寒魔兽老兵服副本攻略及代码分析(英雄武林风云录,后续更新舞阳城、扬州、清明等副本攻略)

文章目录一、武林风云录1)老一:陈斩槐(只有四个机制,dps压力不大,留爆发打影子就行)(1)点名红色扇形区域(2)点名红色长条,注意最后还有一段大劈&a…...

SpringMVC总结

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。SpringMVC是一种web层的mvc框架,用于替代servlet(处理响应请求,获取表单参数,表单验…...

二进制部署kubernetes高可用集群

二进制部署kubernetes高可用集群 一、单节点部署 1、集群节点规划(均是24位掩码) 负载均衡节点Master节点Node节点Harbor私有仓库节点nginx110.4.7.23master110.4.7.11node110.4.7.2110.4.7.200nginx210.4.7.24master210.4.7.12node210.4.7.22 2、基本…...

机器学习(七):Azure机器学习模型搭建实验

文章目录 Azure机器学习模型搭建实验 前言 Azure平台简介 Azure机器学习实验 Azure机器学习模型搭建实验 前言 了解Azure机器学习平台,知道机器学习流程。 Azure平台简介 Azure Machine Learning(简称“AML”)是微软在其公有云Azure上推…...

第二类换元法倒代换专项训练

前置知识:第二类换元法 题1: 计算∫1x10xdx\int\dfrac{1}{x^{10}x}dx∫x10x1​dx 解: \qquad令x1tx\dfrac 1txt1​,t1xt\dfrac 1xtx1​,dx−1t2dtdx-\dfrac{1}{t^2}dtdx−t21​dt \qquad原式∫11t101t⋅(−1t2)dt−∫…...

VMware虚拟机无法向宿主机拖放文件

宿主机环境: Windows 10 x64专业工作站版 VMware workstation pro 17 TotalCommander 9.21a 虚拟机环境: Windows 10 x64专业工作站版 TotalCommander 9.21a 现象: 从虚拟机的TC向宿主机TC拖放文件时,光标显示为禁止drop的图…...

Java基础语法——运算符与表达式

目录 Eclipse下载 安装 使用 运算符 键盘录入 Eclipse下载 安装 使用 Eclipse的概述(磨刀不误砍柴工)——是一个IDE(集成开发环境)Eclipse的特点描述(1)免费 (2)纯Java语言编写 (3)免安装 &#xff08…...

连通性1(Tarjan 理论版)

目录 一、无向图割点、桥、双连通分量 Tarjan 算法求割点和桥(割边) “割点”代码 边双和点双连通分量 边双连通分量 和 点双连通分量 的缩点 二、有向图强连通分量 1.有向图的弱连通与强连通 2.强连通分量 Kosaraju算法 Tarjan 算法&#xff08…...

数据库02_函数依赖,数据库范式,SQL语句关键字,数据库新技术---软考高级系统架构师009

1.首先我们来看这个,给定一个X,能确定一个Y那么就说,X确定Y,或者Y依赖x,那么 比如y = x * x 就是x确定y,或者y依赖于x 2.然后再来看图,那么左边的部分函数依赖,就是,通过A和B能决定C,那么如果A只用给就能决定C,那么就是部分函数依赖. 3.然后再来看,可以看到,A可以决定B,那么…...

王者荣耀入门技能树-解答

前言 前段时间写了一篇关于王者荣耀入门技能树的习题,今天来给大家解答一下。 职业 以下哪个不属于王者荣耀中的职业: 射手法师辅助亚瑟 这道题选:亚瑟 王者荣耀中有6大职业分类,分别是:坦克、战士、刺客、法师、…...

java基础学习 day37 (集合)

集合与数组的区别 长度:数组长度固定,一旦创建完成,就不能改变。集合长度可变,根据添加和删除元素,自动扩容或自动收缩,(添加几个元素就扩容多少,删除几个元素就收缩多少&#xff0…...

C盘越用越大?教你如何科学管理C盘空间

前言: 如图,左边是我多开的E5电脑,装的是LTSC2019_210707F多开封装版,C盘占用8.5GB,右边是我平常打游戏写代码的电脑,装的是Win11 22H2,C盘占用30GB。两台电脑都关闭了休眠,C盘的虚拟…...

316_C++_xml文件解析成map,可以放到QT表格上, 且 xml、xlsx文件可以互相解析

xml文件例如&#xff1a; <?xml version"1.0" encoding"UTF-8" standalone"yes"?> <TrTable> <tr id"0" label"TR_PB_CH" text"CH%2"/> <tr id"4" label"TR_PB_CHN"…...

Python机器学习项目开发实战:无监督学习的聚类

注意&#xff1a;本文的下载教程&#xff0c;与以下文章的思路有相同点&#xff0c;也有不同点&#xff0c;最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程&#xff1a; Python机器学习项目开发实战_无监督学习-聚类_编程案例解析实例详解课程教程.pdf 无监督学习中…...

.net9 AOT编绎生成标准DLL,输出API函数教程-中国首创

1&#xff0c;安装VS2022预览版&#xff08;Visual Studio Preview&#xff09; https://visualstudio.microsoft.com/zh-hans/vs/preview/#download-preview 2&#xff0c;选择安装组件&#xff1a;使用C的桌面开发 和 .NET桌面开发 ------------------------------------- …...

MAC: 自己制作https的ssl证书(自己签发免费ssl证书)(OPENSSL生成SSL自签证书)

MAC: 自己制作https的ssl证书(自己签发免费ssl证书)(OPENSSL生成SSL自签证书) 前言 现在https大行其道, ssl又是必不可少的环节. 今天就教大家用开源工具openssl自己生成ssl证书的文件和私钥 环境 MAC电脑 openssl工具自行搜索安装 正文 1、终端执行命令 //生成rsa私钥&…...

面试突击---MySQL索引

面试突击---MYSQL索引 面试表达技巧&#xff1a;1、谈一下你对于mysql索引的理解&#xff1f;&#xff08;为什么mysql要选择B树来存储索引&#xff09;2、索引有哪些分类&#xff1f;3、聚簇索引与非聚簇索引4、回表、索引覆盖、最左匹配原则、索引下推&#xff08;1&#xff…...