【操作系统考研】2进程管理(1)

在翻看操作系统知识框架的时候,对一些概念的理解还比较模糊,现在我来理清他们的关系。

操作系统、处理器、进程、线程、内存、存储器、设备、文件的关系

咱们可以把计算机系统想象成一个大工厂,来理解这些概念之间的关系。

操作系统:就像是工厂的大总管。它负责安排各项工作,决定哪个工人(进程或线程)什么时候使用什么机器(处理器),管理仓库(内存和存储器)的货物存放和取出,协调各个车间(设备)的运作,还负责整理和管理工厂里的各种文件资料。

处理器:相当于工厂里的核心动力设备,比如大型的发电机。它提供强大的动力,让各种工作能够快速进行。操作系统会根据需要安排不同的工人(进程或线程)来使用这个强大的动力设备干活。

进程:可以理解为工厂里的一个大项目组。这个项目组有自己独立的工作任务、工作场地(内存空间)和工具。项目组里可能有很多不同的具体工作在同时进行。

线程:是进程这个项目组里的具体工作人员。他们共同为完成项目组的任务而努力,共享项目组的资源,但又可以独立地执行不同的小任务。

内存:就像是工厂里的临时工作区。工人(进程或线程)在这里快速地进行工作,存放一些马上要用的工具和材料。但是这个工作区空间有限,而且一旦停电(关机),这里的东西就会消失。

存储器:相当于工厂的大仓库。可以长期存放各种货物(数据和程序),即使停电了,东西也还在。需要的时候,大总管(操作系统)会从仓库里把东西拿到临时工作区(内存)供工人使用。

设备:比如键盘、鼠标、显示器等就像是工厂里的各种特殊车间或者工具。它们在大总管(操作系统)的协调下,和工人(进程或线程)配合完成各种特定的任务。

文件:可以看作是工厂里的各种资料、图纸和记录。它们被存放在仓库(存储器)里,大总管(操作系统)可以安排工人(进程或线程)去查阅、修改或者创建这些文件。


1. 进程

1.1. 定义

进程是并发执行的程序在一个数据集合上的执行过程

进程(Process)是计算机中的程序的一次执行,是系统进行资源分配的基本单位,是操作系统结构的基础。

1.2. 特性

动态性、并发性、独立性、异步性、结构性

1.3. 组成

1.3.1. 进程控制块(PCB)

定义:为了描述控制进程的运行,系统中存放进程的管理和控制信息的数据结构称为进程控制块(PCB Process Control Block)。

重要性:PCB是进程实体的一部分,是操作系统中最重要的数据结构。PCB是进程的唯一标识。

Q:为什么说PCB是进程的唯一标识?

A:在进程整个生命周期中,系统总是通过PCB对进程进行控制,即系统是根据PCB感知进程的存在,所以PCB是进程存在唯一标识。

生命周期:每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤销而撤销。

★包含的具体信息(简答题常考):

  1. 程序ID(PID、进程句柄)★:它是唯一的,一个进程都必须对应一个PID。PID一般是一个整形数字。
  2. 特征信息★:一般分系统进程、用户进程、或者内核进程等
  3. 进程状态★:运行、就绪、阻塞,表示进程现在的运行情况
  4. 优先级:表示获得CPU控制权的优先级大小
  5. 通信信息:进程之间的通信关系的反映,由于操作系统会提供通信通道
  6. 现场保护区:保护阻塞的进程
  7. 资源需求、分配控制信息
  8. 进程实体信息,指明程序路径和名称,进程数据在物理内存还是在交换分区(分页)中
  9. 其他信息:工作单位,工作区,文件信息等

1.3.2. 数据段

定义:存储的是进程的原始数据或者执行中产生的中间数据结果数据

1.3.3. 程序段

定义:存储的是指令代码集合

1.4. 状态与转换

1.4.1. 三态模型

执行状态

进程已获得处理机(CPU),其程序正在执行。

在单处理机系统中,只有一个进程处于执行状态;在多处理机系统中,则有多个进程处于执行状态。

就绪状态

