CSAPP
文章平均质量分 90
记录一下学CSAPP的一些笔记以及lab
Eternitykc
这个作者很懒,什么都没留下…
展开
-
CSAPP 并发编程 ——深入理解计算机系统
12.3 基于线程的并发编程到目前为止,我们已经看到了两种创建并发逻辑流的方法。在第一种方法中,我们为每个流使用了单独的进程。内核会自动调度每个进程. 而每个进程有它自己的私有地址空间,这使得流共享数据很困难。在第二种方法中,我们创建自己的逻辑流,并利用 I/O 多路复用来显式地调度流。因为只有一个进程,所有的流共享整个地址空间。本节介绍第三种方法——基于线程,它是这两种方法的混合。线程(thread)就是运行在进程上下文中的逻辑流。在本书里迄今为止,程序都是由每个进程中一个线程组成的。但是现代系统原创 2021-06-01 18:12:19 · 701 阅读 · 0 评论 -
第10章——系统级IO 下
文章目录读取文件元数据读取目录内容共享文件I/O重定向读取文件元数据应用程序能通过调用stat和fstat函数,检索到关于文件的信息(又称文件的元数据 File Metadata)#include <unistd.h>#include <sys/stat.h>int stat(const char* filename, struct stat *buf);int fstat(int fd, struct stat *buf); 若成功则返回0,出错则返回-1原创 2021-02-07 23:40:57 · 173 阅读 · 0 评论 -
第10章——系统级I/O笔记
文章目录Unix I/O1.打开文件2.关闭文件3.读和写文件RIO Package1.RIO无缓冲输入输出函数2.RIO带缓冲输入输出函数Metadata,sharing and redirectionStandard I/OClosing remarksUnix I/OLinux文件就是一个m个字节的序列,所有的IO设备(例如网络、磁盘和终端)都被模型化为文件,而所有的输入和输出都被当作对相应的文件进行读和写。这种将设备优雅的映射为文件的方式,允许Linux内核引出一个简单、低级的应用接口,称为原创 2021-01-31 12:11:41 · 326 阅读 · 0 评论 -
CSAPP第10章 系统级I/O 学习笔记
这节内容学起来比前面轻松很多,这里笔记尽量少讲一些观念的东西,尽量搞源码。文章目录UNIX I/O打开和关闭文件读和写文件用RIO包健壮地读写UNIX I/O在UNIX系统中有一个说法,一切皆文件。所有的I/O设备,如网络、磁盘都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行。这种将设备映射为文件的方式,允许UNIX内核引出一个简单、低级的应用接口,称为UNIX I/O,这使得所有的输入和输出都能以一种统一且一致的方式来执行。即1.打开文件内核返回一个小的非负整数,叫做描述符原创 2020-12-12 01:34:28 · 369 阅读 · 0 评论 -
进程间全局数据不共享
#include <csapp.c>int N=0;int main(){ pid_t p = fork(); if (p==0) { printf("进入子进程前N=%d\n",N); N=9; printf("退出子进程前N=%d\n",N); } else { printf("进入父进程前N=%d\n",N); N=3; printf("退出父进程前N=%d\n",N); } printf("return0前:N=%d\n",N); retu原创 2020-12-10 12:42:12 · 144 阅读 · 0 评论 -
CSAPP第八章 异常控制流 学习笔记(一)
系统级调用错误处理当Unix系统级函数遇到错误,通常返回-1,并设置全局整数变量errno来表示出什么错,程序员应该去检查错误。 int pid; if ( (pid = fork()) <0) { fprintf(stderr, "fork error: %s\n",strerror(errno)); exit(0); }strerror(errno)返回一个字符串,描述了errno指定的错误。可以专门用一个错误报告函数来报告错误。void unix_error(char原创 2020-12-09 12:05:33 · 385 阅读 · 0 评论 -
CSAPP第七章链接实操笔记
文章目录Part1 静态链接Part2 加载时动态链接Part3 运行时动态链接Part4 库打桩 `Library Interpositioning`1.Compile time2.Link time3.load/run timePart1 静态链接// main2.c#include <stdio.h>#include "vector.h"int x[2] = {1,2};int y[2] = {3,4};int z[2];int main(){ addvec(x,y,原创 2020-12-07 16:01:21 · 912 阅读 · 0 评论 -
解惑链接的一些小问题
在上一讲的笔记中,符号解析过程已经说过,符号解析会维护一个未解析的符号集合U,当时说感觉U一开始会把main给加进去,这里进行验证。Part11.没有main的情况int a=2;int money(){ int b=1; return 0;}这个报错了,因为没有main的定义。2.有一个main全局变量但没有main函数的情况int main=520;int money(){ int temp=1; return 0;}这个在编译链接都没有出错,说明确实是U里面原创 2020-12-06 17:06:28 · 207 阅读 · 0 评论 -
南大计算机系统基础——链接
在学CSAPP第七章链接,感觉CMU的老师讲的太快了跳过了很多细节,实在难以消化,因而去看了南大袁春风老师关于链接的讲解,感觉袁老师讲的十分清楚透彻。不过由于这一块的内容虽算不上很杂但是很多,因此在此记录一下笔记。文章目录1.可执行文件生成概述①预处理②编译③汇编④链接⑤Linux操作2.目标文件格式概述3.ELF可重定位目标文件①可重定位目标文件格式②ELF Header(ELF 头)③Section Header Table(节头表)④`man readelf`4.ELF可执行目标文件①可执行目标文件原创 2020-12-06 12:48:16 · 591 阅读 · 0 评论 -
链接后的的可执行文件反汇编结果
p: file format elf32-i386Disassembly of section .init:08048294 <_init>: 8048294: 53 push %ebx 8048295: 83 ec 08 sub $0x8,%esp 8048298: e8 00 00 00 00 call 804829d <_init+0x9> 804829d:.原创 2020-12-04 14:21:46 · 296 阅读 · 0 评论 -
CSAPP第六章学习笔记——存储器层次结构
前面的各种存储器大概看了一下,DRAM和SRAM是理解的,其他的存储器就朦朦胧胧知道是怎么回事,就不深入了,这里主要做一下Cache的笔记。我感觉Cache方面的知识其实逻辑是很清晰的,就是利用程序总是存在的空间局部性和时间局部性(其实就是写出的程序往往存在的规律。时间局部性就是之前访问的数据或指令往往在之后还会访问,空间局部性就是之前访问的数据或指令附近的地址往往在之后还会访问)但就是各种术语如set组,block块,line行,总是不知道确切指的是什么,因而在这里准确地记录一下。文章目录一、何为Ca原创 2020-12-03 21:28:41 · 910 阅读 · 1 评论 -
计算机的模拟电路基础
晶体二极管半导体硅SI,最外层4个电子,不易失电子也不易得电子,称之为本征半导体。1.如果在纯净硅中加入最外层5电子的磷PI。磷最外层5电子,相当于在原来的本征半导体中多了一个电子,这个电子可以自由移动,电子带负电,那么就称之为Negetive半导体,又叫N型半导体2.如果在本征半导体中参入一点点最外层3个电子的硼B ,本征半导体中少了个电子,相当于一些位置存在着空穴,这个空穴有渴望得到电子的能力,与正电荷的性质相同,那么就称之为Positive半导体,又叫P型半导体。P型半导体和N型半导体放在原创 2020-12-03 00:37:40 · 579 阅读 · 1 评论 -
从0到1设计一台8bit计算机
CSAPP学到第六章了,一脸懵比,有点不知所云了,所以索性从CSAPP中脱身去补点基础先,在B站看到Ele实验室的知识分享,感觉很有意思,因此记录一下过程。链接在这:从0到1设计一台计算机.第一话-人脑计算机先清楚实现的目标,是通过硬件设计运行贪吃蛇,且为了简单起见不考虑撞墙和吃自己。1.创建一条蛇,就是把蛇的数据存到计算机中,所以设计的计算机需要有存储数据的功能。2.需要判断蛇的方向来决定执行哪个方向的更新,因而需要有条件判断。3.在更新蛇头中有加法和减法的运算,所以我们的计算机要能够实现加法原创 2020-12-02 21:56:39 · 3233 阅读 · 4 评论 -
CSAPP第三章家庭作业参考答案 (部分)
3.58题目中的汇编代码为:decode2:// rdi<=>x rsi<=>y rdx<=>zsub %rdx,%rsi # y-=zimulq %rsi,%rdi # x*=ymovq %rsi,%rax # rax=ysalq $63,%rax # rax<<63sarq $63,%rax # rax>>63xorq %rdi,%rax # rax^=xret转化为C代码为:long decode2(long x,原创 2020-12-02 15:50:02 · 1437 阅读 · 0 评论 -
CSAPP二进制炸弹实验 bomb lab详细解析
前段时间刚刚昨晚bomb lab实验,记录一下我做CSAPP 二进制炸弹实验的详细过程。有什么问题可以在评论中指出,一起进步。实验目录实验准备第一关第二关第三关第四关第五关第六关实验准备首先需要下载相关的资料。代码:http://csapp.cs.cmu.edu/3e/bomb.tarGDB命令文档:http://csapp.cs.cmu.edu/3e/docs/gdbnotes-x86-64.pdf说明:http://csapp.cs.cmu.edu/3e/bomblab.pdfREADME原创 2020-12-01 12:39:00 · 12708 阅读 · 6 评论 -
CSAPP 二进制炸弹 binary bomb lab6 第六关 ——深入理解计算机系统
00000000004010f4 <phase_6>:// arg1=input(input是从外部传入的字符串) 4010f4: 41 56 push %r14 4010f6: 41 55 push %r13 4010f8: 41 54 push %r12 4010fa: 55 push %rbp 4010fb: 53原创 2020-11-30 16:11:57 · 1661 阅读 · 0 评论 -
CSAPP第三章——程序的机器级表示:学习笔记总结
花了半个多月,补完王爽老师的汇编语言后,跟着CMU的视频课+课本,学完了第三章的知识,最深的感触就是CSAPP无论是视频还是书的质量都非常的硬,不愧它的盛名。(lab6和课后的家庭作业还没做,之后再补)现在来对前面所学做一个总结。(大致按照CMU视频的顺序进行)一、Basics 基础1.使用指令新建、编辑、汇编、链接汇编语言程序①新建并编辑源代码命令:getdit sum.c说明:gedit是一个GNOME桌面环境下兼容UTF-8的文本编辑器。使用vi或者vim同样可以实现新建与编辑。②预处理原创 2020-11-29 23:46:46 · 1382 阅读 · 1 评论 -
CSAPP 二进制炸弹 binary bomb lab 5 第五关 ——深入理解计算机系统
一、Phase_5反汇编及分析0000000000401062 <phase_5>:// input in rdi 401062: 53 push %rbx 401063: 48 83 ec 20 sub $0x20,%rsp # 分配32空间 401067: 48 89 fb mov %rdi,%rbx 40106a: 64 48 8b 04 25 28 0原创 2020-11-27 17:48:09 · 1500 阅读 · 0 评论 -
CSAPP 二进制炸弹 binary bomb lab 4 第四关 ——深入理解计算机系统
Phase_4phase_4汇编代码:000000000040100c <phase_4>: 40100c: 48 83 ec 18 sub $0x18,%rsp #rsp-=0x18 401010: 48 8d 4c 24 0c lea 0xc(%rsp),%rcx #rcx=rsp+0xc 401015: 48 8d 54 24 08 lea 0x8(%rsp),%rdx #rdx=rsp+原创 2020-11-26 18:15:01 · 1641 阅读 · 0 评论 -
CSAPP 二进制炸弹 binary bomb lab 3 第三关 ——深入理解计算机系统
CSAPP bomb lab3Phase_30000000000400f43 <phase_3>: 400f43: 48 83 ec 18 sub $0x18,%rsp 400f47: 48 8d 4c 24 0c lea 0xc(%rsp),%rcx 400f4c: 48 8d 54 24 08 lea 0x8(%rsp),%rdx 400f51: be cf 25 40 00 mov $0x40原创 2020-11-25 21:47:38 · 1413 阅读 · 0 评论 -
CSAPP 二进制炸弹 binary bomb lab 2 第二关 ——深入理解计算机系统
CSAPP bomb lab21.phase_2主函数:*在分配了40内存空间并把rsp的值传入第二参数*0000000000400efc <phase_2>: 400efc: 55 push %rbp # push rbp 400efd: 53 push %rbx # push rbx 400efe: 48 83 ec 28 sub $0x28,%rsp原创 2020-11-25 21:34:37 · 1374 阅读 · 1 评论 -
CSAPP 二进制炸弹 binary bomb lab 1 第一关 ——深入理解计算机系统
CSAPP bomb lab1Phase_11.phase_1主函数:0000000000400ee0 <phase_1>: 400ee0: 48 83 ec 08 sub $0x8,%rsp 400ee4: be 00 24 40 00 mov $0x402400,%esi 400ee9: e8 4a 04 00 00 callq 401338 <strings_not_equal> #call一个比较原创 2020-11-25 20:30:54 · 1170 阅读 · 0 评论