首页 > TAG信息列表 > CSAPP

csapp-链接

链接:将各种代码和数据片段收集并组合成一个单一文件的过程,这个文件可被加载到内存并执行。 链接可执行于编译时、加载时、运行时。 代码示例: 静态链接: 编译器驱动程序 gcc 又可细分为:预处理器 cpp、编译器 ccl、汇编器 as、链接器 ld 静态链接 ld这样的静态链接器生成一个完全可

CSAPP阅读随笔——22.6.9

练习题2-10.指针与加法逆元实现的无需第三变量的两变量交换 整数运算中存在: a + (-a) = 0,a与-a互为加法逆元 利用该性质可实现如下代码: void inpace_swap_integer(int * x, int * y) { *y = (-*x) + *y; *x = *x + *y; *y = *x + (-*y); } 布尔运算中

CSAPP 之 ShellLab 详解

前言 本篇博客将会详细介绍 CSAPP 之 ShellLab 的完成过程,实现一个简易(lou)的 shell。tsh 拥有以下功能: 可以执行外部程序 支持四个内建命令,名称和功能为: quit:退出终端 jobs:列出所有后台作业 bg <job>:继续在后台运行一个处于停止状态的后台作业,<job> 可以是 PID 或者 %JID 形式 f

【深入理解计算机系统CSAPP】第六章 存储器层次结构

6 存储器层次结构 存储器系统(memory system)是一个具有不同容量、成本和访问时间的存储设备的层次结构。CPU 寄存器保存着最常用的数据。靠近 CPU 的小的、快速的高速缓存存储器(cache memory)作为一部分存储在相对慢速的主存储器(main memory)中的数据和指令的缓冲区域。主存暂

CSAPP 之 CacheLab 详解

前言 本篇博客将会介绍 CSAPP 之 CacheLab 的解题过程,分为 Part A 和 Part B 两个部分,其中 Part A 要求使用代码模拟一个高速缓存存储器,Part B 要求优化矩阵的转置运算。 解题过程 Part A 题目要求 Part A 给出了一些后缀名为 trace 的文件,文件中的内容如下图所示,其中每一行代表一

CSAPP(四)下——流水线CPU——SEQ+实现 处理器体系结构

流水线通用原理 在之前的SEQ模型中,由于一条指令的所有部分必须在一个时钟周期内完成,所以时钟周期无比的慢,所以系统的吞吐量就很慢,吞吐量即每秒能够处理的指令数量。 流水线系统的思路和工厂流水线一样,比如一个服装工厂流水线需要通过裁剪、缝合、贴商标、装袋这四个步骤,想象一下是

CSAPP(三)下——过程控制&数组分配&浮点 程序的机器级表示

本篇主要介绍机器层面对实现过程调用的支持。 过程 过程即编程语言中的函数、方法、子例程、处理器等。 当P调用Q时: 传递控制:在进入过程Q时,程序计数器必须设置成Q的起始地址,当从Q退出时,程序计数器必须设置成P中执行Q的下一条指令的地址 传递数据:P必须能够向Q提供一个或多个参数,Q

【DIY】【CSAPP-LAB】深入理解计算机系统--datalab笔记

前言 《深入理解计算机系统》一书是计算机系统入门的极好选择,从其第三版的豆瓣评分 9.8分 可见一斑。该书的起源是卡耐基梅龙大学 计算机系统入门课【Introduction to Computer System】的讲义,与其配套的还有发布在其官网上的实验,这也正是【CSAPP-LAB】这个系列所要【DIY】的。 这

CSAPP 之 DataLab 详解

前言 本篇博客将会剖析 CSAPP - DataLab 各个习题的解题过程,加深对 int、unsigned、float 这几种数据类型的计算机表示方式的理解。 DataLab 中包含下表所示的 12 个习题,其中 9 个和整数有关,3个和单精度浮点数有关。 函数名 功能描述 分数 操作符 bitXor(x, y) 使用 & 和 ~

CSAPP(三)——程序的机器级表示

x86-64中的一些处理器状态 程序计数器:下一条将要执行的指令在内存中的地址 整数寄存器文件:有16个命名的位置,每个都能存储64位的值,可以存储地址或整数数据,它们根据命名的不同,经常被用于处理不同的数据。 条件码寄存器:保存最近执行的算数或逻辑指令的状态信息,可以用来实现条件或分

【CSAPP】Optimize Lab

优化任务: 4.1 原始程序及说明: 运行环境:Linux 程序框架部分如下: 说明:生成数组时,令其依次等于 1, 2, ...,这样进行平滑处理后的数组与原数组相同,方便判断程序是否正确运行; const int N = 1920; const int M = 1080; int img[N][M], tmp[M]; // [0, N), [0, M) void init(int A[N]

CSAPP读书笔记第二章

计算机的字长 每一台计算机都有字长,指明指针数据的标称大小,字长决定了的最重要的系统参数是虚拟地址空间的最大大小。 字长决定了指针的存储大小,32位的字长的指针存储空间是4字节,64位是8个字节; 字长决定了虚拟地址的最大大小,所以32位的寻址空间最大是\(2^{32}\)Byte = 4GB,64

[笔记]CSAPP第五章 优化程序性能

