摘要: # 分段 根据前面介绍到的基址+界限寄存器对的方式,虽然很好的解决了地址转换的问题,但是可以看到,它也带来了一个问题:内存浪费。 根据前面介绍到的那种内存分配处理方式,堆和栈之间会有大量的空闲空间,而前面的介绍中,这些空间都会被一次性装入内存中,那在程序运行的初期,就会有大量没有被使用的内存被强行占 阅读全文
posted @ 2023-06-17 11:27 StillLoving 阅读(8) 评论(0) 推荐(0) 编辑
摘要: # 机制 地址转换 前面说到了关于内存的虚拟化,程序内部使用的其实都是虚拟地址,那么这里就涉及到一个虚拟基地和物理地址的映射方案。 类比前面的CPU虚拟化,在CPU虚拟化中,提出了一个概念叫:受限直接运行(Limited Direct Execution,LDE)。 这种模式下,程序本身可以运行大部 阅读全文
posted @ 2023-05-28 13:02 StillLoving 阅读(14) 评论(0) 推荐(0) 编辑
摘要: # 内存操作API ## 内存类型 * 堆内存 * 栈内存 栈内存不需要程序员自己管理,一般都是编译器隐式管理,所以栈内存一般也被成为“自动”内存。 而程序员通过诸如malloc这样的函数申请的内存属于堆内存,这块区域需要程序员自己进行管控。 比如下面这段: ```C void func() { i 阅读全文
posted @ 2023-05-21 17:06 StillLoving 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 抽象:地址空间 早期操作系统 早期的操作系统定位更像是一个函数库,尤其是对内存这块其实几乎是没有什么抽象的,一块物理内存空间中,实际上就是简单的两块:OS+程序。 多道程序和分时共享 在计算机还未普及的年代,每台计算机价格极其昂贵,动辄都是上百万美金,所以这时候对计算机的利用效率就成了大家一致的追求 阅读全文
posted @ 2023-05-13 20:39 StillLoving 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 调度:多级反馈队列(MLFQ:Multi-Level Feed Queue) 续接上一节中最后的问题,没有完备的关于进程相关的知识背景,如何设计一个调度方案? 答:从历史中学习,MLFQ就是从历史经验中预测未来的一个典型例子,如果工作具有明显的阶段性行为,因此可以预测,那么此时可能会很有效,当然也需 阅读全文
posted @ 2023-05-03 10:10 StillLoving 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 进程调度:介绍(原书第七章) 问题:如何开发调度策略? 工作负载假设 在具体给出一个目标调度程序之前,先逐步分析,先给出一些列约束,这些约束看上去都非常理想化,不切实际,不过随着后面分析的深入,会逐步放开这些约束,这样最终的方案就是想要的一个比较理想的调度策略了。 假设如下: 每个工作运行时间相同 阅读全文
posted @ 2023-04-24 21:43 StillLoving 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 机制:受限直接执行(原书第六章) 时分共享技术带来的两个挑战 性能问题即 :在不增加系统开销的情况下实现虚拟化 控制权问题,如何有效的运行进程同时保留对CPU的控制 因此这里的目标就是:操作系统必须以高性能的方式虚拟化CPU,同时保持对系统的控制 基本技巧:受限直接执行 前面介绍过,操作系统在运行程 阅读全文
posted @ 2023-04-21 20:04 StillLoving 阅读(14) 评论(0) 推荐(0) 编辑