操作系统的逻辑结构

2023-11-17

2-1 操作系统的逻辑结构
逻辑结构

  • OS的设计和实现思路
    逻辑结构的种类
  • 1.整体结构
  • 2.层次式结构
  • 3.微内核结构(客户/服务器结构,Client/Server)

操作系统作为一个大型软件,它的设计逻辑实现的思路,我们叫做操作系统的逻辑结构,操作系统采用什么模式来设计 的,采用什么架构来实现的,我们把这样的内容叫做操作系统的逻辑结构。
操作系统的逻辑结构有三种整体式结构、层次式结构、微内核结构。微内核结构也叫客户/服务器结构,Client/Server结构。
1.整体式结构
以模块为基本单位构建

在这里插入图片描述
整体式结构的基本特点就是以模块为基本单位构建。这样的操作系统内部由很多模块构成,模块化的构造思想是我们在C语言,JAVA语言最基本的一种编程思想,以为模块化的方式编写程序。上图的C语言是由每个模块每个函数构成的。
在这里插入图片描述
这是以模块方式构建的操作系统,这也是操作系统由多个内部模块构成。这是操作系统提供的接口,最上面是应用程序。
1.整体式结构
特点

  • 模块设计、编码和调适独立
  • 模块调用自由
  • 模块通信多以全局变量形式完成

缺点

  • 信息传递随意,维护和更新困难

采用整体式的结构来设计操作系统有什么特点呢?每个模块的设计、编码、调适相互独立,来设计不同的模块来做一个并行的开发。可以使模块的调用非常的自由,模块的通信多以全局变量形式完成模块间的通信,整体式结构的缺点,信息的传递非常的随意,系统的维护和更新非常的困难。
对于一个小系统来说 平常做一些规模比较小的应用开发,我们使用模块化的设计,事后应该没什么问题,但是对于操作系统这个大型复杂功能庞大的软件使用整体式结构使用模块化的方式设计就会存在这样的问题,模块之间的调用关系很难维护,很难理清楚,模块间信息共享让全局变量形式实现,我们都不容易控制,这个全局变量的读写过程很难控制,所以采用整体式结构并不是一个很好的方法来设计操作系统。
2.层次结构
层次结构的软件例子:TCP/IP协议栈
在这里插入图片描述
第二种逻辑结构就是层次结构,最典型层次结构的软件就是TCP/IP协议栈,这是一个典型的层次结构软件。
最顶层是上层的应用协议,划分一层一层所以是分层结构的软件。

分层结构的操作系统
在这里插入图片描述
我们也可以采用分层的形式来设计,上图是一个分层结构的操作系统。裸机是最底层的硬件,硬件上面是进程控制、进程通信,处理机的分派还有初级的中断管理,再往上是内存的管理,再往上是输入输出的管理、文件存取、资源分配与调度。

这个分层结构的操作系统越往底层和硬件结合越紧密,越往上层和用户功能结合越紧密,所有的功能模块按照调用的次序,排成若干层,相邻层只有单向的依赖或单向调用。每一层的实现是依赖下一层,每一层为它的上一层提供服务,层与层之间只存在单向的依赖和单向的调度。
分层原则

  • 硬件相关 – 最底层
  • 外部特性 --最外层
  • 中间层 – 调用次序或消息传递顺序
  • 共性的服务 – 较低层
  • 活跃功能 --较低层

分层的原则和硬件相关的放在最低层,和外部特性和用户的需求有关的放在最外层比如最上层,中间层按照调用次序或消息传递顺序来安排,和共性服务有关的放在较底层,和活跃功能相关的放在较底层。这是分层的原则。
层次结构的优点

  • 结构清晰,避免循环调用。
  • 整体问题局部化,系统正确性容易得到保证。
  • 有利于操作系统的维护、扩充、移植。

层次操作系统它的优点结构清晰避免循环调用;对整体问题局部化,系统的正确性容易得到保证,分层开发有利于操作系统维护、扩充和移植。
对于移植来说,换到一个新的操作系统里面还可以正常工作只需要修改最底层和硬件相关这一层,就可以方便移植到新的操作系统下面。
3. 微内核结构
操作系统 = 微内核 + 核外服务器

