CSAPP 学习笔记 Chapter one

【操作系统】CSAPP学习笔记 CSAPP学习笔记 前言 在阅读本书前,最好先了解一下书本的结构,然后根据结构,网上查查网评。最好能找到一些最佳阅读技巧。可以给自己定一个大一点的目标,比如,期望读完这本书,可以自己设计一个操作系统。而不是仅仅学会给代码调优(这个目的会让你走火入魔)。不要企图或者期待这本书给你带来很多开箱即用的最佳实践。你不是在刷算法题。 阅读时的模式:明白技术点所要解决的问题,以及如何解决的。(问题驱动阅读) ... 阅读详情

写在读书前

本学期之前就听过这本书的大名,一直没有机会好好读一读。正好到了大三下,课程稍微少了一些,能够留时间出来专门来读书。翻了一些别人推荐的书单,有算法的,计算机系统的,还有各个具体CS子方向的。到目前为止,操作系统、汇编、计算机组成原理等专业大课都已经学完,虽然对这些方面都有了较为系统的认知,但是对之间许多知识了解得还不够透彻,掌握不牢。加之到目前为止也有一定的代码量了,在很多问题实现时,也需要理解底层的一些知识。基于这样的一些原因,选择了CSAPP,综合了这几个学科,再认真地过一遍,不说融会贯通,至少把知识掌握得更加牢固,减少以后实践的潜在盲点。

打算这学期把这本书读完,做笔记也同时是一种自我监督。


Chapter one

本章主要是一些概述性内容,但不乏很多精辟的总结。

1.1
  1. “源程序实际上就是由值0和1组成的位(bit)序列”
    不止是源程序,所有x都是系统中的信息——包括磁盘文件、程序、用户数据、网络数据都是二进制序列,计算机能处理的也就是比特流。
  2. “区别不同数据对象唯一方法是我们读到这些数据对象时的上下文,一个同样的字节序列,在不同的上下文中,可能表示一个整数、浮点数、字符串或者机器指令”
    计算机其实只能识别二进制0/1,并不知道比特流的真正含义,每个序列是什么意思都是人为规定的,设计人员规定好了每个比特序列的意思后,在设计底层硬件结构时进行表示转换,对上层提供统一的接口。
1.2
  1. “对于一个C语言程序,每条C语言语句都要被其他程序转化为一些列的低级机器语言指令,将它们再按一种称为可执行目标程序的格式打包存放”
    这个翻译过程可以分为4个阶段:
    • 预处理:将头文件插入到程序中,得到另一个C程序
    • 编译:将C程序翻译成汇编语言程序
    • 汇编:将汇编语言程序翻译成机器语言指令,打包成可重定位目标程序的格式,保存到.o文件中
    • 链接:将程序中调用的其他模块(如printf函数)的.o文件与该文件合并,得到可执行目标文件,可以被系统执行,加载到内存中
1.4
  1. “在unix系统上运行可执行文件,我们将文件名输入到称为外壳(shell)的应用程序中,它实际上是一个命令行解释器,输出一个提示符,等待输入一行命令,根据命令内容进行相应操作”
    shell其实就是一个应用程序
  2. “控制器是置于I/O设备本身的或者系统的主板上的芯片组,而适配器则是一块插在主板插槽上的卡”
  3. “主存是由一组动态随机存取存储器(DRAM)芯片组成的,逻辑上说就是一个线性的字节数组,数组索引就是地址”
  4. “程序执行时,数据经过I/O桥到达CPU再到达主存,DMA可以省去经过CPU的这个过程,程序加载到主存后,逐条指令加载到CPU寄存器中,再送到相应位置(显示屏等)”
1.5
  1. “系统花费了大量时间把信息从一个地方挪到另一个地方,这些复制就是开销,系统设计者的目标就是减少这样的开销”
  2. “利用缓存的局部性原理可以减少开销”
    局部性原理就是当前执行指令的周围的执行很可能将要执行
1.6
  1. “在CPU和主存间插入一个更小更快的存储设备能大大较少开销,多种不同类型的存储设备有机结合形成了存储体系”
    某一层的存储器作为低一级的高速缓存,CPU->Cache->主存->硬盘->网络服务器的存储器
