计算机系统
文章平均质量分 76
站在这别动
这个作者很懒,什么都没留下…
展开
-
信息的表示和处理
信息存储字长与字节字长:每个计算机都有一个字长,对于字长为w位的机器而言,虚拟地址范围为0~2w−12^w-1,32位的计算机虚拟地址空间被限定为4GB,当然操作系统有办法解决这一问题。字节:1byte=8bit。寻址与字节顺序。对于跨越多字节的程序对象,我们必须建立两个规则:这个对象的地址是什么,以及在存储器中如何排列这些字节。对象的地址:在几乎所有的机器上,多字节对象都被存储为连续的字节原创 2017-02-16 16:05:49 · 387 阅读 · 0 评论 -
虚拟存储器(二)——Linux虚拟存储器系统
Linux虚拟存储器系统在了解了虚拟存储器的相关知识之后,我们通过Linux的虚拟存储器系统,来大致了解下操作系统是如何组织虚拟存储器的。Linux进程的虚拟存储器 上图是一个Linux进程的虚拟存储器,与之前所示虚拟存储器的区别在于,其展现方式不再是一个个独立的页,而是按照不同的功能组织成不同的区域。区域 Linux将虚拟存储器组织成一些区域的集合。一个区域就是已分配的虚拟存储器的连续原创 2017-05-06 20:46:39 · 1291 阅读 · 0 评论 -
虚拟存储器(一)——虚拟存储器及地址翻译
虚拟存储器虚拟存储器是一个抽象的概念,主要目的是为多个程序之间有效而安全地共享存储器。它为每个进程提供了一个大的、一致的和私有的地址空间。虚拟地址与物理地址 把主存看成是由连续字节单元组成的大数组,并且用物理地址来标识每个数组的单元。那么物理寻址如下图: 虚拟寻址如下图: 虚拟存储器与物理存储器 虚拟存储器被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。和存储器层次结构中其他原创 2017-04-12 19:18:14 · 1132 阅读 · 0 评论 -
深入理解计算机系统——链接
链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程。当我们构建一个大型程序的时候,不需要将其组织为一个巨大的源文件,而是可以把它分解为更小、更好管理的模块,可以独立地修改和编译这些模块。当我们改变这些模块中的一个时,只需简单地重新编译它,并重新链接应用,而不必重新编译其他文件。在学习CSAPP第一章的时候有这么一个图: 在这里,我们通过了解可重定位目标文件及可执行目标文件的格式及组原创 2017-03-16 10:55:56 · 885 阅读 · 0 评论 -
存储器层次结构——基于存储器的程序优化
局部性原理一个编写良好的计算机程序常常具有良好的局部性,它们倾向于引用邻近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。局部性通常有两种不同的形式:时间局部性:被引用过一次的存储器位置很可能在不远的将来再被多次引用。空间局部性:如果一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置。下面来看个局部性的代码示例: 变量sum在每此循环中被引用一次原创 2017-03-08 19:36:04 · 406 阅读 · 0 评论 -
优化程序性能
优化程序性能主要从两个步骤来考虑,第一步是消除不必要的内容,第二步是利用处理器的指令级并行能力。消除不必要的内容消除低效率循环 通过移动代码,将执行多次但计算结果不改变的计算移动到循环外面。例:for(i=0;i<str.length();i++)改为int lengtn = str.length();for(i=0;i<length;i++)减少过程的调用 过程调用会带来相当大的开销,原创 2017-03-02 11:23:57 · 450 阅读 · 0 评论 -
处理器体系结构
之前我们有简单的提到CPU,这一章我们来了解下CPU是如何实现和工作的,以及流水线处理器的原理。指令集体系结构指令集体系结构,包括各种状态元素、指令集和它们的编码、一组编程规范和异常事件处理。程序员可见的状态 每条指令都会读取或修改处理器状态的某些部分,这称为程序员可见的状态。 指令 下图给出了指令的简单描述,左边是汇编码表示,右边是字节编码表示。 对于字节编码,每条指令需要1~6个字节原创 2017-02-24 09:56:05 · 479 阅读 · 0 评论 -
异常控制流
异常异常 最简单的处理器控制流是平滑的,即指令按顺序执行。但是系统必须对状态变化进行反应,这种变化不一定和程序执行相关,如一个硬件定时器定期产生信号。异常就是控制流中的突变,用来响应处理器状态中的某些变化。 异常处理 当处理器检测到有事件发生时,就会通过异常表进行跳转,调用异常处理程序。异常表的起始地址放在一个叫做异常表基址寄存器的特殊CPU寄存器里。 异常类别 中断 中断是来自处理器原创 2017-03-19 14:41:37 · 371 阅读 · 0 评论 -
了解计算机系统
编译系统预处理阶段:将文件头文件插入程序文本中。编译阶段:翻译成汇编语言程序。汇编阶段:将汇编程序翻译成机器语言,hello.o是一个二进制文件。链接阶段:合并一些预编译好的目标文件(如标准C库中的printf函数),得到可执行文件,可以被加载到内存中,由系统执行。计算机系统的硬件组成这里主要记录CPU,CPU的组成包括运算执行单元(EU)、寄存器单元和控制单元(CU)等。执行单元 A原创 2017-02-14 15:16:42 · 293 阅读 · 0 评论 -
程序的机器级表示(三)
过程过程调用就是调用方法,这里主要了解调用过程的时候存储结构是如何变化的。栈帧结构 IA32程序用程序栈来支持过程调用。机器用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复,以及本地存储。每个过程会分配一个栈帧。下图描绘了栈帧的通用结构。栈帧的最顶端以两个指针界定,寄存器%ebp为帧指针,寄存器%esp为找指针。当程序执行时,栈指针可以移动,因此大多数信息的访问都是相对于帧指针的。 假原创 2017-02-20 21:17:53 · 415 阅读 · 0 评论 -
程序的机器级表示(二)
控制以上操作,我们只考虑了直线代码的行为,即指令按顺序执行。但是还有一些代码,比如条件语句、循环语句和分支语句,要求有条件的执行,这时需要根据数据测试的结果来改变条件码,结合跳转指令决定操作执行的顺序。条件码 除了整数寄存器,CPU还维护着一组单个位的条件码寄存器,它们描述了最近算数或逻辑操作的属性。常用的条件码有: -CF:进位标志。最近的操作使最高位产生了进位。可以用来检查无符号操作数的溢原创 2017-02-20 21:16:11 · 624 阅读 · 0 评论 -
程序的机器级表示(一)
这篇文章内容主要是了解汇编语言,以及它是怎么工作的。以下所介绍的内容均为在x86架构下,x64做了很多64位的扩展。重在理解实现方式及原理。:)程序编码寄存器分类程序计数器:用%eip表示,指示将要执行的下一条指令在存储器中的地址。整数寄存器:用以存储地址或整数数据。条件码寄存器:保存着最近执行的算数或逻辑指令的状态信息。浮点寄存器:存放浮点数据。整数寄存器 机器级代码 我们以一个例子来原创 2017-02-19 19:08:10 · 528 阅读 · 0 评论 -
文本文件与二进制文件的区别
在看CSAPP的时候,有提到文本文件及二进制文件,书中介绍太少所以参考了一些资料,以下为个人理解的两者区别。文本文件属于二进制文件,区别在于读取两者的规则不同。文本文件与二进制文件物理上的存储方式并无不同,都是二进制的。比如某文件中内容是:01000001_01000010_01000011_01000100(下划线_为增加可读性)这是一个二进制文件。 当我们用ASCII码表去解读它的时候,可以得原创 2017-02-14 15:14:20 · 282 阅读 · 0 评论