软考高级之系统架构师系列之操作系统基础

news2024/11/29 4:48:59

概念

接口

操作系统为用户提供两类接口:操作一级的接口和程序控制一级的接口。操作一级的接口包括操作控制命令、菜单命令等;程序控制一级的接口包括系统调用。

UMA和NUMA

UMA,统一内存访问,Uniform Memory Access,指所有的物理存储器被均匀共享,即处理器访问它们的时间是一样的。UMA亦称作统一寻址技术或统一内存存取架构。这种系统因为高度的资源共享也被称为紧耦合系统(Tightly Coupled System)。

NUMA,非统一内存访问架构,Non-Uniform Memory Access,是一种为多处理器的电脑设计的内存架构,内存访问时间取决于内存相对于处理器的位置。在NUMA下,处理器访问它自己的本地内存的速度比非本地内存(内存位于另一个处理器,或者是处理器之间共享的内存)快一些。

进程

组成:进程控制块PCB(唯一标志)、程序(描述进程要做什么)、数据(存放进程是所需要的数据)

临界资源:各进程间需要以互斥方式访问的资源

临界区:进程中对临界资源操作的那段程序

互斥信号量:初值为1

同步信号量:初值为共享资源的数量

PCB

进程控制块,其组织方式有:

  • 线性表方式:不论进程的状态如何,将所有的PCB连续地存放在内存的系统区。适用于系统中进程数目不多的情况
  • 索引表方式:该方式是线性表方式的改进,系统按照进程的状态分别建立就绪索引表、阻塞索引表等
  • 链接表方式:系统按照进程的状态将进程的PCB组成队列,从而形成就绪队列、阻塞队列、运行队列等。

状态切换

参考进程、线程和协程的区别与联系

PV操作

信号量

在并发系统中,信号量是用于控制公共资源访问权限的变量。信号量用于解决临界区问题,使得多任务环境下,进程能同步运行。此概念是由荷兰计算机科学家Dijkstra在1962年左右提出的。信号量仅仅跟踪还剩多少资源可用,不会跟踪哪些资源是可用的。

信号量机制,处理进程同步和互斥的问题。信号量的一大特征就是它的值不能通过PV操作以外的方式更改,只能被两个标准的原语wait(s)signal(s)访问,也可记为P(s)V(s)。信号量数值为负时,表明有进程在等资源。

信号量提供一种很方便的方法来确保对共享变量的互斥访问。基本思想是将每个共享变量与一个信号量s(初值为1)联系起来,然后用P(s)V(s)操作将相应的临界区包围起来。以这种方式来保护共享变量的信号量叫做二元信号量,因为它的值总是0和1。一个被用作一组可用资源的计数器的信号量被称为计数信号量。

PV操作

计数信号量(Counting Semaphores)通常有两种操作,记做P和V,P操作减少信号量S,V操作增加信号量S:

  • P操作:P(s),wait,申请资源,信号量数值减一并且立即返回,S -= 1。S>=0,此进程执行;S<0,此进程置为阻塞(等待、挂起)状态直到s变为非0,将其插入阻塞队列。进入临界区时执行P操作
  • V操作:V(s),signal,释放资源,信号量数值加一,S += 1。S>0,此进程继续执行;S<=0,从阻塞队列唤醒一个,并插入就绪队列。退出临界区时执行V操作

P、V都来源自荷兰语,V通常解释为verhogen、increase。P则有多种解释:proberen、to test、to try、passeren、pass、pakken、grab。

在Dijkstra最早的论文中,P表示passering(passing),V表示vrijgave(release)。

应用场景:

  • 生产者-消费者问题
  • 哲学家就餐问题

实战

信号量

假设系统中有n个进程共享3台打印机,任一进程在任一时刻最多只能使用1台打印机。若用PV操作控制n个进程使用打印机,则相应信号量S的取值范围为();若信号量S的值为-3,则系统中有()个进程等待使用打印机。

解析:
假设系统中有n个进程共享3台打印机, 意味着每次只允许3个进程进入互斥段,则信号量的初值应为3,最小值为-(n-3),因此取值范围:3, 2, 1, 0, -1, ..., -(n-3)