当进程已分配到除处理机(CPU)以外的所有必要资源后,只要再获得处理机(CPU),便可立即执行,进程这时的状态就称为就绪状态。

在一个系统中处于就绪状态的进程可能有多个,通常将他们排成一个队列, 称为就绪队列。

阻塞状态

正在执行的进程由于发生某事件(申请资源或者发出IO请求等)而暂时无法继续执行时,便放弃处理机(CPU)而处于暂停状态,亦即程序的执行受到阻塞,把这种暂停状态称为阻塞状态,有时也称为等待状态或封锁状态。

Q:处理器资源和CPU的关系

A:

处理器资源主要由中央处理器(CPU)提供,但处理器资源并不仅仅局限于 CPU。

CPU 是计算机系统的核心部件,负责执行指令和进行各种计算任务。它是处理器资源的主要提供者,包括算术逻辑运算能力、控制指令执行的能力等。可以说,CPU 是实现处理器资源的关键硬件。

然而,处理器资源还可以包括与 CPU 协同工作的其他硬件和技术。例如,现代计算机中可能有多个 CPU 核心,这些核心共同提供处理器资源。此外,还有一些辅助处理器,如图形处理器(GPU)在某些特定任务中也可以提供一定的处理器资源。另外,一些硬件加速技术,如硬件解码器等,也可以在特定领域提供部分处理器资源。

总之,CPU 是处理器资源的核心组成部分,但处理器资源不仅仅取决于 CPU,还涉及到其他相关的硬件和技术。

1.4.2. 五态模型

执行状态(同上)

进程已获得处理机(CPU),其程序正在执行。

在单处理机系统中,只有一个进程处于执行状态;在多处理机系统中,则有多个进程处于执行状态。

活跃就绪状态(同上)

当进程已分配到除处理机(CPU)以外的所有必要资源后,只要再获得处理机(CPU),便可立即执行,进程这时的状态就称为就绪状态。

在一个系统中处于就绪状态的进程可能有多个,通常将他们排成一个队列, 称为就绪队列。

活跃阻塞状态(同上)

正在执行的进程由于发生某事件(申请资源或者发出IO请求等)而暂时无法继续执行时,便放弃处理机(CPU)而处于暂停状态,亦即程序的执行受到阻塞,把这种暂停状态称为阻塞状态,有时也称为等待状态或封锁状态。

静止就绪(挂起就绪)

进程被对换到辅存(即外存)时的就绪状态,是不能被直接调度的状态,只有当主存中没有活跃就绪态进程,或者是挂起就绪态进程具有更高的优先级,系统将把挂起就绪态进程调回主存并转换为活跃就绪。

静止阻塞(挂起阻塞)

因为本身已经在辅助存储中,再遭遇等待事件,则进程对换到辅存时的阻塞状态。

1.5. 控制

1.5.1. 进程的创建

定义

进程创建是指在操作系统中为一个新的任务或程序实例分配资源并建立相应的管理数据结构,使其能够独立运行。

原因

进程的创建是操作系统执行程序的需要或者用户\进程要求创建一个新的进程。

过程

1.申请空白 PCB(进程控制块)

操作系统为新进程分配一个唯一的进程控制块,这个控制块就像是新进程的 “身份证”,用于记录进程的各种属性和状态信息,如进程标识符、进程状态、优先级、资源分配情况等。

2.为新进程分配资源

分配内存空间:为新进程分配一定的内存区域,用于存储进程的代码、数据和栈等。这个内存空间可以从系统的空闲内存池中分配,确保新进程有足够的空间来执行其任务。

分配其他资源:根据进程的需求,可能还需要分配文件资源、设备资源等。例如,如果新进程需要读取或写入文件,就需要为其分配文件描述符;如果需要使用特定的设备,如打印机或网络接口,就需要为其分配相应的设备资源。

3.初始化 PCB

初始化标志信息:设置各种标志位,用于表示进程的不同状态和特性。例如,设置进程是否为前台进程或后台进程的标志,设置进程是否处于等待特定事件的标志等。

初始化处理机状态信息:包括程序计数器的值,指示下一条要执行的指令地址;寄存器的值,保存当前进程的各种数据和状态;栈指针,指向进程的栈顶等。这些信息在进程被调度执行时用于恢复进程的执行状态。

