深入理解计算机系统 第2章 习题解析 Part1
之前学习CMU的15-213被劝退后,又通过华盛顿大学的Hardware Software Interface复习了书籍前面一部分的内容。两次学习后感受到《深入理解计算机系统》一书的重要性,所以决定细读该书,定个小目标,刷完该书的80%习题。由于工作后时间比较紧张,所以每周更新个5题左右。
电子书地址:
http://eol.bnuz.edu.cn/meol/common/script/preview/download_preview.jsp?fileid=2169600&resid=242120&lid=28605
Chapter 258只要理解大端小端的定义即可:
考虑一个$w$位的整数,其位表示为$[ x_{w-1},x_{w-2}, \cdots, x_{1}, x_{0}]$,其中$x_{w-1}$是最高有效位,$x_0$是最低有效位。
最低有效字节在最前面的方式,称为小端法(little endian);最高有效字节在最前面的方式,称为大端法(big endian)
#include <stdio.h>
#include <stdlib.h>
...
The Hardware Software Interface Section 11 Java vs C
课程主页:https://courses.cs.washington.edu/courses/cse351/16sp/
课程资料:
实验部分:https://github.com/vuquangtrong/HW-SW_Interface_Course
实验说明:https://courses.cs.washington.edu/courses/cse351/13sp/lab-0.html
课件:http://academictorrents.com/details/b63a566df824b39740eb9754e4fe4c0140306f4b
课程视频:https://www.bilibili.com/video/BV1Zt411s7Gg?from=search&seid=8781593976070799647
这次回顾第十一部分,这部分介绍了Java vs C。
Java vs CJava中的数据表示
整数、浮点、双精度、指针——与C相同
是的,Java有指针——它们被称为“引用”。然而,Java引用比C的一般指针有更多约束。
Null通常表示为0
字符和字符串
数组 ...
The Hardware Software Interface Section 10 Memory Allocation
课程主页:https://courses.cs.washington.edu/courses/cse351/16sp/
课程资料:
实验部分:https://github.com/vuquangtrong/HW-SW_Interface_Course
实验说明:https://courses.cs.washington.edu/courses/cse351/13sp/lab-0.html
课件:http://academictorrents.com/details/b63a566df824b39740eb9754e4fe4c0140306f4b
课程视频:https://www.bilibili.com/video/BV1Zt411s7Gg?from=search&seid=8781593976070799647
这次回顾第十部分,这部分介绍了内存分配。
第10节:内存分配主题备注:这一讲单词和字都是指word。
这一节主要有以下主题:
动态内存分配
数据结构的大小/数量只能在运行时才能知道
需要在堆上分配空间
需要释放未使用的内存,以便可以重新分配
实现
隐式空闲链表 ...
Stanford Compiler Week 3 Parsing and Top-Down Parsing
课程主页:
https://www.edx.org/course/compilers
课程视频:
https://www.bilibili.com/video/BV1NE411376V?p=20&t=6
这次回顾第三周的内容,这一周主要解析以及自顶向下的解析。
解析介绍引子
正则语言
被广泛使用的最弱的形式语言
很多应用
考虑语言:
\left\{(^{i})^{i} \mid i \geq 0\right\}该语言表示成对左右括号:
(),(()),((())),\ldots正则语言无法表达上述语言,因为正则语言只能统计$\text{cout mod } k$的值。
解析的输入输出
输入:来自词法器的符号序列
输出:程序的解析树
例子
COOL语言代码
if x = y then 1 else 2 fi
解析器输入
IF ID = ID THEN INT ELSE INT FI
解析器输出
解析器和词法器的比较
阶段
输入
输出
词法器
字符构成的字符串
符号构成的字符串
解析器
符号构成的字符串
解析树
...
The Hardware Software Interface Section 9 Virtual Memory
课程主页:https://courses.cs.washington.edu/courses/cse351/16sp/
课程资料:
实验部分:https://github.com/vuquangtrong/HW-SW_Interface_Course
实验说明:https://courses.cs.washington.edu/courses/cse351/13sp/lab-0.html
课件:http://academictorrents.com/details/b63a566df824b39740eb9754e4fe4c0140306f4b
课程视频:https://www.bilibili.com/video/BV1Zt411s7Gg?from=search&seid=8781593976070799647
这次回顾第九部分,这部分介绍了虚拟内存。
第9节:虚拟内存概述和动机进程
定义:进程是正在运行的程序的一个实例。
计算机科学中最重要的思想之一
与“程序”或“处理器”不同
进程为每个程序提供了两个关键抽象:
逻辑控制流
每个进程似乎都独占了CPU
私有虚 ...
一道有趣的数论题
之前碰到一道算法题,本质上是一道数论题,这里简单记录下。
另外查阅之前写的资料,发现也记录过几个有意思的数学小问题,以后统一归类为[有趣的算法和数学],后续碰到有意思的问题都会加以总结,以数学和算法为主。
参考资料:
https://www.cnblogs.com/tkandi/p/10417644.htmlhttps://tieba.baidu.com/p/4014319070?red_tag=3594283516
问题描述设$n$是正整数,求 $\binom {2 n}{1}, \binom{2 n}{3}, \cdots, \binom{2 n}{2 n-1}$ 的最大公约数$d$。
思路这个问题最重要的一点是想到如果
d=gcd(d_1,\ldots, d_n)那么
d \Big| \sum_{i=1}^n d_i为什么要利用这点呢,这是因为此处有如下事实:(由二项式定理)
\sum_{i=1}^n \binom{2n}{2i-1}= 2^{2n-1}所以
d| 2^{2n-1}从而$d$必然为如下形式
d= 2^m接下来就是计算$\binom{2n}{2i-1}$ ...
Stanford Compiler Quiz 1
课程主页:
https://www.edx.org/course/compilers
课程视频:
https://www.bilibili.com/video/BV1NE411376V?p=20&t=6
这次回顾Quiz 1。
Question 1How many distinct strings are in the language of the regular expression:$(0+1+ϵ)(0+1+ϵ)(0+1+ϵ)(0+1+ϵ)$?
31
12
16
32
64
81
注意此题不能使用乘法原理,因为
00\epsilon0=000\epsilon正确的计算方法应该是根据字符串长度:
\sum_{i=0}^4 2^i=2^5-1=31所以选择第一项。
Question 2Consider the string $abbbaacc$. Which of the following lexical specifications produces the tokenization $ab/bb/a/acc$ ?
[Check all that apply]
...
The Hardware Software Interface Lab 4
课程主页:https://courses.cs.washington.edu/courses/cse351/16sp/
课程资料:
实验部分:https://github.com/vuquangtrong/HW-SW_Interface_Course
实验说明:https://courses.cs.washington.edu/courses/cse351/13sp/lab-0.html
课件:http://academictorrents.com/details/b63a566df824b39740eb9754e4fe4c0140306f4b
课程视频:https://www.bilibili.com/video/BV1Zt411s7Gg?from=search&seid=8781593976070799647
参考资料:
https://blog.csdn.net/fang92/article/details/46446467
https://www.cnblogs.com/whuyt/p/4843795.html
https://blog.csdn.net/qq_3557 ...
The Hardware Software Interface Lab 3
课程主页:https://courses.cs.washington.edu/courses/cse351/16sp/
课程资料:
实验部分:https://github.com/vuquangtrong/HW-SW_Interface_Course
实验说明:https://courses.cs.washington.edu/courses/cse351/13sp/lab-0.html
课件:http://academictorrents.com/details/b63a566df824b39740eb9754e4fe4c0140306f4b
课程视频:https://www.bilibili.com/video/BV1Zt411s7Gg?from=search&seid=8781593976070799647
参考资料:
https://github.com/HeLiangHIT/Hardware_Software_Interface/blob/f223721d39c88ffb30a109922fbb7db761e6a3ee/README.md
这次完成Lab3,这次的内容 ...
Stanford Compiler Week 2 Lexical Analysis and Finite Automata
课程主页:
https://www.edx.org/course/compilers
课程视频:
https://www.bilibili.com/video/BV1NE411376V?p=20&t=6
这次回顾第二周的内容,这一周主要介绍词法分析和有限自动机。
词法分析例子考虑如下代码:
if (i == j)
Z = 0;
else
Z = 1;
代码文本表示为:
\tif (i == j)\n\t\tz = 0;\n\telse\n\t\tz = 1;
我们希望划分成如下形式:
符号
符号类
英语中:
Noun, verb, adjective,...
编程语言中:
Identifier, Keywords, '(', ')', Numbers,...
符号类对应于一组字符串
标识符(Identifier):
以字母开头的字母或数字字符串
整数(Integer):
非空数字串
关键词(Keyword):
“else”,”if”,”begin”
空白(Whitesp ...
Digital VLSI Design Lecture 4 Logic Synthesis Part 2
课程主页:
http://www.eng.biu.ac.il/temanad/digital-vlsi-design/
课程视频:
https://www.youtube.com/watch?reload=9&v=RbZ3BXbd6_k&list=PLZU5hLL_713x0_AV_rVbay0pWmED7992G
https://www.bilibili.com/video/BV1EA411n7VQ?from=search&seid=14545899898143497364
这次回顾第四讲,这一讲继续介绍了逻辑综合。
布尔最小化细化与绑定
在逻辑综合的下一步骤中,工具:
将RTL编译为布尔数据结构(细化)
将非开关量模块绑定到叶子单元(绑定)
优化布尔逻辑(最小化)
最终的设计被映射到通用的、与技术无关的逻辑门
这是综合的核心,自八十年代以来一直是计算机科学中一个非常核心的研究课题
细化例子
两级逻辑
在细化过程中,定义主要输入和输出(端口),并推导时序元素(触发器,锁存器)
这导致一组组合逻辑云:
输入端口和寄存器输出为逻辑的输入
输出端口和寄 ...
Stanford Compiler Week 1 Introduction and The Cool Programming Language
课程主页:
https://www.edx.org/course/compilers
课程视频:
https://www.bilibili.com/video/BV1NE411376V?p=20&t=6
最近开始学习编译原理,选择斯坦福的编译原理进行学习,这次回顾第一周的内容,这一周主要是课程介绍以及Cool变成语言。
介绍编译器和解释器的区别编译器编译完程序后,运行是离线的,解释器运行程序是在线的,区别如下:
编译器的结构编译器由如下几个部分构成:
词法分析(Lexical Analysis)
解析(Parsing)
语义分析(Semantic Analysis)
优化(Optimization)
代码生成(Code Generation)
第一步:识别单词(字母以上最小单位)
词法分析
词法分析将程序文本分为“单词”或“符号”:
解析
一旦单词理解了,下一步就是理解句子结构。解析=句子绘图,这里的图是一棵树:
语义分析
一旦理解了句子结构,我们可以试着理解“含义”,这一步是非常难的,来看如下例子:
上述句子中的his指谁是不明确的。
编程语言定义了严格的规 ...