微内核

  • 足够小,提供OS最基本的核心功能

    • 1.实现与硬件紧密相关的处理

    • 2.实现一些较基本的功能;

    • 3.负责客户和服务器间的通信

核外服务器

  • 完成OS的绝大部分服务功能,等待应用程序提出请求
    - 由若干服务器或进程共同构成
    - 例如:进程/线程服务器、虚存服务器,设备管理服务器等,以进程形式运行在用户态。

第三种逻辑 结构就是微内核结构,对于微内核结构的操作系统来说,操作系统由两部分构成 微内核加上核外服务器。
微内核 和核外服务器 分别担任什么工作有什么样的特点呢?
对于微内核来说,他的系统足够小,提供操作系统最基本的核心功能和服务,非常小
而核外服务器完成操作系统绝大部分服务功能,等待应用程序提出服务请求。对于核外服务器来说 它是直接面向应用面向用户的,而微内核这部分非常小,它只负责最底层的、最核心的、最活跃的功能和服务。
微内核主要实现这三方面的工作,实现与硬件紧密相关的处理;实现一些比较基本的功能;负责客户和服务器间的通信。
核外服务器是操作系统绝大部分功能,它由若干个服务进程构成,由若干个服务器或进程共同构成,
比如说进程服务器,线程服务器,虚存服务器,设备管理服务器等待,以进程的形式运行在用户态。
以微内核的架构来设计操作系统,它的优点在于非常方便的扩充操作系统功能,我们有新的功能要扩充只需要在核外服务器上面加一个新的进程。

Linux操作系统它是一个典型的单体内核。另外一个操作系统Minix OS 它是由Andrew设计的是一个典型的微内核结构。操作系统的代码4000行,可以通过小型的操作系统来理解操作系统的原理。
在这里插入图片描述

2-2 CPU的态
支持操作系统的最基本硬件结构
CPU
内存
中断
时钟
在计算机里面有一些最基本硬件是操作系统必须要依赖的,CPU、内存、中断、时钟。这四个基本硬件是操作系统最基本的硬件。

CPU 态(Mode)

  • CPU的工作状态
  • 对资源和指令使用权限的描述

CPU是计算机最重要的硬件,我们买计算机首先会先选择计算机的参数,CPU的作用就是用来运算,对指令进行解码和执行,CPU有一个概念叫做态,英文叫Mode。态顾名思义是CPU的工作状态,这个态也是对资源和指令使用权限的描述,程序能够使用计算机的哪些资源,能够使用哪些指令,与CPU的态有关系,CPU在不同功能状态下面能够使用的资源和指令是不一样的。
在这里插入图片描述
比如在计算机里面有上述这些指令,这些指令对计算机非常的重要,对计算机的一些核心的操作都受这些指令的控制,一些底层的核心的控制都与这些指令有关系。这些指令就不能随便被一些应用程序使用。
我们把上图的指令叫做特权指令,只有CPU工作在某一种权限很高的态下面,才能够使用这些特权指令,我们再回到态的概念,态是对资源和指令使用权限的描述。
态的分类
核态(Kernel mode)

  • 能够访问所有资源和执行所有指令

  • 管理程序/OS内核

态可以分为核态Kernel mode 能够使用所谓的资源和所谓的指令,包括我们刚刚讲的特权指令,核态是权限最高的,管理程序和操作系统内核都工作在核态上面。
用户态(User mode,目态)

  • 仅能访问资源,其它资源受限。

  • 用户程序

第二种态叫用户态(User Mode)有时候我们也叫做目态。
这种态只能使用一部分资源,使用其它资源会受限,用户程序工作在用户态,用户态的权限是非常低的。
管态(Supervisor mode)
介于核态和用户态之间

管态势介于核态和用户态之间的,管态到底能使用哪一些资源哪一些指令,这个在不同的操作系统里面没有很明确的界限,所以我们主要分析核态和用户态,管态是中间的模凌两可的状态有时候可以不去细究它。

用户态和核态之间的转换
用户态向核态转换

  • 用户请求OS提供服务
  • 发生中断
  • 用户进程产生错误(内部中断)
  • 用户态企图执行特权指令

