医院网站建设利法拉网络/百度一下官方下载安装

医院网站建设利法拉网络,百度一下官方下载安装,wordpress模板 国内,信息发布网Linux中断处理流程 在Linux内核中,中断控制器管理硬件中断号到Linux中断号的映射,并通过中断描述符(struct irq_desc)进行管理。存储这种映射关系的方式取决于中断编号的连续性,具体实现如下: 1. 数组存储&…

Linux中断处理流程

        在Linux内核中,中断控制器管理硬件中断号到Linux中断号的映射,并通过中断描述符(struct irq_desc)进行管理。存储这种映射关系的方式取决于中断编号的连续性,具体实现如下:

1. 数组存储(连续中断号)

  • 适用场景:当中断号是连续的且数量有限时,内核使用静态数组存储映射关系。

  • 实现方式

    • 定义一个全局数组 irq_desc[NR_IRQS],其中 NR_IRQS 是内核支持的最大中断号数量。

    • 每个中断号直接对应数组的索引。例如,中断号 n 的描述符为 irq_desc[n]

    • 初始化时,所有描述符预分配并填充默认值(如 handle_bad_irqdepth=1 等),确保未使用的中断号也有有效描述符。

  • 优点:访问速度快(O(1)时间复杂度),内存连续,适合密集且连续的编号。

  • 缺点:若中断号稀疏或范围较大(如存在空洞或超大编号),会导致内存浪费。

2. 基数树存储(稀疏中断号)

  • 适用场景:当中断号不连续或范围较大时,使用基数树(Radix Tree)动态管理映射。

  • 实现方式

    • 内核配置需开启 CONFIG_SPARSE_IRQ

    • 基数树按需分配节点,仅存储实际使用的中断号及其对应的 irq_desc

    • Linux中断号由内核动态分配,与硬件中断号解耦,避免静态数组的限制。

  • 优点:节省内存,支持稀疏或超大中断号。

  • 缺点:访问复杂度略高(接近 O(log n)),动态分配需要额外开销。

1.中断描述符

1. 作用

struct irq_desc 是Linux内核中用于管理单个中断源的核心数据结构。每个硬件中断号(或虚拟中断号)在内核中对应一个 irq_desc 实例,负责记录中断的状态、处理函数、锁机制以及关联的设备处理动作。它是中断子系统的基础,确保中断能够被正确路由和处理。


2. 核心字段

以下是 struct irq_desc 中最重要的字段及其作用:

字段名类型说明
irq_datastruct irq_data存储与中断控制器相关的底层信息,如硬件中断号、触发方式(边沿/电平)、中断芯片等。
handle_irqirq_flow_handler_t指向中断流处理函数(如 handle_edge_irq 或 handle_level_irq),负责处理中断的上下半部。
actionstruct irqaction *指向 irqaction 链表的头节点,表示注册到该中断的所有设备处理函数。
lockspinlock_t自旋锁,保护中断描述符的并发访问。
depthunsigned int中断禁用计数器:depth > 0 表示中断被禁用。
statusunsigned int中断状态标志(如 IRQ_DISABLEDIRQ_INPROGRESS)。

2.irq_desc、irq_chip和irq_domain的区别

1. 核心区别
组件作用层级核心职责
irq_desc管理单个中断源的处理逻辑和状态,包括中断处理函数、设备注册信息、锁机制等。高层抽象中断的软件管理(状态、处理流程)
irq_chip定义中断控制器的硬件操作接口(如使能、禁用、确认中断),屏蔽不同中断控制器的差异。底层硬件抽象直接操作中断控制器的硬件行为
irq_domain管理硬件中断号(HW IRQ)到Linux虚拟中断号(IRQ)的映射关系,支持复杂中断拓扑结构。中间抽象层中断号映射与多中断控制器的协调

2. 关键结构与功能
(1) irq_desc:中断描述符
  • 核心字段

    • irq_data:关联底层硬件信息(如 irq_chip 和 irq_domain)。

    • handle_irq:中断流处理函数(如 handle_edge_irq)。

    • action:设备驱动注册的中断处理函数链表(irqaction)。

    • lock:保护并发访问的自旋锁。

  • 作用:记录中断状态、处理流程和设备注册信息,是中断管理的核心单元。