信号量S的值为-3,则系统中有3个进程等待使用打印机。

信号量S的物理意义为:当S>0时,表示资源的可用数;当S<0时,其绝对值表示等待资源的进程数。

PV操作

进程P1、P2、P3、P4和P5的前趋图如下:
在这里插入图片描述
若用PV操作控制进程P1〜P5并发执行的过程,则需要设置5个信号S1、S2、S3、S4和S5,进程间同步所使用的信号量标注在上图中的边上,且信号量S1〜S5的初值都等于零,初始状态下进程P1开始执行。下图中a、b和c处应分别填写(),d和e处应分别填写(),f和g处应分别填写()。
在这里插入图片描述
解析:
因为P1是P2和P3的前驱,当P1执行完应通知P2和P3,应采用V(S1)V(S2)操作分别通知P2和P3,故a处应填写V(S1)V(S2);又因为P2是P1的后继,当P2执行前应测试P1是否执行完,应采用P(S1)操作测试P1是否执行完,故b处应填写P(S1);P2是P4和P5的前驱,当P2执行完应通知P4和P5,应使用V(S3)V(S4)操作分别通知P4和P5,故c处应填写V(S3)V(S4)。

因为P3是P1的后继,当P3执行前应测试P1是否执行完,应采用P(S2)操作测试P1是否执行完,故d应填写P(S2);P3是P5的前驱,当P3执行完应通知P5,应采用V(S5)操作通知P5,故e处应填写V(S5)。

P4是P2的后继,当P4执行前应测试P2是否执行完,应采用P(S3)操作分别测试P2是否执行完,故f处应填写P(S3);又因为P5是P2和P3的前驱,当P5执行前应测试P2和P3是否执行完,应采用P(S4)P(S5)操作分别测试P2和P3是否执行完,故g处应填写P(S4)P(S5)。

机票

某航空公司机票销售系统有n个售票点,该系统为每个售票点创建一个进程 P i ( i = 1 , 2 , … , n ) P_i(i=1,2,…,n) Pi(i=1,2,,n)管理机票销售。假设 T j ( j = 1 , 2 , … , m ) T_j(j=1,2,…,m) Tj(j=1,2,,m)单元存放某日某航班的机票剩余票数,Temp为 P i P_i Pi进程的临时工作单元,x为某用户的订票张数。初始化时系统应将信号量S赋值为()。 P i P_i Pi进程的工作流程如下图所示,若用P操作和V操作实现进程间的同步与互斥,则图中空(a),(b),(c)处应分别填入()。
在这里插入图片描述
解析:
公共数据单元是一个临界资源,最多允许1个终端进程使用,因此需要设置一个互斥信号量S,初值等于1。

进入临界区时执行P操作,退出临界区时执行V操作。答案应该是:P(S),V(S)和V(S)。

死锁

进程死锁的四个必要条件:

  • 资源互斥
  • 每个进程占用资源并等待其他资源
  • 系统不能剥夺进程资源
  • 进程资源图是一个环路

死锁进程计算:
n个进程、每个进程都需要R资源
发生死锁的最大资源数n *(R - 1)
不发生死锁的最小资源数n *(R - 1) + 1

存储

存取方式

存储器中数据常用的存取方式:

  • 顺序存取:存储器的数据以记录的形式进行组织。对数据的访问必须按特定的线性顺序进行。磁带存储器采用顺序存取的方式。
  • 直接存取:与顺序存取相似,直接存取也使用一个共享的读写装置对所有的数据进行访问。但是,每个数据块都拥有唯一的地址标识,读写装置可以直接移动到目的数据块的所在位置进行访问。存取时间也是可变的。磁盘存储器采用直接存取的方式。
  • 随机存取:存储器的每一个可寻址单元都具有自己唯一的地址和读写装置,系统可以在相同的时间内对任意一个存储单元的数据进行访问,与先前的访问序列无关。主存储器采用随机存取的方式。
  • 相联存取:相联存取也是一种随机存取的形式,但是选择某一单元进行读写是取决于其内容而不是其地址。与普通的随机存取方式一样,每个单元都有自己的读写装置,读写时间也是一个常数。使用相联存取方式,可以对所有的存储单元的特定位进行比较,选择符合条件的单元进行访问。为了提高地址映射的速度,Cache采取相联存取的方式。