核态向用户转换的情形

  • 一般是执行中断返回:IRET

用户态和核态这两种态可以相互转换,用户态向核态转换的情形,比如用户请求操作系统提供服务时要进入核态,发生中断这个响应过程是在核态完成的,这个时候会用户态进入到核态下面,用户进程产生错误或者用户态企图执行特权指令,这都会使CPU从用户态转向核态。

核态向用户态转换的情形一般是中断返回。
硬件和OS对CPU的观察

  • 硬件按“态”来区分CPU的状态

  • OS按“进程”来区分CPU的状态

硬件和操作系统对CPU的观察,硬件按照“态”来区分CPU的状态,硬件会观察CPU是核态还是用户态。
对操作系统来说会按照进程的概念来区分CPU的状态,对操作系统来说CPU当前运行的是哪一个进程,是进程A还是进程B还是进程C,所以对于操作系统来说,它区分CPU的状态是看CPU现在在运行哪一个进程。

Inter CPU 的 态
Ring 0 ~Ring 3 (Ring 0 最核心,Ring 3最外层)
程序段A访问程序段B时进行权限检查(态)
程序段:请求特权级,RPL

  • Requested Privilege Level

  • RPL = 0…3

描述符特权级,DPL

  • Descriptor Priviledge Level

  • DPL = 0…3

在这里插入图片描述
在不同类型的CPU上面实现这个态,支持这个态,他的定义是不相同的,比如在Inter的CPU里面,CPU支持者四个态,这四个态分别叫做Ring 0 ,Ring 1,Ring 2,Ring 3,Ring 就是环的意思,我们看上图图中有四个环,最外面的环是Ring3,最里面的环权限最高,最外面的环权限最低。
一段程序A假如它要访问程序B,这个时候要进行权限的检查,这个就是CPU态的转换过程。对于每一个程序段来说 它有一个请求特权级,RPL。RPL描述了这个程序段的属性。每一个程序段,它有一个描述符的特权级叫DPL。两个程序段要进行访问,一个程序段要去访问另外一个程序段,它们回去比较它们的DPL和RPL。这本身就是一个态的变换过程。

在这里插入图片描述

在Windows里面也提供了Ring0和Ring3之间通信的接口,Ring3层是应用层不能直接去访问设备的数据,它必须通过操作系统的代劳,操作系统工作在Ring0 上,Windows里面提供了DeviceIoControl这个函数可以让应用程序去访问设备的数据,上图代码是函数的原型,HANDLE hDevice 是要访问的设备,IplnBuffer是Ring3层的输入参数。应用程序输入参数的长度 nlnBufferSize是应用程序输入参数的长度,应用程序输入这样子的参数之后,操作系统在内层在Ring0层继续访问设备,把设备相应的状态和数据带回来给应用程序,IpOutBuffer这也是Ring0层返回来的参数 nOutBufferSize的长度。
这是Windows里面提供了这样一个接口来实现Ring0和Ring3之间的通信。
存储器
存储程序和数据的部件
分类
按存储器(半导体存储器)读写工作方式

  • RAM
  • ROM

按存储元的材料

  • 半导体存储器(常作主存)
  • 磁存储器(磁带,磁盘)
  • 光存储器(光盘)

存储器是用来存储数据的部件。
存储器可以按照不同的标准来分类,按照存储器的读写工作方式可以分为RAM和ROM,按照存储元的材料可以分为半导体存储器、磁盘、磁带还有光盘。
我们也可以按照与CPU的联系分为主存和辅存,主存是内存,辅存是外存比方说硬盘,主存和辅存的区分主要看能不能与CPU直接交换信息,也就是看存储设备有没有与CPU直接连接地址总线 数据总线和控制总线,主存是可以直接和CPU和三种主线直接相连的,辅存不可以和CPU直接交换信息。
存储体系
理想存储体系:速度快,容量大,成本低
实际存储体系

  • 寄存器

  • 高速缓存(CACHE)

  • 主存

  • 辅存
    在这里插入图片描述
    理想的存储体系是速度快。容量大,成本低,但实际上没有一个存储体系能够达到这个要求,实际的存储体系它是由不同类型的存储设备混搭而成的,所以这种计算机速度很快但容量小价格贵,这个辅存就是硬盘它容量大,但速度慢,程序不能直接运行,辅存的程序必须调度到主存才能运行,主存的容量,主存的速度主存的价格都适中,所以实际的存储体系是由这样多种存储设备混搭而成,他们的速度价格以及他们的容量上图有一个对比。

