第一章 简介

「软件」如何由代码得到程序?

  • 预处理阶段:将源程序test.c进行预处理成test.i,例如将头文件、宏命令补全等等
  • 编译阶段:编译器将文本文件翻译成文本文件test.s包含了一个汇编语言程序
  • 汇编阶段:汇编器将汇编语言程序翻译成机器语言指令test.o
  • 链接阶段:将函数等单独预编译的目标文件合并到主程序中,得到可执行文件

「硬件」计算机如何运行程序?

硬件组成

  • 总线

    • 字(word),字长
  • I/O 设备

    • 输入/输出

    • 控制器、适配器

  • 主存

    • 存放程序指令和数据

    • 一个字节数组,每字节具有唯一地址

  • 处理器

    • 解释(执行)指令

    • 程序计数器(PC)指向内存中某条指令

    • 执行操作:加载、存储、操作(运算)、跳转

hello.c程序运行样例:

  1. 读取hello命令

  1. 从磁盘加载可执行文件到主存

  1. 从主存输出字符串到显示器

储存器层次结构 Memory Hierarchy

上一层的存储器作为下一层储存器的高速缓存

「抽象表示」

操作系统抽象层次

  • 文件——I/O设备
  • 虚拟内存——程序储存器
  • 进程——正在运行程序
  • 虚拟机——整个计算机

几个抽象概念

  • 进程

  • 线程

  • 虚拟内存

  • 文件

Amdahl定律

当我们对系统某个部分加速时,其对系统整体性能的影响取决于该部分的重要性加速程度

加速比计算:S=1(1−α)+α/kS={1\over(1-α)+α/k}S=(1−α)+α/k1​

α:该部分占比时间;k:性能提升比例\alpha : 该部分占比时间; k : 性能提升比例α:该部分占比时间;k:性能提升比例

并发与并行

  • 线程级并发

    • 线程
    • 单处理器
    • 多核处理器
    • 超线程
  • 指令级并行
    • 流水线
    • 超标量
  • 单指令、多数据并行
    • SIMD
    • 视音频处理

第二章 信息的表示与处理

2.1 信息储存

字数据大小

寻址和字节顺序

  • 一个block为8位,是两个十六进制数值。
  • 跨越多个字节的程序对象如何在内存中储存?
    • 连续的字节序列
    • 地址为所有字节中最小的地址
  • 大端法与小端法
    • 大端法:最高有效字节在最前面
    • 小端法:最低有效字节在最前面

C语言中的位级运算

应用 - 掩码运算

  • 0 屏蔽, F取值。

移位运算

  • 左移运算 x << k: 右端补kkk个000
  • 右移运算 x >> k
    • 逻辑右移(unsigned):左端补kkk个000
    • 算术右移(signed):左端补kkk个原最高位值

2.2 整数表示

无符号数的编码 B2Uw()B2U_w()B2Uw​()

Binary to Unsigned int:

  • 按正常位进行权运算
  • 范围:[0,2w−1][0,2^w-1][0,2w−1]

补码编码 B2Tw()B2T_w()B2Tw​()

Binary to Two’s-complement:

  • 除去最高位取负号运算以外,其他位按权运算

  • 最高位决定了符号(可以以符号位进行理解),111为负

  • 非负数时B2UwB2U_wB2Uw​ 和 B2TwB2T_wB2Tw​ 值相同

  • 范围:[−2w−1,2w−1−1][-2^{w-1},2^{w-1}-1][−2w−1,2w−1−1]

  • 000...000=0000...000=0000...000=0; 111...111=−1111...111=-1111...111=−1

有符号数和无符号数之间的转换 T2Uw()T2U_w()T2Uw​() & U2Tw()U2T_w()U2Tw​()

  • 减掉最高位的权+1

  • 加上最高位的权+1

C语言中的有符号数和无符号数

当表达式中的unsignedsigned 混用时,signed 将被强制转换为unsigned

注意:sizeof() 本身就是 unsigned long

下面这个例子将会发生内存错误:

unsigned i;
for (i = n - 1; i >= 0; --i)   // i 总是大于零,无法跳出循环f(a[i]);

扩展一个数字的位表示

无符号数

零扩展

有符号数

符号扩展,假如是负数,扩展111;假如是正数,扩展000

  • 在C语言中,遇到符号、大小同时需要转换的情况,先转换大小,最后转换符号

截断数字

删除最高位。本质上其实是取模运算。 补码运算来说,如果最高位有很多个重复的1,则可以删除前面的进行运算。

2.3 整数运算

无符号加法

定义:www 位无符号整数 xxx,yyy 之和:将 x+yx+yx+y 截断成 www 位后的无符号数

溢出:发生了截断的操作。

运算符:+wu+_w^u+wu​

无符号数求反:−wu-^u_w−wu​

/* 检测是否会溢出的函数 */
int uadd_ok(unsigned int x, unsigned int y)
{unsigned int sum = x + y;return sum >= x;
}

补码加法

定义:www 位补码数 xxx,yyy 之和:将 x+yx+yx+y 截断成 www 位后的补码数。

运算符:+wt+_w^t+wt​

/* 检测是否会溢出的函数 */
int taad_ok(int x, int y)
{int sum = x + y;int neg_over = x < 0 && y < 0 && sum >= 0;int pos_over = x >= 0 && y >= 0 && sum < 0;return !neg_over && !pos_over;
}

补码的非

运算符:−wt-_w^t−wt​

−x=-x=−x= ~x+1x+1x+1

无符号乘法

运算符:∗wu*_w^u∗wu​

做法:按位乘法运算之后,截取最低的 www 位

补码乘法

运算符:∗wt*_w^t∗wt​

做法:按位乘法运算之后,截取最低的 www 位

