计算机系统结构(随记)

本文探讨了计算机系统结构中的三个关键概念:磁盘格式化后实际容量小于标称容量的原因,程序如何利用局部性提高效率,以及虚拟存储器的工作原理和优势。通过理解这些,可以更好地优化程序性能和存储管理。


一、格式化的磁盘容量为什么比最大容量要小?

在磁盘可以存储数据之前,它必须被磁盘控制器格式化。包括用表识扇区的信息填写扇区之间的间隙,标识出表面有故障的柱面并弃用。以及在每个区中预留出一组柱面作为备用,如果区中一个或者多个柱面在磁盘使用过程中坏掉,就可以使用这些备用的柱面。因为存在着这些柱面,所以磁盘制造商所说的格式化容量比最大容量要小。


二、在程序中利用局部性

存储系统被组织成为一个存储设备的层次结构,较小、较快的设备靠近顶部,较大、较慢的设备靠近底部。由于这种层次结构,程序访问存储位置的有效速率不是一个数字所能描述。相反,它是一个变化很大的程序局部性的函数,变化可以有几个数量级。

有良好的局部性的程序从快速的高速缓存存储器中访问它的大部分数据。局部性差的程序从相对慢速的DRAM主存中访问它的大部分数据。

  (1)注意内循环,它涉及大部分的计算和存储器访问。

  (2)通过按照数据对象存储在存储器中的顺序、以步长为1的来读数据,从而使得你的程序中的空间局部性最大。

  (3)一旦从存储器中读入了一个数据对象,就尽可能多地使用它,从而使得程序中的时间局部性最大。


三、虚拟存储器

主存也可以为通常由磁盘实现的辅助存储器充当Cache  -- 虚拟存储器技术

构造虚拟存储器的两个主要动机:

  (1) 允许在多道程序之间有效而安全地共享存储器

  (2) 允许单用户程序超过主要存储器的数量


在虚拟存储器中,块被称为页(page),访问缺失称为缺页. 在虚拟存储器中,处理器产生一个 虚拟地址

再结合软硬件转换为一个物理地址(physical address)

由虚拟存储器控制的两极存储器层次结构是DRAM和磁盘.  好比一本书的书名就是虚拟地址, 物理地址就是这本书在图书馆中的位置.


虚拟地址和物理地址都被划分为页,  因此一个虚页被映射到一个物理页,  当然, 一个虚页也可能不在主存中,因此无法映射到物理地址空间,  这种情况下,  页就被存在磁盘上,

物理页 可以被两个指向相同物理地址空间的虚拟地址所共享.  这种方法用来使两个不同的程序共享数据或代码. 






开发相关随记包含多个方面: - **软件开发**:在增加设计较为庞的程序时,要考虑程序结构设计,如解耦、层与层接口、模块之间关系、参数、ram、flash、运行速度等。还可学习了解aoutosar的分层结构。新的项目需在较短时间完成从零编码到交付[^1]。 - **IsaacLab开发**:遇到在spring - damping模型下,调限制刚度、damping参数后出现异常情况,几十个episode插入后不在孔周围晃,此现象与预期不符,需进一步理顺[^2]。 - **Chrome扩展程序开发**:Map是新的数据类型,可在JavaScript中用于存储键值对实现快速查找,还给出了本地缓存工具的代码实现,同时列举了一些相关学习参考资料,如ReqBin在线API测试工具、Chrome插件开发攻略等[^3]。 ```javascript let data = new Map([ ['Alice', 25], ['Bob', 30], ['Charlie', 35], ['David', 40] ]); console.log(data.get('Alice')); // 25 var myLocalStorageTool = { set: function(key, value) { localStorage.setItem(key, value); }, get: function(key) { return localStorage.getItem(key); }, remove: function(key) { localStorage.removeItem(key); }, removeAll: function() { localStorage.clear(); }, toJsonString: function(jsData) { return JSON.stringify(jsData); }, toJsData: function(jsonString) { return JSON.parse(jsonString); } }; ``` - **X86平台开发**:对于intel的X86平台,intel提供完整数据手册丰富资源,不同卷册有不同内容,如vol 1是整体介绍,vol 2是CPU部分寄存器说明等,还有PDG、硬件设计指南、散热文档、产线可制造性文档等可供参考[^4]。 - **通用开发问题**:client的定时器是通用功能,但依赖cocos2d的Scheduler类,导致移植到server端困难,使用C++标准库实现可避免该问题[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值