(2) irq_chip:中断控制器抽象
  • 核心操作函数

struct irq_chip {void (*enable)(struct irq_data *data);     // 使能中断void (*disable)(struct irq_data *data);    // 禁用中断void (*ack)(struct irq_data *data);        // 确认中断处理完成int (*set_type)(struct irq_data *data, unsigned int type); // 设置触发类型(边沿/电平)
};
  • 作用:为不同中断控制器(如PIC、APIC、GIC)提供统一硬件操作接口,实现硬件无关性。

(3) irq_domain:中断域
  • 核心功能

    • 将硬件中断号(HW IRQ)映射到Linux虚拟中断号(IRQ)。

    • 支持多种映射方式(线性映射、树形映射、动态分配)。

    • 管理多级中断控制器的级联关系(如GPIO控制器级联到主中断控制器)。

  • 关键方法

struct irq_domain_ops {int (*map)(struct irq_domain *d, unsigned int virq, irq_hw_number_t hwirq);void (*unmap)(struct irq_domain *d, unsigned int virq);// 其他方法(如分配、释放中断号)
};
3. 层级关系与协作流程
  • 层级关系

  • irq_domain → irq_desc → irq_chip
    • irq_domain:负责硬件中断号到Linux中断号的映射,生成对应的 irq_desc

    • irq_desc:通过 irq_data 关联到 irq_domain 和 irq_chip

    • irq_chip:通过 irq_data 获取硬件上下文,执行具体的中断控制器操作。

  • 协作流程示例(以中断触发为例):

    1. 硬件中断触发:设备产生硬件中断号 hwirq

    2. 映射到Linux中断号irq_domain 将 hwirq 转换为Linux虚拟中断号 virq

    3. 获取中断描述符:通过 virq 找到对应的 irq_desc

    4. 处理中断

      • 调用 irq_desc->handle_irq 执行中断流处理。

      • 遍历 irq_desc->action 链表,执行设备驱动注册的中断处理函数。

    5. 操作硬件:通过 irq_desc->irq_data->irq_chip 调用 ack() 或 disable() 等函数,操作中断控制器。


4. 设计意义与应用场景
组件设计目标典型应用场景
irq_desc统一管理中断状态和流程所有中断处理场景(如设备驱动注册中断)
irq_chip抽象不同中断控制器的硬件操作适配不同硬件平台(如ARM GIC、x86 APIC)
irq_domain解决复杂中断号映射问题多级中断控制器、动态中断分配(如PCI设备)
  • 多级中断控制器
    例如,GPIO控制器级联到主中断控制器时,每个控制器有自己的 irq_domainirq_domain 负责级联中断号的映射。

  • 动态中断分配
    PCI设备的中断号可能动态变化,irq_domain 使用基数树动态分配Linux中断号。


5. 总结对比
特性irq_descirq_chipirq_domain
核心职责中断状态管理与处理流程中断控制器的硬件操作硬件中断号到Linux中断号的映射
依赖关系通过 irq_data 关联 irq_chip 和 irq_domain由 irq_data 提供硬件上下文独立管理中断号映射,生成 irq_desc
典型操作注册中断处理函数、管理中断禁用计数使能/禁用中断、确认中断分配/释放中断号、处理多级中断控制器级联
设计目标统一中断处理逻辑屏蔽硬件差异解决复杂中断拓扑的映射问题

6. 关联示意图
硬件中断 (hwirq)│▼
irq_domain(映射 hwirq → virq)│▼
irq_desc(virq对应的描述符)│▼
irq_chip(操作中断控制器硬件)

通过 irq_domainirq_desc 和 irq_chip 的分工协作,Linux内核实现了对中断的全面管理:

  • irq_domain 解决中断号的动态映射问题,支持复杂硬件拓扑。

  • irq_chip 屏蔽硬件差异,使上层代码无需关心具体中断控制器。

  • irq_desc 统一管理中断状态和处理流程,为设备驱动提供简洁接口。

3.处理流程详解

