【Linux】-进程知识铺垫①计算机硬件的组织:冯诺依曼体系结构详细解读②关于操作系统对软硬件及用户的意义
目录
编辑
1.关于计算机的体系结构
1.1 冯诺依曼体系结构的诞生
2.冯诺依曼体系结构
2.1 cpu:运算器:更多的是让cpu具有特殊的数据计算功能:
2.2 控制器
2.3输入设备
2.4输出设备
3.计算机各个硬件设备之间的关系
4.内存与计算机效率
5.关于为什么总说程序运行时要现将程序加载到内存
6 图示数据(文件)如何在不同体系之间流动
7.关于计算机软件层面:操作系统
8.操作系统向下:①关于驱动程序
9.②生活中的管理映射操作系统对计算机资源的管理
9.1 生活中的管理实例
9.2 计算机对硬件的管理
10. 操作系统向上服务
10.1系统调用接口
10.2 用户操作接口,库封装
1.关于计算机的体系结构
最简单的计算机模型:输入--计算--输出
计算机有各种各样的硬件(显卡、硬盘、键盘等)这些能够看到 和软件(看不到)的组成,而所有的硬件单元都要由一定的体系结构组织起来才能形成我们的计算机,软件也是由一定的软件结构组织起来。计算机有很多很多的组织方式也就是体系结构,被保留的叫做冯诺依曼体系结构。
1.1 冯诺依曼体系结构的诞生
历史:在计算机诞生之前,人们在计算的精度和数量上出现了瓶颈,对于计算机这样的机器的需求就十分强烈,冯·诺依曼的逻辑和计算机思想指导他设计并制造出历史上的第一台通用电子计算机。他的计算机理论主要受自身数学基础影响,且具有高度数学化、逻辑化特征,对于该理论,他自己一般会叫作“计算机的逻辑理论”。而他的计算机存储程序的思想,则是他的另一伟大创新,通过内部存储器安放存储程序,成功解决了当时计算机存储容量太小,运算速度过慢的问题。(引自百度百科)
第二次世界大战期间,美军要求实验室为其提供计算量庞大的计算结果。于是便有了研制电子计算机的设想。面对这种需求,美国立即组建研发团队,包括许多工程师与物理学家,试图开发全球首台计算机(后世称作ENIAC机)。虽然采取了最先进的电子技术,但缺少原理上的指导。这时,冯·诺依曼出现了。他提出了一个至关重要的方面:计算机的逻辑结构。冯·诺依曼从逻辑入手,带领团队对ENIAC进行改进。他的逻辑设计具有以下特点:
- (1)将电路、逻辑两种设计进行分离,给计算机建立创造最佳条件;
- (2)将个人神经系统、计算机结合在一起,提出全新理念,即生物计算机。
即便ENIAC机是通过当时美国乃至全球顶尖技术实现的,但它采用临时存储,将运算器确定成根本,故而缺点较多,比如存储空间有限、程序无法存储等,且运行速度较慢,具有先天不合理性。冯·诺依曼以此为前提制定以下优化方案:
- (1)用二进制进行运算,大大加快了计算机速度;
- (2)存储程序,也就是通过计算机内部存储器保存运算程序。如此一来,程序员仅仅通过存储器写入相关运算指令,计算机便能立即执行运算操作,大大加快运算效率。(引自百度百科)
2.冯诺依曼体系结构
计算机在硬件上被划分为五大单元
中央处理器(运算器、控制器)也被叫做芯片,输入设备 、输出设备、内存
2.1 cpu:运算器:更多的是让cpu具有特殊的数据计算功能:
比如在游戏王者荣耀中,移动游戏人物就是坐标的运算,在打架时,蓝量血量的减少增加本质上就是对蓝量,血量的重新计算后再刷新到人物模型上。如果爆发非常复杂的团战,就涉及到多个人物的状态计算,计算机就疯狂计算,不过这个过程被包装起来的,所以所有问题要计算机解决都要能转换成计算机可以计算的问题。一类是加减乘除常规运算,一类是逻辑运算。所以运算器就主要做算逻运算。
2.2 控制器
更多的协调协调设备之间,cpu之间的信息流动,比如一些指令操作。
2.3输入设备
计算机中,除了cpu和存储器,剩下的都是设备。显示器,鼠标,摄像头,网卡,显卡 声卡等,每个设备都有1不同1的品牌,比如硬盘:三星、镁光等等,所以计算机是分别有擅长造这些设备的厂家打造的设备按照冯诺依曼体系组织起来的,合起来变成新的品牌就是电脑品牌。这个就说明:每一个设备都是独立的物理设备。最典型的输入设备:键盘、摄像头、鼠标、网卡、磁盘
2.4输出设备
和输入设备定位类似,也是独立的,声卡、显卡、网卡、磁盘、显示器、打印机等
二者对比,不难发现,有些设备只做输入,有些设备只做输出,有些设备既可以做输入又可以做输出。 比如磁盘,当我们将磁盘中的内容输出,将数据写入,既输出又可输入。
这里的存储器指的是内存,不是测盘,内存有个特点:掉电易失性存储介质
硬盘:永久性存储介质,所以不叫存储器叫做输入输出设备
3.计算机各个硬件设备之间的关系
那么如果我们要通过计算机发送信息,我们在输入设备上键盘上敲下字符,先不谈发送,这个信息首先应该在计算机内部应该可以通过某种方式来到和网络相关的设备比如网卡,那么消息才能被发送。那么设备和设备之间是独立的,所以设备和设备之间应该要存在某种物理的方式,让数据可以在设备之间流动。:所以设备之间是连接起来的,通过线(系统层面叫总线,总线的分类)连接起来
现在所有的线都被集成在主板上了,对于cpu,磁盘有对应的插槽,插上过后就可以连接,主板上有很多设备线路,所以设备之间信息得以流转,至少设备之间互相通信是可以做到的,所以设备之间是连接的,但是各设备互相独立。
设备的链接不是目的,不是为了连接而连接,是通过连接手段达到设备之间信息流动的目的。所以键盘敲下字符,显示器可以拿到信息进行显示。
本篇文章是初次探索,所以仅仅考虑下图中的蓝色线路,也就是只探讨设备之间信息的流动
比如说:输入设备是键盘,将数据拷贝到内存,
中央处理器让设备写,暂停这些叫控制信号。
用户将数据给输入设备,输入设备给存储器,存储器给cpu,处理给存储器,给输出设备展示给用户。
4.内存与计算机效率
数据在设备之间流动,实际上设备之间会进行数据的来回拷贝。将数据从一个设备搬到另外一个设备。拷贝的整体速度,是决定计算机效率的重要指标。设备到设备之间,设备到数据之间拷贝数据速度的快慢就决定了计算机的效率。
计算机现在能够被家家户户使用的原因首先是产品性能稳定,其次这个商品的消费负担对于一个家庭来说可以负担也就是价格便宜。很早的计算机是非常昂贵的。
如果我们简单描述一些计算机:
那么存储器的作用和存在意义是什么呢?
首先为什么体系结构中存在内存,
计算机中存在一个存储的金字塔
距离cpu越近,效率越高(写入快),造价越高,单体容量越小,性价比不高
cpu是皇帝,寄存器就是苏公公,效率非常快,几乎要赶上cpu.
400-800只可以买到4-5g内存条
400-800可以买到1T到2T的固态硬盘。
所以可见内存的成本是要更高一些的。
那么,如果没有内存这块,按照我画的那个结构来讲应该计算机应该更稳定,因为体系结构简单,效率更快,因为数据从输入设备来到cpu直接计算。但是问题在于:输入输出这些叫做设备,磁盘等都离cpu很远,但是cpu处理数据能力很快
那么最后我们计算机的处理效率就会取决于这些满的外设的效率,导致整机的效率变慢,就像一个急性子和一个慢性子搭档,最后做一个项目的工期是有慢性子决定,这非常像我们的木桶原理,应该桶可以装多少水,完全取决于最短的一边有多高
所以如果二者直接相连就会拖累计算机的效率。cpu会一直处于等待停止状态。
cpu是纳秒级别单次运算,输入设备是毫秒差100w倍,(只是一个举例,数据不准确)外设跟不上,那么解决办法就是,在二者直接补充一个设备:内存,定期刷新数据给cpu,保证计算机速度不以外设速度作为计算机速度标准,以内存为标准。
但是外设的数据处理能力不变,而后原先cpu可以直接访问输入输出,现在又多一个中间商,本来原先就慢,现在多了一个内存坎,为什么不是反而更慢,而是更快。
内存把输入设备的数据在cpu还没有需要这个数据的时候,就将数据搬到内存了,cpu再读取就直接从内存取,输出数据,数据直观从cpu输入到内存然后接着处理其他事,内存再将数据慢慢刷新到输出设备,数据提前从输入设备加载到内存叫做预存,将数据从内存缓缓刷新到输出设备叫缓存。这样的机制,如果内存处理很好,cpu就只和内存交互,就整体提高计算机效率。内存怎么预先知道cpu要处理什么数据,这是操作系统要处理的工作,可以由一定方式知道。
所以在硬件级别上可以把内存看做一个非常大的缓存,介于设备和cpu之间,从此完后,数据得先放到内存,CPU直接和内存进行交互,不与外设打交道。就像老板跟着一个秘书,有签字等先给秘书,老板处理工作通过秘书。
所以有时计算机卡顿会通过添加内存条的方式提高效率。如果钱很多,将内存用寄存器铺满,甚至用寄存器做磁盘,不考虑断电,技术可以做到。但是很贵,所以内存存在,使得计算机价格便宜,效率也很不错,也就呼应了上文中为什么现在的计算机大面积可以普及。这才是冯诺依曼将效率问题转换为软件问题,计算机价格向下称为经典的原因。
结论:
拷贝速度越快,速度越高,数据先到内存,从内存到cpu,处理了从cpu到内存,再到输出。
计算机的核心工作:内存和cpu交互
5.关于为什么总说程序运行时要现将程序加载到内存
首先磁盘是外设,内存是内存
我们在写C语言代码的时候,一直说,程序在运行的时候,必须将程序先加载到内存。
原因:程序编译好之后是一个文件,文件存储在磁盘或者硬盘外设中,程序中有对应的指令和数据,语句等是由cpu执行,所以程序必须从外设拷贝到内存中,cpu读取数据只会从内存中读取
所以在数据层面,cpu只和内存打交道,外设也只和内存打交道。核心地位。所以,程序运行时必须先加载到内存是由冯诺依曼体系决定。
6 图示数据(文件)如何在不同体系之间流动
7.关于计算机软件层面:操作系统
计算机开机时第一个被加载的软件就是操作系统。开机等待就是在加载操作系统
操作系统是一个进行软硬件资源管理的软件
关键字:软硬件 管理 软件
操作系统存在的意义:
对下管理好软硬件资源---这是操作系统的手段
对上为用户提供一个良好的(稳定高效安全)的运行环境,这是操作系统的目的。
底层硬件是按照冯洛伊曼体系结构组成
8.操作系统向下:①关于驱动程序
驱动程序:首先只有每个硬件比如声卡、网卡等设备,只有其生产厂家知道这些设备该如何访问,比如说想让设备启动,终止,离线,或者对设备写入数据,那么对于这些设备如何访问只有企业才才知道,那么将访问这个设备的方式或者方法写成一个软件,软件可以控制对应硬件,或者将硬件的接口公开,由其他人来编写控制这个硬件的设备。所以驱动程序就是这样一个软件
操作系统要使用硬件,使用驱动程序提供的方法就可以读写关闭启动硬件。硬件软件打包给操作系统调用,操作系统就调用驱动程序提供接口就可以操作硬件了。驱动程序只提供访问方法,上层操作系统来决定硬件的动作,通过驱动访问硬件设备实现。每一款硬件都要有其匹配的驱动程序,这也就是为什么有时我们需要安装驱动程序。很多常见驱动是电脑内置的,网卡驱动,键盘驱动等等,有时我们购买一些硬件,可能没有对应的驱动,我们的对应硬件厂家就会提供对应硬件的驱动下载地址:
比如我们的游戏手柄,Xbox
所以驱动实际上和普通的软件没有区别。有时我们的网络突然掉了,声音没有了等通常也会采取更新驱动的方式解决。驱动在编写时也得按照操作系统的规矩来编写。
9.②生活中的管理映射操作系统对计算机资源的管理
操作系统是一个搞管理的软件,我们再来谈谈管理和如何管理(计算机领域)
世界上只有两种人:做决策 做执行 ,二者混合出行,(摆烂的就是既做决策又做执行)
那么所谓的管理更多的就是做决策,好的管理就要做出正确的决策。操作系统就相当于一个管理者的角色,被管理者基本就是做执行。就是硬件扮演的角色,驱动作为一个中间角色促进使得决策落地。
9.1 生活中的管理实例
用一个学院的例子来给大家举例
院长作为一个学校的真正的管理者,负责指定和安排学院的相关工作,包括学生和老师,但是重点是如何管理好学生。对于院长来说,管理工作并不是记住每一个人,然后亲自来看管每一个学生。这就是说管理者和被管理者可以没有交集,不用见面,管理的本质是对人的信息和数据做管理。比如学号为多少的同学旷课多,该采取什么措施,那些学号的住那个楼层,等等。管理者的核心工作是做出正确的决策,但是也是根据信息,根据数据来做出决策,要保证决策的正确性,比如要发奖学金,肯定就要找到成绩最高的那几个同学进行发放,发现有个学号老是显示旷课,就该开除。
那么管理者和被管理者之间互不见面,怎么实现通信,信息传达呢,这个就是辅导员(中间层)的作用,开学第一天院长就会让辅导员收集每个同学的基本信息,每个同学才有了自己的编号也就是学号、宿舍号、班级号等等。如果某一天某个学号的同学表现的太好或者太坏,院长就让辅导员找找这个同学执行一下开除或者奖励工作。
随着学院越来越多的人,也就说院长手里关于人的数据是非常多的。在院长层面来说,此时对于不同的学生信息是不一样的,管理起来就不怎么方便,对人的管理就要转变为对数据的管理,学生对于院长工作需要的信息类型是一样的,也就说院长只需要学生关于学校属性的数据,就像你工作后老板不关心你的学号这种属性数据是多少一样。那么对于每一个学生就有一个通用的属性描述了:
struct student
{
int student number;//学号
//性别
//年龄
//班级
//
//
};
但是有了这个对学生整体数据的描述觉得和拿着一张数据表的时候没有什么两样,只是稍微对数据进行精确化了一些。所以:
struct student
{
int student number;//学号
//性别
//年龄
//班级
//
//
struct student * next//创建一个指向下一个信息的指针
};
院长创建了一个这样的学生链表数据结构,将学院学生的数据都组织起来
对学生的组织管理决策工作也就变成了对学生数据管理的增删查改。此时的管理工作和效率变简单了。
这个过程也就是计算机对管理的一个建模过程,中心思想为:先描述再组织。
9.2 计算机对硬件的管理
那么映射到我们操作系统对应对底层硬件的管理来说也就是一样的了,底层硬件对于操作系统来说信息比较多也比较庞杂,操作系统将硬件的属性描述称为硬件的属性的结构体链表。然后根据设备命名通过驱动来操作我们的设备,打开、关闭、链接等等。同时,院长在管理学生的同时也要管理辅导员,那么操作系统也要对驱动程序进行管理,也是先描述再组织,利用数据结构进行管理。
struct device
{
char name;char status;//状态
:
:
struct device* next;
}
所以计算机操作系统管理硬件的方式为:
- ①先将硬件的属性进行描述,使用结构体(操作系统是用c语言写的)
- ②再将其组织起来,用链表或者其他数据结构(队列、二叉树都可以),方便管理。
- 重点先描述再组织的建模过程
- 建模:将现实问题转换成计算机认识处理的问题这个过程就是计算机建模。
10. 操作系统向上服务
我们再来看一下操作系统存在的意义;就是为什么要用操作系统呢?
在早期的计算机中是没有操作系统概念的,人们通过开关来控制计算机,控制输入输出。
二进制--汇编语言--C语言--软件--操作系统
这是一个发展流程。
为什么要有操作系统,也就是为什么要有操作系统的管理?
对下管理好软硬件资源---这是操作系统的手段,不然打游戏三分钟一个重启,一会儿没有声音,一会没有画面。那么操作系统的目的就有了,对上为用户提供一个良好的(稳定高效安全)的运行环境,这是操作系统的目的。那么我们就有了需要操作系统的理由。人工管理的计算机效率非常慢,人作为是使用者体验感也不是很好。
操作系统对底层硬件的管理方式是先描述再组织,那么对上是怎么样的呢?
10.1系统调用接口
首先为了保证一个稳点、高效、安全的环境,操作系统是不会让用户直接操纵操作系统,操作系统里面存放在各种各样的管理好的大量的计算机软硬件数据,直接让用户访问可能发生数据的丢失,盗取、打乱等对于操作系统来说是非常危险的。如果用户不是机器主人,可能就会发生数据的盗取。所以操作系统设置有系统调用接口,必须通过系统调用结构来访问操作系统,就像人到银行取钱都是到窗口取钱,而不是让用户自己去金库拿。这非常危险。
这里的系统调用接口就是操作系统提供的一批接口,只允许我们的用户通过系统调用接口来访问操作系统内部,不允许用户直接访问。所以操作系统被设计好了就必须有系统调用接口的概念。
我们c++中学过类,在类中我们是有权限的,对类内的数据一般设置为prevate,对于想让外部用户调用访问的写成公有的方法,不想暴露的就写成prevate,要想使用类内数据只能通过公有方法和公共接口来调用,public,这实质上是对类内数据的管理,所以操作系统也就相当于一个巨大的内,公共接口就是系统调用接口,用于给用户访问操作系统。linux是用C语言写的,这些系统调用接口实质上就是C语言设计的函数,只是这个函数由系统提供叫做系统调用,函数对应着有输入输出,当然不是全都有,当调用有输入输出的接口时,输入就是用户想把数据交给操作系统处理,输出就是想将操作系统数据给用户,这就叫做用户和操作系统的交互。就像银行用户输入要取多少钱,柜台给多少钱给用户。这是操作系统对数据方面的支持,(用户想知道当前多少进程),操作系统也提供功能方面的支持,所以我们需要操作系统,同时操作系统也会给我们提供系统调用接口。
结论:任何人都不可以直接访问操作系统内的任何数据,必须采用操作系统。
10.2 用户操作接口,库封装
那么用户可以绕过操作系统访问底层硬件吗?或者用户可以直接绕过系统调用直接访问操作系统吗?
答案是不可以的,操作系统是真正的管理者,不能有越过操作系统的动作,必须通过操作系统。越级访问是不允许的。操作系统对上服务也必须提供系统调用接口,系统中会在系统层面上提供上百个系统调用接口,用户通过系统调用接口完成特点的操作。
例子:printf
打印在显示器,显示器是硬件,printf并不是直接将数据打印在屏幕,这个函数底层必须经过操作系统向底层硬件显示器打印,操作系统为了内部环境的安全稳定,不会让任何人直接访问操作系统,所以print作为C语言函数内部肯定封装了系统调用接口。
未来使用函数,函数会影响硬件的变化,底层绝对封装系统调用。
那么用户可以直接调用系统调用接口吗:
是可以的,因为系统调用接口本身就是提供给客户的。
这些接口不是所有用户都会使用,就像银行柜台的操作不是任何人都会,爷爷每次取钱都会带上我,因为操作爷爷不会,流程爷爷也不理解。所以操作系统会提供一层服务层,这个服务层就是爷爷身边的孙子一样,因为接口函数返回值,参数需要用户对操作系统有一定的了解,所有就有人对这些系统调用进行封装形成对应的lib也就是库,方便用户(普通用户,开发者等)使用,减少用户使用成本,最典型的就是c/c++中操作系统将访问显示器和键盘这样的操作封装成printf函数,所以有c标准库的概念,系统调用层可以有用户接口和库,这样用户就不用使用系统调用了,使用库,shell外壳和指令操作,就更方便了。用户对系统的使用成本也就降低了。
系统调用和库函数的差异:
- 系统调用由操作系统向上提供
- 库函数由用户层提供,二者是上下层关系。不一定所有库函数都会调用系统调用,只要调用就是上下层关系。
这套结构适合所有操作系统
如果库在linux将系统调用封装,在windows中也分装,但是对上层只提供统一的接口,假设是printf,在C语言层面上使用printf,但是底层在不同的操作系统下面就采用不同的接口,这个库是c的设计者提供。所以说某些语言具有跨平台性,可移植性,因为差异化在库中就屏蔽了。同样的c代码编译在linux下可以跑,在windows下也可以跑,这叫做跨平台性,在库层面体现,这意思为什么提供库的封装的原因。
11.结语
以上就是本期所有内容的讲解,创作不易,大家如果觉得还可以的话,欢迎大家三连,有问题的地方欢迎大家指正,一起交流学习,一起成长,我是Nicn,正在c++方向前行的奋斗者,数据结构内容持续更新中,感谢大家的关注与喜欢。
相关文章:
【Linux】-进程知识铺垫①计算机硬件的组织:冯诺依曼体系结构详细解读②关于操作系统对软硬件及用户的意义
目录 编辑 1.关于计算机的体系结构 1.1 冯诺依曼体系结构的诞生 2.冯诺依曼体系结构 2.1 cpu:运算器:更多的是让cpu具有特殊的数据计算功能: 2.2 控制器 2.3输入设备 2.4输出设备 3.计算机各个硬件设备之间的关系 4.内存与计算机效率 5.关于为什么总说…...
让ECC升级S/4HANA一步到位的“全面升级方案包”
SAP最新一代商务套件S/4HANA比ECC系统拥有更高性能的存储数据库HANA、更个性化的Fiori用户界面设计系统,能够大大提升系统效率,带来便捷、高效、良好的用户体验。但企业原先使用的ECC系统里面保存了积累多年的关键流程和数据,让企业面对系统升…...
AutoGluon
官网 amazon (base) PS C:\Users\gg葱> conda env list # conda environments: # pytorch1 C:\Users\gg葱\.conda\envs\pytorch1 base * D:\ANCDD:\Documents\LMm\env\pytorch2(base) PS C:\Users\gg葱> conda create --prefixD:/Doc…...
【网站项目】少儿编程管理系统
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...
基于C语言的数据结构--顺序表讲解及代码函数实现展示
本篇文章是数据结构的开篇,所以我们先来了解一下什么是数据结构。 什么是数据结构 数据结构是由“数据”和“结构”两个词组合而来,自然要以两个词分别去阐述。 首先,什么是数据?数据(data)是事实或观察的结果,是对客…...
(学习日记)2024.03.31:UCOSIII第二十八节:消息队列常用函数
写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…...
DLC原理解析及其优化思考
1. 引言 Discreet Log Contract (DLC) 是由麻省理工学院的Tadge Dryja在2018年提出的一套基于预言机的合约执行方案。DLC 允许两方根据预定义的条件进行有条件付款。各方确定可能的结果并进行预签名,并在预言机签署结果时使用这些预签名来执行支付。 因此ÿ…...
tigramite教程(七)使用TIGRAMITE 进行条件独立性测试
文章目录 概述1 连续数值变量1.1 ParCorr 偏相关(ParCorr类)1.2 鲁棒偏相关(RobustParCorr)非线性检验1.3 GPDC1.4 CMIknn 2a. 分类/符号时间序列2b. 混合分类/连续时间序列多变量X和Y的测试 概述 这个表格概述了 X ⊥ Y ∣ Z X\…...
【DevOps工具篇】使用Ansible部署Keycloak oauth2proxy 和 单点登录(SSO)设置
【DevOps工具篇】使用Ansible部署Keycloak oauth2proxy 和 单点登录(SSO)设置 目录 【DevOps工具篇】使用Ansible部署Keycloak oauth2proxy 和 单点登录(SSO)设置Ansible 基础知识部署 Keycloak创建 OIDC-客户端创建 oauth2proxy 部署顶级 Ansible PlaybookHost.iniplayboo…...
鸿蒙OS开发实例:【应用状态变量共享】
平时在开发的过程中,我们会在应用中共享数据,在不同的页面间共享信息。虽然常用的共享信息,也可以通过不同页面中组件间信息共享的方式,但有时使用应用级别的状态管理会让开发工作变得简单。 根据不同的使用场景,ArkT…...
C#清空窗体的背景图片
目录 一、涉及到的知识点 1.设置窗体的背景图 2.加载窗体背景图 3.清空窗体的背景图 二、 示例 一、涉及到的知识点 1.设置窗体的背景图 详见本文作者的其他文章:C#手动改变自制窗体的大小-CSDN博客 https://wenchm.blog.csdn.net/article/details/137027140…...
Qt 实现的万能采集库( 屏幕/相机/扬声器/麦克风采集)
【写在前面】 之前应公司需要,给公司写过一整套直播的库( 推拉流,编解码),类似于 libobs。 结果后来因为没有相关项目,便停止开发&维护了。 不过里面很多有用的组件,然后也挺好用的,遂开源出来一部分。…...
将写好的打印机代码打包成jar包然后直接注册成windows服务,然后通过调用插件的接口地址将流传到接口实现解析并无需预览直接通过打印机直接打印PDF文件
实现文件流PDF不需要预览直接调用打印机打印实现方案就是,将写好的打印机代码打包成jar包然后直接注册成windows服务,然后通过调用插件的接口地址将流传到接口实现解析并无需预览直接通过打印机直接打印PDF文件。源码地址...
加密软件VMProtect教程:使用脚本-功能
VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic(本机)、Virtual Pascal和XCode编译器。 同时,VMProtect有一个内置的反汇编程序,可以与Windows和Mac OS X可执行文件一起…...
51单片机入门_江协科技_21.1_开发板USB口连接建议
1. 目前我自己用的普中A2版本的开发板,操作失误导致在开发板连接电脑并通电的情况下误将跳线帽触碰到开发板的3.3V与GND,导致USB口浪涌,2个电脑上面的USB口烧毁,开发板暂时没有任何问题,电脑USB口现在只是接通后有电&a…...
基于Spring Boot 3 + Spring Security6 + JWT + Redis实现登录、token身份认证
基于Spring Boot3实现Spring Security6 JWT Redis实现登录、token身份认证。 用户从数据库中获取。使用RESTFul风格的APi进行登录。使用JWT生成token。使用Redis进行登录过期判断。所有的工具类和数据结构在源码中都有。 系列文章指路👉 系列文章-基于SpringBoot3…...
Kubernetes(k8s):精通 Pod 操作的关键命令
Kubernetes(k8s):精通 Pod 操作的关键命令 1、查看 Pod 列表2、 查看 Pod 的详细信息3、创建 Pod4、删除 Pod5、获取 Pod 日志6、进入 Pod 执行命令7、暂停和启动 Pod8、改变 Pod 副本数量9、查看当前部署中使用的镜像版本10、滚动更新 Pod11…...
【随笔】Git 高级篇 -- 相对引用2(十三)
💌 所属专栏:【Git】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…...
xilinx AXI CAN驱动开发
CAN收发方案有很多,常见的解决方案通过是采用CAN收发芯片,例如最常用的SJA1000,xilinx直接将CAN协议栈用纯逻辑实现,AXI CAN是其中一种; 通过这种方式硬件上只需外接一个PHY芯片即可 上图加了一个电平转换芯片 软件设计方面&…...
Python:百度AI开放平台——OCR图像文字识别应用
一、注册百度AI开放平台 使用百度AI服务的步骤为: 注册:注册成为百度AI开放平台开发者;创建AI应用:在百度API开放平台上创建相关类型的的AI应用,获得AppID、API Key和Secret Key;调用API:调用…...
OpenEuler/Centos制作离线软件源
需求背景: 一般线上服务器都是不能连接外网,服务器安装好系统之后就需要部署相关软件,此时因为无法联网导致无法下载软件,所以都会做一个本地的离线软件源,本文简单介绍如何快速利用已经下载好的rpm包,制作…...
论文笔记:基于多粒度信息融合的社交媒体多模态假新闻检测
整理了ICMR2023 Multi-modal Fake News Detection on Social Media via Multi-grained Information Fusion)论文的阅读笔记 背景模型实验 背景 在假新闻检测领域,目前的方法主要集中在文本和视觉特征的集成上,但不能有效地利用细粒度和粗粒度…...
攻防世界 xff_referer 题目解析
xff_referer 一:了解xxf和Referer X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。 一般的客户端发送HTTP请求没有X-Forwarded-For头的࿰…...
open-cd框架调试记录
源于论文Changer: Feature Interaction Is What You Need forChange Detection 源码位置:open-cd/README.md at main likyoo/open-cd (github.com) 同样是基于MMSegmentation框架的代码,不符合本人编程习惯所以一直也没有研究这东西,近期打…...
【算法刷题day17】Leetcode:110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和
文章目录 Leetcode 110.平衡二叉树解题思路代码总结 Leetcode 257. 二叉树的所有路径解题思路代码总结 Leetcode 404.左叶子之和解题思路代码总结 草稿图网站 java的Deque Leetcode 110.平衡二叉树 题目:** 110.平衡二叉树** 解析:代码随想录解析 解题思…...
Linux云计算之Linux基础2——Linux发行版本的安装
目录 一、彻底删除VMware 二、VMware-17虚拟机安装 三、MobaXterm 安装 四、Centos 发行版 7.9的安装 五、rockys 9.1的安装 六、ubuntu2204的安装 一、彻底删除VMware 在卸载VMware虚拟机之前,要先把与VMware相关的服务和进程终止 1. 在windows中按下【Windo…...
C++:赋值运算符(17)
赋值也就是将后面的值赋值给变量,这里最常用的就是 ,a1那么a就是1,此外还包含以下的赋值运算 等于int a 1; a10 a10加等于int a 1; a1;a2-减等于int a 1; a-1;a0*乘等于int a 2; a*5;a10/除等于int a 10; a/2;a5%模等于int a 10; a%…...
Spring Boot | Spring Boot的“数据访问“、Spring Boot“整合MyBatis“
目录: 一、Spring Boot”数据访问概述“二、Spring Boot”整合MyBatis”1. 基础环境搭建 (引入对应的“依赖启动器” 配置数据库的“相关参数”)① 数据准备 (导入Sql文件)② 创建项目,引入相应的启动器,编写数据库对应的“实体类”③额外添加pom.xml文…...
ActiViz中的数据集vtkPolyData
文章目录 前言一、数据结构二、数据内容三、几何操作四、数据导入与导出五、数据可视化六、函数详解1、SetPoints(vtkPoints points):2、SetPolys(vtkCellArray polys):3、GetNumberOfPoints():4、GetNumberOfCells():5、GetPointData():6、GetCellData():7、Ge...
【测试篇】测试用例
文章目录 前言具体设计测试用例等价类边界值场景设计法判定表(因果图)正交排列(用的非常少)错误猜测法 前言 什么是测试用例?? 测试用例是针对软件系统或应用程序的特定功能或场景编写的一组步骤…...
烟台赶集网网站建设/搜索引擎下载
参考博文: 机器学习排序LTR入门——线性模型 LTR学习排序 Learning to Rank 小结...
全网营销系统怎么样/seo免费外链工具
大家好,这节课我们继续上节课未完成部分的流程开发。首先回顾下上节课内容:整个项目流程设计示意图、流程开发的创建项目、登录网页、获取Excel数据、判断品牌数据是否为空、进入品牌官方旗舰店部分。这节课我们将会学习到流程开发的按服装编号搜索服装、…...
构建企业网站/微信广告推广平台
批量生成账户信息,产生的账户由sina.com结尾,长度由用户输入,产生多少条也由用户输入,用户名不能重复,用户名必须由大写字母、小写字母和数字组成。 1 def Users(num,len): # num产生多少条信息,len账号的长…...
如何给网站做外部优化/今天发生的重大新闻事件
为什么80%的码农都做不了架构师?>>> 今天老赵在园子里发了一篇文章"警惕匿名方法造成的变量共享",立即引起了大家的广泛关注(老赵就是园子的"人气天王",呵呵),而且这个问题园子里也有其它几篇文章…...
商城类网站设计制作/搜索引擎优化技术有哪些
例如: JSON字符串:var str1 { "name": "cxh", "sex": "man" }; JSON对象:var obj { "name": "cxh", "sex": "man" }; 1、在js中把json字符串转json对象的方法不止一种࿰…...
wordpress 远程媒体库/seo整站优化方案
GridLayout是一种非常简单的布局,它的每个组件的大小都相等。这里不许多说,直接上代码和图片说明/** GridLayoutDemo.java requires no other files.*/import java.awt.Container;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;imp…...