LRU算法:最近最少使用,理论依据是局部性原理。要求较多硬件支持,成本高。
CLOCK算法:LRU近似算法。
简单CLOCK算法:循环队列,每页有访问位,淘汰访问位为0的页。
改进型CLOCK算法:同时考虑访问位与修改位。
时间局部性:刚被访问的内容,立即又被访问。
空间局部性:刚被访问的内容,临近的空间很快被访问。

程序访问具有时间局部性,即最近将要用的信息很可能是正在使用的信息
程序访问具有空间局部性,即最近将要用的信息很可能与正在使用的信息在存储空间上是相邻的
程序访问局部性是构成层次结构的存储系统的主要依据

分页存储管理

  1. 逻辑页分为页号和页内地址,页内地址就是物理偏移地址,页号通过查询页表,得知页号对应的物理块号,块号 + 偏移地址,得出真正的物理地址
  2. 如果该页尚未调入内存,则产生缺页中断,以装入所需的页

分区存储组织,页式存储,段式存储,段页式存储

页面淘汰算法

  • 最优(Optimal,OPT)算法
  • 随机(RAND)算法
  • 先进先出(FIFO)算法:有可能产生抖动与Belady奇异现象。

抖动

如果分配给进程的存储块数量小于进程所需要的最小值,进程的运行将很频繁地产生缺页中断,这种频率非常高的页面置换现象称为抖动。Thrashing,又叫颠簸。
产生原因:进程的内存量不足。因而分配页面太少,总是缺页。
在请求分页存储管理中,可能出现这种情况,即对刚被替换出去的页,立即又要被访问。需要将它调入,因无空闲内存又要替换另一页,而后者又是即将被访问的页,于是造成了系统需花费大量的时间忙于进行这种频繁的页面交换,致使系统的实际效率很低,严重导致系统瘫痪,这种现象称为抖动现象。

解决办法

  • 使用更好的页替换算法;
  • 减少运行的进程数;
  • 增大内存

Belady奇异现象

指采用页面置换FIFO算法时,如果对一个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多,但缺页率反而提高的异常现象,这是一个违反直觉的现象。

原因:所使用的FIFO算法不够好。

文件管理

记录文件有顺序文件、索引顺序文件、索引文件和直接文件。

位示图法

某文件管理系统在磁盘上建立位示图(bitmap),记录磁盘的使用情况。
若磁盘上物理块的编号依次为:0、1、2、…;系统中的字长为32位,字的编号依次为:0、1、2、…,字中的一位对应文件存储器上的一个物理块,取值0和1分别表示空闲和占用。假设操作系统将2053号物理块分配给某文件,那么该物理块的使用情况在位示图中编号为64,系统应该将该字的位号5的位置“1"
2053号物理块对应字的编号是64号,前面的0-2047位已经占满,因此第64号字的第0位是2048,第1位是2049,第2位是2050,第3位2051,第4位2052,第5位2053。
在这里插入图片描述

索引文件

结构示意图
在这里插入图片描述
索引文件结构的扩展机制能够极大扩充现有容量,是操作系统中比较特殊的文件结构。

一般的索引文件结构由13个结点组成,其中0 - 9个结点为直接的物理盘块(直接索引),第10个结点是一级间接索引,第11个结点是二级间接索引,第12个结点是三级间接索引:
在这里插入图片描述
如果一个存储结构不使用索引,其存储量就是物理块数 * 单位大小。如果每个物理块的单位大小为4K,则总空间为52K。

如果引入一级间接索引,索引指向具体的物理块号,
在这里插入图片描述

如果一个地址占用 4 个字节,一个物理盘块有 4KB 容量,则在第 10 个物理块中就可以存放 1024 份地址,则10 号物理块可存储 1024 份容量,即1024 X 4KB = 4MB容量。

如果引入二级间接索引,即索引指向中间索引,中间索引再指向具体的物理块号,