初始化处理器控制信息:如设置进程的调度策略、时间片大小等。这些信息决定了进程在处理器上的执行方式和时间分配。

设置进程的优先级:为新进程分配一个初始的优先级,这个优先级将决定在多个就绪进程中,该进程被调度执行的先后顺序。优先级可以根据进程的类型、重要性等因素来确定。

4.将新进程插入就绪队列

如果进程就绪队列能够接纳新进程,就将新进程插入就绪队列等待调度执行。当调度程序选择到这个新进程时,它将获得 CPU 时间并开始执行。

1.5.2. 进程的切换★

定义

操作系统为了控制进程的执行,必须有能力挂起正在CPU上运行的进程,并回复以前挂起的某个进程的执行,这种行为被称为进程切换、任务切换或上下文切换。

其发生的场景主要包括:当正在运行的进程由于时间片用完,此时当前进程不能继续独占处理器,需暂停并将处理器控制权转移给另一个就绪进程;当进程处于等待资源状态而无法继续执行时,也会暂停该进程并切换到其他无需等待该资源的就绪进程;以及当有更高优先级进程就绪时,为保障系统高效运行和重要任务及时处理,会暂停当前进程,将处理器分配给高优先级进程。

过程

1.保存处理机上下文,包括程序计数器和其他寄存器。

可以把正在运行的进程想象成一个正在工作的人。处理机上下文就像是这个人正在做的事情的状态记录,程序计数器好比这个人正在看的书的页码,其他寄存器就像是他手里拿着的各种工具的状态。当要切换进程时,先把这个人当前做事的状态和工具状态都记录下来,这样以后回来还能接着干。

进程切换要动处理机上下文是因为处理机(通常是 CPU)在不同进程之间切换时,需要知道每个进程上次执行到哪里了,各种寄存器里的数据是什么,这样才能在下次轮到这个进程时接着正确的地方继续执行。如果不保存和恢复处理机上下文,进程就会丢失执行状态,无法正常运行。

2.更新PCB信息。

进程控制块(PCB)就像是这个进程的档案夹。更新 PCB 信息就是在档案夹里记录下这个进程现在的情况,比如它暂停的原因等。

3.把进程PCB移入相应队列,如就绪、某时间阻塞等队列。

不同的队列就像是不同的房间。根据进程现在的状态,把它的档案夹放到对应的房间里。如果进程在等待某个事情发生,就放到阻塞队列的房间;如果进程准备好了可以随时运行,就放到就绪队列的房间。

4.选择另一个进程执行,并更新其PCB。

从就绪队列的房间里选一个新的进程出来干活。同时在这个新进程的档案夹(PCB)里记录它开始干活的信息。

5.更新内存管理的数据结构。

内存就像是一个大仓库,不同的进程会用到仓库里的不同地方。更新内存管理的数据结构就是整理一下仓库的记录,让新的进程能正确地找到它要用的东西,也确保旧进程的东西不会被新进程乱用。

对于内存的操作是因为不同进程有不同的内存需求和使用情况。更新内存管理的数据结构可以确保每个进程都能正确地访问自己的内存空间,不会和其他进程发生冲突。同时,合理管理内存可以提高系统的效率和稳定性,让不同进程能更好地共享有限的内存资源。

6.恢复处理机上下文。

对于新选出来的进程,就像给新干活的人把他之前记录的做事状态和工具状态拿出来,让他能接着之前的进度继续干活。

1.5.3. 进程的阻塞

定义

正在执行的进程,

由于期待的某些事件未发生,如请求系统资源失败、等待某种操作的完成、新数据尚未到达或无新工作做等,

则由系统自动执行阻塞原语(Block),使自己由运行状态变为阻塞状态。

过程

1.进程立即停止运行。

2.把PCB中的现行状态由“执行”改为“阻塞”,并将PCB插入相应阻塞队列

3.转调度程序进行重新调度,将处理机分配给另一就绪程序,并进行切换。保留被阻塞进程的处理机状态,按新进程的PCB中的处理机状态设置CPU的进程。

