CSAPP

作者: elon_wen | 来源:发表于2020-04-20 13:37 被阅读0次

每天2页。

  1. 2021年4月底,我将啃下这本700页大部头。
  2. 2020年5月底,我将学会浮点数的2进制表示。

2020/05/10 阅读内容65-66页 Day19 中断1次

发现自己对于之前看到的阿贝尔群完全没有理解。习题也留了一道没有做出来。

2020/05/11 补充
按位取反再加1的另一种表示方法是,最右边的1左边全取反


2020/05/09 阅读内容62-64页 Day18 中断1次

介绍了无符号数和补码加法中的溢出。

阿贝尔群,这个概念不知道有什么用。


2020/05/08 阅读内容60-61页 Day17 中断1次

2个4位的无符号数相加,溢出后相当于mod 16。(想起前面章节关于截断的部分)


2020/05/07 阅读内容58-59页 Day16 中断1次

感慨:要想用C写出没有Bug的代码不容易!


2020/05/06 阅读内容56-57页 Day15 中断1次

没想到昨天断了!!

无符号数的截断是对2k取mod
有符号数的截断是先转成无符号数,然后执行取mod操作后再转为有符号数


2020/05/04 阅读内容54-55页 Day14


2020/05/03 阅读内容51-53页 Day13

TMin的写法:CS:APP Web Aside DATA:TMIN:
Writing TMin in C

按目前的理解:0x80000000会按无符号的类型,先圈定一个范围,然后再取负号。


2020/05/02 阅读内容47-50页 Day12

补码转化为无符号数:如果该数为正数,则不变;如果该数为负数,则为x + 2^w。


2020/05/01 阅读内容45-46页 Day11

有符号数和无符号数一样,都可以表示为2的i次方相加的形式,唯一的差别时有符号数的最高位还要乘以-1作为权重

最高位用来表示正负这个说法不准确,应该说最高位用来表示是否为负。以“00/01/10/11”为例,10和11表示负数,00和01就表示的是非负数,因为0是非负数,因此表示的最小值的绝对值要比最大值大1


2020/04/30 阅读内容41-44页 Day11

无符号数的编码具备唯一性
双射


2020/04/29 阅读内容39-40页 Day10

XOR还可以用于取补码(可以用0x0-0xF验证下)

(XOR a b) = (OR (AND (NOT a) b) (AND (NOT b) a))

分配律、结合律待补充

x == y 等同于 (NOT (XOR x y))

&&和||是具备短路能力的运算符

右移包括逻辑右移和算数右移

2020/05/06 补充
逻辑右移:左端补k个0 -- 无符号数必须是逻辑的
算数右移:左端补k个有效位 -- 大部分有符号数采用算数右移动


2020/04/28 阅读内容37-38页 Day9

这两页主要是习题;

关于XOR的小trick:
a ^ a = 0
0 ^ a = a


2020/04/27 阅读内容34-36页 Day8

              | 不匹配 | 匹配                |
0x00359141 ->        1101011001000101000001
0x4A564504 -> 1001010010101100100010100000100

观点:用位向量表示有限集合。

2020/04/30 补充
位向量:长度固定的0/1串。位向量的运算可以定义成每个元素的运算。

布尔代数和整数运算的相似性:
AND类似于乘法/OR类似于加法
整数运算中乘法对于加法是有分配率的
不过在布尔代数中它俩互有分配率

布尔环:只有XOR/AND/NOT的运算称为布尔环。整数运算中x + (-x) = 0,x和-x互为加法逆元,而在布尔环中,x XOR x = 0,x自身是自身的加法逆元


2020/04/26 阅读内容32-33页 Day7

一个基本上已经忘记的关键字:typedef,定义一种新的数据类型

指针和数组之间应该没有本质的差别。可以用指针引用数组,也可以用数组来引用指针


2020/04/25 阅读内容29-31页 Day6

介绍了底层数据存储的2种格式,大端法和小端法。来自格列弗游记中鸡蛋的大端和小端。


2020/04/24 阅读内容21-28页 Day5

介绍的是2进制、10进制、16进制的转化,暂时没有什么特别需要记录的