在这里插入图片描述
如果一个地址占用 4 个字节,一个物理盘块有 4KB 容量,则在第 11 个物理块中就可以存放 1024 份地址,每份子地址可以再存储 1024 份二级地址,则11 号物理块可存储 1024 * 1024 份容量,就是 1024 X 1024 X 4KB = 4GB 的容量。
三级间接索引依次类推。

实战

某⽂件系统采⽤多级索引结构,若磁盘块的⼤⼩为4K字节,每个块号需占4字节,采⽤⼆级索引结构时的⽂件最⼤长度可占⽤( )个物理块。
答案:1024*1024
解析:每个索引表可以存4K/4=1024个块号,所以⼆级索引可对应1024*1024个物理块。

现有一个文件系统采用索引结点管理模式,物理块大小为1KB。每个索引结点有32KB的存储空间,每个地址项占4字节,磁盘索引块和磁盘数据块大小均为1KB。其中0-4用直接地址索引,5-6用一级间接地址索引,7用二级间接地址索引,逻辑块号为5和261的物理块号在哪里?
答案:6、7的第一个字块。

解析:
逻辑块号从0开始编码,物理块号从一开始编码,所以逻辑块号5就代表第六块。
每个地址项占4字节,磁盘索引块大小均为1KB,所以一个物理块可以存放256份地址。
1KB=1024字节,1024字节/(4字节/块)=256块。
第261个逻辑块号的物理块号位置:
在这里插入图片描述

磁盘

基本概念

在这里插入图片描述
盘面号(磁头号):0 ~ M-1;由于一个盘面上只有一个磁头,所以盘面号也叫作磁头号
柱面号(磁道号):0 ~ L-1;磁道编号通常是从外沿向内进行编号
扇区号:1 ~ N;对于同一条磁道可以分为若干扇区,对于扇区分成三个字段

标识符字段:存放扇区的标识信息
校验字段:检验磁盘读写操作的正确性
数据字段:存放数据信息

存储容量计算公式
存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数

扇区编址方式

  • CHS方式:柱面/磁头/扇区,××磁道(柱面),××磁头,××扇区,DOS中称为绝对扇区表示法。
  • LBA方式:相对扇区号,以磁盘第一个扇区(0柱面、0磁头、1扇区)作为LBA的0扇区,后面的扇区依次编号

LBA扇区号与CHS间的转换

  • CHS转换为LBA:若L、M、N分别表示一个磁盘的柱面数(磁道数)、盘面数(磁头数)、扇区数,则第i柱面j磁头k扇区所对应的LBA扇区号为: L B A = ( i ∗ M ∗ N ) + ( j ∗ N ) + k − 1 LBA=(i*M*N)+(j*N)+k-1 LBA=(iMN)+(jN)+k1
  • LBA转换为CHS:若知道LBA扇区号,则对应的柱面号、磁头号、扇区号分别是:
    • 柱面号: i = i n t ( L B A / ( M ∗ N ) ) i=int(LBA/(M*N)) i=int(LBA/(MN))
    • 磁头号: j = [ L B A m o d ( M ∗ N ) ] / N j=[LBAmod(M*N)]/N j=[LBAmod(MN)]/N
    • 扇区号: k = [ L B A m o d ( M ∗ N ) ] m o d N + 1 k=[LBAmod(M*N)]modN+1 k=[LBAmod(MN)]modN+1

磁盘类型

按照磁头是否需要移动进行分类:

  • 固定头磁盘:对于同一盘面上的不同磁道,都有相应位置固定的磁头进行读写,如上图中的黑色磁头和蓝色磁头分别读取一个磁道,对多条磁道进行读写的时候,磁头不需要移动位置。所以对于一个盘面上的多条磁道可以并行进行读取,访问速度较快。同样价格也较高
    在这里插入图片描述
  • 移动头磁盘:对于移动头磁盘,它的磁头是可以沿着径向臂进行径向移动,所以只需要使用一个磁头就可以访问所有的磁道。但是同一时间只能访问一个磁道,只能实现顺序读写,读写速度较慢,造价较低。计算机中使用的磁盘大多数都是移动头磁盘
    在这里插入图片描述

磁盘访问时间

以移动头磁盘为例

