随笔分类 -  大学计算机课程

上一页 1 2 3 4 5 6 ··· 8 下一页
摘要:目录P607 P607 其实标记阶段就是在遍历图9-49,清楚阶段就是在遍历块找出所有的不可达的垃圾 阅读全文
posted @ 2025-08-30 08:48 最爱丁珰 阅读(6) 评论(0) 推荐(0)
摘要:这里需要对垃圾收集器做一些假设 第一点很好理解,因为垃圾收集器判断一个内存是否是垃圾的本质就是判断程序是是否还存在一个指针在引用这个内存,所以垃圾收集器当然要区分程序中哪些是指针哪些不是 第二点,如果指针指向块的内部,垃圾收集器就没有办法知道这个块的大小具体是多少(对于垃圾收集器来说,这些都是0/1 阅读全文
posted @ 2025-08-30 07:59 最爱丁珰 阅读(5) 评论(0) 推荐(0)
摘要:目录P604 P604 具体的分配的操作见下 分离的空闲链表可以同时提升吞吐率和利用率 阅读全文
posted @ 2025-08-30 07:42 最爱丁珰 阅读(5) 评论(0) 推荐(0)
摘要:目录P594 P594 我们可以采用一种结合的方案:选择堆的一块区域(而不是整个堆),从头到尾搜索然后应用最佳适配 还可以加入9.9.14的技术进一步提升性能 阅读全文
posted @ 2025-08-29 11:00 最爱丁珰 阅读(4) 评论(0) 推荐(0)
摘要:目录P593 P593 讲一下图9-36的未使用的起始位置为什么是用来对齐的:注意这里是整个堆的起点,然后图中的虚线之间就表示一个字节,有效载荷的起始位置必须是双字;如果没有这个未使用的起始位置,那么图中每一个块整体向前移动,第一个已分配块(也就是头部是16/1的块)的有效载荷显然就没有对齐了 阅读全文
posted @ 2025-08-28 22:13 最爱丁珰 阅读(8) 评论(0) 推荐(0)
摘要:目录P603 P603 下面可以看一下什么叫做“隐式空闲链表与堆块总数成正比,显式空闲链表与空闲块总数成正比” 另外讲一下分配空闲块之后的维护 然后讲几种释放空闲块之后的维护 上图中,释放的块与其之前的块都是空闲块,我们不会让两个空闲块连续在一起,所以进行了合并;合并的时候就要注意维护链表 上图中就 阅读全文
posted @ 2025-08-28 22:11 最爱丁珰 阅读(13) 评论(0) 推荐(0)
摘要:目录P598P600P602 P598 下面解释一下图9-41中的一些东西 Points to last byte of heap plus 1的意思是堆的最后一个字节的下一个字节的起始位置 mem_init里面的Malloc与malloc是有区别的,前者只是提供一大块区域作为可用堆空间的模拟,而后 阅读全文
posted @ 2025-08-26 22:52 最爱丁珰 阅读(7) 评论(0) 推荐(0)
摘要:在使用malloc函数的时候分配的是堆区的空间,但是堆区是虚拟内存啊。怎么知道在物理内存中一定有足够的空间分配呢? 这是一个非常好的问题,它触及了操作系统内存管理的核心。你的理解是正确的,malloc 分配的是虚拟内存,而程序在运行时使用的是虚拟地址空间。 简单直接的答案是:程序(以及malloc) 阅读全文
posted @ 2025-08-26 22:10 最爱丁珰 阅读(21) 评论(0) 推荐(0)
摘要:下面是一个例子 阅读全文
posted @ 2025-08-26 14:37 最爱丁珰 阅读(5) 评论(0) 推荐(0)
摘要:目录P580为什么内核要这样做?(“便利的方法来访问”)P581 P580 “Linux 也将一组连续的虚拟页面(大小等于系统中 DRAM 的总量)映射到相应的一组连续的物理页面” 这句话的意思是,Linux 内核在其虚拟地址空间中,预留了一大段连续的虚拟内存地址。这段虚拟地址空间的大小正好等于你电 阅读全文
posted @ 2025-08-26 14:35 最爱丁珰 阅读(7) 评论(0) 推荐(0)
摘要:目录P579 P579 这里图9-25里面说的“每个条目...区域”的意思指的是这个条目实际管理的虚拟内存空间的大小。比如L1页表管理整个虚拟地址,虚拟地址总大小为\(2^{48}\)字节,由于VPN 1一共有9位,所以L1页表有\(2^9\)页,于是每一页管理的虚拟地址为\(\frac{2^{48 阅读全文
posted @ 2025-08-25 23:57 最爱丁珰 阅读(9) 评论(0) 推荐(0)
摘要:为什么要有L2,而不是取消L2然后将L1的大小翻倍:此时仍然可能出现指令/数据工作集大于指令/数据缓存的情况;另外我们不能确保指令缓存大于数据缓存(虽然大部分情况如此)。涉及L2就可以减轻上面两种情况。 当然还有另外一个原因,实际上L1 d-cache索引位不能太大,因为物理地址的索引位加偏移位(C 阅读全文
posted @ 2025-08-25 23:36 最爱丁珰 阅读(7) 评论(0) 推荐(0)
摘要:目录P568 P568 解释一下为什么VPO和PPO在地址的低p位上:注意无论是虚拟页还是物理页,页的序号都是按照顺序编号的(也就是说序号相邻的页是挨在一起的);一个页的大小是\(2^p\)字节,所以地址应该每增加\(2^p\),所在页的序号就加一 阅读全文
posted @ 2025-08-22 22:34 最爱丁珰 阅读(6) 评论(0) 推荐(0)
摘要:目录P563 P563 图9-4展示的页表与虚拟内存是一样大的,但是我们知道虚拟内存总大小很大,虚拟内存不是现实存在的,但是页表是实际存储在物理内存上的,这是怎么回事?实际上,现实中的页表是多级页表,所以一个页表的大小远小于虚拟内存大小 阅读全文
posted @ 2025-08-22 21:18 最爱丁珰 阅读(5) 评论(0) 推荐(0)
摘要:虚拟页的大小是需要权衡的既要足够大(依靠局部性,从而从磁盘中获取数据的代价分摊下来很小),又要足够小(不要让数据过多占用稀有的缓存空间) 替换错了虚拟页指的是牺牲页在不久的将来又会被用到,又要从磁盘里面去读取 阅读全文
posted @ 2025-08-22 20:29 最爱丁珰 阅读(8) 评论(0) 推荐(0)
摘要:另一种虚拟化:磁盘有柱面,磁道和扇区,但是磁盘控制器将磁盘以一种连续的逻辑块呈现给内核(内核发送的虚拟地址转化为实际地址)。这个虚拟化是磁盘虚拟化 虚拟地址就是在内存虚拟化,也就是呈现给CPU的内存的结果与真实的内存的结构不同 那么为什么需要虚拟内存呢? 虚拟内存使用DRAM作为存储在磁盘上的实际数 阅读全文
posted @ 2025-08-22 20:14 最爱丁珰 阅读(6) 评论(0) 推荐(0)
摘要:目录P574 P574 图9-20上面的数字都是十六进制 c)说的4字节的块指的是图里面的一行有块0~4,每一个块是一个字节,缓存DRAM中的一个字节;标记位与TLB中的标记位是一样的,但是由于这里的例子是直接映射,所以标记位没有什么用;所以c)整体来说就是缓存了DRAM中的一些字节,DRAM每连续 阅读全文
posted @ 2025-08-22 10:45 最爱丁珰 阅读(2) 评论(0) 推荐(0)
摘要:目录P571P573 P571 根据您的描述,我们来详细计算一下为什么在32位地址空间、4KB页面和4字节PTE的情况下,页表大小是4MB。 计算过程: 虚拟地址空间大小:32位地址空间意味着有 (2^{32}) 个虚拟地址。 页面大小:4KB,即 (2^{12}) 字节。 页面数量:虚拟地址空间中 阅读全文
posted @ 2025-08-22 10:01 最爱丁珰 阅读(65) 评论(0) 推荐(0)
摘要:核心问题总览:理解TLB中的TLBT与TLBI 这一切都始于一个核心需求:如何快速将虚拟地址(VA)翻译成物理地址(PA)。TLB作为PTE(页表项)的高速缓存,是解决这个问题的关键。而TLBT和TLBI是访问这个高速缓存的“地址码”。 第1层:基础概念 —— TLB是什么?为什么需要TLBT和TL 阅读全文
posted @ 2025-08-22 09:25 最爱丁珰 阅读(42) 评论(0) 推荐(0)
摘要:好的,我们来通过一个具体的例子说明物理寻址和虚拟寻址的 SRAM 高速缓存的区别。 核心概念简述 虚拟地址 (Virtual Address, VA):由 CPU 发出的、程序看到的地址。每个进程都有自己独立的虚拟地址空间。 物理地址 (Physical Address, PA):在物理内存(DRA 阅读全文
posted @ 2025-08-22 08:38 最爱丁珰 阅读(13) 评论(0) 推荐(0)

上一页 1 2 3 4 5 6 ··· 8 下一页