操作系统复习
操作系统
1操作系统引论
1.1操作系统的目标和作用
操作系统的非形式化定义:系统软件,程序模块的集合,资源管理和用户接口功能。
1.1.1操作系统的目标
OS的目标:方便性、有效性、可扩充性。开放性。
方便性:方便性是从用户角度来看的,为用户提供良好的、一致的用户接口,弥补硬件操作系统类型和数量之间差别。其实现方法有:虚拟地址技术、文件系统、图形接口、统一用户接口、虚拟存储技术、缓冲区技术。
有效性:有效性是站在系统角度来说的,使CPU、I/O设备和存储空间得到充分有效的利用;管理和分配硬件、软件资源,合理的组织计算机的工作流程。其实现方法有:多道程序设计、多进程并发、虚拟存储器、按需调段(页)、对换区技术、缓冲区技术、独占设备—>共享设备。
可扩充性:无结构->模块化->层次化->微内核。
开放性:遵循标准规范,方便地实现互连,实现应用的可以移植性和互操作性。
1.1.2操作系统的作用
-
计算机系统资源的管理者
-
实现了对计算机资源的抽象
1.1.3推动操作系统发展的主要动力
- 不断提高计算机资源利用率
- 方便用户
- 器件的发展
- 计算机体系结构的发展:从单处理机到多处理机,从单机到网络
- 不断提出新的应用需求
1.2操作系统的发展过程
1.2.1未配置操作系统的计算机系统
-
计算机的工作方式
- 用户:程序员操作员;计算机专业人员
- 变成语言:机器语言
- 输入输出:纸带或卡片
-
工作特点:
- 用户独占全机,造成系统的浪费,严重降低了资源的利用率
- CPU等待用户,CPU利用率很低
-
主要矛盾:
- 计算机处理能力的提高,手工操作的效率低
- 用户独占全机的所有资源
-
提高效率的途径:
- 专门的操作员
- 批处理
1.2.2单道批处理系统
将系统作业分类为几个作业至次年工序罗列,每个作业由一个专门的监督程序自动依次处理,可以使用汇编语言开发。
- 批处理中的作业的组成:
- 用户程序
- 数据
- 作业说明书(作业控制语言)
- 实现方式1:联机批处理
- 批作业生成:用户提交作业改成了操作员合成批作业
- 批作业处理过程:从磁带读入用户作业和编译链接程序,编译链接用户作业,生成可执行程序;执行启动;执行结果输出。、
- 存在问题:慢速的输入输出处理仍直接由主机来完成。输入输出时,CPU处于等待状态。
- 实现方式2:脱机批处理
- 卫星机:完成面向用户的输入输出,中键结果暂存在磁盘或磁带上。
- 主机与卫星机并行工作。
- 作业控制命令由监督程序来执行,完成如装入程序、编译、运行的操作。
- 优点:同一批内个作业的自动一次更替,改善了主机CPU和I/O设备的使用效率,提高了吞吐量。
- 缺点:磁带或磁盘需要人工装卸,作业需要人工分类,监督程序易遭到用户程序的破坏。
- 特征:
- 自动性:磁盘上的一批作业自动地诸葛依次的运行。
- 顺序性:各个作业顺序的进入内存,顺序完成作业。
- 单道性:内存中只有一道程序运行
- CPU和I/O设备使用忙先不均
1.2.3多道批处理系统
-
优点:
- 提高CPU的利用率;
- 可提高内存和I/O设备利用率;
- 增加系统吞吐率。
-
多道批处理系统的特性
-
多道性
多道程序驻留内存:提高了资源的利用率;
程序并发执行:提高了系统的吞吐率
-
无序性
作业进入内存先后顺序和完成的先后顺序无对应性
-
调度性
作业提交给形同需经历两次调度(作业调度、进程调度);
-
-
单道与多道批处理的比较
-
缺点
用户交互性差:整个作业完成后或中间出错时,才与用户交互,不利于调试和修改
作业平均周转时间长:短作业的周转时间显著增长。
-
多道批处理系统需要解决的问题
-
处理机争用
-
内存分配和保护
-
I/O设备分配
-
文件的组织和管理
-
作业管理
-
用户与系统的接口
-
1.2.4分时系统
由于用户的需要:人——机交互、共享主机。
计算机的系统资源进行分割,每个时间段称为一个时间偏,每个用户一次轮流使用时间片。
- 特征:
- 多路性
- 独立性
- 及时性
- 交互性
1.2.5实时系统
及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。
- 设计目标:
- 响应时间短
- 实时时钟管理
- 连续人机对话
- 过载防护
- 高度可靠性和安全性
- 任务类型
- 周期性实时任务
- 非周期性实时任务
分时系统 | 实时系统 | |
---|---|---|
多路性 | 多终端服务 | 多路现场、多个对象、多个执行机构 |
独立性 | 终端服务互相独立、互不干扰 | 信息采集和对象控制互不干扰 |
及时性 | 用户可接受的 | 实时信息系统同分时系统 实时控制系统要求高 |
交互性 | 强 | 仅对特定服务 |
可靠性 | 一般 | 强,通常采取容错措施 |
1.2.6现代操作系统
-
网络操作系统
-
分布式操作系统
网络操作系统的更高级的形式,网络操作系统之间又主从关系,而分布式操作系统则没有
-
嵌入式操作系统
1.3操作系统的基本特征
1.3.1并发
多个事件在同一时间间隔内发生。
-
实现机制:进程
-
多道程序处理时,宏观上并发,微观上交替执行。
-
进程:
进程是系统中能够独立运行并作为资源分配的基本单位,由一组机器指令、数据和堆栈等组成,是一个动态实体。
-
线程:
一个进程中包含多个线程,一般将进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。进程比线程的开销小,调度的开销小,能够有效地提高系统内多个程序间并发执行的程度。
1.3.2 共享
资源可供内存中多个并发执行的进程/线程共同使用。
- 资源共享地方式
- 互斥共享:资源分配后到释放前,不能被其他进程所用。
- 同时访问:宏观上是同时的,微观上进程可能是交替地对资源仅从访问。
- 并发和共享是操作系统地两个最基本地特征:
- 资源的共享以程序地并行执行为条件;
- 对资源共享实施有效的管理,提高程序并行执行地程度。
1.3.3 虚拟
通过某种技术将物理实体变为若干个逻辑上的对应物,主要目的是提高资源的利用率
-
时分复用技术
亦即分时使用方式,提高资源地利用率。
-
空分复用技术
提高存储空间地利用率
-
虚拟机
1.3.4 异步
指进程地执行顺序和执行时间地不确定性