寻道时间Ts:把磁头移动到指定磁道上所经历的时间。
T s = m ∗ n + s T_s=m*n+s Ts=mn+s
m:一般磁盘:0.2~0.3;高速磁盘:m≤0.1
s:磁臂启动时间,约为2ms~3ms

磁盘读写操作中绝大部分时间都是寻道时间,所以对寻道时间进行优化可以有效的大幅减少访问时间。

旋转延迟时间Tr:指定扇区移动到磁头下面所经历的时间。
在这里插入图片描述
也就是要读取的蓝色扇区移动到黑色磁头下面所要经历的时间。旋转延迟时间最长为 1 r \frac{1}{r} r1,最短为0。平均旋转延迟时间为 T r = 1 2 r T_r=\frac{1}{2r} Tr=2r1r表示转速。

传输时间Tt:把数据从磁盘读出或向磁盘写入数据所经历的时间。
T t = b r N T_t=\frac{b}{rN} Tt=rNb
b表示要读写的字节数,N表示一条磁道上总的字节数

因此,可将磁盘访问时间 T a T_a Ta表示为:
T a = T s + 1 2 r + b r N T_a=T_s+\frac{1}{2r}+\frac{b}{rN} Ta=Ts+2r1+rNb

磁盘调度

当有大量磁盘I/O请求时,恰当选择调度顺序,以降低完成这些I/O服务的总时间。

磁盘调度方式主要有以下两种:

  • 移臂调度:当同时有多条磁道访问请求时,确定磁道访问顺序,以减少平均寻道时间
  • 旋转调度:当一条磁道上有多个扇区访问请求时,确定扇区访问顺序,以减少旋转延迟时间。按照扇区距离磁头的位置的偏差来进行调度。

旋转调度算法较为简单,只是按照扇区距离磁头的位置的偏差来进行调度。
在这里插入图片描述

磁盘调度算法

主要有两类:

  • 移臂调度:在满足一个磁盘请求时,总是选取与当前移动臂前进方向上最近的那个请求,使移臂距离最短
  • 旋转调度:在满足一个磁盘请求时,总是选取与当前读写头旋转方向上最近的那个请求,是旋转圈数最少

移臂调度算法

FCFS

先来先服务,First-Come First Served

假设当前磁道在100号磁道,磁头正向磁道号增加的方向(由外向里)移动。现依次有如下磁盘请求队列:23, 376, 205, 132, 61, 190, 29, 4, 40

则磁盘调度顺序为:23, 376, 205, 132, 61, 190, 29, 4, 40

寻道距离:Ts = (100-23) + (376-23) + (376-205) + (205-132) + ... + (40-4)

平均寻道距离 = Ts / 9

由于先来新服务算法并没有对磁盘访问进行优化,所以它可能会得到比较长的寻道距离。

SSTF

最短寻道时间优先算法,在选择下一条磁道的时候总是访问与当前磁盘距离最近的磁盘进行访问。

对于上例,其磁盘调度顺序为:132, 190, 205, 61, 40, 29, 23, 4, 376

寻道距离:Ts = (132-100) + (190-132) + (205-190) + ... + (23-4) + (376-4)

最短寻道距离优先可以保障每一次的寻道距离最短,但是不能够保障最后系统得到的平均寻道距离最短。

存在的问题:

  • 不能保证平均寻道距离最短;
  • 会产生饥饿现象; 如果系统不断的出现在100号磁道附近的磁道访问请求,则原先较远的磁道请求如205, 376 就会处于很长时间的等待中
  • 影响磁盘的机械寿命:不考虑磁头的移动方向,可能会造成磁盘频繁的改变其磁头运动方向。从而影响磁盘的机械寿命
SCAN

扫描算法,又称为电梯算法,是目前操作系统中用的比较广泛的一种磁盘移臂调度算法。其在对下一条磁道进行选择时,需要判断:

  • 欲访问磁道与当前磁道的距离
  • 磁头当前的移动方向,即:保持处于磁道号增加或减少状态

同样,对于上例,其磁盘调度顺序为:132, 190, 205, 376, 61, 40, 29, 23, 4