4.转到进程调度程序,从就绪队列中选择一个新的进程投入运行。

1.5.3. 进程的唤醒

定义

当被阻塞进程

所期待的事件出现时,如它所启动的I/O操作已完成或其所期待的数据已到达,

则由有关进程(比如,提供数据的进程)调用唤醒原语(Wakeup),将等待该事件的进程唤醒。

过程

1.在该事件的等待队列中找到相应进程的PCB

2.将被唤醒进程从相应的队列中移除,并置其状态为就绪状态。

3.插入就绪队列,等待调度。

1.5.4. 进程的撤销

定义

进程的撤销是指一个进程完成特定的任务后,系统回收这个任务所占用的内存区域和取消该进程的进程控制块。

过程

1.从PCB集合中找到被撤销进程的PCB。

2.若被撤销进程正处于执行状态,则应立即停止该进程的执行,设置重新调度标志以便进程撤销后将处理器分配给其他进程。

3.若被撤销进程有子孙进程,有两种策略。策略一:撤销子进程。策略二:不撤销子进程,子进程变成孤儿进程或者由其他进程接管。

4.回收被撤销后进程所占资源,或者归还给父进程,或者归还给系统,最后回收它的PCB。

1.6. 知识辨析

1.6.1. 阻塞与挂起

阻塞

  • 定义:当一个进程由于等待某个事件的发生(如等待输入 / 输出操作完成、等待信号量等)而暂时不能继续执行时,就进入阻塞状态。在阻塞状态下,进程暂停执行并等待特定事件的到来以解除阻塞。
  • 举例:一个进程正在等待用户从键盘输入数据,此时该进程就处于阻塞状态,直到用户输入数据后,进程才会被唤醒继续执行。
  • 特点:进程主动进入阻塞状态是因为自身的运行需求,它需要等待特定的条件满足后才能继续。阻塞通常是与某个具体的事件相关联,并且进程在阻塞期间不会占用 CPU 资源,操作系统会将 CPU 分配给其他就绪进程。

挂起

  • 定义:挂起是由操作系统或用户主动发起的操作,将一个进程从内存中移出到外存(通常是磁盘),或者从运行状态切换到静止状态。挂起的目的可能是为了释放内存资源、进行进程调试、暂停某些进程的执行等。
  • 举例:当系统内存资源紧张时,操作系统可能会选择一些进程进行挂起,将它们的内存空间交换到磁盘上,以腾出内存供其他更紧急的进程使用。
  • 特点:挂起是一种相对较为宏观的操作,不一定与特定的事件直接相关。挂起后的进程可以在适当的时候被恢复到内存中继续执行。

两者区别

  • 触发原因不同:阻塞是进程因自身等待特定事件而主动进入的状态;挂起是由操作系统或用户出于系统管理等原因主动实施的操作。
  • 涉及范围不同:阻塞主要影响进程的执行状态,使其暂停等待特定事件;挂起不仅影响进程的执行状态,还涉及到进程在内存和外存之间的转移。
  • 对资源占用不同:阻塞的进程通常仍然在内存中,只是不占用 CPU 资源;挂起的进程可能会被移出内存,释放部分内存资源。

1.6.2. 进程的切换与处理机模式切换

进程切换

  • 定义:在多任务操作系统中,当正在运行的进程由于时间片用完、等待资源或更高优先级进程就绪等原因,暂停当前进程的执行,将处理器的控制权转移给另一个就绪进程
  • 举例:一个进程的时间片用完后,操作系统会保存当前进程的上下文,选择另一个就绪进程,并恢复该进程的上下文,使其在处理器上继续执行。
  • 特点:进程切换是在操作系统的管理下,为了实现多任务并发执行而进行的操作。它涉及到保存和恢复进程的上下文信息,包括程序计数器、寄存器值、栈指针等。