1.4 操作系统地主要功能
1.4.1 处理机管理功能
-
主要功能
- 创建和撤销进程(线程)——进程控制
- 对诸进程地运行进行协调;——进程同步
- 实现进程(线程)之间地信息交换;——进程通信
- 完成处理机资源地分配、回收调度扽功能。处理机调度地单位可为进程或线程。——进程调度。
-
进程控制
主动地改变进程地状态
-
进程同步
协调并发进程之间地推进步骤,以协调资源的共享。
- 互斥方式:主进程访问临界资源时采用这种方式。
- 同步方式:在项目合作完成任务地基础南横之间由同步机构对执行次序加以协调。
1.4.2 存储器管理功能
- 管理目标:提高利用率、方便用户使用、提供足够地存储空间、方便进程并发运行
- 内存分配:动态分配和静态分配。提高利用率,允许运行中地车光绪申请附加空间
- 内存保护:保护各个程序旨在自己的内存空间中运行,彼此互不干扰。
- 地址映射:程序中的逻辑地址到内存单元中的物理地址地映射。
- 内存扩充:虚拟存储技术,从逻辑上扩充内存容量
1.4.3 设备管理功能
- 管理目标:方便黑色被使用,提高CPU/IO设备利用率,提高I/O速率。
- 缓冲区技术:匹配CPU和外设地速度
- 设备分配和回收
- 设备独立性:用户申请的设备与实际操作地物理地址无关。
1.4.4文件管理功能
- 管理目标:对用户和系统文件进行管理,以方便用户使用并保证文件安全。
- 文件存储空间管理
- 目录管理
- 文件地读写
- 文件保护
1.4.5 操作系统与用户之间地接口
- 目标:提供一个友好地用户访问操作系统的接口
- 用户接口:
- 联机用户接口
- 脱机用户接口:为批处理作业的用户提供的。
- 程序接口
1.4.6现代操作系统的新功能
1.5 OS结构设计
1.5.1 软件工程的基本概念
-
软件:当 计算机运行时,能提供所要求的功能和性能的 指令 和 程序 的集合,以及该程序能够正确地处理信息的 数据结构 ;
-
软件工程:运用系统的、规范的和可定量的方法,来开发、运行和维护软件;目的是为了解决在软件开发中所出现的编程随意、软件质量不可保证以及维护困难等问题。
1.5.2 传统操作系统结构
-
无结构操作系统
OS时一组过程的集合,各个过程之间可以相互调用,内部不存在任何结构。
- 缺点:即庞大由杂乱,缺乏清晰的程序结构,调试困难。程序难以阅读和理解,增加了维护人员的负担。
-
模块化结构OS
按照功能划分为若干具有一定的独立性和大小的模块,每一个模块由众多服务过程盛,可以随意调用其他模块中的服务过程。
- 优点:
- 提高OS设计的正确性、可理解性和可维护性
- 增强OS的适应性
- 加速OS的开发过程
- 缺点:
- 模块划分和模块接口难保正确和合理
- 模块之间的依赖关系复杂,降低了模块之间的相对独立性。
- 优点:
-
分布式结构OS
每一层都仅使用其底层所提供的功能和服务,这样可使系统的调试和验证都变得容易。
- 优点:保证系统的正确性,扩充性和易维护性。
- 缺点:系统效率低。
1.5.3 客户/服务器模式
OS分为了两部分,一组服务器(进程),用于提供各种服务;内核,用来处理客户和服务器之间的通信。
- 优点:数据的分布处理和存储、便于集中管理、灵活性和可扩充新、已于改变应用软件。
1.5.4 面向对象的程序设计
- 优点:可修改性和可扩充性、继承性、正确性和可靠性。
1.5.5 微内核OS结构
把操作系统分成若干分别完成一组特定功能的服务进程,等待客户提出请求;而系统内核只是先操作系统的基本功能。
- 优点:提高了系统的可扩展性、增强了系统的可靠性、提供了对分布式系统的支持、融入了面向对象技术
- 存在问题:运行效率有所降低
- 现代操作系统的特点
- 微内核结构
- 多线程
- 对称处理
- 分布式操作系统
- 面向对象设计
第二章 进程的描述与控制
2.1 前驱图和程序执行
2.1.1前驱图
有向无循环图,用来描述进程之间执行的前后关系
2.1.2 程序顺序执行
- 顺序性
- 封闭性:独占全部资源
- 可再现性
2.1.3 程序并发执行

