- 博客(11)
- 收藏
- 关注
原创 内存管理2——页面置换算法
本文分析了缺页异常的处理流程及页面置换算法。当CPU访存触发缺页异常时,操作系统会检查地址合法性并区分缺页类型:未分配的匿名页会分配物理页框,文件映射页则从磁盘读取。当内存不足时,系统采用时钟置换算法选择牺牲页,该算法利用硬件提供的访问位和脏位,优先淘汰最近未使用且未修改的页面。改进版时钟算法通过两阶段扫描处理脏页写回问题。此外,文章指出LRU算法不会出现贝拉迪现象,因其具有页面集合的超集特性,增加内存不会导致缺页次数异常增加。这些机制共同构成了现代操作系统高效的内存管理基础。
2026-01-21 12:01:23
505
原创 内存管理1——页面分配算法
本文介绍了内存管理中的页面分配算法及其优化方法。首先分析了First-Fit算法的实现过程与问题:外部碎片累积、分配效率下降和分配不均衡。接着探讨Best-Fit算法,虽减少浪费但产生小碎片且查找速度慢。然后介绍伙伴系统的2的幂次分配机制和高效合并特性,以及SLUB分配器通过对象缓存解决碎片问题。最后讨论了碎片整理技术,包括紧凑、分区对换和覆盖技术,指出虚拟内存技术虽缓解了碎片问题,但连续大块分配仍面临挑战。文章系统梳理了内存分配算法的演进与优化思路。
2026-01-20 11:49:04
489
原创 各个进程调度算法的特性与局限性
本文系统梳理了进程调度算法的核心逻辑与实现机制。从设计视角分析了CPU利用率、响应时间和公平性等关键指标,详细介绍了FCFS、SJF、RR等经典调度算法及其改进策略,重点剖析了现代多级反馈队列(MLFQ)的优化思想。文章还探讨了进程状态迁移模型、多核环境下的调度挑战,以及通过亲和度优化缓存利用的现代调度技术。整体呈现了从基础理论到工程实践的完整调度系统设计思路,为理解操作系统核心机制提供了系统性框架。
2026-01-20 00:36:37
560
原创 RISC-V 中断全流程解析:从触发到返回
在实际的 OS 启动流程中,M-mode 的固件(如 OpenSBI)会首先完成这个委托设置,将 OS 相关的陷阱全部交给 S-mode。本文的讨论将集中在 U-mode 和 S-mode 之间最常见的陷阱流程上。当我们在 RISC-V 架构上运行程序时,无论是用户态的系统调用、一个简单的时钟中断,还是一个缺页异常,CPU 都会暂停当前任务,跳转到一个预设的处理程序。但这显然是低效的,OS 内核(S-mode)需要能直接处理来自 U-mode 的请求(如系统调用)和硬件(如时钟中断)。
2025-11-04 17:24:59
1541
原创 这些年并发控制为了解决临界区问题都做了什么?以及啥是管程?
上,这种“忙等待”纯属浪费。因为持有锁的进程根本没在运行,你自旋也等不来锁。但这个方案也很烦,因为它在“检查 (Load)”和“设置 (Store)”之间。,也就是一段只允许自己一个进程执行的代码。自然地,我们想到用“锁”来保护它。调度走了,另一个进程就会趁虚而入,导致两个进程都进入了临界区,方案失败。这就漂亮地解决了“持有锁并休眠” 导致的经典死锁问题。它把“查询”和“改变”(设置为1)变成了一个。是原子的,所以它也能像 TSL 一样保护临界区。成员,不让你“随便改”。软件没招了,就得靠硬件。
2025-11-04 17:15:15
315
原创 从操作系统的视角来理解PE文件与RVA
文章摘要: 操作系统启动用户程序时,内核通过加载器解析PE文件,为进程分配虚拟地址空间并处理导入表。用户双击lab01-01.exe后,explorer.exe发起系统调用,内核创建新进程并初始化页表。加载器读取PE头,预分配地址空间,解析导入函数并填充IAT。程序运行时若触发缺页中断,内核从硬盘加载代码页至物理内存。此外,恶意代码可能通过运行时动态链接(如LoadLibrary和GetProcAddress)隐藏行为,规避静态分析。ImageBase由加载器决定,而RVA在编译时固定,共同确定程序入口点。
2025-10-08 12:29:16
279
原创 一段话讲明白CPU RAM MMU 页表 页框 TLB的位置关系以及进程执行时访问内存的整个过程
当一个进程执行时,CPU需要访问一个虚拟地址,这个请求会首先交给MMU,MMU会立即查询其内部极速的TLB。在绝大多数情况下(TLB命中),MMU会瞬间找到缓存的虚拟页到物理页框的映射关系,并立即计算出最终的物理地址交给CPU访问RAM。但如果TLB未命中,MMU的硬件电路便会启动,它会根据CPU寄存器指向的地址,去访问位于RAM中的该进程的页表,通过在页表中查找,最终定位到数据所在的物理页框地址,然后将这个新查到的映射关系存入TLB以备后用,并最终将计算出的完整物理地址交给CPU,完成对RAM的访问。
2025-10-08 12:24:16
253
原创 快速理解操作系统的启动过程
操作系统启动过程可分为三个阶段: ROM阶段(M-Mode):CPU从固定地址0x1000执行硬件固件代码,完成基本初始化后跳转至0x80000000,将控制权交给OpenSBI。 OpenSBI阶段(M-Mode):加载操作系统内核至0x80200000,并通过寄存器传递启动参数,最后跳转至内核入口。 内核阶段(S-Mode):从entry.S设置独立栈空间(sp=0x80203000),再跳转至C语言入口kern_init,完成系统初始化并输出启动信息。内核启动前MMU未启用,页表由内核后续初始化建立。
2025-10-08 12:07:07
1703
原创 WSL2下的Ubuntu系统突然无法联网的问题——检测到 localhost 代理配置,但未镜像到 wsl。nat 模式下的 wsl 不支持 localhost 代理
WSL2 的网络环境和 Windows 紧密绑定,有时候问题不是配置本身,而是网络状态缓存或适配器异常导致的。建议大家遇到类似问题时,可以:先尝试重启 WSL 网络;再不行就重启电脑;配置文件可以多做几份备份,避免重复折腾。
2025-09-22 13:36:18
334
原创 安装mysql-server时报错Sub-process /usr/bin/dpkg returned an error code (1)怎么解决
安装mysql-server时报错Sub-process /usr/bin/dpkg returned an error code (1)怎么解决
2025-07-26 03:30:41
365
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1