CSAPP-【第九章】虚拟内存-补充阅读与总结【转载】
补充阅读材料:
https://fengmuzi2003.gitbook.io/csapp3e/dixzhang-xu-ni-nei-cun
学习目标
了解物理地址和虚拟地址的区别
理解虚拟内存在缓存、内存管理与保护中所扮演的角色
掌握虚拟内存到物理内存的翻译机制
理解现代计算机系统中虚拟内存的应用
理解动态内存分配的基本概念
区别内部碎片与外部碎片
掌握管理动态内存分配的三种方法
了解垃圾回收的基本原理
了解内存使用中常见的错误
这一讲的内容,跟之前介绍的缓存系统有异曲同工之妙,唯一的差别是,因为涉及的概念和横跨的系统层级增多,难度更大了。如果遇到不明白的地方,一定要结合原书进行细致阅读理解。
从物理内存到虚拟内存
物理地址一般应用在简单的嵌入式微控制器中(汽车、电梯、电子相框等),因为应用的范围有严格的限制,不需要在内存管理中引入过多的复杂度。
但是对于计算机(以及其他智能设备)来说,虚拟地址则是必不可少的,通过 MMU(Memory management unit)把虚拟地址(Virtual Address, VA)转换为物理地址(Physical Address, PA), ...
CSAPP-【第八章】异常流控制-补充阅读与总结【转载】
补充阅读材料:
https://fengmuzi2003.gitbook.io/csapp3e/di-08-zhang-yi-chang-kong-zhi-liu
学习目标
了解异步异常与同步异常,以及异常控制流与平时的逻辑控制流的差异
理解进程的工作机制,如何通过异常来进行进程切换
理解 Linux 的进程控制机制,掌握 fork 的基本用法
了解信号的基本原理以及如何处理信号
掌握如何避免进程竞争的方法
了解非本地跳转的概念和意义
前面提到过,进程可能是计算机系统中最伟大的抽象。进程这个概念背后,其实隐藏着一整套系统级机制,从进程切换、用户态与内核态的转换到系统实时响应各种事件,都离不开一个相当熟悉又陌生的概念——异常。在这个基础上,我们会一起来看看,操作系统到底是如何工作的,为什么可以同时执行不同的程序,具体又是通过什么机制来管理这一切的呢?这一讲我们就来看看这之中的奥秘。
异常控制流
从开机到关机,处理器做的工作其实很简单,就是不断读取并执行指令,每次执行一条,整个指令执行的序列,称为处理器的控制流。到目前为止,我们已经学过了两种改变控制流的方式:
跳转和分支
调用和返回 ...
CSAPP-【第七章】链接-补充阅读与总结【转载】
补充阅读材料:
https://fengmuzi2003.gitbook.io/csapp3e/di-07-zhang-lian-jie
学习目标
理解从源代码转换到计算机可执行的二进制代码之间需要经过的处理
理解编译过程
理解链接过程,尤其是程序的组织部分
理解库的使用方式
理解 Library Interpostion 的机制及几种不同的类型
使用集成开发环境(IDE)很方便,但是在『执行』的按钮背后,其实发生了太多太多的事情。当然,作为初学者,一开始避开过多的复杂专注于学习编写代码无可厚非,但是该学的永远逃不掉,不了解自己的代码是如何一步步成为计算机课执行的程序的,就很难在遇到各种疑难杂症的时候快速定位问题所在。另外,无论是编译器还是链接器,都可以通过不同的参数进行各种定制,如果不搞清楚,恐怕只能永远依赖 IDE 了。IDE 很好,但任何东西都不能过分依赖,真正合理的应该是庖丁解牛后,挑选最适合自己的。
编译
C 语言代码最终成为机器可执行的程序,会像流水线上的产品一样接受各项处理:
预处理器:将 C 语言代码(da.c)转化成 da.i 文件(gcc –E),对应于预处理 ...
Effective C++系列
TODO
CSAPP-【第六章】存储器层次结构-补充阅读与总结【转载】
补充阅读材料:
https://fengmuzi2003.gitbook.io/csapp3e/di-06-zhang-cun-chu-qi-ceng-ci-jie-gou
学习目标
了解存储相关的概念
理解传统机械硬盘的工作机制以及如何通过总线进行数据传输
掌握局部性原理
了解内存的不同层级以及具体的应用方法
掌握缓存的机制,如何存储、载入和替换
缓存是一个非常精妙的系统,利用有限的资源给系统带来了显著的性能提升。这一讲前半部分主要是存储系统相关的概念介绍,之后我们会深入研究缓存系统并用实际的例子来学习如何最大程度利用好缓存。
概念学习
随机存取存储器
了解存储设备所用的技术以及发展趋势,对我们理解内存层级背后的原因很有帮助。
随机存取存储器(RAM, Random-Access Memory) 有两种类型:SRAM(Static RAM) 和 DRAM(Dynamic RAM),SRAM 非常快,也不需要定期刷新,通常用在处理器做缓存,但是比较贵;DRAM 稍慢一点(大概是 SRAM 速度的十分之一),需要刷新,通常用作主内存,相比来说很便宜(是 SRAM 价格的百分之一)。
...
2020年度总结
上半年:
论文在小修后发表在了PR上,实验室规矩硕士生论文的一作必须给导师…,不过因为我不打算读博,感觉影响不大,也没有做太多争辩
工作:
人体建模姿态优化:解决人体姿态漂浮感严重、帧间抖动的问题
模型部署:讲人体重建的模型部署到T4服务器上
学习:
清华大学-邓俊辉-计算几何
MIT-算法导论
书籍-CSAPP
书籍-算法导论(未读完)
书籍-计算几何:算法与应用(未开始)
CSAPP-【三四五】机器指令与程序优化-补充阅读与总结【转载】
补充阅读材料:
https://fengmuzi2003.gitbook.io/csapp3e/di-3-zhang-ji-qi-ji-bian-cheng
https://fengmuzi2003.gitbook.io/csapp3e/di-4-zhang-chu-li-qi-ti-xi-jie-gou
https://fengmuzi2003.gitbook.io/csapp3e/di-5-zhang-cheng-xu-de-you-hua
学习目标
了解基本的 CPU 架构,以及 CPU 如何进行指令计算
掌握基本的汇编语法,常见的寻址方式和运算方式
理解如何通过条件代码进行流程控制
理解过程调用和递归的底层实现机制
理解数据在内存中的存储方式
了解程序在内存中的组织形式以及缓冲区溢出漏洞攻击
利用代码执行的机制来优化已有代码
这一讲的内容比较多,考虑到现在接触汇编的机会着实不多,部分涉及具体细节的内容有删减,详情请参考书本。
基础知识
从 8086 到 Core i7
1978 年,Intel 发布了第一款 x86 指令集的微处理器——Intel 8086[1],以此拉开了 ...
CSAPP-【第二章】信息的表示和处理-补充阅读与总结【转载】
补充阅读材料:
https://fengmuzi2003.gitbook.io/csapp3e/di-er-zhang-zhong-dian-jie-du
学习目标
理解计算机系统的复杂与和理论抽象描述的不同
理解内存中数据的保存形式,以及这种方式的好处以及限制
注意避开一些常见的关于计算机的迷思
区别整型和浮点数的表达机制,并理解为什么会有这种差异
简单理解溢出出现的条件
编程迷思
无论是计算机科班出身的学生,还是半路出家的爱好者,因为现在编程难度的大幅度降低,很多时候并不需要理解底层的实现就已经可以写出过得去的代码。但是网上的一些错误理解以及教材中由于内容编排对概念所做的抽象,导致了许多『想当然』的问题。要深入理解计算机系统,得先把这些『迷思』弄清楚,这样接下来的旅程会好走很多。
计算机不只是执行程序的机器
计算机脱胎于图灵机的构想,简单来说,就是能够执行有限逻辑数学过程的计算模型。图灵机的概念很有意思,但是这里由于篇幅问题不再深入,感兴趣的话可以从维基百科[1]入门,然后就可以看看《图灵的秘密》[2]这本书,从生平到提出图灵机的论文研读都非常不错。
图灵机中最重要的两个『物理 ...
CSAPP-深入理解计算机系统-动机
daf9e1003c8b639b6138b233a83323399265b9316d23681127e4761c53525bdc4f8d29c53564a5a3b510b502c4e4a97c185f6093423764ab5cdcbdf62b2596926920f051462f6c6d9bde162128d59188ba1ba71744c425bc1f481c5079129a6f6ceddecb1fe28263eaec69d197737faa68634c07e0827e7e7ca1cd1ab22615ba2944f7404402c2d3bfb87f64a81924b230797a4f3f3ef9c23a2482929ef70ea2cabad9a6b24e643c791b61c349e9d239d22094f65b87b0f76e95b65975cf33e050d83e9b671659b601227e5f706a14bc22aeaab27b48fe8e884df2335fa0dfd585596678da1a0609a4a0b557dfbef4b2a7db9549bcd0c5601 ...
南京大学-计算机基础03-Git介绍与NEMU框架
本课程主要围绕框架代码的编译与运行进行了详细讲解,特别是如何使用Git和GitHub进行代码管理。许多在使用框架代码时遇到挑战,特别是在命令行中看到错误信息时不知所措。本次课程分为两部分:第一部分介绍了Git的基本概念及其在实验中的应用,第二部分深入探讨了如何阅读和理解NEMU框架代码。通过实例,学习了如何构建项目、管理代码版本,并利用开源社区的资源提升编程能力。
框架代码与命令行的困惑
在进行计算机系统实验时,通常会遇到对框架代码和命令行命令的理解困难,尤其在面对错误信息时容易产生挫败感。本课程旨在帮助更好地理解这些问题,并指导他们如何有效地编译和运行代码。
课程重点:
Git 和 GitHub 的使用:Git与GitHub在实验中的应用存在不同,需了解其独特的使用方式。这将帮助他们更高效地管理代码仓库,并提高实验效率。
项目构建流程:通过命令行使用make工具生成二进制文件是项目构建的关键步骤。理解这些步骤有助于减少在实验中的挫败感。
开源社区的重要性:可以利用开源社区的资源提升编程技能,学习团队合作,并通过参与开源项目获得实践经验。
Git 和 GitHub 的应用
开源社区 ...
