复旦961-CSAPP笔记

本文涵盖计算机系统性能提升的核心概念,包括流水线原理、性能分析定律、高速存储器(cache)工作方式及虚拟内存管理。深入解析流水线如何增强程序性能,AMDahl定律在性能分析中的应用,以及缓存与虚拟内存的技术细节。

整合背诵版

有总结版和精简背诵版两份,我自己记在幕布上的,传到这边还要重新转格式,所以我直接上传到百度云了。
链接:https://pan.baidu.com/s/1oRGg5f56Qlgle3QN_jyYlA
提取码:0fhx
有问题可以给我留言哈,看到会回复你。不过961真的不难,大家真的要多花时间在数学上鸭!

知识点讲解链接:

综述

1.流水线
2.性能分析定律(主推amdahl)
3.高速存储器(cache)
4.虚拟内存

MOOC袁春风计算机系统基础

(一)程序的表示、转换与链接

1.1

  1. 访问违例地址0xC0000005的含义?
  2. 32位机器sizeof(int)=4字节
  3. 在ALU中运算的数据可以是通用寄存器组(GPRs)中某个寄存器的内容,也可以是存储器中某个存储单元的内容。
  4. 指令由操作码和操作数或操作数的地址码构成;指令操作码通过CPU中的控制器进行译码;将要执行的下条指令的地址总是在程序计数器PC中
  5. 装入(Ld)指令&存储(St)指令:st是写,ld是读;ST是源寄存器->存储区(往内存存储),LD是存储区->目的寄存器(从内存读取);ST的源可以是累加器,特殊寄存器,立即数等,目的则是内存(包括MMR),LD的源可以是内存,立即数,目的则是累加器,特殊寄存器----所以一道题的选项“装入(Ld)指令指将寄存器内容写到存储单元,而存储(St)指令指将存储单元内容存入寄存器”这句话是不对的
### CSAPP实验二概述 CSAPP(Computer Systems: A Programmer's Perspective)中的DataLab实验是一个经典的练习,旨在帮助学生深入理解位级表示和操作。该实验的核心目标是通过仅使用特定的位运算符来实现一系列功能函数[^3]。 以下是关于CSAPP实验二的一些关键点: #### 实验规则 1. **不允许使用的结构**:不能使用`for`、`while`、`if`等控制流语句。 2. **允许的操作符**:只能使用`!`、`~`、`&`、`^`、`|`、`<<`、`>>`这些基本位运算符。 3. **数据类型限制**:只能使用`int`类型。 4. **常量范围**:只能使用介于`0-0xFF`之间的十六进制或十进制整型常量。 5. **操作数限制**:每道题目都有一个最大操作数限制(Max Ops),必须在此范围内完成任务。 6. **其他约束**:不得使用全局变量或其他辅助函数。 --- ### 数据实验室常见问题及其解决方案 以下是一些典型的DataLab实验问题及其实现方法的代码示例: #### 1. 计算两个数的最大值 `max(a, b)` ```c // max = a > b ? a : b; int max(int a, int b) { int diff = a - b; // 差值计算 int sign = (diff >> 31) & 0x1; // 提取符号位 return ((sign ^ 1) * a) | (sign * b); // 条件选择 } ``` 此代码利用了差值的符号位判断哪个数更大,并通过按位操作返回相应的结果。 --- #### 2. 判断一个数是否为偶数 `isEven(x)` ```c // 如果最低有效位为0,则为偶数 int isEven(int x) { return !(x & 0x1); } ``` 这里通过检查最低有效位是否为零来快速判断奇偶性。 --- #### 3. 绝对值函数 `absVal(x)` ```c // abs(x) = x >= 0 ? x : -x int absVal(int x) { int mask = (x >> 31); // 符号掩码 return (mask & (-x)) | (~mask & x); // 正负分支处理 } ``` 上述代码巧妙地运用了符号位提取和条件屏蔽技术,在不引入额外复杂度的情况下实现了绝对值计算。 --- #### 4. 将有符号数转换为无符号数 `toUnsigned(x)` ```c // toUnsigned(x) = x >= 0 ? x : INT_MAX + x + 1 int toUnsigned(int x) { int mask = (x >> 31); // 符号掩码 return (x + mask) ^ mask; // 负数补码调整 } ``` 这段代码展示了如何通过对负数进行补码修正的方式将其映射到正数空间。 --- ### 总结与建议 对于CSAPP实验二的学习者来说,掌握核心的位运算技巧至关重要。除了以上提到的具体实例外,还需要注意以下几个方面: - 对每一位的理解以及其在不同场景下的作用; - 如何合理组合多种位运算达到预期效果; - 遵循严格的编码规范并优化表达式的简洁性和效率。 如果希望进一步提升自己的能力,可以参考《敏捷软件开发》一书中有关面向对象设计的原则[^4],虽然主要讨论的是高层次抽象概念,但对于培养良好的编程习惯同样具有启发意义。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值