- 间断(异步)性
- 失去封闭性:共享资源
- 失去可再观性:由于共享资源导致
-
两个程序并发执行的条件:
2.2 进程的描述
2.2.1 进程的定义和特征
进程:计算机中所有程序,按照某种顺序运行的过程。
进程实体:程序段、相关的数据段、PCB
-
经典定义
进程是程序的一次执行
进程是程序及器数据再处理机上顺序执行所发生的活动
进程是程序再一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
-
传统OS的进程定义
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
-
进程的特征:
-
动态性(最基本的特征)
进程是进程实体的一次执行,进程实体具有一定的生命周期
-
并发性
多个进程实体同时存在于内存中,且能再一段时间内同时运行。
-
独立性
进程实体是一个能独立运行、独立分配资源和独立接收调度的基本单位。
-
异步性
进程各自独立导致。
-
2.2.2 进程的基本状态以及转换
- 进程的三个基本状态
-
就绪状态:可以运行,已经获得除了CPU意外的所需资源,等待分配cpu
-
执行状态:占用CPU运行
-
阻塞状态:等待某种条件,在条件满足之前无法继续满足。
-
创建状态:分配空白PCB,并填入必要的管理信息;分配运行时必须的资源;把改进程转入就绪状态并插入到就绪队列之中。
-
终止状态:将PCB清零,并将PCB返回给系统。
-
2.2.3 挂起操作和进程状态的转换
-
挂起:暂时淘汰出内存的进程
-
激活:当条件允许,被挂起的进程会再次被调回内存
2.2.4 进程管理中的数据结构
- 进程控制块PCB的作用
- 作为独立运行基本单位的标志
- 能实现间断性运行方式
- 提供进程管理所需要的信息
- 提供进程调度所需要的信息
- 实现与其他进程同步与通信
- 进程控制块中的信息
- 进程标识符:用于唯一地表示一个进程,一个进程一般有两个进程表示伏:内部标识符、外部标识符。
- 处理机状态:由相关地各种寄存器构成
- 进程调度信息:
- 进程控制信息
- 进程控制块的组织方式
- 线性方式:简单开销小,但是每次扫描整个表。
- 链接方式
- 索引方式
2.2.5 进程的上下文
- 进程执行活动全过程的静态描述
- 上文:已执行过的进程指令和数据再相关寄存器与堆栈中的内容
- 张文:正在执行的指令和数据再寄存器和堆栈中的内容
- 下文:待执行的指令和数据再寄存器与堆栈中的内容。
2.3 进程控制
对系统中全部进程实施有效管理,一般由操作系统的内核实现。
- 创建进程
- 终止已经结束的进程
- 种植无法继续运行进程
- 负责进程的状态转换
2.3.1操作系统内核
通常将一些与硬件紧密相关的模块、各种常用设备的驱动程序及运行频率较高的模块,都排在紧靠硬件的软件层中,将它们常驻内存,通常成为OS内核。
-
目的:
- 便于对这些软件进行保护,放置遭受其他应用程序的破坏
- 可以提高OS的运行效率。
-
处理机的执行状态分为两种:
- 系统态:又称为管态、内核态
- 用户态:目态。
-
两大功能:
- 支撑功能:中断处理(最基本)、时钟管理(基本)、原语
- 资源管理:进程管理、存储器管理、设备管理。
2.3.2进程的创建
-
进程的层次创建
UNIX使用,WINDOWS不用。一个进程创建进程,有父进程和子进程。
-
进程图
树
-
引起创建的事件
- 用户登录
- 作业调度
- 提供服务
- 应用请求
-
进程创建过程
- 申请空白PCB:分配数字标识符
- 为新进程分配资源
- 初始化进程控制块:装填信息
- 将新进程插入就绪队列
2.3.3进程的终止
- 进程终止的事件
- 异常结束:越界错误、写保护、非法指令、运行超时、等待超时、、、
- 外接干预:操作员或操作系统干预、父进程请求、父进程终止
- 进程终止过程
- 索引PCB、读出进程状态
- 终止执行,标记调度标志为真
- 终止孙子进程
- 将资源归还父进程或系统
- 将进程移除PCB
2.3.4进程的阻塞与唤醒
-
触发事件
- 请求系统服务
- 启动某种操作
- 新书据尚未到达
- 无新工作可以做
-
进程阻塞过程
- 出现阻塞事件后,进程自己调用原语block(),自己进程阻塞
- 把PCB状态从“执行”改为“阻塞”,将pcb插入阻塞队列。
- 调度程序重新调度,将处理机分配给其他进程,进程切换
-
唤醒时机
用wakeup()唤醒
-
唤醒过程
- 移出阻塞队列
- 修改pcb状态
- 插入就绪队列
2.3.5进程的挂起和激活
2.4进程同步
2.4.1进程同步的基本该娘
-
两种制约关系
- 间接制约关系:多个程序并发执行,共享系统资源,致使这些并发执行的程序之间形成相互制约的关系。实际上,就是访问到了临界资源,这些资源只可以进程互斥的访问。
- 直接制约关系:有的应用程序为一个任务建立了多个进程,那么,这多个进程之间就形成了相互制约关系。本质原语他们之间的相互合作。
-
异步性:由于上面的两种制约关系,进程再运行过程中是否能够获得处理机运行以及怎样的速度运行并不能由进程自身进行控制。
-
临界资源:就是指的只可以被一个进程占用,进程键采取互斥方式实现对这种资源的共享。
-
临界区:每个进程中访问临界资源的那段代码。
- 进入区:检查临界资源的状态的那部分代码。如果可以访问临界资源,设置访问标志。
- 退出区:临界区之后的代码,将临界区被访问的标志恢复为未被访问的标志。
-
同步进制应最难驯的规则:
- 空闲让进
- 忙则等待
- 有限等待
- 让权等待
2.4.2同步硬件机制
-
关中断:最简单
缺点:
- 滥用中断导致严重后果
- 影响系统效率
- 不适用于多cpu,没有办法管住其他cpu。
-
TestAndSet指令
- 定义:
- 实现:实现逻辑就是:lock是共享变量,如果lock是false就是没有被占用,使用TestAndSet函数将lock置为true然后返回false;如果lock为true,已经被占用了,那么返回的是true,lock还是true,陷入死等。
-
Swap指令
-
定义:
-
实现逻辑:lock是全局变量,如果为false,那么调用Swap后,lock和key的值交换,lock为true,key为false。如果lock是true,key也是true,那么Swap交换了没有区别,一直等待。
-
2.4.3信号量机制
-
整形信号量
一个用于标识资源数目的整型量S。智能通过两个原子操作(不可中断)来访问。不满足“让权等待”的原则。
wait(S){ while(S<=0); S--; } signal(S){ S++; }
-
记录型信号量
不存在忙等的现象,但是会出现多个进程等待访问一个临界资源的情况。
typedef struct{ int value; //表示资源数 struct process_control_block *list; //链接上述的所有的等待进程 }semaphore; wait(semaphore *S){ S->value--; if(S->value<0)block(S->list); } signal(semaphore *S){ S->value++; if(S->value<=0)wakeup(S->list); }
-
AND型信号量
针对的是多个并发进程共享多个共享资源。
基本思想:将进程再整个运行过程中需要的所有资源,一次性全部地i分配个进程,待进程使用完后再一起释放。
Swait(S1,S2,…,Sn) { if (S1>=1 && … && Sn>=1) for (i=1; i<=n; i++) Si--; else 将进程放入等待Si的队列中( Si是满足 Si<1的第一个信号量),并将进程的指令计数器指向Swait 操作。 } Ssignal(S1,S2,…,Sn) { for i=1; i<=n; i++) { Si++; 将所有等待 Si 的进程放入就绪队列中. } };
存在的问题:每一次只能获得或者释放一个单位的临界资源,效率低;有些情况下要求资源数量低于某一个值便不予分配。
-
信号量集
Swait(S1, t1, d1, …, Sn, tn, dn) { if (S1≥t1 && … &&Sn≥tn) for (i=1; i<=n; i++) Si-=di; //一次分配d个资源 else 将进程放入等待Si的队列中( Si 是满足 Si< ti的第一个信号量),并将进程的指令计数器设置为Swait 操作。 } Ssignal(S1, d1, …, Sn, dn) { for (i=1; i<=n; i++) { Si :=Si+di; //释放所有资源 将所有等待 Si 的进程放入就绪队列中. }; } //S:信号量的数量 //t:阈值 //d:需求量
2.4.5管程机制
由于信号量机制中每一个访问临界资源的进程都必须自备同步操作,管理复杂,操作不当会产生死锁。
-
管程的定义:
代表共享资源的数据结构以及由对该共享数据结构试试操作的一组过程所组成的资源管理程序共同构成了一个操作系统的资源管理模块,简称管程。
-
进程和管程的区别:
- 进程定义私有数据结构CB,管程定义公共数据结构。
- 对数据结构的操作上:进程是由顺序程序执行有关的操作,而管程主要是进行同步操作和初始化操作。
- 设置进程的目的是为了实现系统的并发性,而管程的设置则是解决共享资源的互斥使用问题。
- 进程通过调用管程中过程对共享数据结构实行操作,管程为被动工作,而进程为主动工作。
- 进程之间可以并发执行,而管程则不能与其调用者并发。
- 进程具有动态性,而管程不是,它是擦偶哦系统中的一个资源管理模块。
2.5经典同步问题
看书吧,太多了。P65
2.6进程通信
进程通信是指进程之间的信息交换。
- 特点:
- 使用方便,对用户透明。
- 高效的传送大量数据。
- 类型:共享存储器系统、管道通信系统、消息传递系统以及客户机-服务器系统。
2.6.1共享存储器类型
-
共享存储器类型
-
基于共享数据结构的通信方式
- 效率低,只适用于传递相对少量的数据。
-
基于共享存储去的通信方式
- 在存储器中划分出一块共享存储区,诸进程可通过对其中数据的读或写来实现通信。
-
-
管道通信
管道是指用于连接一个都进程和一个写进程以实现他们之间通信的一个共享文件,又名pipe文件。能够有效地传送大量数据。
管程必须具有地三个能力:互斥、同步、确认对方是否存在。
-
消息传递系统
进程间的数据交换是以格式化的消息为单位地;(报文)。分为直接通信方式和间接通信方式。
-
客户机-服务器系统
由套接字、远程过程调用和远程方法调用。
2.6.2消息传递通信地实现方式
- 直接通信方式:
发送进程利用OS所提供的发送命令,直接把消息发送给目标进程。
-
间接通信方式:
通过作为共享数据结构地实体——心想,进行通信。
- 信箱结构:信箱头、信箱体。
- 信箱的类型:私有信箱、公共信箱、共享信箱。
- 私有信箱:用户进程为自己建立一个信箱,进程结束时信箱消失。船舰进程可以读取,而其他进程只可以发送
- 共享信箱:由操作系统创建,提供给所有核准进程使用。
- 共享信箱:某进程创建,可以指明和谁共享。
2.7 线程的基本概念。
引入进程的目的是为了多个程序能并发执行,以提高资源利用率和系统吞吐量。
引入线程的目的时为了减少程序在并发执行时所付出的时空开销,时OS具有更好的并阿飞性。
2.7.1线程的引入
-
进程的两个基本属性
- 可拥有资源的独立单位
- 可独立调度和分派的基本单位(现在给线程了)。
-
好处:
- 创建/结束以一个进程花费的事件少。
- 两个进程的切换花费实现少
- 同一进程内的线程之间项目通信无序调用内核
- 适合多处理机系统
-
线程运行的三个状态
- 执行状态
- 就绪状态
- 阻塞状态
-
线程控制块TCB
与PCB类似,只不过对象是线程
-
多线程OS中的进程
- 作为系统资源分配的单位
- 可包括多个线程,且可并发执行
- 进程不是一个可执行的实体。
2.8线程的实现
2.8.1线程的实现方式
-
用户级线程ULT
- 用用户层通过线程库来实现。线程库提供对线程创建调度和管理,无需内核支持。
- 调度仍然以进程为单位。
- 线程的切换速度特别快,线程是与内核无关的。
优点:
-
线程的切换不调用内核
-
调度是用程序特定的:可以选择最好的算法。
-
ULT可以运行在任何操作系统上。
缺点:
- 大多数系统调用是阻塞的,若核心阻塞进程,则进程中所有线程将被阻塞。
- 核心只将处理器分配给进程,同一进程中的两个进程不能同时运行在两个处理器上。
-
内核支持线程 KST
- 用户进程和系统进程都是在操作系统内核的支持下运行的,与内核紧密相关。
- 内核创建由操作系统直接支持,内核在其空间内执行线程的创建、调度和管理。
- 所有线程管理由核心完成
- 线程之间的切换需要核心支持
- 进行调度以线程为基础
- 核心维护进程和线程的上下文
优点:
- 对多处理器,核心可以同时调度同一进程的多哥线程
- 阻塞是线程一级完成
- 核心例程是多线程
缺点:
- 统一进程内的线程切换调用内核,导致速度下降。
-
组合方式:
将用户线程和内核支持线程进行组合,构成ULT/KST线程。
2.8.2线程的实现
不敲啦,不敲啦,累死了物物/(ㄒoㄒ)/~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了