寻道距离:Ts = (132-100) + (190-132) + (205-190) + (376-205) + (376-61) + (61-40) +... + (23-4)

N-Step-SCAN

N步扫描算法,为了克服扫描算法和最短寻道时间有限算法的磁臂粘着现象而引入的。

磁臂粘着现象就是指当系统不断的提出对当前磁道的访问,那么磁头会一直处于该磁道上进行磁道访问请求,导致其它磁道的访问被推迟的现象。

N步扫描算法的算法思想:将磁盘请求队列分成若干个长度为N的子队列,磁盘调度将按FCFS算法依次处理这些子队列; 而每处理一个子队列时又采用SCAN算法。

如对于上例,若其子队列的长度为4,则可以分为3个队列:
在这里插入图片描述
它就会首先处理第一个队列中的四个磁道请求,再处理第二个队列和最后的第三个队列。其对于每一个队列的处理都是按照扫描算法来进行处理。

FSCAN

该算法实质上是N步SCAN算法的简化, 它只将磁盘请求队列分成两个子队列:

  • 由当前所有请求磁盘形成的队列,由磁盘调度按SCAN算法进行处理
  • 在扫描期间,将新出现的所有磁盘I/O请求, 放入另一个等待处理的请求队列

如上例,先把所有的磁盘请求放在第一个队列中,对其应用扫描算法进行磁盘调度。若访问过程中出现的新的磁盘请求就放在下面的新队列中,当第一个队列全部访问完,再处理第二个队列。

旋转调度算法

当同一磁道(柱面)上有多个扇区请求时,总是选取与当前读写头最近的那个I/O请求,使旋转圈数最少。

例:对磁盘访问的5个请求,若磁头在1号柱面,先按SCAN算法做移臂调度(柱面号排序),再进行旋转调度(块号排序),则调度顺序如下:
在这里插入图片描述

实战

在磁盘调度管理中,应先进行移臂调度,再进行旋转调度。假设磁盘移动臂位于21号柱面上,进程的请求序列如下表所示。如果采用最短移臂调度算法,那么系统的响应序列应为()。

4个备选项为:
②⑧③⑤⑦①④⑥⑨
②③⑧④⑥⑨①⑤⑦
②⑧③④⑤①⑦⑥⑨
①②③④⑤⑥⑦⑧⑨

请求序列柱面号磁头号扇区号
1789
2363
2396
32105
1784
32310
1779
23104
38108

解析:
应先进行移臂(对应柱面)调度,再进行旋转(对应磁头、扇区)调度。由表可知
①⑤⑦在17柱面(21-17=4)
②③⑧在23柱面(23-21=2)
④⑥在32柱面(32-21=9)
因此按最短移臂算法,应该是23柱面、17柱面、32柱面、38柱面。应该是②⑧③⑤⑦①④⑥⑨。

任务调度

前驱图

实战

某计算机系统中有一个CPU、一台扫描仪和一台打印机。现有三个图像处理任务,每个任务有三个程序段:扫描 S i S_i Si,图像处理 C i C_i Ci和打印 P i P_i Pi i = 1 , 2 , 3 i=1, 2, 3 i=1,2,3。下图为三个任务各程序段并发执行的前驱图,其中,()可并行执行,()的直接制约,()的间接制约。
在这里插入图片描述
解析:
前趋图是一个有向无循环图,图由结点和结点间的有向边组成,结点代表各程序段的操作,而结点间的有向边表示两程序段操作之间存在的前趋关系(->)。两程序段 P i P_i Pi P j P_j Pj的前趋关系表示成 P i − > P j P_i ->P_j Pi>Pj,其中 P i P_i Pi P j P_j Pj的前趋, P j P_j Pj P i P_i Pi的后继,其含义是 P i P_i Pi执行完毕才能由 P j P_j Pj执行。

可见,S1执行完毕后,计算C1与扫描S2可并行执行;C1与S2执行完毕后,打印P1、计算C2与扫描S3可并行执行;P1、C2与S3执行完毕后,打印P2与计算C3可并行执行。

直接制约:
间接制约:

可见:
直接制约:C1和P1受到S1、C2和P2受到S2、C3和P3受到S3
间接制约:S2和S3受到S1、C2和C3受到C1、P2和P3受到P1

参考

  • 操作系统-文件系统-磁盘管理

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

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

相关文章

搞清Lighttpd、webserver、CGI、fastCGI这几个概念

一、webserver&#xff1a; 网页浏览也是网络通信&#xff0c;浏览器相当于TCPclient客户端程序&#xff0c;和浏览器相对应的是机房里运行的网站服务器&#xff0c;里面运行着TCPserver服务端程序&#xff0c;因为网页传输使用的是HTTP协议&#xff08;加密的是HTTPS协议&…

MySQL连接的原理⭐️4种优化连接的手段性能提升240%

MySQL连接的原理⭐️4种优化连接的手段性能提升240%&#x1f680; 前言 上两篇文章我们说到MySQL优化回表的三种方式&#xff1a;索引条件下推ICP、多范围读取MRR与覆盖索引 MySQL的优化利器⭐️索引条件下推&#xff0c;千万数据下性能提升273%&#x1f680; MySQL的优化…

Midjourney保姆级入门教程

文章目录 一、Midjourney注册二、新建自己的服务器三、开通订阅 AI绘画即指人工智能绘画&#xff0c;是一种计算机生成绘画的方式。是AIGC应用领域内的一大分支。 AI绘画主要分为两个部分&#xff0c;一个是对图像的分析与判断&#xff0c;即“学习”&#xff0c;一个是对图像的…

【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入

引言 在上一篇中我们介绍了MySQL ALTER命令及序列使用&#xff1b;在开发中&#xff0c;对MySQL重复数据的处理是十分重要的。这一篇我们使用命令行方式来帮助读者掌握MySQL中重复数据的操作。 上一篇链接&#xff1a;【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令…

02【保姆级】-GO语言开发注意事项(特色重点)

02【保姆级】-GO语言开发注意事项&#xff08;特色重点&#xff09; 一、Go语言的特性1.1 第一个hello word&#xff08;详解&#xff09;1.2 开发编译。&#xff08;重要点 / 面试题&#xff09;1.3 开发注意事项1.4 GO语言的转义字符1.5 注释1.6 API 文档 一、Go语言的特性 …

Libevent网络库原理及使用方法

目录 1. Libevent简介2. Libevent事件处理流程3. Libevent常用API接口3.1 地基——event_base3.2 事件——event3.3 循环等待事件3.4 自带 buffer 的事件——bufferevent3.5 链接监听器——evconnlistener3.6 基于event的服务器程序3.7 基于 bufferevent 的服务器和客户端实现 …

SpringBoot源码透彻解析—bean生命周期

先跟一段debug再看总结&#xff1a; 1 创建实例 InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation&#xff08;自定义一个对象或者代理对象&#xff09;createBeanInstance&#xff08;创建实例&#xff09;MergedBeanDefinitionPostProcessor.postProcess…

Selenium 常用元素操作

常用浏览器操作 1、初始化浏览器会话 from selenium import webdrive 初始化浏览器会话--谷歌 driverwebdrive.Chrome() 2、浏览器最大化操作 driverwebdriver.Chrome() 3、设置浏览器窗口大小 driver.set_window_size(500,780) 4、关闭浏览器 driver.quit() 常用页面…

Python的网络编程一篇学透,使用Socket打开新世界

目录 1.网络概念 2.网络通信过程 2.1.TCP/IP 2.2.网络协议栈架构 3.TCP/IP介绍 3.1.ip地址 3.2.端口号 3.3.域名 4.Python网络编程 4.1.TCP/IP 4.2.socket的概念 4.3.Socket类型 4.4.Socket函数 4.5.Socket编程思想 5.客户端与服务器 5.1.tcp客户端 6.网络调试…

数据库概论

目录 什么是数据库数据库的概念模型层次模型网状模型关系模型 为什么要使用关系型数据库完整性约束结构化查询语言SQL基本语句 什么是数据库 考虑这些问题&#xff1a;当用户使用软件计算时&#xff0c;如果想要保存计算结果或者想选择不同的题目&#xff0c;是否要保存、读取…

