深入理解计算机系统

《深入理解计算机系统》第一章学习总结

╄→尐↘猪︶ㄣ 提交于 2019-12-02 23:40:57
2019-2020 《深入理解计算机系统》第一章学习总结 学习内容总结 本周学习了 1.深入理解计算机系统的第一章 2.论文从自动化到智能化:软件漏洞挖掘技术进展 3.论文基于神经网络与代码相似性的静态漏洞监测 4.配置linux系统 教材学习中的问题和解决过程 1.我看了“存储器分层结构的主要思想是一个层次上的存储器作为下一层次上的存储器的高速缓存”有一个问题,存不存在这种现象:寄存器直接作为芯片外的L2的高速缓存。我查了资料:高速缓存是位于CPU和主存之间的高层存在存储系统。采用高速缓存的主要目的是提高存储器的平均访问速度,从而使存储器的速度也CPU的速度相匹配。这是一种理解概念,不必纠结在这个问题,理解高速存储的核心就好。 2.我在整个第一讲中的方框图中看到了很多系统总线,存储器总线,I/O总线,其中的箭头都是双向的,但不明白其中是如何进行信息传递的。我查了资料,总线只是一个概述其具体分为三种分别是地址总线,数据总线和控制总线,数据总线是双向的可以传递数据,控制总线用来传送控制信号和时序信号,地址总线是单向的。我理解到传送的信息有可能是代码,程序。我的困惑是数据是以什么形式在数据总线上存在的,电流? 其他 对于出身电子信息工程专业的我来说,本科阶段对于计算机系统的了解只能算是浅尝辄止,对于C语言代码虽然会写一些简单的问题但因为没接触过算法,也没接触过操作系统等等课程

速度《深入理解计算机系统》总结

谁说胖子不能爱 提交于 2019-12-02 23:11:42
速度《深入理解计算机系统》总结 1.“hello”程序的生命周期 (1) “hello”程序的生命周期是从一个源程序开始的,即程序员通过编辑器创建并保存文本文件hello.c; (2)每条C语句都必须转化为一系列的低级机器语言指令才能在系统上运行,源文件要被转化为编译文件并存放在磁盘上; (3)将文件名输入到成为shell的应用程序中才能运行该可执行文件,如下: linux>./hello hello,world linux> (4)运行“hello”程序 2.压入和弹出栈数据 栈是一种数据结构,可以添加或者删除值。不过,要遵循“先进后出”的原则,通过push操作把数据压入栈中,通过pop操作删除数据。指令效果如下表。 将一个四字值压入栈中,首先要将栈指针减8,然后将值写到新的栈顶地址。因此指令pushq %rab的行为相当于下面两条指令: subq $8,%rsp movq %rab,(%rsp) 数据具体移动存储过程如下图。 3.Y86-64的顺序实现和流水实现 (1)顺序实现:取指,译码,执行,访存,写回,更新PC。下图是SEQ的硬件结构(一种顺序实现) (2)流水实现:SEQ+重新安排计算 插入流水线寄存器 对信号进行重新编排和标号 预测下一个PC 4.存储器层次结构 存储技术:不同存储技术的访问时间差异很大。速度较快的技术每字节的成本要比速度较慢的技术高,而且容量较小

《深入理解计算机系统》阅读笔记--程序的机器级表示(上)

匿名 (未验证) 提交于 2019-12-02 21:59:42
一、为什么要学习和了解汇编 编译器基于编程语言的规则,目标机器的指令集和操作系统遵循的惯例,经过一系列的阶段生成机器代码。GCC c语言编译器以汇编代码的形式产生输出,汇编代码是机器代码的文本表示,给出程序中的每一条指令。然后GCC调用汇编和链接器,根据汇编代码生成可执行的机器代码。这一章节其实就是来更加深入的认识和理解汇编代码 现在我们更多接触的都是一些高级语言,如JAVA,GO,Python,其实用这些语言的时候,更大程度上,已经屏蔽了一些程序的细节,即机器级的实现。但是如果是用汇编语言,程序员就必须制定程序用来执行计算的低级指令。 那么为什么我们还要学习和了解汇编呢? 虽然现在编译器已经替我们做了生成汇编代码的大部分工作,但是作为程序员,如果我们能够阅读和理解汇编代码将是一个非常重要的技能,好处是: 能够理解编译器的优化能力分析代码中隐含的低效率 如我们通过线程包写并发程序时,了解不同线程是如何共享程序数据或保持数据私有的,以及准确知道如何在哪里访问共享数据,这些在机器代码都是可见的 二、历史 Inter的处理器系统俗称x86,第一代处理器是8086,一个单芯片,16位微处理器,主要为 IBM PC 和 DOS 设计,有 1MB 的地址空间。八年后的 1985,第一个 32 位 Intel 处理器(IA32) 386 诞生。2004 年,奔腾(Pentium) 4E

速读《深入理解计算机系统》

时光毁灭记忆、已成空白 提交于 2019-12-02 13:04:31
本周速读了《深入理解计算机系统》这本书,这本书从程序员的角度介绍了计算机系统的内在运作,展示了一些本质概念是如何实际的影响应用程序的正确性、性能和实用性的。收获如下: 1、关于进程和线程 进程是操作系统对运行程序的一种抽象,是指计算机中已运行的程序,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 线程有时被称为轻量级进程,是操作系统能够进行运算调度的最小单位。线程是进程中的一个实体,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源,同一进程中的多个线程之间可以并发执行。 2、几种数据传送指令 movl:传送双字,源操作数指定一个值,可以是立即数,可以存放在寄存器或存储器中。目的操作数指定一个位置,可以是寄存器或存储器地址。 movw:传送两个字节,当一个操作数为寄存器时,必须为下图中八个双字节寄存器元素中的一个。 movb:传递一个字节,当一个操作数为寄存器时,必须为下图中八个单字节寄存器元素中的一个。 movsbl和movzbl负责拷贝一个字节,并设置目的操作数中其余的位。 movsbl的源操作数是单字节的,并将高24位设置为源字节的最高位,然后拷贝到双字的目的中。 movzbl的源操作数是单字节的,在前面加24个0扩展到32位,然后拷贝到双字的目的中。 3、寄存器的使用惯例

《深入理解计算机系统》速读笔记

故事扮演 提交于 2019-12-02 09:13:28
问题一 条件码 条件码寄存器中保存着单个位的条件码,由CPU维护,如: CF:进位标志 ZF:零标志 SF:符号标志 OF:溢出标志 有几类指令能够修改条件码: 算术指令:既改变操作数,也有肯能改变条件码。 CMP指令:右操作数减左操作数,只可能改变条件码。 TEST指令:两操作数相与,只可能改变条件码。 条件码寄存器不能直接读取,有三种方法: set指令:根据条件码,设置一个字节。 jump指令:根据条件码进行跳转,即控制的条件转移。 cmov条件传送指令:根据条件码决定是否进行mov操作(其性能要优于控制的条件转移P141)。 来源: https://www.cnblogs.com/20199321zjy/p/11740575.html