第四章与CPU设计有关,暂时跳过,以后有时间再看。 编写高效程序要点: 必须选择一组合适的算法和数据结构; 必须编写出编译器能够有效优化以转换成高效可执行代码的源代码; 针对运算量特别大的计算,将一个任务分成多个部分,在多核和多处理器的某种组合上并行地计算。(第12章内容) 优化编

CSAPP:lab7 shell

实验网站 课程网站:CSAPP 源码下载 源码下载 实验文档下载 我的实验环境:Ubuntu 20.04 lab7文档解读 ​ 查看 tsh.c (tiny shell) 文件,您会看到它包含一个简单的 Unix shell 的功能骨架。为了帮助您入门,我们已经实现了不太有趣的功能。你的任务是完成下面列出的剩余的空函数。作

csapp - shell lab记录

不得不说,CMU的15213课程比SEU的计组和操作系统课强太多了(不过SEU的课也给我打下了一些基础,还是有用的)。布置的所有实验都有详细友好的指导手册,会提供程序的框架,不需要从零构建程序,让学生更专注于课程所学内容。同时还有完善的测试用例,学生在实验过程中就能知道自己写的程序是否正

CSAPP y86-64实验

仅自己可见 前两个都是热身,第三个是重头戏 但是第三个目前还没有什么头绪,先把前两个写一下记录一下想法 一开始没少折腾,因为下错成了archlab-32的代码,还因为版本不兼容折腾了半天 下对了以后依然折腾, 一个是重复定义的问题,需要加-Xlinker --allow-multiple-definition忽略 另一个

[笔记]CSAPP第二章 信息的表示和处理

大端法和小端法 排列表示一个对象的字节时的两种通用规则。注意是字节不是位,一个字节有8位。 小端法:在内存中按照从最低有效字节到最高有效字节的顺序存储对象,最低有效字节在最前面的方式。 大端法:在内存中按照从最高有效字节到最低有效字节的顺序存储对象,最高有效字节在最前面

[lab]csapp-cachelab

Cache lab 该lab主要是对应第六章存储器层次结构. 分为两部分, A: cpu cache 命中分析, B: cache 命中优化 Part A. 首先为了实现part A, 我们要安装 valgrind 软件, 它就是用来分析程序运行效率的, --trace-mem 能输出对指定命令的内存读写操作, 命中分析基于它的输出, 在给定 s

CSAPP 读书笔记:链接

链接(Linking)是将各部分代码和数据收集并组成单个文件的过程,该文件可以被加载(复制)到内存中执行。链接可以在编译时(即源代码被翻译成机器代码时)执行,也可以在加载时(即程序被加载到内存并由加载器执行时)执行,甚至还可以在运行时通过应用程序执行。链接是由称为链接器(Linker)的程序自动执

CSAPP-Lab05 Cache Lab 深入解析

本文首发于我的知乎专栏:https://zhuanlan.zhihu.com/p/484657229 实验概览 Cache Lab 分为两部分,编写一个高速缓存模拟器以及要求优化矩阵转置的核心函数,以最小化对模拟的高速缓存的不命中次数。本实验对我这种代码能力较差的人来说还是很有难度的。 在开始实验前,强烈建议先阅读

CSAPP_Lab1完成过程

文章目录 第一章实验基本信息1.1 目的1.2 实验环境与工具1.2.1 硬件环境1.2.2 软件环境1.2.3 开发工具Windows 应用下载Ubuntu 应用下载 1.3 实验预习 第二章 实验环境建立2.1 Windows下 hello程序的编辑与运行2.2 Ubuntu下 程序的编辑与运行 第三章 Windows 软硬件系统观

CSAPP lab1 datalab

#bitXor 用位运算模拟异或运算,这里用到了摩根定律: int bitXor(int x, int y) { // x^y = (~x&y) | (x~&y) = ~(~(~x&y) & ~(x&~y)) return ~(~(~x & y) & ~(x & ~y)); } #tmin 有符号整型数表示的最小数的位模式中,最高位是1,其余位全为0 int tmin(void) { return 1 << 31;

CSAPP--浮点数

一.定点表示小数 缺点:表示不了很大的数   二.IEEE关于浮点数表示法 float32:符号位1位,阶码字段:8位,小数点为23位 float32:符号位1位,阶码字段:11位,小数点为52位 三.浮点数的数值类型 1.规格化值 2.非规格值 3.特殊值 而阶码的值决定其属于那一类 当阶码的二进制不为0和2

【CSAPP】 datalab 详解

位运算还能这样玩,我是万万没想到的。 bitXor /* * bitXor - x^y using only ~ and & * Example: bitXor(4, 5) = 1 * Legal ops: ~ & * Max ops: 14 * Rating: 1 */ 意思就是说我们用 ~ 和 & 实现 ^ 。 // x ^ y = x & (~y) | (~x) & y // ~ (x | y) = ~x & ~y //

CSAPP 读书笔记:异常控制流

在计算机运行过程中,程序计数器将依次指向一系列的值:\(a_0, a_1, ..., a_n\)。其中,\(a_k\) 是其对应指令 \(I_k\) 的地址。每个从 \(a_k\) 到 \(a_{k+1}\) 的转换都称为控制转移(Control Transfer),一系列的控制转移则称为处理器的控制流(Control Flow)。 最简单的控制流便是程序中指令