关于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的输出和输入,输出数据,输入构造,这也意味着文件作为操作系统的根底单元的重要位置。 ...