C#高级--IO详解

零、文章目录 IO详解 1、IO是什么 &#xff08;1&#xff09;IO是什么 IO是输入/输出的缩写&#xff0c;即Input/Output。在计算机领域&#xff0c;IO通常指数据在内部存储器和外部存储器或其他周边设备之间的输入和输出。输入和输出是信息处理系统&#xff08;例如计算器&…

Spring Cloud应用- Eureka原理、搭建

初期对Spring Cloud的学习以应用搭建为主&#xff0c;所以内容不会太枯燥。 一直以来&#xff0c;自以为Spring全家桶的学习中&#xff0c;Spring framework是基础中的基础&#xff0c;部分内容也还是必须要读源码去理解底层原理&#xff0c;SpringMVC、SpringBoot&#xff0c…

基于PESdk和EasyModbus实现录波控制逻辑和数据传输

文章目录 0. 概要1. 录波功能简介1.1 功能框架1.2 录波控制逻辑1.3 手动录波数据传输流程1.4 故障录波传输流程 2 C语言应用程序接口&#xff08;API&#xff09;2.1 EasyModbus接口2.2 PESdk 3 录波功能的实现3.1 功能码定义3.1.1 公共功能码3.1.2 用户自定义功能码3.1.3 保留…

维修服务预约小程序的效果如何

生活服务中维修项目绝对是需求量很高的&#xff0c;如常见的保洁、管道疏通、数码维修、安装、便民服务等&#xff0c;可以说每天都有生意&#xff0c;而对相关维修店企业来说&#xff0c;如何获得更多生意很重要。 接下来让我们看看通过【雨科】平台制作维修服务预约小程序能…

XX棋牌架设指南

一、环境要求&#xff1a; 1.服务器要求&#xff1a;WINDOWS2008或更高版本。 2.数据库要求&#xff1a;MS SQL SERVER 2008 R2或更高版本。 3.服务器需要安装IIS。 二、游戏部署步骤&#xff1a; 1.解压文件至服务器数据盘&#xff0c;此处以D盘为例进行说明。 2. 目录说…

树结构及其算法-用链表来实现二叉树

目录 树结构及其算法-用链表来实现二叉树 C代码 树结构及其算法-用链表来实现二叉树 以链表实现二叉树就是使用链表来存储二叉树&#xff0c;也就是运用动态分配内存和指针的方式来建立二叉树。 使用链表来表示二叉树的好处是节点的增加与删除操作相当容易&#xff0c;缺点…

MATLAB野外观测站生态气象数据处理分析实践应用

1.基于MATLAB语言 2.以实践案例为主&#xff0c;提供所有代码 3.原理与操作结合 4.布置作业&#xff0c;答疑与拓展 示意图&#xff1a; 以野外观测站高频时序生态气象数据为例&#xff0c;基于MATLAB开展上机操作&#xff1a; 1.不同生态气象要素文件的数据读写与批处理实现 …

Ubuntu18.04系统镜像制作

安装使用systemback # 添加源 sudo add-apt-repository --remove ppa:nemh/systemback sudo add-apt-repository "deb http://ppa.launchpad.net/nemh/systemback/ubuntu xenial main"# 下载 sudo apt update sudo apt install systemback打开systemback,点击创建li…

加州大学提出 PromptAgent 帮忙我们高效的使用 ChatGPT

本心、输入输出、结果 文章目录 加州大学提出 PromptAgent 帮忙我们高效的使用 ChatGPT前言加州大学团队提出了可以自动优化 Prompt 的框架 —— PromptAgentPromptAgent 原理论文 实例介绍PromptAgent 框架设计PromptAgent 的策略优化过过程PromptAgent 的结果是否具备普适性弘…

[Docker]四.Docker部署nodejs项目,部署Mysql,部署Redis,部署Mongodb

一.部署nodejs项目,映射端口,挂载数据卷 可以到https://hub.docker.com/去搜索node镜像,然后下载,也可以直接通过docker pull node下载镜像,然后用这个node镜像启动容器node,这样系统就集成了node服务了,在这里挂载www/node目录到容器中,并指定端口映射,运行nodejs程序,安装npm…