关于csapp:CSAPP学习笔记-计算机的概览

CSAPP学习笔记 - 计算机的概览前言 这是CSAPP集体专栏的开篇。 这本书应该不须要我过多介绍了,看这本书集体依赖了视频和书本对照学习,学习的进度很慢也比拟苦楚,不晓得多久能够更一期,做这个系列也算是激励本人加油学习。 集体感想 文科生看到这书头痛到爆炸,很多公式压根看不懂,只能重复看去背了(天知道为什么大学会跑去选个计算机的业余)。 CSAPP介绍 依照集体学习的讲述人说的话就是:这本书讲述的并不深刻,然而能够通知你理解计算机的所有重点内容 概述:理解一个HelloWorld在计算机的底层经验了什么事件一个计算机蕴含了那些根本内容。一个Hello world的C程序在计算机系统的运行程序是怎么的。操作系统和IO设施,操作系统的执行周期。一个Hello world 程序的生命周期首先,咱们从根底动手,看看一个Helloworld 程序在计算机的底层经验了哪些事件? 预处理:将头文件退出到程序当中造成文件援用,并且生成hello.i 文件编译:把预处理的hello.i文件通过程序代码语言的优化和细节解决,通过编译之后,造成计算机翻译生成编译后文件 hello.s 文件汇编:将编译解决的文件通过机器码指令翻译为机器能辨认的汇编指令,生产 hello.o文件链接:须要将多个文件内容进行合并,比方把hello.o文件和机器汇编printf.o 件合并,生成最终须要的hello 程序 为什么要了解编译系统是如何工作的,咱们用工具调试不香么? 优化程序性能了解链接这一步骤的异样(全局和局部变量是什么)防止安全漏洞(理解堆栈原理和缓冲器的谬误) 看这本书还能够帮忙咱们理解上面的内容 Switch 为什么有时候要替换为if/else?函数调用开销有多大?for和while那个更快?CPU的逻辑构造: PC(程序计数器):存储着下一条寄存器指令的地址,大小为一个4字节的存储区域,实际上为一个指针。(32位4个字节,64位为8个字节)(program count) 程序计数器注意事项: 计算机中提供要从存储器中取出的下一个指令地址的寄存器PC每次自增都是固定的字长PC自增是PC+取出指令的长度一个字节占8位,一个字占16位两个指令的地位不肯定相邻 寄存器:通常为用于程序计算的一小块高速缓存,寄存器的容量比拟小。长期存放数据的空间 ALU:负责将寄存器传递的值进行计算操作。 总线:贯通整个计算机系统的外围设施,负责将数据到各个硬件进行固定的字节数据传输。 内存:负责将处理器的内容进行计算或者解决 输入输出设施:输入输出设施示意计算机系统和外部设备的接入操作 一个Hello world 程序在计算机系统的运行程序上面这个图是不便本人了解画的,画的很丑,能够去网上找很多画的难看,画的难看的集体不太能了解(HHH) 下面这个图的运行程序如下: 首先,咱们的程序从硬盘读入,通过硬盘的IO控制器通过DMA的模式间接进入到主内存。(<font color='red'>红线</font>)摘自百科:“DMA,全称为:Direct Memory Access,间接存储器拜访,是所有古代电脑的重要特色,它容许不同速度的硬件安装来沟通,而不须要依赖于 CPU 的大量中断负载。”接着程序通过主内存和IO连接器进入到寄存器中进行计算的操作,这时候有可能会应用ALU,只不过图中没有画进去。寄存器计算实现之后,输入到显示控制器,显示咱们程序的计算结果。(<font color='orange'>橙线</font>) 当然这个图也相当的简略,然而能总体概括一个程序的生命流程。 从下面的步骤能够看到,一个程序的根本步骤就是一个输出到输入的过程,这个过程称为一个环。 操作系统是如何形象IO设施,内存和处理器的?在上面的图例所示当中,咱们来看下咱们通常了解的文件,内存和处理器这三个外围组成部分在操作系统中是如何形象的: 每一个文件就是对于IO设施的形象虚拟内存是对内存和IO设施的形象过程:则是对处理器,虚拟内存和IO设施的形象什么是操作系统?它和应用程序以及硬件的关系? 操作系统其实就是应用程序和硬件之间的一座桥梁,负责形象硬件层负责的操作逻辑,同时对于应用程序提供爱护。 操作系统将整个硬件划分为 IO设施,虚拟内存和过程这三个十分重要的形象。 操作系统中一个过程的执行周期:当零碎过程运行的时候,shell过程通过零碎调用的模式,构建一个Hello过程。此时shell保留以后过程的上下文,同时进入Hello过程,也产生一份新的hello上下文。将控制权交给Hello过程,此时shell进行期待状态hello过程执行结束,返回后果给shell过程。shell过程回到零碎过程期待下一个命令。 这里有一个思考题:shell的实现机制是如何实现了,如何实现相似shell期待的程序? Linux:所有皆是文件如何了解? 上文提到了一个程序其实就是一次输出/输入的过程。 文件是对IO设施的形象,也是过程以及虚拟内存的根底单元和构造组成,所以所有皆文件意味着内存中操作的所有数据都能够看做一个io的输出和输入,输出数据,输入构造,这也意味着文件作为操作系统的根底单元的重要位置。 ...