2020/04/30 补充
字长的概念:指明了指针类型数据占用几个位。虚拟内存是以此作为寻址依据的(比如找到指针0x00000001对应的内存地址),所以一个32位字长的操作系统可以寻址的最大空间为0x00000000 - 0xFFFFFFFF,一共2^32 种可能。每一种可能,对应的是1个字节的数据,也就是最多有2^32 字节大约4G的存储容量。


2020/04/23 阅读内容13-20页 Day4

虚拟内存为进程提供了一个假象:每个进程都在独占内存

Amdahl定律:对系统的某一部分加速时,加速的效果取决于该部分的重要性和加速程度:

Tn = (1 - a) * To + (a * To)/k

其中:
Tn是新时间
To是旧时间
a是占比,也就是重要性
k是加速倍数,也就是加速程度

并发是通过切分时间片来同时做某事,并行是真正同时做某事。

线程级别是并发
指令级别是并行
单指令、多数据并行


2020/04/22 阅读内容11-12页 Day3

image.png

把控制权从某个进程转移到另一个进程时,会进行上下文切换

应用程序通过特殊的系统调用指令移交控制权

并发/并行


2020/04/21 阅读内容5-10页 Day2

知识点:
计算机的组成主要包括以下部分:
总线、IO、主存、CPU

从逻辑上讲,存储器是一个线性的字节数组,每个字节都有唯一的地址(数组索引),这些地址是从零开始的
任何时刻PC都指向主存中某条机器指令的地址,CPU无非是在不断的、一条条的执行指令

CPU中各种指令是以寄存器为主视角的,包括Load/Store等等。这和JVM的指令集是一致的

指令集架构是抽象、微体系结构是实现

观点:系统花费了大量的时间把信息从一个地方挪到另一个地方。利用高速缓存,可以把程序的性能提升一个数量级


2020/04/20 阅读内容1-4页 Day1

观点:信息 = 位 + 上下文
解释:不同的上下文中,同样的字节序列可能表示整数、浮点数、字符串等等

联想到计算机中指令和数据,底层存储的格式也是一致的,也是通过上下文区分

知识点:
从一个.c程序到可执行程序,需要经过以下步骤:

  1. 预处理:替换“#include <stdio.h>”的内容
  2. 编译:从高级语言翻译成汇编语言(这一步依然是文本文件)
  3. 汇编:从汇编语言翻译成机器码
  4. 链接:把printf.o这种预编译好的文件链接到上一步编译好的文件中,生成可执行文件
image.png

相关文章

  • bomb lab 解题报告

    对应课本csapp 的实验 https://hakula.xyz/csapp/bomblab.html[https...

  • 2018-10-10 TEST CSAPP

    2018-10-10 TEST CSAPP 2018-10-10 TEST CSAPP 2018-10-10 TE...

  • csapp

    CSAPP 2.27 2.30 2.39 2.40 2.41 2.42 2.43 2.44 2.47 2.58 2...

  • CSAPP

    进程 进程是操作系统对一个正在运行的程序的一种抽象。并发运行,则是说一个进程的指令与另一个进程的指令是交错执行的。...

  • CSAPP

    每天2页。2021年4月底,我将啃下这本700页大部头。2020年5月底,我将学会浮点数的2进制表示。 2020/...

  • CSAPP 炸弹实验解析上

    CSAPP(Computer Systems A Programmer's Perspective),中译名为深入...

  • 正确理解 LEAL (Load Effective Addres

    LEAL: leal S, D -> D ← &S 在 CSAPP (Computer Systems: A ...

  • 关于学习

    |–计算机 |––––c ++primer(12/18) |––––csapp(2/12) |––––TCP/IP...

  • CSAPP Cache Lab 缓存实验

    author: τtitle: CSAPP Cache Lab 缓存实验date: 2019-08-21templ...

  • CSAPP:datalab

    最近在看《深入理解计算机系统》,圣经确实是圣经,比我在学校理解计算机系统直接多了,简直没白看,真是可惜不早点知道有...

网友评论

    本文标题:CSAPP

    本文链接:https://www.haomeiwen.com/subject/mznrihtx.html