-
背景 动手实现一个简单的Lab,主要依赖于课本第八章的内容 感觉主要是05比较难。。发现执行的顺序不太对。。原因是SIGCHLD里面waitpid参数没写对。。 后面的就相对简单了 累计大概花了10个小时的样子 实现细节 built-in comamnd built-in command 指的是shell自身的命令,因此只有少数几个,比如pwd.在上使用which pwd的时候,会提示"pwd: shell built-in command" 测试文件的构成 以trace04.txt举例 1# 2# trace04.txt - Run a background job. 3# 4/bin/echo -e …
Read More -
背景 怎么算微分。。通常有三种方法。 Symbolic Differentiation Numerical Differentiation Automatic Differentiation (auto diff) auto diff中两种主流的方式分别是forward-mode和reverse-mode 由于forward-mode的方法中,计算的时间复杂度是O(n),n是输入的参数个数。而reverse-mode中,计算的时间复杂度是O(m),m是输出节点的个数。在dnn中,n往往很大,远大于m,因此这里主要介绍reverse-mode auto diff方法。 backprop和reverse mode auto …
Read More -
背景 动手实现一个memory allocator,体会core到爆炸的乐趣(不是 trace file 结构分析 trace file 是对allocator的输入的描述,可以从mdriver.c中的 1static trace_t *read_trace(char *tracedir, char *filename); 看到Parse的逻辑,从而得到trace file的结构。 1 fscanf(tracefile, "%d", &(trace->sugg_heapsize)); /* not used */ 2 fscanf(tracefile, "%d", …
Read More -
背景 CSAPP:3e 的配套实验 地址 分成了两个部分,第一部分是模拟一下cache的miss,hit,evict的规则。第二部分是优化一个矩阵的转置,使得miss尽可能少。 PART A 给了一个标程csim-ref,要求实现一个程序,输出与该标程一致。 写的时候太心急了。。导致没看完作业要求就开始写了。。 然后就纠结了好久。。如果要访问的地址超过了一个block line的边界该怎么办。。 然而实际上题目里已经把这种情况排除了。。 For this this lab, you should assume that memory accesses are aligned properly, such that a single …
Read More -
背景 CSAPP:3e第四章配套的实验。 第四章是讲处理器架构的,章节的重点是实现一个六阶段流水线。 lab的内容也是,需要实现一个Y86-64的流水线,并进行性能调优。 准备工作 材料里面sim.tar解压之后,有可能是没办法编译通过的。 原因是tk(a windowing toolkit )在8.5版本的时候废弃了某个接口,与8.6版本不兼容。 因此需要安装tk 8.5或者更低的版本。 在archlinux/manjaro下可以通过aur安装tk85. use tk<=8.5,8.6 or above will not compile Modify the corresponding header file in …
Read More -
背景 CSAPP 处理器那章快看完了,猛然发现竟然还有个attacklab.. 之前以为每一章只有一个lab 这个lab是教大家如何找到程序的漏洞并实施攻击。 知道如何实施攻击,才能更好地写出安全的代码。 包含5个phase 前三个没有什么保护措施,栈地址是固定的,可以注入可执行代码,比较容易. 后两个加了随机栈地址以及栈上地址不可执行的保护措施,需要用Return-oriented_programming 的方式搞定. phase 1 第一个比较简单,利用buffer overflow 来将函数的返回地址,替换成一个已知函数的地址,达到执行特定函数的目的。 回忆一下函数调用的机器代码实现,需要先把函数的返回地址压栈,然后开辟栈空 …
Read More -
背景 疫情肆虐,在家百无聊赖,于是开始拆炸弹. 炸弹分为6个阶段,每个阶段必须输入一个特定的字符串,否则炸弹就会爆炸. 提供给我们的是一个.c文件和一个linux可执行文件bomb 1 2/*************************************************************************** 3* Dr. Evil's Insidious Bomb, Version 1.1 4* Copyright 2011, Dr. Evil Incorporated. All rights reserved. 5* 6* LICENSE: 7* 8* Dr. Evil …
Read More -
花了三个月的时间,终于跟完了这门编程语言课. 课程内容非常赞,而且也充分发挥了coursera平台的作用. 非要说缺点的话,就是这门课时间有点短,以及peers' assignments总是找不到人... 这么课是什么 这门课并不是在讲一门特定的编程语言,而是在讲一些通用的编程语言概念. 课程本身大体上上分为三部分,分别结合sml,racket,ruby三门语言来讲. 每部分大体先是视频内容(有同样内容的文字pdf,便于查询),然后要完成一项作业(10节中有8节是编程作业,2节是多选题的笔试) 作业过后,是备受好评的(?) peers' assignments的环节. 不过由于每个人的作业只能被其他三个人评分...所以如果没有对3 …
Read More -
JOS的environments基本可以理解成"process"进程的同义词,但是由于"process"是一个unix术语,因此使用environment这个词. Part A: User Environments and Exception Handling 查看 kern/env.c文件,看到三个全局变量: 1 struct Env *envs = NULL; // All environments 2 struct Env *curenv = NULL; // The current env 3 static struct Env *env_free_list; // Free …
Read More -
CSAPP第二章的内容以前组成原理基本都学过...所以就简单翻了翻。 对应的lab是用位运算实现各种有的没的... 题目基本都很tricky... 除了用到一些常规的位运算性质,还用到了一些奇怪的条件: * ~0x7FFFFFFF = 0x7FFFFFFF + 1 * 0xFFFFFFFF +1 = 0x00000000 * 0 == ~0+1 唯一让我觉得比较有趣的是how many bits这道题 题目要求是给一个32-bit signed int,问最少用多少位能得到它的补码表示。 考虑正数,显然,高位的连续的多个0是不必要的,只需要一个符号位的0即可。 那么对于负数,**高位的连续的多个1也是不必要的。 **原因 …
Read More