随笔分类 -  Operating System

摘要:前言 内存由大量的字或字节组成,每个字或字节都有自己的地址。CPU根据程序计数器的值从内存中提取指令,这些指令可能会导致需要从特定的存储器地址进行额外的加载并将其存储到特定的存储器地址。通常,程序以二进制可执行文件的形式驻留在磁盘上,该程序必须被带入内存并放置在一个进程中才能执行。该执行过程可能会在 阅读全文
posted @ 2020-08-03 23:41 Jeffcky 阅读(549) 评论(0) 推荐(0) 编辑
摘要:前言 前不久、我们详细分析了TLB基本原理,本节我们通过一个简单的示例再次叙述TLB的算法和原理,希望借此示例能加深我们对TLB(又称之为快表,深入理解计算机系统(第三版)又称之为翻译后备缓冲区)的理解。 使用分页作为支持虚拟内存的核心机制可能会导致高性能开销,通过将地址空间划分成固定大小的小单元( 阅读全文
posted @ 2020-07-25 15:03 Jeffcky 阅读(7179) 评论(0) 推荐(1) 编辑
摘要:前言 在一个拥有32位的地址空间,4KB的页面(212),并且每个PTE为4个字节,那么页表大小为4MB(4 * 232 / 212),但若为64位地址空间,4KB的页面(212)且每个PTE为4字节,那么页表大小为16TB(4 * 264 / 212),由于页表常驻内存,占用内存会很大,所以必须对 阅读全文
posted @ 2020-06-29 08:09 Jeffcky 阅读(6060) 评论(0) 推荐(1) 编辑
摘要:前言 前面我们讲到通过TLB缓存页表加快地址翻译,通过上一节缓存原理的讲解为本节做铺垫引入TLB和缓存的关系,同时我们来完整梳理下从CPU产生虚拟地址最终映射为物理地址获取数据的整个过程是怎样的,若有错误之处,还请批评指正。 TLB和缓存串行访问(Serial TLB & Cache Access) 阅读全文
posted @ 2020-06-14 18:42 Jeffcky 阅读(7939) 评论(2) 推荐(4) 编辑
摘要:前言 本节内容计划是讲解TLB与高速缓存的关系,但是在涉及高速缓的前提是我们必须要了解操作系统缓存原理,所以提前先详细了解下缓存原理,我们依然是采取循序渐进的方式来解答缓存原理,若有叙述不当之处,还请批评指正。 缓存原理 高速缓存被划分为多个块,其大小可能不同,缓存中的块数通常为2的幂。如下为一个具 阅读全文
posted @ 2020-06-07 20:41 Jeffcky 阅读(8033) 评论(0) 推荐(9) 编辑
摘要:前言 上一节我们整体概括通过MMU将虚拟地址翻译为物理地址的转换,这个过程都是按序就班的进行,一切都是基于已提前创建、分配虚拟页、物理页以及命中的前提,只是给和我一样没怎么系统学习操作系统的童鞋首先在脑海里有个大概的印象,本节我们从源头开始分析为程序创建进程到映射到主存上整个详细过程,本文将通过大量 阅读全文
posted @ 2020-06-02 08:28 Jeffcky 阅读(3574) 评论(0) 推荐(1) 编辑
摘要:前言 由于个人对虚拟内存这块特别感兴趣,所以就直接暂且跳过其他,接下来将通过几篇文章进行详细讲解,当然其他基础内容后续在我进行相应整体学习后也会同步输出文章,比如操作系统概念、程序链接、进程管理、页面置换算法、流水线、浮点指令、内存管理、磁盘管理等内容。不管周遭的环境如何,毕竟还很菜,坚持每天让自己 阅读全文
posted @ 2020-05-29 08:02 Jeffcky 阅读(5043) 评论(5) 推荐(6) 编辑
摘要:前言 上一节内容我们对在32位操作系统下堆栈帧进行了详细的分析,本节我们继续来看看在64位操作系统下对于过程调用在处理机制上是否会有所不同呢? 堆栈帧 我们给出如下示例代码方便对照汇编代码看,和上一节有所不同的是函数调用多了几个参数。 #include <stdio.h> int main() { 阅读全文
posted @ 2020-05-19 22:55 Jeffcky 阅读(5922) 评论(5) 推荐(3) 编辑
摘要:前言 为进行基础回炉,接下来一段时间我将持续更新汇编和操作系统相关知识,希望通过屏蔽底层细节能让大家明白每节所阐述内容。当我们写下如下C代码时背后究竟发生了什么呢? #include <stdio.h> int main() { int a = 2, b = 3; int func(int a, i 阅读全文
posted @ 2020-05-18 07:55 Jeffcky 阅读(3790) 评论(3) 推荐(5) 编辑

点击右上角即可分享
微信分享提示