在 ARM64 架构下,在异常级别 1 的异常向量表中,中断的入口有 3 个:

  • 如果处理器处在内核模式(异常级别 1),中断的入口是 el1_ira;
  • 如果处理器处在用户模式(异常级别 0)下执行 64 位应用程序,中断的入口函数是 el0_irq;
  • 如果处理器正在用户模式(异常级别 0)下执行 32 位应用程序,中断的入口函数是 el0_irq_compat。

以网卡接收数据触发中断的处理流程为例详解: 

一、硬件中断触发:网卡 → GIC → CPU

网卡硬件动作

网卡接收到网络数据后,通过内部电路触发物理中断引脚(该引脚连接到 GIC 的输入线)。例如,网卡中断引脚连接到 GIC 的SPI 99(硬件中断号hwirq=99)。此时,网卡通过硬件信号告知 GIC 有中断事件发生。

GIC 处理

GIC 的Distributor模块检测到中断请求后,借助irq_chip提供的操作方法(如ack确认中断),完成对中断的初步处理:

  • 通过irq_chipack方法(如 GIC 的gic_ack函数),将中断号写入 GIC 特定寄存器,标记中断已被 CPU 接收。
  • 将中断路由到目标 CPU 核。此时调用handle_arch_irq函数,进入 GIC 的中断处理函数(如gic_handle_irq),正式启动内核中断处理流程。

二、中断号映射与分发

获取硬件中断号

GIC 处理函数从寄存器读取硬件中断号(如hwirq=99),并判断其范围:

  • 16 ≤ hwirq < 1020(属于外部设备中断范围),执行以下操作:
    • 将中断号写入 GIC 的 “中断结束寄存器”,标记中断处理开始。
    • 调用handle_domain_irq,进入中断号映射流程。
irq_domain映射中断号

handle_domain_irq通过irq_domain结构体(负责管理硬件中断号到 Linux 中断号的映射),执行irq_find_mapping函数:

  • irq_domain根据硬件中断号hwirq=99,查找预定义的映射关系,得到对应的 Linux 虚拟中断号(假设映射结果为linux_irq=128)。这一步确保内核用统一的 Linux 中断号管理硬件中断。

三、定位中断描述符irq_desc

内核根据映射得到的 Linux 虚拟中断号linux_irq=128,索引到全局数组irq_desc[128]irq_desc存储该中断的核心信息:

  • 1.中断处理函数链表(irqaction链表):用于管理共享此中断号的所有设备的中断处理函数。若多个设备共享linux_irq=128,每个设备的irqaction会通过链表组织。
    • 链表的构成与用途

       irqaction 链表是存储在 irq_desc 结构体中的一个链表,用于管理共享同一中断号的多个设备的中断处理函数。在系统中,多个设备可能会共享同一个中断号,每个设备都会有自己对应的 irqaction 结构体,这些结构体通过链表的形式组织起来。当该中断号对应的中断发生时,内核会依次遍历这个链表,调用每个 irqaction 结构体中的中断处理函数。

    • 链表的管理与操作

      • 注册:当设备驱动程序初始化时,会调用 request_irq 函数来注册中断处理函数。该函数会创建一个 irqaction 结构体,并将其添加到对应 irq_desc 的 irqaction 链表中。例如,网卡驱动在初始化时会注册自己的 irqaction 结构体:

      • static irqreturn_t nic_irq_handler(int irq, void *dev_id)
        {// 中断处理逻辑return IRQ_HANDLED;
        }struct irqaction nic_irqaction = {.handler = nic_irq_handler,.flags = IRQF_SHARED, // 表示该中断是共享的.name = "nic_irq",.dev_id = &nic_device,
        };request_irq(nic_irq, &nic_irqaction);

        当中断发生时,内核会调用 generic_handle_irq_desc 函数,该函数会遍历 irqaction 链表,依次调用每个 irqaction 结构体中的 handler 函数。每个 handler 函数需要通过 dev_id 来判断是否是自己设备产生的中断,并进行相应的处理。

  • 2.中断控制器操作方法(通过irq_chip关联)irq_desc中包含指向irq_chip的指针,通过irq_chip定义的方法(如maskunmaskeoi等),实现对 GIC 的底层控制。
    • irq_chip 结构体的作用

      • irq_chip 结构体定义了一系列用于操作中断控制器的方法,这些方法封装了对中断控制器硬件的底层操作,如中断的确认、使能、屏蔽、结束等。irq_desc 结构体中包含一个指向 irq_chip 的指针,通过这个指针可以调用 irq_chip 中定义的方法来控制中断控制器。

    • 常见的操作方法

      • ack 方法:用于确认中断。当中断控制器接收到中断请求并通知 CPU 后,CPU 需要通过调用 ack 方法来告诉中断控制器已经开始处理该中断。例如,GIC 的 ack 方法会将中断号写入特定的寄存器,标记中断处理开始。
      • static void gic_ack(struct irq_data *d)
        {// 将中断号写入GIC的中断确认寄存器writel_relaxed(d->irq, gic_dist_base + GIC_DIST_ACK);
        }
      • mask 方法:用于屏蔽中断。在某些情况下,需要暂时禁止某个中断的触发,此时可以调用 mask 方法。例如,在进行一些关键操作时,为了避免中断干扰,可以屏蔽网卡中断。
      • static void gic_mask(struct irq_data *d)
        {// 设置GIC的中断屏蔽寄存器writel_relaxed(1 << (d->irq & 31), gic_dist_base + GIC_DIST_ENABLE_CLEAR);
        }