分级存储系统的工作原理
CPU读取指令或数据时的访问顺序
1.访问缓存(命中,HIT)
2.访问内存(没有命中,MISS)
3.访问辅存(缺页,PAGE_FAULT)
在这里插入图片描述
实际的存储体系他的工作原理。
首先CPU直接去访问高速缓存,如果CPU要访问的内容在高速缓存里面我们就叫命中,但是不是每一次都那么幸运,CPU访问的内存数据都在高速缓存里面有时候也会不在,那就是CPU没有命中,没有命中的话CPU就到主存里面去访问,主存里面也不一定会有CPU要访问的数据,这个时候就会产生所谓的缺页错误,发生缺页的话,操作系统就会从辅存上面把所缺的内容所缺的数据调到主存上面,再通过途径进入到CPU里面去。
2-3 中断机制
中断的定义

  • 是指CPU对突发的外部事件的反应过程或机制
  • CPU受到外部信号(中断信号)后,停止当前工作,转去处理该外部事件,处理完毕后回到原来工作的中断处(断点)继续原来的工作。

中断机制是计算机系统 非常基础的工作机制,在六十年代中期,在计算机领域出现了两大新技术,其中之一就是中断,中断的定义式CPU对突发事件的外部事件的反应过程或机制。
我们叫中断处叫做断点。处理完外部事件以后,CPU又回到原来中断处继续原来的工作。这样一种机制我们叫做中断。

在这里插入图片描述
CPU正在执行主程序,突然这个时候有个外部事件发生了,这个外部事件可能是有个外设,有一个信号产生,比如键盘、按键的操作。或者鼠标有一个操纵,总之一个外部事件产生了,CPU中断主程序的工作,进入到中断服务程序,中断服务程序是事先已经准备好的 ,专门用来处理外部事件的程序,这个已经事先就准备好了,CPU主程序工作就进入到中断服务程序里面,当中断服务程序运行完以后,CPU为这个外部事件服务完以后又回到了原来的断点,继续向下运行。这一种机制我们叫做中断。
CPU执行中断服务程序完回到断点叫中断返回。
引入中断的目的:

  • 实现并发活动
  • 实现实时处理
  • 故障自动处理
    引入中断的目的实现并发活;实现实时处理;实现故障自动处理。
    为什么可以实现并发活动呢?我们可以让CPU和外设并发,当外设工作完以后,我们可以让外设产生一个信号通知CPU去处理外部事件,如果没有中断机制的话我们就没办法让CPU和外设并行工作。我们也可以让两个进程并发,让两个程序并发运行,通过时钟的切换,然两个程序并发的使用CPU,时钟会产生中断信号,通知CPU让CPU的使用权切换到另外一个程序运行,再一个实现实时处理,实现故障自动处理都可以让终端机制来完成。
    中断的一些概念
    中断源和中断类型
  • 引起系统中断的事件称为中断源
  • 中断类型
    • 强迫性中断和自愿中断
      • 强迫性中断:程序没有预期:例:I/O、外部中断
      • 自愿中断:程序有预期的。例:执行访管指令

引起系统中断的事件称为中断源是什么原因引起了中断是什么设备引发了中断,我们称为中断源。
中断可以分为强迫性中断和自愿中断,所谓的强迫性中断是指程序没有预期,CPU并不知道这个程序什么时候发生,程序、程序员也没有预期这个中断什么时候会来临,这种中断叫做强迫性中断,比如说IO操作,外设在进行输入或输出,那外设会在什么时候进行输入和输出呢这个程序员不会提前预期,还有外设什么时候会发生异常这都是强迫性中断。
自愿中断就是程序员有预期的,程序员在程序里面刻意的,刻意安排了一条中断指令,程序员有预期的这叫自愿中断,访管指令就是这样的中断。
访管指令是一条中断指令,用来访问内核。