1.7
  1. “操作系统的抽象概念:文件是对I/O设备的抽象表示,虚拟存储器是对主存和磁盘I/O的抽象表示,进程是对处理器、主存和I/O设备的抽象表示”
    将这个概念抽象出来,隔绝了底层硬件,为上层用户提供统一接口
  2. “并发执行,是指一个进程的指令和另一个进程指令交错执行,这种交错执行机制就是上下文切换”
    并发可以理解为一个单核CPU运行多个程序,而并行可以理解为一个多核CPU的每个核上运行单个程序
  3. “虚拟存储器的基本思想,把一个进程的虚拟存储器的内容存储到磁盘上,用主存作为磁盘的高速缓存”
  4. “文件就是字节序列”
1.8
  1. “从单一计算机系统看,网络相当于一个I/O设备,系统将数据从主存放到网络适配器中,发送到网络中,接受过程类似”
1.9
  1. “流水线中,将一条指令划分为不同步骤,硬件组织成一些列阶段,每个阶段执行一个步骤,这些阶段可以并行操作,处理一条指令的不同部分”
CSAPP实验——AttackLab Attack Lab 缓冲区溢出攻击实验 本次实验涉及对两个具有不同安全漏洞的程序进行五次攻击,攻击方式分为两种Code injection代码注入和Reeturn-oriented programming(ROP)面向返回编程。 1、深入理解当程序没有对缓冲区溢出做足够防范时,攻击者可以利用安全漏洞的方法。 2、更好地了解如何编写更安全的程序,以及编译器和操作系统提供一些帮助,以减少程序的易受攻击性。 3、深入了解x86-64机器代码的堆栈和参数传递机制。 4、深入了解x86-64指令的编码方式。 阅读详情

相关推荐

本站最全《CSAPP》(第三版)答案合集

本站最全《CSAPP》(第三版)答案合集 封面 第一章 第二章(一) 第二章(二) 第二章(三) 第三章(一) 第三章(二) 第四章 第五章 第六章(一) 第六章(二) 第七章 第八章 第九章 第十章 第十一章 第十二章(一) 第十二章(二) 开源万岁 Long live open source Да здравствует открытый исходный код Longue vie op...

SWY's Workshop 6万+

《CSAPP》笔记——信息表示、指令、处理器、性能优化、储存层次

简言之,这门课不会帮助你更好的写代码,但是会让你深刻地认识到计算机体系中各个部件的构成,配合,可能出现的问题,以及如何优化,可以让你在面对各种问题的时候都可以从容解决。

亦梦亦醒乐逍遥的博客 5791

CSAPP读书笔记与习题作业练习-第3章

CSAPP读书笔记与习题作业练习-第2章疑问疑问一习题整理定义与公式 疑问 疑问一 问题: 回答: 习题 整理 定义与公式

yakumosumi的博客 8008

CSAPP读书笔记