四、执行中断处理函数

1.触发 handle_irq 入口函数

        内核在初始化中断控制器(如 GIC)时,会根据硬件中断号范围(<32 或≥32)设置 irq_desc 的 handle_irq 函数指针。irq_desc[linux_irq].handle_irq 根据硬件中断号是否小于 32,被设置为不同的函数:

  • 硬件中断号 < 32handle_percpu_devid_irq(用于早期的单 CPU 中断)。
  • 硬件中断号 ≥ 32handle_fasteoi_irq(用于现代多核中断)。

        比如在网卡接收数据的这个案例中处理逻辑如下:

void handle_fasteoi_irq(struct irq_desc *desc)
{// 快速EOI中断处理流程desc->irq_data.chip->ack(&desc->irq_data);generic_handle_irq_desc(desc); // 遍历irqaction链表desc->irq_data.chip->eoi(&desc->irq_data);
}
2.遍历irqaction链表

irq_desc[128]维护irqaction链表。调用generic_handle_irq,最终触发generic_handle_irq_desc,遍历链表:

 
  • 若链表中存在网卡驱动注册的irqaction,则调用其.handler函数(如nic_irq_handler)。
3.网卡驱动的irqaction工作

网卡驱动注册的irqaction包含:

  • .handler:中断处理函数(如nic_irq_handler)。
  • .dev_id:网卡设备标识,用于区分共享中断的不同设备。
    nic_irq_handler执行:
  1. 读取数据:通过寄存器操作,读取网卡接收缓冲区数据。
  2. 数据封装与提交:将数据封装成网络协议帧,提交给上层网络协议栈(如 Linux 网络子系统)。
  3. 清除中断状态:清除网卡中断状态寄存器,准备下次中断接收。
