CSAPP学习笔记 - 计算机的概览

简介: CSAPP学习笔记 - 计算机的概览

前言


这是CSAPP个人专栏的开篇。

这本书应该不需要我过多介绍了,看这本书个人依赖了视频和书本对照学习,学习的进度很慢也比较痛苦,不知道多久可以更一期,做这个系列也算是鼓励自己加油学习。


个人感想


文科生看到这书头痛到爆炸,很多公式压根看不懂,只能反复看去背了(天知道为什么大学会跑去选个计算机的专业)。


CSAPP介绍


按照个人学习的讲述人说的话就是:这本书讲述的并不深入,但是可以告诉你了解计算机的所有重点内容


概述:


  1. 了解一个HelloWorld在计算机的底层经历了什么事情
  2. 一个计算机包含了那些基本内容。
  3. 一个Hello world的C程序在计算机系统的运行顺序是怎样的。
  4. 操作系统和IO设备,操作系统的执行周期。


一个Hello world 程序的生命周期


首先,我们从基础入手,看看一个Helloworld 程序在计算机的底层经历了哪些事情?

  • 预处理:将头文件加入到程序当中形成文件引用,并且生成hello.i 文件
  • 编译:把预处理的hello.i文件经过程序代码语言的优化和细节处理,经过编译之后,形成计算机翻译生成编译后文件 hello.s 文件
  • 汇编:将编译处理的文件通过机器码指令翻译为机器能识别的汇编指令,生产 hello.o文件
  • 链接:需要将多个文件内容进行合并,比如把hello.o文件和机器汇编printf.o  件合并,生成最终需要的hello 程序


网络异常,图片无法展示
|


为什么要理解编译系统是如何工作的,我们用工具调试不香么?

  1. 优化程序性能
  2. 理解链接这一步骤的异常(全局和局部变量是什么)
  3. 避免安全漏洞(了解堆栈原理和缓冲器的错误)

看这本书还可以帮助我们了解下面的内容

  • Switch 为什么有时候要替换为if/else?
  • 函数调用开销有多大?
  • for和while那个更快?


CPU的逻辑结构:


PC(程序计数器):存储着下一条寄存器指令的地址,大小为一个4****字节的存储区域,实际上为一个指针。(32位4个字节,64位为8个字节)(program count)

程序计数器注意事项:

  • 计算机中提供要从存储器中取出的下一个指令地址的寄存器
  • PC每次自增都是固定的字长
  • PC自增是PC+取出指令的长度
  • 一个字节占8位,一个字占16位
  • 两个指令的位置不一定相邻

寄存器:通常为用于程序计算的一小块高速缓存,寄存器的容量比较小。临时存放数据的空间

ALU:负责将寄存器传递的值进行计算操作。

总线:贯穿整个计算机系统的核心设备,负责将数据到各个硬件进行固定的字节数据传输。

内存:负责将处理器的内容进行计算或者处理

输入输出设备:输入输出设备表示计算机系统和外部设备的接入操作


一个Hello world 程序在计算机系统的运行顺序


下面这个图是方便自己理解画的,画的很丑,可以去网上找很多画的好看,画的好看的个人不太能理解(HHH)


网络异常,图片无法展示
|