文章目录一、信息的表示和处理1.信息存储1)16进制表示法2)字数据大小3)寻址和字节顺序4)布尔代数2.整数表示1)无符号数和有符号数的表示:2)无符号数和有符号数的转换:3.整数运算1)加法2)乘除法4.浮点数1)二进制小数2)[IEEE浮点表示](https://blog.youkuaiyun.com/weixin_51312090/article/details/119064744)3)舍入操作4)浮点运算5)int、float、double 强制类型转换时 一、信息的表示和处理 1.信息存储 1)16进制表

weixin_51312090的博客 1496

CSAPP: Buffer Lab

深入理解计算机系统中的buffer lab

未选之路 1万+

CSAPP LAB —— 0. 实验环境搭建

本文原载于我的博客:https://ziyang.moe/article/csapplab0.html 前言 最近准备快速过一遍 CSAPP。 学 CSAPP 不做实验,就像四大名著不看红楼梦,说明这个人文学造诣和自我修养不足,他理解不了这种内在的阳春白雪的高雅艺术,他只能看到外表的辞藻堆砌,参不透其中深奥的精神内核,他整个人的层次就卡在这里了,只能度过一个相对失败的人生。 劝退 CSAPP 实验人的最大因素,就是 Linux 环境。本科时候做过一次,用的是 Vmware Workstation 虚拟机

Ziyang的博客 1万+

速通CSAPP(一)计算机系统漫游入门

学习自 CSAPP 课程。

jtwqwq的博客 1689

CSAPP: Architecture Lab

CSAPP 体系结构实验

未选之路 3万+

CSAPP学习笔记

这是一篇CASPP学习笔记

2301_76355687的博客 624

CSAPP:拆炸弹实验笔记

CSAPP:拆炸弹实验笔记一级目录二级目录三级目录 一级目录 二级目录 三级目录

Z630985214的博客 3115

Geant4学习——入门(基本概念、Geant4工具包的结构、强制类、可选类)

Geant4是由欧洲核子研究组织基于C++面向对象技术开发的蒙特卡罗应用软件包,用于模拟粒子在物质中输运的物理过程。由于具有良好的通用性和扩展能力,Geant4在涉及微观粒子与物质相互作用的诸多领域获得了广泛应用。 第一部分 Geant4的基本概念 HEP中的模拟是“虚拟现实”。仿真既可用于在研发阶段帮助设计探测器,又可用于物理研究中了解探测器的响应。为了创建这样的虚拟现实,我们需要对粒子间的相互作用,几何形状和材料进行建模,以便将基本粒子传播到检测器中。我们还需要描述检测器生成原始数据的灵敏度。 Gea

M_M-铭的博客 2万+

【CSAPP】BombLab

史上最全的CSAPP之Bomb实验讲解汇总已经为您精心打造,这份详尽的万字解析以其超全面、超详细的特点而自豪。如果您渴望深入了解Bomb实验的方方面面,无需再四处寻找,只需将这一篇珍贵的资源加入收藏夹,您将获得全方位的指南,助您轻松掌握CSAPP中的这一关键实验,为您的计算机科学学习提供强大支持。

朝花夕拾 2万+

基于STM32的INA226电压电流检测仪

该功率检测装置以STM32F103C8T6微控制器为核心,集成功率检测、数据交互、状态显示和用户提示功能,通过模块化设计实现稳定运行。系统包括按键、LED指示灯、OLED屏幕、INA226电压电流检测、复位电路、晶振电路、蜂鸣器驱动、输入输出接口、调试接口和3.3V降压电路等模块。微控制器通过按键检测用户输入,启动功率检测,采集数据并通过OLED显示,异常情况触发蜂鸣器报警,LED状态指示同步反馈。3.3V降压电路为所有模块提供稳定电源,晶振电路确保时序精度。INA226芯片通过I2C接口与微控制器通信,实

a2784288164的博客 1909

CSAPP学习笔记——Chapter12 并行编程

本篇博文介绍了并发编程的相关知识,基于进程的并发,它的缺点主要是进程之间通信的成本过高;基于I/O多路复用的并发,主要缺点是编写困难;而基于线程的并发是最常用的,先是用其扩展了echo服务器,使其能够同时处理多个连接请求,然后再结合生产者消费者模型进行了进一步的拓展。最后介绍了有关线程安全的一些概念。

越努力越幸运 1324

Nordic开发者必备:SEGGER Embedded Studio免费许可证申请与配置全攻略

本文为Nordic芯片开发者提供了SEGGER Embedded Studio(SES)集成开发环境的详细配置指南。内容涵盖免费许可证的合规申请流程、项目创建、Nordic SDK集成,以及编辑器优化、构建调试配置、RTT日志输出等核心功能的高效设置,旨在帮助开发者构建深度优化的专业开发环境,显著提升嵌入式开发效率。

cheese的博客 353

generate for与always内for:Verilog循环的静态生成与动态执行之辨

本文深入解析Verilog中generate for与always内部for循环的核心差异。generate for使用genvar变量在编译时静态生成硬件结构,适用于模块实例化;always内部for使用整型变量在运行时动态执行,综合为并行逻辑。理解这两种循环的适用场景和综合结果对提升数字电路设计质量至关重要。

yog99的博客 1086

【CSAPP】DataLab

史上最全的CSAPP之DataLab实验讲解汇总(万字详解!超全面!超详细!)收藏这一篇就够了!!!这个精心制作的指南提供了CSAPP DataLab实验的全面解析,涵盖了数以万字计的详细讲解。从概念到实际实验步骤,这篇文章提供了无与伦比的指导,为学习者提供了宝贵的资源。如果您正在学习CSAPP或对计算机体系结构和编程感兴趣,这一份详尽的讲解将成为您不可或缺的参考资料。

朝花夕拾 2万+

从内外参推导IPM变换方程及代码实现(生成AVM环视拼接图)

最近想实现AVM拼接,看了不少博客和论文,不过比较愚钝,一直没能很好理解原理,尤其是怎么在实现时把下文中Z1和Z2消除的,所以严谨的推导了一下对应的公式,如有不对,水平有限,烦请指出~IPM变换(逆透视变换),顾名思义,即将正常透视效应消除的变换,变换结果为鸟瞰图BEV(俯视图);AVM环视拼接一般是将车身前后左右的四个鱼眼相机拼接成环视图(也是俯视),其使用的单应矩阵将四个相机转到同一个俯视坐标系。

mxdsdo09的博客 4172

csapp-chapter2

title: csapp_chapter2 date: 2020-09-02 18:17:20 tags: [网课, CSAPP, 第二章] CSAPP 和 CMU Introduction to computer system (CS 15-213 2015 fall) 的笔记。 相关资料 Textbook 在vscode上使用C 3.Machine-­Level-Programming BASIC 计算机执行机器代码,用字节序列编码低级的操作,包括处理数据,管理内存,读写存储设备上的数据,以及.

qq_42033746的博客 422

Claude Code Skills 入门:内置技能与自定义技能开发

│ Skill 的特点 │1. 封装性:把复杂操作封装成简单命令2. 可复用:一次定义,随处使用3. 可定制:支持参数传入4. 可发现:通过 /skill-name 方式调用打个比方,如果说 Claude Code 的基础工具是「原材料」,那 Skills 就是「预制菜」——只需要简单加热(调用),就能得到成品(结果)。你可以创建自己的 Skill 来封装常用操作。Skill 支持参数,通过。

gaoxiang_120的专栏 670

训练YOLOv11 | Pytorch和Pycharm的安装教程适用W11系统(附详细的系统变量添加过程)

根据你之前下载的版本选择对应的选项即可,然后复制底下的绿色代码到Anaconda的命令行输入即可(这里要在你安装的python环境里进行安装,例如我的环境名字是PyTorch,那么就是activate PyTorch里进行安装)然后同之前一样会加载一会,然后会询问我们是否下载配件,我们输入Y等待即可(下载过程中我们要确保网络通常如果有波动可能会下载失败)。类似于我的电脑是Windows11选择上面红框内的选项即可点击后即下载,(注意这里下载的是zip文件)下载完成后复制下面几个文件。

Snu77的博客 1万+

CSAPP Lab2:Bomb Lab

目录前言一.实验总说明 前言 该实验是《深入理解计算机系统》(英文缩写CSAPP)课程附带实验——Lab2:Bomb Lab,主函数有六个炸弹函数,先是获得输入input = read_line(); 接着运行 phase_1(input); 判断是否是正确答案,如果是正确答案,调用phase_defused(); 来获取接触炸弹的方式。 一.实验总说明 A “binary bomb” is a program provided to students as an object code file.

倪多多的博客 1万+

C语言使用开源库libusb进行USB设备操作

https://libusb.info/libusb is a C library that provides generic access to USB devices. It is intended to be used by developers to facilitate the production of applications that communicate with USB hardware. It is portable: Using a single cross-platform AP

m0_60352504的博客 1554

CSAPP学习笔记——Chapter10,11 系统级I/O与网络编程

本篇博文介绍了《深入理解计算机系统中》Unix I/O,以及网络编程章节的一些概念,之所以合在一起介绍是因为Unix I/O在网络编程中会用到。同时我们观察到此时的echo服务器统一时刻只能处理一个客户端的连接。下一章的并行编程我们会对echo服务器进行拓展,基于并发的理论使其能够同时处理多个连接。

越努力越幸运 923

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【CSAPP】探究BombLab奥秘:Phase_3的解密与实战

在这篇博文中,作者深入解析了CSAPP(Computer Systems: A Programmer's Perspective)课程中的BombLab实验,聚焦于其中的第三阶段(Phase_3)。文章揭示了Phase_3的解密过程与实战策略,深入讲解了逆向工程和程序攻击的关键技术,为读者提供了深刻的计算机系统学习体验。

朝花夕拾 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: Java 学习笔记 异常
下一篇: CSAPP 学习笔记 Chapter two
ZSYGOOOD
博客等级 码龄12年 113粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值