中断类型
外中断(中断)和内中断(俘获)

  • 外中断:由CPU外部事件引起,例:I/O,外部事情。
  • 内中断:由CPU内部事件引起。例:访问中断、程序中断
    外中断叫做中断,内中断叫做俘获,外中断指的是由CPU外部事件引起比如说I/O操作以及外设引发的事件。
    内中断是由CPU内部事件引起的,比如说访管中断,访管中断是程序员安排的指令,再一个就是程序中断由程序内部出错。
    外中断:不可屏蔽中断和可屏蔽中断
  • 不可屏蔽中断:中断的原因很紧要,CPU必须响应
  • 可屏蔽中断:中断原因不很紧要,CPU可以不响应
    对外中断来说还可以分为不可屏蔽中断和可屏蔽中断,不可屏蔽的中断是因为中断的原因很紧要,CPU必须要响应。还有一些中断原因不是很紧要,CPU可以不响应,叫可屏蔽中断。

中断的一些概念
断点

  • 程序中断的地方,将要执行的下一指令的地址
  • CS:IP
    断点是指程序中断的地方,程序中断的地方我们往往用将要执行的下一指令的地址来表示这个参数。
    现场
    程序正确运行所依赖的信息集合
  • 相关寄存器
    现场也叫上下文指的是当前这个程序能够正确运行,它所依赖的信息集合,这个信息集合主要指的是CPU内部相关的寄存器。发生中断的时候,CPU当前的寄存器内容是什么,这个我们要记住。因为当前寄存器的内容是这个程序能够正确运行的一个最重要的参数。
    现场的两个处理过程
  • 现场的保护:进入中断服务程序之前,栈
    - 现场的恢复:退出中断服务程序之后,栈
    现场有两个处理过程一个是对现场的保护,在进入中断服务程序之前,我们要把当前程序的现场保护起来,保护在一个特殊的地方,栈里面,栈是一个特殊的内存,采用先进后出的方式来访问,对于现场的顺序我们要保护在栈里面,因为这个现场数据将来我们是要还原的,将来这个程序,这个被中断的程序,它要继续运行的时候我们要把它现场数据还原,在它被破坏之前要把它先存放在栈里面。另外一个操作就是现场的恢复,退出中断服务程序之后,我们就要把先前保护在栈里面的现场还原到CPU里面,还原的过程就是一个拓扑操作。把栈里面的数据都拓扑到寄存器里面还原现场。

中断响应的过程

  • (1)识别中断源
  • (2)保护断点和现场
  • (3)装入中断服务程序的入口地址(CS:IP)
  • (4)进入中断服务程序
  • (5)恢复现场和断点
  • (6)中断返回:IRET

中断响应的过程第一步发生中断,识别中断源,这是谁产生的中断,第二步就是保护断点和现场以便将来恢复,装入中断服务程序的入口地址(CS:IP),把中断服务程序的入口地址送入到CS:IP中,这个过程是由硬件完成的不需要程序员来干预。第四步就是进入到中断服务程序里面,CS:IP就会自动会进入到中央服务程序。在中央服务程序完成以后,恢复现场和断点准备运行主程序,第六步中断返回。IRET的指定就是会回到原来的主程序,IRET这个操作就会把这个断点弹出到(CS:IP)进程里面,只要CS:IP把它更新为原来的断点,那么久意味着原来的程序得以继续运行。
中断响应的实质

  • 交换指令执行地址
  • 交换CPU的态

工作

  • 现场保护和恢复
  • 参考传递(通信)

中断响应的过程实际上就是交换指令执行地址的过程,在进入到中断服务程序之后CPU里面的CS:IP就发生了一个变换,交换了指令的执行地址。由原来主程序的地址转换到了中断服务程序的入口地址,另外一个是交换了CPU的态。中断响应的过程是在核态完成的,主程序在用户态交换了CPU的态。

