![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
深入理解计算机系统读书笔记
文章平均质量分 71
记录阅读深入理解计算机系统的笔记
刘胖仔学后端
这个作者很懒,什么都没留下…
展开
-
第九章 虚拟内存 第十节 垃圾收集
1、垃圾收集器的基本知识所谓垃圾收集,就是显示的分配堆块而不去显示的释放。由垃圾收集器对已分配但是程序不再需要的堆块进行释放。1. 节点该图的节点被分成一组根节点(root node)和一组堆节点(heap node)。堆节点每个堆节点对应堆中的一个已分配块。 有向边p–>q意味着块p中的某个位置指向块q中的某个位置。根节点根节点对应于这样一种不在堆中的位置, 它们中包含指向堆中的指针。 这些位置可以是寄存器、栈里的变量, 或者是虚拟内存中读写数据区域内的全局变量。2. 可达与不原创 2022-01-04 12:59:54 · 155 阅读 · 0 评论 -
第九章 虚拟内存 第九节 动态内存分配
1、动态内存分配概述动态内存分配器维护着一个进程的虚拟内存区域, 称为堆(heap)分配器将堆视为一组不同大小的块(block)的集合来维护。每个块就是一个连续的虚拟内存片(chunk),要么是已分配的, 要么是空闲的分配器有两种风格,都要求显示的分配块,但是其不同之处在于如何释放块。显式分配器要求显示的释放已分配的块,如C中的free函数隐式分配器要求分配器检测一个已分配块何时不再被程序所使用,就释放块。2、malloc和free函数...原创 2022-01-04 11:17:26 · 859 阅读 · 0 评论 -
第九章 虚拟内存 第八节 内存映射
1、内存映射概述Linux 通过将一个虚拟内存区域与一个磁盘上的对象(object) 关联起来,以初始化这个虚拟内存区域的内容,这个过程称为内存映射(memory mapping)。虚拟内存区域可以映射到两种类型的对象中的一种:Linux文件系统中的普通文件一个区域可以映射到一个普通磁盘文件的连续部分,例如一个可执行目标文件。文件区(section)被分成页大小的片,每一片包含一个虚拟页面的初始内容。因为按需进行页面调度,所以这些虚拟页面没有实际交换进入物理内存,直到CPU第一次引用到页面(即发原创 2022-01-03 16:49:19 · 3257 阅读 · 0 评论 -
第九章 虚拟内存 第七节 案例研究:Intel Core Linux 内存系统
1、Core i7 地址翻译1. 翻译概览Core i7采用四级页表层次结构。 每个进程有它自己私有的页表层次结构。 当一个Linux进程在运行时, 虽然Core i7体系结构允许页表换进换出,但是与已分配了的页相关联的页表都是驻留在内存中的。 CR3控制寄存器指向第一级页表 (L1)的起始位置。 CR3的值是每个进程上下文的一部分, 每次上下文切换时, CR3的值都会被恢复。下图展示了其地址翻译概况。2. PTE细节1. 第一二三级页表P=1时,要求地址字段包含一个40位的物理页号,它指向原创 2022-01-01 22:08:29 · 861 阅读 · 0 评论 -
第九章 虚拟内存 第六节 地址翻译
虚拟内存地址翻译原创 2022-01-01 15:25:16 · 1435 阅读 · 0 评论 -
第九章 虚拟内存 第四、五节 虚拟内存作为内存管理和内存保护的工具
深入理解计算机系统 虚拟内存作为内存管理和内存保护的工具原创 2021-12-31 16:56:48 · 292 阅读 · 0 评论 -
第九章 虚拟内存 第三节 虚拟内存作为缓存的工具
1、虚拟内存概述1. 虚拟内存的组织形式虚拟内存被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。每字节都有一个唯一的虚拟地址, 作为到数组的索引。磁盘上数组的内容被缓存在主存中。和存储器层次结构中其他缓存一样, 磁盘(较低层)上的数据被分割成块,这些块作为磁盘和主存(较高层)之间的传输单元。VM系统通过将虚拟内存分割为称为虚拟页(VP)的大小固定的块来处理这个问题。每个虚拟页的大小为P=2p2^p2p字节。类似地,物理内存被分割为物理页(Physical Page, PP), 大小也为原创 2021-12-31 15:35:06 · 859 阅读 · 0 评论 -
第九章 虚拟内存 第一、二节 物理和虚拟寻址与地址空间
虚拟内存 物理寻址和虚拟寻址 地址空间原创 2021-12-31 10:36:40 · 509 阅读 · 0 评论 -
第九章 虚拟内存 小结
虚拟内存部分小结原创 2021-12-31 10:16:22 · 241 阅读 · 0 评论 -
第八章 异常控制流 小结
1、Linux常见进程工具STRACE: 打印一个正在运行的程序和它的子进程调用的每个系统调用的轨迹PS: 列出当前系统中的进程(包括僵死进程)。TOP:打印出关于当前进程资源使用的信息。PMAP: 显示进程的内存映射。/proc: 一个虚拟文件系统, 以ASCII文本格式输出大量内核数据结构的内容, 用户程序可以读取这些内容。比如, 输入“ cat/proc/loadavg", 可以看到你的Linux系统上当前的平均负载。2. 小结...原创 2021-12-20 00:05:13 · 183 阅读 · 0 评论 -
第八章 异常控制流 第六节 非本地跳转
1、非本地跳转的作用是C提供的一种用户级异常控制流的形式。它将控制直接从一个函数转移到另一个当前正在执行的函数, 而不需要经过正常的调用-返回序列2、非本地跳转的实现C中通过setjmp和longjmp函数来实现。1. setjmp 函数setjmp函数在env缓冲区中保存当前调用环境, 以供后面的longjmp使用, 并返回0。调用环境包括程序计数器、栈指针和通用目的寄存器。setjmp返回的值不能被赋值给变量,不过它可以安全地用在switch或条件语句的测试中2. longjmp函数原创 2021-12-19 23:58:38 · 487 阅读 · 0 评论 -
第八章 异常控制流 第五节 信号
1、信号简介一个信号就是一条小消息, 它通知进程系统中发生了一个某种类型的事件。低层的硬件异常是由内核异常处理程序处理的,正常情况下, 对用户进程而言是不可见的。信号提供了一种机制, 通知用户进程发生了这些异常。1. 常见信号SIGFPE一个进程试图除以0SIGILL一个进程执行一条非法指令SIGSEGV进程进行非法内存引用SIGINT如果当进程在前台运行时,那么内核就会发送一个SIGINT信号给这个前台进程组中的每个进程SIGKILL一个进程可以通过向另一个进程发送一个SIGK原创 2021-12-20 22:44:00 · 647 阅读 · 0 评论 -
第八章 异常控制流 第四节 进程控制
1、获取进程ID每个进程都有一个唯一的正数(非零)进程ID(PID)getpid函数返回调用进程的PID。getppid函数返回它的父进程的PID(创建调用进程的进程)。2、创建和终止进程1.进程的三种状态1. 运行要么是正在CPU执行的,要么是正在等待被调度的2. 停止进程被挂起,不会被调度当收到一些特定的信号之后,进程就会停止,直到收到另一个特殊信号之后,才再次开始运行3. 终止进程永远的停止了。进程会因为三种原因终止收到一个信号, 该信号的默认行为是终止进程从主程序返回原创 2021-12-02 17:26:05 · 454 阅读 · 0 评论 -
第八章 异常控制流 第二节 进程
1、基本概念进程的经典定义就是一个执行中程序的实例。系统中的每个程序都运行在某个进程的上下文(context)中。上下文是由程序正确运行所需的状态组成的。这个状态包括存放在内存中的程序的代码和数据,它的栈、通用目的寄存器的内容、程序计数器、环境变量以及打开文件描述符的集合。进程提供给应用程序的两个关键抽象一个独立的逻辑控制流,它提供一个假象,好像我们的程序独占地使用处理器。一个私有的地址空间,它提供一个假象,好像我们的程序独占地使用内存系统。2、 逻辑控制流如果想用调试器单步执行程序,我们会原创 2021-12-02 13:11:04 · 759 阅读 · 0 评论 -
第八章 异常控制流 第一节 异常
原创 2021-12-02 09:54:33 · 302 阅读 · 0 评论 -
第六章 存储器层次结构 第四节 高速缓存存储器
最早的计算机存储器层次结构只有三层:CPU寄存器、DRAM主存储器和磁盘存储。由于CPU和主存之间的速度差距过大,设计者们在这两者之间加入了一个SRAM高速缓存存储器,也就是L1高速缓存。后面又加入了L2、L3高速缓存,本节就是用来研究高速缓存存储器的。1、通用的高速缓存存储器组织结构...原创 2021-11-14 15:53:11 · 1398 阅读 · 0 评论 -
第六章 存储器层次结构 第三节 存储器层次结构
寄存器可以在一个时钟周期内访问SRAM可以在几个CPU时钟周期访问DRAM主存可以在几十到几百个时钟周期访问1、存储器层次结构中的缓存存储器层次结构的中心思想是,对于每个k,位于k层的更快更小的存储设备作为位于k+1层的更大更慢的存储设备的缓存。下图展示了存储器层次结构中缓存的一般性概念。第k+1层的存储器被划分成连续的数据对象组块,称为块。每个块都有一个唯一的地址或名字,使之区别于其他的块。块可以是固定大小的(通常是这样的),也可以是可变大小的(例如存储在Web服务器上的远程HTML文件)。.原创 2021-11-01 14:31:16 · 288 阅读 · 0 评论 -
第六章 存储器层次结构 第二节 局部性
局部性通常有两种不同的形式: 时间局部性和空间局部性在一个具有良好时间局部性的程序中, 被引用过一次的内存位置很可能在不远的将来再被多次引用。在一个具有良好空间局部性的程序中, 如果一个内存位置被引用了一次, 那么程序很可能在不远的将来引用附近的一个内存位置。量化评价程序中局部性的一些简单原则:重复引用相同变量的程序有良好的时间局部性。对于具有步长为K的引用模式的程序, 步长越小, 空间局部性越好。具有步长为l的引用模式的程序有很好的空间局部性。在内存中以大步长跳来跳去的程序空间局部性会很差原创 2021-10-26 14:12:31 · 396 阅读 · 0 评论 -
第六章 存储器层次结构 第一节 存储技术之固态硬盘
固态硬盘是一种基于闪存的存储技术。1、SSD的结构SSD封装插到标准硬盘插槽(通常是USB 或SATA)中,行为就和其他硬盘一样,处理来自CPU 的读写逻辑磁盘块的请求。一个SSD 封装由一个或多个闪存芯片和闪存翻译层组成闪存芯片替代传统旋转磁盘中的机械驱动器闪存翻译层是一个硬件/固件设备,扮演与磁盘控制器相同的角色,将对逻辑块的请求翻译成对底层物理设备的访问。一个闪存由B 个块的序列组成,每个块由P页组成。通常,页的大小是512 字节~ 4KB, 块是由32~128 页组成的,块的大小为原创 2021-10-26 13:44:30 · 286 阅读 · 0 评论 -
第六章 存储器层次结构 第一节 存储技术之磁盘存储
磁盘能比RAM存储更大的信息,但是读取速度上比DRAM慢了10万倍,比SRAM慢了100万倍。1. 磁盘构造磁盘是由盘片(platter)构成盘片中央有一个可以旋转的主轴,它使得盘片以固定的旋转速率旋转每个盘片有两面或者称为表面,表面覆盖着磁性记录材料。一个磁盘表面由一组磁道组成一个磁道由一组扇区组成每个扇区包含相等的数据位(通常512字节)扇区之间由一些间隙(gap)分隔开,这些间隙中不存储数据位。间隙存储用来标识扇区的格式化位磁盘是由一个或多个叠放在一原创 2021-10-26 13:25:15 · 573 阅读 · 0 评论 -
第六章 存储器层次结构 第一节 存储技术之随机访问存储器
1、随机访问存储器随机访问存储器(Random-Access Memory, RAM)分为两类: 静态的和动态的静态RAM(SRAM)比动态RAM(DRAM)更快SRAM用来作为高速缓存存储器, 既可以在CPU芯片上, 也可以在片下DRAM用来作为主存以及图形系统的帧缓冲区1.静态RAMSRAM将每个位存储在一个双稳态的(bistable)存储器单元里。每个单元是用一个六晶体管电路来实现的。这个电路有这样一个属性, 它可以无限期地保持在两个不同的电压配置(configuration)或状态( s原创 2021-10-26 10:45:00 · 1094 阅读 · 0 评论 -
第二章 信息的表示和处理 第五节 第二章小结
感觉章节小结总结的都挺好的,直接贴上来时常看看原创 2021-10-19 21:28:44 · 49 阅读 · 0 评论 -
第二章 信息的表示和处理 第四节 浮点数
1、二进制小数类比十进制小数,我们很容易理解二进制小数。一般的十进制小数可以表示如下其含义为小数点向左移动一位,值变为十分之一。在小数点左边的数字权值是10的正幂,右边的是10的负幂。同理我们可以得到一个二进制小数可以表示如下其含义为例如101.11 表示的数字为1∗22+0∗21+1∗20+1∗2−1+1∗2−2=4+0+1+12+14=5341*2^2 + 0 * 2^1 + 1 * 2^0 + 1*2{-1}+1*2^{-2} = 4 + 0 + 1+ \frac{1}{2}原创 2021-10-19 11:25:00 · 315 阅读 · 0 评论 -
第二章 信息的表示和处理 第三节 整数运算
1、无符号加法1. 原理如果不加限制的话,无符号加法的字节数量会不断地膨胀。所以必须采取一定的措施。我们采取的措施是把任何权重大于2w−12^{w-1}2w−1的位进行截断其结果与模运算一致2.溢出是指完整的整数结果不能放到数据类型的字长限制中去。...原创 2021-10-14 00:23:45 · 67 阅读 · 0 评论 -
第二章 信息的表示和处理 第二节 整数表示
1、整型数据类型c语言支持多种整型的数据类型,可以用不同的字节数量表示,并且范围不同。可以使用char、int、long等来定义大小。同时还可以指示是否是非负数(unsigned)。C语言只定义了每种数据类型必须能够表示的最大小数据范围。对于32位和64位机器来说,都有一套典型的实现。下面三图进行对比。C和C++都支持有符号(默认)和无符号数。Java只支持有符号数2、无符号数编码B2U代表 Binary to Unsigned,w代表位数其范围最小为0,最大为2w−12^w -原创 2021-09-20 20:06:52 · 134 阅读 · 2 评论 -
第二章 信息的表示和处理 第一节 信息存储
2.1 信息存储1、概述1. 几个基本概念最小的可寻址的内存单位为一个8位的块,也就是一个字节。机器级程序将内存视为一个非常大的字节数组, 称为虚拟内存 (virtual memory)。内存的每个字节 都由一个唯一的数字来标识, 称为它的地址( address),所有可能地址的集合就称为虚拟地址空间(virtual address space)顾名思义, 这 个虚拟地址空间只是一个展现给机器级程序的概念性映像。 实际的实现(见第9章)是将动态随机访问存储器(DRAM)、闪原创 2021-09-07 01:04:09 · 129 阅读 · 0 评论