详细的题目要求和资源可以到 http://csapp.cs.cmu.edu/3e/labs.html 或者 http://www.cs.cmu.edu/~./213/schedule.html 获取. getbuf()实现为: unsigned getbuf() { char buf[BUFFER_SIZE]; Gets(buf); /* 没有边界检查 */ return 1; } 其中的BUFFER_SIZE是在编译时候就确定的常量. Part I: Code Injection Attack…
详细的题目要求和资源可以到 http://csapp.cs.cmu.edu/3e/labs.html 或者 http://www.cs.cmu.edu/~./213/schedule.html 获取. 在这个实验中我们需要实现自己的动态内存申请器(malloc.free.realloc) 前期准备: 完全阅读书本第9章 man 3 realloc 注意事项: 1.先从小的测试文件开始,例如short1-bal.rep 2.为了调试方便,在Makefile中将CFLAGS更改为: CFLAGS =…
bomb.c /*************************************************************************** * Dr. Evil's Insidious Bomb, Version 1.1 * Copyright 2011, Dr. Evil Incorporated. All rights reserved. * * LICENSE: * * Dr. Evil Incorporated (the PERPETRATOR) hereby…
由于http://csapp.cs.cmu.edu/并未完全开放实验,很多附加实验做不了,一些环境也没办法搭建,更没有标准答案.做了这个实验的朋友可以和我对对答案:) 实验内容和要求可在http://csapp.cs.cmu.edu/3e/labs.html获得. Data Lab [Updated 5/4/16] bits.c /* * CS:APP Data Lab * * <李秋豪 Richard Li> * * bits.c - Source file with your soluti…
详细的题目要求和资源可以到 http://csapp.cs.cmu.edu/3e/labs.html 或者 http://www.cs.cmu.edu/~./213/schedule.html 获取. 本次实验难点在Part B的64 * 64部分,主要介绍这一部分. Part A: 编写缓存模拟器 前期准备: getopt和fscanf系列库函数对于这次实验很重要,不太明白的可以man一下,或者参考这两篇文章: Linux下getopt()函数的简单使用 C 库函数 - fscanf() 注意…
详细的题目要求和资源可以到 http://csapp.cs.cmu.edu/3e/labs.html 或者 http://www.cs.cmu.edu/~./213/schedule.html 获取. 完整代码:https://paste.ubuntu.com/26257776/ 前期准备 Signal (IPC) signal(2) - Linux manual page - man7.org fork(2) - Linux manual page - man7.org wait(2) - L…
queue.h: /* * Code for basic C skills diagnostic. * Developed for courses 15-213/18-213/15-513 by R. E. Bryant, 2017 */ /* * This program implements a queue supporting both FIFO and LIFO * operations. * * It uses a singly-linked list to represent the…
详细的题目要求和资源可以到 http://csapp.cs.cmu.edu/3e/labs.html 或者 http://www.cs.cmu.edu/~./213/schedule.html 获取. 虽然我们学校第四章没有要求做实验(Architecture Lab ),但课后作业用到了Y86-64的模拟器,也是实验材料的一部分.我在编译模拟器的时候遇到了两个困难,解决后在这分享一下. 1. Tcl/Tk等命令找不到 在编译的时候我们会碰到"XXX命令找不到"的情况,这时只需要使用&…
9.11 A. 00001001 111100 B. +----------------------------+ | Parameter Value | +----------------------------+ | VPN 0x09 | | TLB index 0x01 | | TLB tag 0x02 | | TLB hit? N | | Page fault? N | | PPN 0x17 | +----------------------------+ C. 010111 11110…
8.9 关于并行的定义我之前写过一篇文章,参考: 并发与并行的区别 The differences between Concurrency and Parallel +----------------------------+ | Process pair Concurrent?| +----------------------------+ | AB N | | | | AC Y | | | | AD Y | | | | BC Y | | | | BD Y | | | | CD Y | +--…
4.52以后的题目中的代码大多是书上的,如需使用请联系 randy.bryant@cs.cmu.edu 更新:关于编译Y86-64中遇到的问题,可以参考一下CS:APP3e 深入理解计算机系统_3e Y86-64模拟器指南 流水线部分只写了偶数题号的,这几天太浮躁,落下了好多课... 4.45 A. 不正确,当REG为%rsp时,这样会压入%rsp - 8而非%rsp B. 对于 pushq REG: movq REG, -8(%rsp) subq $8, %rsp 4.46 A. 不正确,当R…
初始完成日期:2017.9.26 许可:除2.55对应代码外(如需使用请联系 randy.bryant@cs.cmu.edu),任何人可以自由的使用,修改,分发本文档的代码. 本机环境: (有一些需要在多种机器上测试的就没有试验) frank@under:~/tmp$ uname -a Linux under 4.10.0-35-generic #39~16.04.1-Ubuntu SMP Wed Sep 13 09:02:42 UTC 2017 x86_64 x86_64 x86_64 GNU…
注:tiny.c csapp.c csapp.h等示例代码均可在Code Examples获取 11.6 A. 书上写的示例代码已经完成了大部分工作:doit函数中的printf("%s", buf);语句打印出了请求行:read_requesthdrs函数打印出了剩下的请求报头,但是要注意书上写的是: void read_requesthdrs(rio_t *rp) { char buf[MAXLINE]; Rio_readlineb(rp, buf, MAXLINE); while…
7.6 +-----------------------------------------------------------------------+ |Symbol entry? Symbol type Module where defined Section | | | | buf Y extern m.o .data | | | | bufp0 Y global swap.o .data | | | | bufp1 Y local swap.o .bss | | | | swap Y…
6.22 假设磁道沿半径均匀分布,即总磁道数和(1-x)r成正比,设磁道数为(1-x)rk: 由题单个磁道的位数和周长成正比,即和半径xr成正比,设单个磁道的位数为xrz: 其中r.k.z均为常数. 所以C = (1-x)rk * xrz = (-x^2 + x) * r^2 * kz,即需要-x^2 + x最大,得到x = 0.5. 6.23 seek time : 4 ms average rotational latency : 0.5 * 60 / 15000 * 1000 = 2 ms…
5.13 A. B. 由浮点数加法的延迟,CPE的下界应该是3. C. 由整数加法的延迟,CPE的下界应该是1. D. 由A中的数据流图,虽然浮点数乘法需要5个周期,但是它没有"数据依赖",也就是说,每次循环时的乘法不需要依赖上一次乘法的结果,可以各自独立进行.但是加法是依赖于上一次的结果的(sum = sum + 乘法结果),所以该循环的"关键路径"是加法这条链.而浮点数加法的延迟为3个周期,所以CPE为3.00. 5.14 A. 由5.13中分析的,关键路径是一…
3.58 long decode2(long x, long y, long z) { int result = x * (y - z); if((y - z) & 1) result = ~result; return result; } 3.59 这个题考察的是2.3.4和2.3.5节的一个定理:w比特长度的两个数相乘,会产生一个2w长度的数,不管这两个数是无符号数还是补码表示的有符号数,把结果截取的低w比特都是相同的. 所以我们可以用无符号数乘法指令mulq实现有符号数乘法:先把数有符号扩…
10.6 1.若成功打开"foo.txt": -->1.1若成功打开"baz.txt": 输出"4\n" -->1.2若未能成功打开"baz.txt": 输出"-1\n" 2.若未能成功打开"foo.txt": -->2.1若成功打开"baz.txt": 输出"3\n" -->2.2若未能成功打开"baz.txt&…
初始完成者:哈尔滨工业大学 李秋豪 许可:除2.55对应代码外(如需使用请联系randy.bryant@cs.cmu.edu),任何人可以自由的使用,修改,分发本文档的代码. 本机环境: (有一些需要在多种机器上测试的就没有试验) frank@under:~/tmp$ uname -a Linux under 4.10.0-35-generic #39~16.04.1-Ubuntu SMP Wed Sep 13 09:02:42 UTC 2017 x86_64 x86_64 x86_64 GNU…
1. You can Russia from land here in Alaska. x /s 0x804a26c 0x804a26c:   "You can Russia from land here in Alaska." You can Russia from land here in Alaska. 2. 1 2 4 7 11 16 (黑框为取readline()中读取的字符串的地址) 得到关系式子 z[i]=z[i-1]+i(i=1,2,3,4,5) z[0]>=0…
又快有一个月没写博客了,最近在看<深入理解计算机系统>这本书,目前看完了第三章,看完这章,对程序的机器级表示算是有了一个入门,也对 C 语言里函数栈帧有了一个初步的理解. 为了加深对书本内容的认识,以后每学习完一部分章节,就完成相应书本附带的实验题目. 第三章对应的实验是 BombLab,下面是我做这个实验的过程. BombLab 分为 6 个普通关卡和一个隐形关卡,为了开始闯关,得先弄清楚从哪里开始行动. 首先使用 objdump 命令 objdump -t bomb > bomb_s…
本文是CSAPP第二章的配套实验,通过使用有限的运算符来实现正数,负数,浮点数的位级表示.通过完成这13个函数,可以使我们更好的理解计算机中数据的编码方式. 准备工作   首先去官网Lab Assignments获得实验相关的文件(也可以加我QQ获取教学视频.PPT等内容)在每个实验文件的README中都详细介绍了如何修改程序,编译程序等.建议仔细阅读,有不明白的可以留言,看到后会及时回复.   我的编译环境:Ubuntu 16.04,gcc 5.4.0.   编译时会报如下错误.   执行以下…
博客中的文章均为meelo原创,请务必以链接形式注明本文地址 Shell Lab是CMU计算机系统入门课程的一个实验.在这个实验里你需要实现一个shell,shell是用户与计算机的交互界面.普通意义上的shell就是可以接受用户输入命令的程序.它之所以被称作shell是因为它隐藏了操作系统低层的细节.完成Shell Lab你会对shell有更加深入的认识,并熟悉Linux的多进程编程方法. 编程实现是一种绝佳的学习方式,然而就像这个实验一样,很多很好的课程作业都隐藏在互联网当中.大多数人难以通…
本文是我学习<深入理解计算机系统>中网络编程部分的学习笔记. 1. Web基础       web客户端和服务器之间的交互使用的是一个基于文本的应用级协议HTTP(超文本传输协议).一个web客户端(即浏览器)打开一个到服务器的因特网连接,并且请求某些内容.服务器响应所请求的内容,然后关闭连接.浏览器读取这些内容,并把它显示在屏幕上.         对于web客户端和服务器而言,内容是与一个MIME类型相关的字节序列.常见的MIME类型:          MIME类型   描述 text/…
本章通过跟踪hello程序的生命周期来开始对计算机系统进行学习.一个源程序从它被程序员创建开始,到在系统上运行,输出简单的消息,然后终止.我们将沿着这个程序的生命周期,简要地介绍一些逐步出现的关键概念.专业术语和组成部分. @ 目录 源程序是如何存储的 源程序到可执行文件的过程 shell是什么 典型系统的硬件组成 运行hello程序 高速缓存 存储设备的层次结构 操作系统管理硬件 进程&线程 虚拟内存 并发&并行 多核处理器&多线程   好久没有更新博客了,从国庆节到现在一直在整…
title: 前言 <深入理解计算机系统>一书是入门计算机系统的极好选择,从其第三版的豆瓣评分9.8分可见一斑.该书的起源是卡耐基梅龙大学 计算机系统入门课(Introduction to Computer System)的讲义,与其配套的还有发布在其官网上的实验,这也正是[CSAPP-LAB]这个系列所要[DIY]的. 这个系列包含哪些内容? 题目简介 转述题目要求,使笔记更具可读性. 解题思路 为没有思路但也不想直接看答案的同学提供一些提示. 参考答案 自己瞎琢磨出来的答案.有代码实现,也…
<深入理解计算机系统V2>学习指导 目录 图书简况 学习指导 第一章 计算机系统漫游 第二章 信息的表示和处理 第三章 程序的机器级表示 第四章 处理器体系结构 第五章 优化程序性能 第六章 存储器层次结构 第七章 链接 第八章 异常控制流 第九章 虚拟存储器 第十章 系统级I/O 第十一章 网络编程 第十二章 并发编程 图书简况 「深入理解计算机系统(Computer Systems: A Programmer's Perspective)阅读体会」和「老赵书托(3):深入理解计算机系统」这…
引言 各位猿友们好,计算机系统系列很久没更新了,实在是抱歉之极.新的一年,为了给计算机系统系列添加一些新的元素,LZ将其更改为书的原名<深入理解计算机系统>.这本书非常厚,而且难度较高,LZ看了很久才看了四章.当然,这跟LZ最近很久没翻书有关系,最近公司的事情比较多,可让LZ愁了个愁,尤其是招人的事一直不太顺利,很多工作无法展开,也让LZ的心中一直压着一块大石. 不过事情多了,就意味着责任大了,因此LZ最近经常回家自己研究公司所用的框架,以期了如指掌,可以应付各种随即事件.这耽误了LZ不少功夫…
在写本章的内容之前,LZ先做个小广告.其实也不算是什么广告,就是LZ为了和各位猿友交流方便,另外也确实有个别猿友留言或者在博客里发短消息给LZ要联系方式.因此LZ斗胆建立了一个有关<深入理解计算机系统>这本书的交流群,当然了,如果有哪位猿友有其它方面的问题,也可以在群里提出,如果LZ有能力帮忙的话会尽量帮助各位,倘若LZ能力不足,或许也会有其它猿友可以解答. 群号在文章里就不贴了,有兴趣的猿友可以看右侧公告栏,欢迎各位大神.大牛.小牛.菜鸟踊跃加入. hello world的执行 我们以lin…
<深入理解计算机系统>Chapter 7 读书笔记 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(货被拷贝)到存储器并执行. 链接的时机 编译时,也就是在源代码被翻译成机器代码时 加载时,也就是在程序被加载器加载到存储器并执行时 运行时,由应用程序执行 链接器使分离编译称为可能. 一.编译器驱动程序 大部分编译系统提供编译驱动程序:代表用户在需要时调用语言预处理器.编译器.汇编器和链接器. 1.将示例程序从ASCⅡ码源文件翻译成可执行目标文件的步骤 ()运行…