中断响应的工作第一个是现场的保护和恢复,进入到中断服务程序,需要传递一些参数,中断服务程序完成之后呢 也有一些参数要返回给原来的主程序,所以还有一个参数的传递过程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统的逻辑结构 的相关文章

  • 鸿蒙是一个怎么样的操作系统,真的是安卓套壳吗?

    从鸿蒙项目正式推出以来 就一直有各自声音 有看好的 认为鸿蒙的出现将会成为一个智能终端设备操作系统的框架和平台 促进万物互联产业的繁荣发展 也有的人在唱衰 觉得鸿蒙发展不起来 甚至认为鸿蒙只是安卓的换皮 套壳 那事实是怎么样的 鸿蒙与安卓之
  • 微信群发图文消息步骤说明

    前段时间学习微信接口开发 心得与大家分享 第一步 调用 上传下载多媒体接口 上传图片 接收微信服务器返回结果 解析获取返回的url的值 等待备用 第二步 调用 上传图文消息素材 接口 截图中红色方框标记的thumb media id的值替换
  • WireShark常用过滤规则

    一 地址过滤 对源地址及目的地址过滤 ip src 192 168 0 1 ip dst 192 168 0 1 对源地址或者目的地址过滤 ip addr 192 168 0 1 排除某个地址数据包过滤 ip addr 192 168 0
  • Linux中使用pip安装库时出现Aborted (core dumped)问题解决方案

    作者 陈玓玏 在Linux中安装上pip后 通过pip install安装python库时出现这个问题 root DZG0370 mnt c Windows System32 pip3 install pandas Downloading
  • Inno Setup 如何让生成的setup.exe文件有管理员权限

    首先 在 Setup 段 PrivilegesRequired admin 然后 找到INNO安装目录下的SetupLdr e32文件 将程序中的Manifest更改一下 用reshacker这类工具改 这样运行程序的时候 Windows
  • php use not allowed,PHP Curl - Received HTTP/0.9 when not allowed

    问题 I stumbled over a weird behavior when I try to send a post HTTP 2 0 request to apples push service http2ch curl init
  • 哈工大操作系统实验二:系统调用的实现

    实验链接 文章目录 前言 做实验前一定要先拍个快照 操作系统实验环境的搭建请看如下链接 Ubuntu系统 Linux0 11环境搭建 一 实验内容 二 基础知识 三 实验步骤 注 因为实验一已经修改过启动文件 但此次实验需要完整的启动文件
  • 小白如何做好项目管理?看这里

    作为项目管理新手 你刚被安排负责一个重要的新项目 这是你的第一个项目 是一个重大的挑战 以下这些方法可以帮你有个好的开始 成功管理你的第一个项目 一 学习和培养能力 能力发展首先要突破不知道没有能力 认识项目管理是一个职业方向 通过了解项目
  • MySql Community Downloads 社区版下载地址

    https dev mysql com downloads mysql
  • Servlet+JSP+JavaBean开发模式(MVC)介绍

    好伤心 写登陆注册之前看见一篇很好的博文 没有收藏 然后找不到了 前几天在知乎上看见一个问题 什么时候感觉最无力 前两天一直想回答 尝试过google到的所有solve case 结果bug依然在 今天想回答 明明遇见过 就是找不到那篇文的
  • 深度学习 卷积神经网络即插即用的小插件

    卷积神经网络即插即用的小插件 前言 卷积神经网络设计技巧 小插件 STN ASPP Non local SE CBAM DCN v1 v2 BlurPool RFB ASFF 代码实现 前言 本篇博客主要介绍卷积神经网络中的即插即用的模块
  • Python日志库logging总结(最全的版本)

    转自 https cloud tencent com developer article 1354396 1 日志级别 Python 标准库 logging 用作记录日志 默认分为六种日志级别 括号为级别对应的数值 NOTSET 0 DEB
  • (前端)HTML之表格

    表格标签 table 的基本语法 table 表格容器tr 列td 单元格th 粗体caption 标题列 例子 table width 400 border 1 cellspacing 2 cellpadding 2 align left
  • python中两种getter和setter方法

    当给属性赋值的时候 使用实例 属性 属性值的方式显然把属性暴露出来了 并且也无法对属性值进行限制检查 java中提供了setter和getter方法 那么python是如何做的呢 在绑定属性时 如果我们直接把属性暴露出去 虽然写起来很简单
  • 【指针内功修炼】函数指针 + 函数指针数组 + 回调函数(二)

    文章目录 1 函数指针 2 函数指针数组 函数指针数组的用途 3 指向函数指针数组的指针 4 回调函数 冒泡排序 qsort 排序 qsort 排序整型数组 qsort 排序结构体 模拟实现 qsort 1 函数指针 函数指针 顾名思义 就
  • List转换为String

    public static void main String args List
  • JBOSS实践一:安装

    因为工作关系 需要接受一套基于JBOSS容器的应用 首先从JBOSS环境搭建开始 JBOSS环境可以在一台机器上运行 也可以在一台机器上部署多套JBOSS 一 目标 1 在一台机器上部署JBOSS 4 2 2 GA 原系统运行于此 2 在一
  • Ubuntu18.04安装pcl(过程/坑记录式教程)

    Ubuntu18 04安装pcl 1 下载pcl 2 安装依赖项 3 编译 4 安装 5 网上教程说要安装QT5和VTK 但按照本文的 本文记录了安装时出现的问题 出错的安装命令也记录了 建议浏览一遍再参考 不要错用了错误的指令 1 下载p
  • background属性介绍

    background属性在CSS中有较多的应用 主要用来设置背景颜色 图片 background属性可以分开写 也可以合并 建议合并减少代码量 1 background color 设置背景颜色 设置的背景颜色会填充元素的内容 内边距和边框
  • 【SpringBoot笔记39】SpringBoot + SockJS + Stomp实现WebSocket通信(建立连接、发送消息、订阅消息、断开连接)

    这篇文章 主要介绍SpringBoot SockJS Stomp实现WebSocket通信 建立连接 发送消息 订阅消息 断开连接 目录 一 WebSocket通信 1 1 前端环境 1 2 后端环境 1 3 添加WebSocket配置