上面这个图的运转顺序如下:

  1. 首先,我们的程序从硬盘读入,通过硬盘的IO控制器通过DMA的形式直接进入到主内存。(红线

摘自百科:“DMA,全称为:Direct Memory Access,直接存储器访问,是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。”

  1. 接着程序通过主内存和IO连接器进入到寄存器中进行计算的操作,这时候有可能会使用ALU,只不过图中没有画出来。
  2. 寄存器计算完成之后,输出到显示控制器,显示我们程序的计算结果。(橙线

当然这个图也相当的简单,但是能总体概括一个程序的生命流程。

从上面的步骤可以看到,一个程序的基本步骤就是一个输入到输出的过程,这个过程称为一个环。


操作系统是如何抽象IO设备,内存和处理器的?


在下面的图例所示当中,我们来看下我们通常理解的文件,内存和处理器这三个核心组成部分在操作系统中是如何抽象的:


网络异常,图片无法展示
|


  • 每一个文件就是对于IO设备的抽象
  • 虚拟内存是对内存和IO设备的抽象
  • 进程:则是对处理器,虚拟内存和IO设备的抽象

什么是操作系统?它和应用程序以及硬件的关系?

操作系统其实就是应用程序和硬件之间的一座桥梁,负责抽象硬件层负责的操作逻辑,同时对于应用程序提供保护。

操作系统将整个硬件划分为 IO设备,虚拟内存和进程这三个非常重要的抽象。


操作系统中一个进程的执行周期:



  1. 当系统进程运行的时候,shell进程通过系统调用的形式,构建一个Hello进程。
  2. 此时shell保存当前进程的上下文,同时进入Hello进程,也产生一份新的hello上下文
  3. 将控制权交给Hello进程,此时shell进行等待状态
  4. hello进程执行完毕,返回结果给shell进程。shell进程回到系统进程等待下一个命令。


网络异常,图片无法展示
|


这里有一个思考题:shell的实现机制是如何实现了,如何实现类似shell等待的程序?


Linux:一切皆是文件如何理解?


上文提到了一个程序其实就是一次输入/输出的过程。

文件是对IO设备的抽象,也是进程以及虚拟内存的基础单元和结构组成,所以一切皆文件意味着内存中操作的所有数据都可以看做一个io的输入和输出,输入数据,输出结构,这也意味着文件作为操作系统的基础单元的重要地位。


网络设备是如何通过网络运行一个Hello world程序?


  1. 用户使用键盘输入一个执行hello程序的命令
  2. 客户端发送一个执行“hello”的指令到远程服务器的的shell
  3. 远程服务器的shell收到指令, 执行hello程序
  4. 远程服务器执行HELLO程序
  5. 远程服务器HELLO程序的返回结果回送到客户端


网络异常,图片无法展示
|


系统加速:阿姆达定律


核心:假设程序划分为两部分:不可并行部分和可并行部分。

解释:

假设一个磁盘中的程序加载到内存中,扫描目录并且进行创建文件。扫描目录和创建文件列表的部分不能并行化,但处理文件可以并行。

那么根据上面的说明,我们可以定义下面的变量:

  • T =串行执行的总时间
  • B =不可以并行的总时间
  • T- B =并行部分的总时间

从公式来看,T-B这部分时间是真正可以并行并且通过提高CPU或者线程性能的优化时间。当多个CPU和线程执行并行部分的时候计算公式为:

T(N) = B + (T - B) / N(N为处理器或者CPU数量)

这里我们不需要记住复杂的公式,我们只需要知道这个阿姆达定理了解到,要优化一个程序的性能,性能的提升远不如我们想象中的那么多,软硬件以及设备IO,内存等每一项都有可能影响程序的性能,同时单项性能优化效果可能并不显著,在进行优化的时候也需要根据实际情况多方位的考虑。

更多的参考资料


英文原版网站: tutorials.jenkov.com/java-concur…

中文介绍:ifeve.com/amdahls-law…

另外,阿姆达定律提供了下面的优化方式细节:

  • 线程级并发(超线程技术)
  • 指令集并行(流水线技术)
  • 单指令多数据并行
  • 超线程技术


总结:


以上是CSAPP第一章节的内容重点,其实大部分内容是跟着视频讲解边学边做的笔记,个人对于这种理工的东西实在是很难对付。

最后第一章节的内容十分简单和基础,但是到了后续难度就逐渐上来了。


写在最后


系列开篇,感谢各位观看,如果觉得有所帮助求点赞支持一下!

相关文章
|
监控 Linux 数据安全/隐私保护
问题记录:开机提示emergency mode(紧急模式)如何处理
在依赖Linux作为核心操作系统的环境中,系统的稳定和可靠性通常是我们理所当然的期待。然而,即使是最稳定的系统,有时也会在启动时出现异常,突然推到紧急模式的怀抱。这种模式,通常有被称为“Emergency Mode”,在Linux系统面临关键错误时作为一种安全网,但对于那些不熟悉如何应对此类问题的小伙伴来说,它可能带来困惑甚至恐慌。
问题记录:开机提示emergency mode(紧急模式)如何处理
|
9月前
|
机器学习/深度学习 人工智能 搜索推荐
《探秘AI驱动的个性化推荐系统:精准触达用户的科技密码》
在这个信息爆炸的时代,AI驱动的个性化推荐系统应运而生,通过数据收集与处理、构建用户画像、核心算法(协同过滤与基于内容的推荐)及深度学习技术,精准洞察用户需求。它广泛应用于电商、视频平台等领域,提升用户体验和商业效益。尽管面临数据稀疏性、隐私保护等挑战,未来将更加精准、实时并注重用户隐私。
654 1
《探秘AI驱动的个性化推荐系统:精准触达用户的科技密码》
|
域名解析 弹性计算 Linux
阿里云购买云服务器、注册域名、备案及绑定图文教程参考
本文为大家介绍了2024年购买阿里云服务器和注册域名,绑定以及备案的教程,适合需要在阿里云购买云服务器、注册域名并备案的用户参考,新手用户可通过此文您了解在从购买云服务器到完成备案的流程。
阿里云购买云服务器、注册域名、备案及绑定图文教程参考
阿里云服务器购买后,怎么申请开具发票?
阿里云用户可在用户中心的发票管理页面开具电子或纸质发票。首次开票需设置发票抬头,支持个人或企业,可选增值税普通或专用发票。个人账号无法直接开企业发票,需变更实名认证。发票税率因产品而异,通常为6%或13%。发票抬头可修改,纸质发票邮寄费用由阿里云承担(特殊情况除外)。电子发票同样可报销。更多详情见阿里云帮助中心。
792 106
|
存储 索引
antd中table组件选中单行换样式(比如背景颜色)
在Ant Design (antd)的Table组件中,可以通过设置`onRow`属性来定义行点击事件,从而改变被点击行的样式,如背景颜色。`onRow`是一个函数,返回一个对象,对象包含事件处理函数,如`onClick`。同时,使用`rowClassName`属性来指定行的类名,结合状态管理,可以实现点击某行后改变其背景颜色的效果。具体实现时,需要在组件状态中保存当前被点击行的索引,然后通过`rowClassName`判断并返回相应的类名。
1367 2
antd中table组件选中单行换样式(比如背景颜色)
|
机器学习/深度学习 人工智能 自然语言处理
[大语言模型-论文精读] ACL2024-长尾知识在检索增强型大型语言模型中的作用
[大语言模型-论文精读] ACL2024-长尾知识在检索增强型大型语言模型中的作用
|
安全 算法 数据安全/隐私保护
【C++入门到精通】智能指针 shared_ptr 简介及C++模拟实现 [ C++入门 ]
【C++入门到精通】智能指针 shared_ptr 简介及C++模拟实现 [ C++入门 ]
508 0
|
机器学习/深度学习 人工智能
论文介绍:深入解析神经语言模型的规模定律
【4月更文挑战第2天】OpenAI的论文《Scaling Laws for Neural Language Models》探索了模型规模、数据量和计算资源与性能的幂律关系。研究发现,增大模型参数、数据集和计算投入能按幂律提升性能,且模型性能与架构细节关联较小。大型模型在样本效率上更优,能在少量数据上达到与小型模型相当的性能。尽管存在理论解释和数据规模等方面的局限性,该研究为优化资源分配和设计高性能语言模型提供了关键洞见。
288 2
论文介绍:深入解析神经语言模型的规模定律
|
移动开发 小程序 安全
使用阿里云短信+微信短链接跳转微信小程序
此内容是关于使用阿里云短信带传递参数的微信短链接跳转到微信小程序。首先,需要准备微信开发者工具和一个已认证的小程序。接着,开通云开发并配置云开发权限。然后,配置H5静态网页,包括设置云开发权限和处理不同设备的跳转方式。最后,上传云函数并修改其权限,获取微信短信链接,配置短链接参数,并开通阿里云短信服务以进行测试验证。整个过程涉及到了微信开发者工具、云开发、H5页面配置、云函数的创建和部署以及阿里云短信服务的开通和使用等步骤。
1995 0
云盘的离线扩容和在线扩容的区别
云盘的离线扩容和在线扩容的区别
401 2