处理机模式切换

  • 定义:处理机(通常是 CPU)具有不同的运行模式,如用户模式和内核模式。处理机模式切换是指在不同的运行模式之间进行切换。例如,当用户程序执行系统调用时,处理机会从用户模式切换到内核模式,以执行操作系统的内核代码。
  • 举例:当用户程序需要读取文件时,会发起一个系统调用,此时处理机从用户模式切换到内核模式,操作系统内核执行文件读取操作,完成后再切换回用户模式,将结果返回给用户程序。
  • 特点:处理机模式切换主要是为了实现不同权限级别的代码执行。在用户模式下,程序只能访问受限的资源和执行特定的指令;在内核模式下,程序可以访问系统的所有资源并执行特权指令,以完成系统管理和服务提供等任务。

两者区别

  • 操作对象不同:进程切换是针对不同的进程进行的操作,涉及到多个进程之间的切换;处理机模式切换是针对处理机的运行模式进行的切换,不涉及不同进程的切换。
  • 目的不同:进程切换是为了实现多任务并发执行,提高系统的资源利用率和响应性能;处理机模式切换是为了实现不同权限级别的代码执行,保证系统的安全性和稳定性。
  • 涉及范围不同:进程切换涉及到保存和恢复进程的上下文信息,以及选择下一个要运行的进程等操作;处理机模式切换主要是改变处理机的运行模式,涉及到特权级的改变和相应的系统资源访问权限的调整。

1.6.3. 调度与切换

调度

  • 定义:调度是操作系统决定哪个进程在何时获得处理器资源的过程。调度程序根据一定的调度算法,从就绪队列中选择一个或多个进程,并分配处理器时间给它们。
  • 举例:常见的调度算法有先来先服务、短作业优先、时间片轮转等。例如,在时间片轮转调度算法中,每个进程被分配一个固定的时间片,当时间片用完后,操作系统会选择另一个进程执行。
  • 特点:调度是一种决策过程,它根据系统的状态和需求,选择合适的进程来执行。调度的目标是提高系统的资源利用率、公平性和响应性能。

切换

  • 定义:切换是指在多任务操作系统中,当正在运行的进程由于各种原因(如时间片用完、等待资源、更高优先级进程就绪等)暂停执行,将处理器的控制权转移给另一个就绪进程的过程
  • 举例:一个进程在等待 I/O 操作完成时,操作系统会进行进程切换,将处理器分配给其他就绪进程。当 I/O 操作完成后,被阻塞的进程会被唤醒并重新进入就绪状态,等待下一次被调度执行。
  • 特点:切换是在调度的基础上进行的具体操作,它涉及到保存和恢复进程的上下文信息,以及选择下一个要运行的进程等步骤。

两者区别

  • 概念层次不同:调度是一种决策过程,决定哪些进程应该获得处理器资源;切换是具体的操作过程,实现处理器控制权从一个进程转移到另一个进程。
  • 先后顺序不同:调度先于切换发生,调度确定了下一个要运行的进程后,才会进行切换操作。
  • 涉及内容不同:调度主要涉及到调度算法的选择和应用,以及对系统状态的评估;切换主要涉及到进程上下文的保存和恢复,以及处理器控制权的转移。

1.6.4. 父子进程

  1. 子进程继承了对应的父进程的大部分属性,如文件描述符。子进程一开始就是父进程的副本
  2. 父进程可以创建一个或者多个子进程,子进程是指由另一个进程(对应称之为父进程)所创建的进程。
  3. 一个进程可能下属多个子进程,但最多只能有1个父进程,而若某一进程没有父进程,则可知该进程很可能由内核直接生成。(父子进程创建后是独立运行的)
  4. 父进程和子进程的关系是子进程是父进程的一个副本,创建子进程后,子进程会有自己的空间,然后把父进程的数据拷贝到子进程的空间里。运行时,谁先运行是不确定的,这由系统决定。父进程终止,则子进程必须立刻终止。一个进程可以没有父进程,也可以没有子进程。

1.7. 通信(大致了解即可)

1.7.1. 定义

进程通信是指在进程间传输数据(交换信息)。

1.7.2. 分类

共享内存模式(共享存储)

相互通讯的进程有共享存储区。进程间可以通过直接读写共享存储区的变量来交互数据,同步与互斥在并发程序设计时安排进入程序。