随机推荐

  • 传统程序优化与终身程序优化

    传统程序优化示例一 cpu示例 3个方面浅谈程序优化 每一个程序员都有一个大梦想当初在学校实验室的时候 常常写一个算法 让程序跑着四处去晃荡一下回来 结果也就出来了 可工作后 算法效率似乎重要多了 毕竟得真枪实弹放到产品中 卖给客户的 很多
  • uni-app,文本实现展开、收起全文

    效果 思路 1 根据文本显示的布局中 每行大致能显示的文字个数 实例是大致每行26个文字 2 首先加载页面时 根据文字总长度判断是否超出自定义行数 来处理相应的数据 多余自定义行数 截取对应的文字个数做显示 代码与讲解 1 设置参数 scr
  • 【Docker】Docker快速入门,常用网址与常用命令

    目录 一 docker常用网址 建议收藏 docker官方公开库 Docker Hub docker官方网站 Home Docker docker菜鸟联盟教程 Docker 教程 菜鸟教程 二 docker常用命令 一 镜像使用 1 镜像操
  • Mastering Debugging in Visual Studio 2010 - A Beginner's Guide

    Mastering Debugging in Visual Studio 2010 A Beginner s Guide http www codeproject com Articles 79508 Mastering Debugging
  • 非常好用的自动化运维工具------ansible

    目录 一 ansible 简介 1 ansible 是什么 2 ansible 特点 3 ansible 架构图 二 ansible的配置部署 1 使用 yum 安装epel源和ansible 2 修改ansible的仓库文件 3 配置公私
  • 一图看懂 Unity函数执行顺序/Unit脚本生命周期

    温故而知新 有些函数过久了忘了调用顺序 发个文记一下 下边有对各个函数的解释 第一个场景加载 这些函数在场景开始时被调用 场景中的每个对象一次 Awake 这个函数总是在任何 Start 函数之前调用 也只是在一个预制件被实例化 如果游戏对
  • 二叉树交换左右子树的三种实现方式

    二叉树交换左右子树的三种实现方式 顺序存储结构 链式存储结构 顺序存储结构 交换左右子树实际上就是同层之间交换位置 在顺序存储结构下 先确定树的深度 再划分层 每个层内做交换即可 链式存储结构 递归实现很简单 非递归可以借助栈或队列辅助实现
  • 区块链数据库

    大家好 这里是链客区块链技术问答社区 链客 有问必答 区块链是互联网未来十年中举足轻重的技术 区块链 Blockchain 或者说分布式账本 DLT Distributed Ledger Technology 最早是起源于比特币的一个重要概
  • ruoyi框架时间范围range增加今日,近7日,近30日时间选择

    原先layui时间控件是不支持今日 近7日 近30日选择的 网上的解决方法是直接在引用的js中修改代码 这是一种方法 但是对于不能修改源代码的童鞋来说是不行的 所以一下解决方法诞生了 直接添加这三个按钮并和时间控件 laydate 有友好的
  • 【数字图像处理】图像形态学算法C语言实现(图像卷积,膨胀,腐蚀,开运算,闭运算,顶帽,黑帽,雕版,锐化)

    文章目录 一 图像卷积 1 图像卷积 2 数字信号处理中的卷积 3 数字图像处理中的卷积 二 图像卷积实现各种形态学运算 腐蚀 膨胀 形态学梯度 开运算 闭运算 顶帽 黑帽 雕版 锐化 li conv c main c 三 效果展示 原图
  • SPI转can芯片CSM300详解以及Linux驱动移植调试笔记

    更多嵌入式Linux干货 请关注 一口Linux 一 CSM300概述 CSM300 A 系列是一款可以支持 SPI UART 接口的CAN模块 1 简介 CSM300 A 系列隔离 SPI UART 转 CAN 模块是集成微处理器 CAN
  • Linux常用命令合集(二)

    file命令 该命令用于判断接在file命令后的文件的基本数据 因为在Linux下文件的类型并不是以后缀为分的 所以这个命令对我们来说就很有用了 gt file rumenz txt 查看rumenz txt的文件类型 rumenz txt
  • “泰迪杯”挑战赛 - 通过聚类方法对航空客运的客户进行细分

    目 录 挖掘目标 分析方法与过程 2 1 总体流程 2 2 具体步骤 步骤一 数据预处理 步骤二 群体聚类 步骤三 行为特征聚类 2 3 结果分析 第一类 第二类 第三类 结论 参考文献 1 挖掘目标 本次建模目标是在航空公司的海量会员数据
  • 分享几个好用的WP插件,让你的网站牛逼起来

    1 WP Rocket WPRocket缓存插件是目前最高效灵活的WordPress静态缓存插件 它可以优化你的JSCSS文件结构 减少多次请求 达到优化速度的目的 它还集成了图像延迟加载 对于想要最极致加速的用户来说是一个不错的选择 通过
  • Type Script 之 类型

    Type Script 中的类型有很多 常见的类型有 undefined null boolean number bigint string symbol void object unknown never any 其中基本类型有 void
  • java内存模型 堆栈_Java内存模型分析

    一 Java内存的构成 先上一个官方java document里的图 由上图可知 整块区域分为Young Generation Tenured Generation Permanent Generation 详细解释一下Young区 You
  • Laravel 表单验证器的常用的2种使用方法

    1 使用控制器的 validate 方法进行参数验证 场景一 前后端未分离 保存一篇新的博客文章 param Request request return Response public function store Request req
  • 【csv】csv文件存储上数据精度丢失问题

    最近发现较长的id信息在csv文件中会发生精度丢失 当然python直接处理数据是没问题的 只是csv显示有问题 case1 通常在Excel中输入数值时 如果超过11位 12位及以上 Excel就会用科学计数法显示该数值 如 123456
  • 让macOS支持读写NTFS格式的移动硬盘

    第一步 获知磁盘的名称 两种方法可以知道磁盘名称 第一种 当插入移动硬盘时 桌面上会出现移动硬盘的图标还有名称 第二种 打开终端 输入diskutil list 即可知道磁盘名称 由图中可知我的移动硬盘名称是 备份 第二步 打开终端 按照以
  • 操作系统的逻辑结构

    2 1 操作系统的逻辑结构 逻辑结构 OS的设计和实现思路 逻辑结构的种类 1 整体结构 2 层次式结构 3 微内核结构 客户 服务器结构 Client Server 操作系统作为一个大型软件 它的设计逻辑实现的思路 我们叫做操作系统的逻辑