中断下半部(软中断)处理
  • 触发软中断:在中断处理函数中,若有耗时操作(如协议处理)不适合在中断处理函数中完成,因此引入了中断下半部分(软中断)的机制,软中断可以在中断处理函数返回后,在合适的时机(如系统空闲时)执行,从而避免影响系统的实时性。通过netif_rx等函数触发软中断(如NET_RX_SOFTIRQ)。
    • 网卡驱动的中断处理函数(nic_irq_handler)作为中断上半部分,主要完成一些紧急的操作,如读取网卡接收缓冲区的数据,并将数据传递给软中断处理函数。
    • static irqreturn_t nic_irq_handler(int irq, void *dev_id)
      {// 读取网卡接收缓冲区的数据struct sk_buff *skb = nic_read_rx_buffer();if (skb) {// 将数据传递给软中断处理函数netif_rx(skb);}return IRQ_HANDLED;
      }
  • 软中断处理函数:系统在合适时机(如do_softirq执行时),调用软中断处理函数(如net_rx_action):
    • 从接收队列取出数据,进行详细解析、协议处理(如 IP 层、TCP 层处理),最终将数据传递给应用层。
    • static void net_rx_action(struct softirq_action *h)
      {struct sk_buff *skb;while ((skb = skb_dequeue(&rx_queue))) {// 数据解析、协议处理等操作netif_receive_skb(skb);}
      }open_softirq(NET_RX_SOFTIRQ, net_rx_action);

五、中断处理完成

处理函数(含软中断)执行完毕后,通过irq_chip.eoi方法(如gic_eoi):

  • 告知 GIC 中断处理完成。GIC 更新寄存器,允许后续同类型中断再次触发,完成一次完整的中断处理闭环。

关键结构体协作总结

结构体作用
irq_chip提供 GIC 操作方法(ackeoimask等),直接控制中断控制器硬件行为。
irq_domain管理硬件中断号到 Linux 中断号的映射,确保内核正确识别中断来源。
irq_desc存储中断描述符,维护irqaction链表,是中断处理的核心管理结构。
irqaction包含网卡驱动的中断处理函数,执行数据读取、协议处理等业务逻辑。

 https://github.com/0voice

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

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

相关文章

Java 大视界 -- 基于 Java 的大数据隐私计算在医疗影像数据共享中的实践探索(158)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

logstash收集数据

防止ES的的I/O的压力过大&#xff0c;使用redis/kafka进行缓冲。 对redis的要求 Redis input plugin | Logstash Reference [8.17] | Elastic 一般企业要求的架构 我实现的架构 filebeat把数据传给logstash 配置好filebeat把收集到的数据输入到redis 然后执行命令&#xff0…

MAXKB部署,使用和注意事项

MaxKB Max Knowledge Base&#xff0c;是一款基于大语言模型和 RAG 的开源知识库问答系统&#xff0c;广泛应用于智能客服、企业内部知识库、学术研究与教育等场景。作为一款专注于知识库问答场景的软件产品&#xff0c;MaxKB 能够为企业的智能化进程注入新的动力&#xff0c;…

docker - compose up - d`命令解释,重复运行会覆盖原有容器吗

docker - compose up - d`命令解释,重复运行会覆盖原有容器吗 docker - compose up - d 是一个用于管理 Docker 容器的命令,具体含义如下: 命令含义: up:用于创建、启动并运行容器,会根据 docker - compose.yml 文件中定义的服务配置来操作。-d:表示以“分离模式”(det…

03-SpringBoot3入门-配置文件(自定义配置及读取)

1、自定义配置 # 自定义配置 zbj:user:username: rootpassword: 123456# 自定义集合gfs:- a- b- c2、读取 1&#xff09;User类 package com.sgu.pojo;import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.spring…

进程状态:Linux的幕后指挥管理,穿越操作系统进程的静与动

文章目录 引言&#xff1a;进程的生命与状态&#xff1a;动与静的交响曲一、操作系统中的进程状态概述1.1 经典的进程状态模型1.2 进程状态转换图 二、Linux操作系统中的进程状态2.1 Linux进程状态的分类2.2 各状态的详细解释 2.3 Linux进程状态表2.4 使用ps查看进程状态三、进…

MOSN(Modular Open Smart Network)-05-MOSN 平滑升级原理解析

前言 大家好&#xff0c;我是老马。 sofastack 其实出来很久了&#xff0c;第一次应该是在 2022 年左右开始关注&#xff0c;但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFAStack-00-sofa 技术栈概览 MOSN&#xff08;Modular O…

构建高可用性西门子Camstar服务守护者:异常监控与自愈实践

在智能制造领域,西门子Camstar作为领先的MES系统承载着关键生产业务。但在实际运维中,我们发现其服务常因数据库负载激增(如SQL阻塞链超时)或应用服务器资源耗尽(CPU峰值达90%以上)导致服务不可用。传统人工干预方式平均故障恢复时间长达47分钟,这对连续生产场景构成了严…

arm之s3c2440的I2C的用法

基础概念 IC&#xff08;Inter-Integrated Circuit&#xff09;又称I2C&#xff0c;是是IICBus简称&#xff0c;所以中文应该叫集成电路总线。 IIC的总线的使用场景&#xff0c;所有挂载在IIC总线上的设备都有两根信号线&#xff0c;一根是数据线SDA&#xff0c;另一 根是时钟…

STM32F103_LL库+寄存器学习笔记10 - DMA传输过半+DMA传输完成中断实现DMA串口接收“双缓冲“

导言 《[[STM32F103_LL库寄存器学习笔记09 - DMA串口接收与DMA串口发送&#xff0c;串口接收空闲中断]]》上一章节完成DMA发送与接收。此时&#xff0c;有一个致命的问题可能会导致数据包丢失。原因是USART1接收只开启了接收空闲中断(IDLE)&#xff0c;DMA在连续模式下&#xf…

李宏毅机器学习笔记06 | 鱼和熊掌可以兼得的机器学习 - 内容接宝可梦

本章提要 深度学习可以在较少参数量的情况下得到比较低的loss&#xff1a; h a l l a r g min ⁡ h ∈ H L ( h , D a l l ) h^{all}arg \min_{h \in H}L(h,D_{all}) hallargminh∈H​L(h,Dall​) 引入 如何权衡模型的复杂程度 Tradeoff of Model Complexity 理论上&#…

海康gdb流程

gdb相关 在initrun.sh文件里加入&#xff0c;注意需要在hikauto起来之前 # 设置core dump大小 ulimit -c unlimited if [ $? -eq 0 ];then echo "core dump size set success" else echo -e "\33[31m core dump size set fail\33[0m" fi echo …

springBoot统一响应类型3.3版本

前言&#xff1a; 通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往…

基于Linux下的MyBash命令解释器

项目介绍&#xff1a;⼀个⽤C语⾔实现的简单shell&#xff0c;可以接受⽤⼾输⼊的命令并执⾏操作&#xff0c;⽀持多管道和重 定向。 mybash---打造自己的命令解释器 目前我们Linux的系统默认的命令解释器是bash; 命令解释器&#xff08;也称为命令行解释器或shell&#xff0…

Ingredient-oriented Multi-Degradation Learning for Image Restoration论文阅读

摘要&#xff1a;重点在于关联多个任务本质的联系。 不同恢复任务的关联性很重要。 揭示退化现象的内在机理联系很有意义。 多合一的方法能在单一模型中处理多种退化问题&#xff0c;可扩展性较差。 成分导向范式挖掘不同图像退化现象背后的物理规律或特征模式。 成分导向退化重…

禅道后台命令执行漏洞

漏洞简介 禅道是第一款国产的开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、 组织管理和事务管理于一体&#xff0c;是一款专业的研发项目管理软件&#xff0c;完整地覆盖了项目管理的核心流程。 禅道管理思想注重实效&#xff0c;功能完备丰富&#xff0c;…

密码学——知识问答

目录 1、阐述公开密钥算法的定义&#xff0c;结合RSA算法说明公钥密码的基本要求。 说明公钥与私钥两种密码学并举例与其应用 1. 公钥密码学&#xff08;非对称加密&#xff09;&#xff1a; 2. 私钥密码学&#xff08;对称加密&#xff09;&#xff1a; 对比公钥与私钥密码…

海思烧录工具HITool电视盒子刷机详解

HiTool是华为开发的一款用于海思芯片设备的刷机和调试工具&#xff0c;可对搭载海思芯片的机顶盒、智能电视等设备进行固件烧录、参数配置等操作。以下为你详细介绍&#xff1a; 功能用途 固件烧录&#xff1a;这是HiTool最主要的功能之一。它能够将下载好的适配固件文件烧录到…

软考中级-软件设计师 23种设计模式(内含详细解析)

23种设计模式 &#x1f3af; 创建型设计模式&#x1f4cc; 抽象工厂&#xff08;Abstract Factory&#xff09; 设计模式&#x1f4cc; 工厂方法&#xff08;Factory Method&#xff09;设计模式&#x1f4cc; 单例&#xff08;Singleton&#xff09;设计模式&#x1f4cc; 生成…

软考笔记5——软件工程基础知识

第五章节——软件工程基础知识 软件工程基础知识 第五章节——软件工程基础知识一、软件工程概述1. 计算机软件2. 软件工程基本原理3. 软件生命周期4. 软件过程 二、软件过程模型1. 瀑布模型2. 增量模型3. 演化模型&#xff08;原型模型、螺旋模型)4. 喷泉模型5. 基于构建的开发…