低位等价性:补码与无符号的乘法产生的位模式相同

/* 检查是否溢出的函数 */
int tmult_ok(int x, int y)
{int p = x * y;return !x || p / x == y;
}

乘以常数

乘以二的幂:x2kx2^kx2k = x << k

乘以不是二的幂 –> 乘法分配律成二的幂相加/减的形式

除以 222 的幂

对于无符号数来说,x >> k 逻辑右移,可以产生数值 ⌊x/2k⌋\lfloor x/2^k \rfloor⌊x/2k⌋;这个操作是向零舍入的。

对于补码数来说,x >> k 算术右移,来产生数值 ⌊x/2k⌋\lfloor x/2^k \rfloor⌊x/2k⌋;这个操作对负数是向下舍入的,不好

【CSAPP:3e 深入理解计算机系统】课堂笔记 Computer Systems from a Programmer’s Perspective相关推荐

  1. 深入理解计算机系统 第三章笔记,《深入理解计算机系统》笔记.PDF

    <深入理解计算机系统>笔记 <深入理解计算机系统>笔记 目錄 介紹 0 第1章计算机漫游 1 1.1信息就是位+上下文 1.1 1.2程序被其他程序翻译成不同的格式 1.2 1 ...

  2. c语言语句的机器级表示实训,深入理解计算机系统(笔记):程序的机器级表示...

    分析高级语言编译后生成的汇编语言. 1. 程序编码 运行如下命令得到C语言的汇编代码: unix> gcc -O1 -S code.c gcc -c选项编译源文件生产目标文件code.o: un ...

  3. 【深入理解计算机系统-学习笔记】第一章 计算机系统漫游

    第一章 计算机系统漫游 简介: 我们通过跟踪hello程序的生命周期来开始对系统的学习--从它被程序员创建开始,到在系统上运行,输出简单的消息,然后终止 我们将沿着这个程序的生命周期,简单得介绍一些逐 ...

  4. 深入理解计算机系统读书笔记

    由于这本书的前半部分习题大多是相关计算和简单汇编代码编写,所以当时都是在稿纸上练习的,不过现在那些稿纸似乎也不见了: ( 所以现在仅有后半部分的课后习题代码以及示例练习代码(家里作业习题当时并没有做, ...

  5. 《深入理解计算机系统》笔记以及知识点总结

    部分补充图片和内容来自csdn 文章目录 1 操作系统的运行 1.1运行状态 1.1.1 用户态 1.1.2 核心态 1.2 系统调用 1.3 中断和异常 1.4 linux延申 2 进程 2.1 概 ...

  6. 深入理解计算机系统读书笔记(第二章 信息的表示和处理)

    这里写自定义目录标题 第二章 信息的表示和处理 2.1 信息存储 2.1.1 十六进制表示法 2.1.2 字数据大小 2.1.3 寻址和字节顺序 2.1.4 表示字符串 2.1.5 代码表示 2.1. ...

  7. 深入理解计算机系统----读书笔记

    第二部分    信息的表示和处理 信息存储: 二进制(0101001), 八进制,十六进制(0x32FD) 字(word size)指明整数和指针数据的标称大小(normal size),对于w位的机 ...

  8. 【组队学习】【32期】深入理解计算机系统

    深入理解计算机系统 航路开辟者:李岳昆.易远哲 领航员:初晓宇 航海士:叶前坤.沈豪 基本信息 开源内容:https://github.com/datawhalechina/team-learning ...

  9. 深入理解计算机系统(第二版)读书笔记

    八月初开始接触<深入理解计算机系统>这本书,当时看的是英文版,花了一个月的时间大体上过了一遍,但我知道其实还是有很多没看懂的地方,于是借了一本中文版,如今总算可以说我真正看过了这本书,可以 ...

最新文章

  1. perl 分析mysql binlog
  2. 查询2021抚顺高考成绩,2021年抚顺高考状元是谁分数多少分,历年抚顺高考状元名单...
  3. docker添加新的环境变量_Docker环境变量
  4. 【英语学习】【加州教材】【G3】【科学】Science目录及术语表
  5. ssd1306 OLED 初始化流程
  6. 零基础入门深度学习(2) - 线性单元和梯度下降
  7. 如何用编程方式实现创建一个页面并替换掉站点首页
  8. next数组_数据结构之数组与链表
  9. [家里蹲大学数学杂志]第039期高等数学习题集
  10. URL在线编码/解码工具
  11. 神经滤镜为什么不能用,ps神经网络滤镜安装包
  12. 推荐一个专利检索的网站
  13. 自供电面包板----面包板伴侣项目介绍
  14. KALI-LINUX桥接模式下网络配置(学习笔记)
  15. 实验6 音频放大器的仿真验证
  16. C++: 生成给定范围内的所有多维索引。 模拟任意数量的嵌套循环的行为(附完整源码)
  17. STM32 OLED显示屏--SPI通信知识汇总
  18. VMware虚拟机Linux增加磁盘空间的扩容操作
  19. r5 5600u和r5 4600u参数对比哪个好?
  20. 学习笔记--EMI是什么?

热门文章

  1. SQL删除表中字段name相同的数据,需要保留一条
  2. 阿里云 mysql 日志_MySQL日志简介-阿里云开发者社区
  3. #腾讯会议:728-974-0882
  4. 2022年宁夏医院三基考试急症医学考试模拟题及答案
  5. 交换机日志删除_如何查看交换机报警日志 并导出日志 命令是什么
  6. 在小米路由器mini上安装Transmission挂BT/PT
  7. 基于eclipse开发源码分享-SSM+Activiti的公文管理系统
  8. “笨办法”学Python3,Zed A. Shaw,习题15
  9. Codeforces--839A--Arya and Bran
  10. Html.fromHtmls的使用