是直接通过变量来进行通讯,其通信效率最高,但是通信过程不受操作系统控制,必须通过程序员来进行控制(就是后面使用的PV操作)。

消息传递模式

若通信的进程之间不存在可直接访问的共享空间则通过操作系统的相应系统调用进行消息传递通讯。

系统是以有固定格式的数据(即消息)为单位来进行数据交换,而共享内存中交换的数据没有固定的格式。消息传递中操作系统对消息的传递有一定的控制,是通过发送原语(具有发送消息功能的程序)和接收原语(具有接收消息的功能)对消息进行发送和接收。

其中间接通信中的中间实体是一个与消息对应的结构体,用来存储消息,称为信箱。

分为直接和间接两种:

直接通信方式

点到点的发送:发送进程直接把消息发送给接收进程,并将它挂在接收队列的消息缓冲队列上,如消息队列。

间接通信方式

以信箱为媒介进行传递,可以广播。从消息缓冲队列中取得信息,发送进程把消息发送到中间实体中,接收进程从中间实体中取得消息,这种中间实体一般称为信箱,称为信箱通信方式。

管道通信模式(共享文件模式)

即发送进程以字符流形式将大量数据送入管道,接收进程可从管道接收数据,二者利用管道进行通信。

管道是一个共享文件,它连接一个读进程和一个写进程,信息从写进程通过管道到读进程。管道通信是一个半双工通信,某一时刻只能单向传输

管道是一个共享文件(共享存储中共享的是内存,这里共享的是文件,共享文件是一个固定大小的缓冲区),可以理解为共享存储的优化和发展。管道机制提供了三方面的协调能力:互斥、同步和确定对方存在,减少了人为的干预。

2. 线程 

2.1. 概念

定义

线程是程序中一个单一的顺序控制流程;一个相对独立的、可调度的执行单元;是系统独立调度和分派CPU的基本单位;是操作系统能够进行运算调度的最小单位。