August 2, 2021 · 1 min · jiezi

关于csapp:CPU体系结构笔记

4.1 Y86-64指令集体系结构通过Y86——一个模仿X86的体系结构学习CPU构造程序员可见状态去掉了%r15,用F代表无寄存器。 Y86-64指令只反对64位。 mov:分成irmovq,rrmovq,mrmovq,rmmovq。不反对第二变址寄存器,和伸缩。即rrmovq (%rdi,%rsi,4) %rdx这样的格局。 算数运算:addq, subq, andq, xorq,这些指令会设置条件码。 残余:跳转,条件传送,call&ret,push&pop,halt指令编码与x86相似。第一个字节前四位指明指令大类,后四位指明具体行为,比方 addq=0x60。第二个字节指明REGIS A,B。 4.2逻辑设计和硬件管制语言HCL逻辑门[逻辑门类型和图形示意] 组合电路和HCL布尔表达式HCL布尔表达式都可能被转化成电路设计。比方位相等bool eq = (a && b) || (!a && !b)就能够用下图示意。而多路复用器电路bool out = (s && a) || (!s && b);(用S管制输入a/b)能够用下图示意。 字节级别将64个小电路做AND运算即可。能够形象成一个大单元。 存储器和时钟作者先提出了两类寄存器的区别。这是在前面才会学到的。硬件寄存器,是用于字传送的,程序员不可见。程序寄存器,程序员可见,就是汇编用到的那些。寄存器在电压回升是载入新值,输入原址(保留的值)。时钟管制着寄存器的加载。 4.3 Y86-64的SEQ实现SEQ硬件实现在程序实现中,一个时钟周期被分为5片(2和5常常在一起说):1.fetch 2. decode 3.execute 4.memory 5.write back 6.pc update fetch从M[PC]中拿到指令,rA,rB,valC,valP(+8的)。检测简略谬误。 decode从寄存器失去valA,valB。 execute依据icode,决定ALU的性能,输入valE。 memory依据memo_addr,memo_data,从内存中读取/写入数据/产出谬误。他们的值从HCL中来。 write back依据dstE,valE(execute失去的),dstM,valM(memory失去的)更新指标寄存器。 SEQ的实现这个局部把下面的图拆成5个局部,每个局部用小图和HCL的形式形容进去。残缺HCL如下 fetch #SEQbool need_regids =icode in { IRRMOVQ, IOPQ, IPUSHQ, IPOPQ, IIRMOVQ, IRMMOVQ, IMRMOVQ };bool need_valC = icode in { IIRMOVQ, IRMMOVQ, IMRMOVQ, IJXX, ICALL };decode&writeback ...

December 8, 2020 · 3 min · jiezi