线程自己不拥有资源,只拥有一点必不可少的资源(如:程序计数器、一组寄存器、栈、线程控制块(TCB),但是它可以与同属一个进程的其他线程共享进程所拥有的全部资源。

它被包含在进程之中,是进程中的实际运作单位。一个进程可以包含多个线程,这些线程共享进程的资源,如内存空间、文件描述符等。

线程有自己的执行路径,包括程序计数器、栈等用于记录执行状态的结构。线程可以独立执行特定的任务,多个线程可以在同一进程内并发执行,从而提高程序的并发性和响应性。

例如,在一个多线程的图形处理软件中,一个线程可以负责用户界面的响应,另一个线程可以负责图像的渲染,它们协同工作以提高软件的性能和用户体验。

与进程相比,线程的创建和切换通常消耗更少的资源,因为线程共享进程的大部分资源,不需要像进程那样进行全面的资源分配和初始化。同时,多线程编程可以更方便地实现并行处理和异步操作,使得程序能够更高效地利用系统资源。

深入理解

  1. 线程是可调度的最基本的执行单元,比进程更小。
  2. 线程是进程内的一个可调度实体。
  3. 线程是进程中的一个相对独立的流序列。
  4. 一个进程中的多个线程可以并发运行,不同进程中的线程也可以并发运行。
  5. 线程资源上依附于进程,调度上独立于进程。

2.2. 目的

为了减少程序并发执行时所付出的时空开销,使操作系统有更好的并发性。

2.3. 特点

  1. 线程具有高并发性。
  2. 线程的切换开销小。
  3. 同一进程内的线程共享内存,通信更加便利。
  4. 创建线程的代价小,无需重新分配资源。

3. 进程与线程的比较★

资源:进程是拥有系统资源的基本单位,而线程不拥有系统资源,但线程可以访问其隶属进程的系统资源。
调度:传统操作系统中,拥有资源和独立调度的基本单位均为进程;而在引入线程的操作系统中,线程是独立调度的基本单位,进程是拥有资源的基本单位。同一进程中的线程切换不会引起进程切换,不同进程中的线程切换会引起进程切换。
并发性:同一进程内多个线程之间也可以并发,提高了系统并发性。
系统开销:线程切换只需保存和设置少量寄存器内容,开销小。进程切换远大于线程切换的开销。

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

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

相关文章

【FPGA】面试八股

1.FPGA的底层资源有哪些 (1)可编程的逻辑资源 可编程的逻辑单元由查找表(LUT),数据选择器(MUX),进位链(Carry Chain)和触发器(Flip-Flop) (2&…

xmltodict 处理 XML 数据案例解析

简介:xmltodict 是一个用于将 XML 数据转换为 Python 字典的轻量级模块。它简化了 XML 数据的解析和处理,使得在 Python 中操作 XML 变得更加直观和方便。这个模块适合用于数据交换、配置文件解析等需要 XML 数据处理的场景。 历史攻略: loc…

ajax php

文章目录 get请求postget和post的异同点ajax原生步骤jquery步骤优点 php安装&#xff0c;后台处理脚本语言。 后端开发语言不能直接允许&#xff0c;必须放在服务器对对应的文件夹下运行。 如&#xff1a;wamp的对应服务器的文件夹是www get请求 <!DOCTYPE html> &l…

ArcGIS中分区统计栅格值前需要进行投影吗(在投影坐标系下进行吗),为什么?

最近&#xff0c;我接到了一个分区统计栅格数值前需要进行投影&#xff0c;或者说是必须需要在投影坐标系下进行吗的咨询。 答案是不需要刻意去变。 但是他又说他把地理坐标系下分区统计结果与投影坐标系下的分区统计结果分别做了一遍&#xff0c;并进行了对比&#xff0c;两个…

【数据结构与算法】排序算法

3.7 排序算法 概述 比较排序算法 算法最好最坏平均空间稳定思想注意事项冒泡O(n)O( n 2 n^2 n2)O( n 2 n^2 n2)O(1)Y比较最好情况需要额外判断选择O( n 2 n^2 n2)O( n 2 n^2 n2)O( n 2 n^2 n2)O(1)N比较交换次数一般少于冒泡堆O( n l o g n nlogn nlogn)O( n l o g n nlogn …

美化pytest运行:pytest-sugar

简介&#xff1a;pytest-sugar 是一个用于增强 pytest 测试框架的插件&#xff0c;它提供了美观的测试运行报告&#xff0c;使测试输出更加直观易读。通过简单的配置&#xff0c;开发者可以快速获得测试的状态、运行时间和其他关键信息。该模块特别适合于大型项目或团队合作&am…

[C#]winform部署官方yolov11-obb旋转框检测的onnx模型

【官方框架地址】 https://github.com/ultralytics/ultralytics 【算法介绍】 Yolov11-obb&#xff08;You Only Look Once version 8 with Oriented Bounding Boxes&#xff09;是一种先进的对象检测算法&#xff0c;它在传统的Yolov3和Yolov4基础上进行了优化&#xff0c;加…

Python深度学习进阶与前沿应用:注意力机制、Transformer模型、生成式模型、目标检测算法、图神经网络、强化学习等

近年来&#xff0c;伴随着以卷积神经网络&#xff08;CNN&#xff09;为代表的深度学习的快速发展&#xff0c;人工智能迈入了第三次发展浪潮&#xff0c;AI技术在各个领域中的应用越来越广泛。为了帮助广大学员更加深入地学习人工智能领域最近3-5年的新理论与新技术&#xff0…

【重学 MySQL】六十、空间类型

【重学 MySQL】六十、空间类型 空间数据类型的分类空间数据类型的属性空间数据的表示方式空间数据的操作应用场景 在MySQL中&#xff0c;空间类型&#xff08;Spatial Types&#xff09;主要用于支持地理特征的生成、存储和分析。这些地理特征可以表示世界上具有位置的任何东西…

【书生浦语实战】MindSearch 部署到HuggingFace Space

结果速览 欢迎来玩&#xff1a;https://huggingface.co/spaces/LLyn/mindsearch_exercise 配置开发环境 使用github codespace 第一次使用github的codespace&#xff5e;本质上跟在intern studio一样&#xff0c;但是页面是vscode效果&#xff08;intern studio是linux cl…

Carsim报错总结及解决方法

1. simulink报错&#xff1a;vs_state 、StopMode无法识别 - matlab命令行窗口输入&#xff1a;vs_state -1&#xff0c;StopMode -1 2. Video变暗&#xff0c;无法点击 - 说明书中提示&#xff1a;如果输出文件不存在&#xff08;例如&#xff0c;在单击复制按钮创…

关于ad 的焊盘自动排序功能说明

你是不是想&#xff0c;不想手动一个一个改焊盘的号数&#xff0c;真的很累&#xff0c;对吧 那么下来看看&#xff0c;关于这个的用法的说明 比如我要改这个红色框中的焊盘的序号&#xff0c;那么我们就先框选好&#xff0c;来到右边的栏目&#xff0c;看到红色圈出的地方&am…

深度学习--------------------------------使用注意力机制的seq2seq

目录 动机加入注意力Bahdanau注意力的架构 总结Bahdanau注意力代码带有注意力机制的解码器基本接口实现带有Bahdanau注意力的循环神经网络解码器测试Bahdanau注意力解码器该部分总代码 训练从零实现总代码简洁实现代码 将几个英语句子翻译成法语该部分总代码 将注意力权重序列进…

Oracle架构之物理存储中各种文件详解

文章目录 1 物理存储1.1 简介1.2 数据文件&#xff08;data files&#xff09;1.2.1 定义1.2.2 分类1.2.2.1 系统数据文件1.2.2.2 撤销数据文件1.2.2.3 用户数据文件1.2.2.4 临时数据文件 1.3 控制文件&#xff08;Control files&#xff09;1.3.1 定义1.3.2 查看控制文件1.3.3…

定时器定时中断定时器外部中断

基础背景&#xff1a;TIM定时中断-CSDN博客 TIM的函数 // 恢复缺省设置 void TIM_DeInit(TIM_TypeDef* TIMx); // 时基单元初始化&#xff0c;第一个参数TIMx选择某个定时器&#xff0c;第二个参数是结构体&#xff0c;包含了配置时基单元的一些参数。 void TIM_TimeBaseInit…

【时间盒子】-【9.任务设置项】自定义任务名称、任务时长等设置项组件

Tips: Stage、Link装饰器的使用&#xff1b; 参考我的帖子&#xff1a;https://developer.huawei.com/consumer/cn/forum/topic/0208152234389094513?fid0101587866109860105 一、预览 红色框&#xff1a;任务设置项列表&#xff0c;把它定义为一个组件对象SettingList。绿…

linux基础 超级笔记

1.Linux系统的组成 Linux系统内核&#xff1a;提供系统最核心的功能&#xff0c;如软硬件和资源调度。 系统及应用程序&#xff1a;文件、任务管理器。 2.Linux发行版 通过修改内核代码自行集成系统程序&#xff0c;即封装。比如Ubuntu和centos这种。不过基础命令是完全相…

【C++ Primer Plus】4

2 字符串 字符串是存储在内存的连续字节中的一系列字符&#xff1b;C处理字符串的方式有两种&#xff0c; c-风格字符串&#xff08;C-Style string&#xff09;string 类 2.1 c-风格字符串&#xff08;C-Style string&#xff09; 2.1.1 char数组存储字符串&#xff08;c-…

『网络游戏』自适应制作登录UI【01】

首先创建项目 修改场景名字为SceneLogin 创建一个Plane面板 - 将摄像机照射Plane 新建游戏启动场景GameRoot 新建空节点重命名为GameRoot 在子级下创建Canvas 拖拽EventSystem至子级 在Canvas子级下创建空节点重命名为LoginWnd - 即登录窗口 创建公告按钮 创建字体文本 创建输入…

Java:数据结构-初始结合框架 时间复杂度和空间复杂度 初识泛型

一 初始结合框架 1.什么是Java的集合框架 Java 的集合框架&#xff08;Java Collection Framework&#xff0c;JCF&#xff09;是 Java 标准库中的一部分&#xff0c;用于存储和操作一组数据。它提供了一些常用的数据结构和接口&#xff0c;用来高效管理和操作数据。Java 的…