深入理解计算机系统
文章平均质量分 68
走出去拍拍照
这个作者很懒,什么都没留下…
展开
-
信息的表示和处理
无符号(unsigned)编码基于传统的二进制表示法,表示大于或者等于零的数字;补码(two’s-complement)编码是表示有符号整数的最常见的方式,有符号整数就是可以为正或者负的数字;浮点数(floating-point)编码是表示实数的科学记数法的以二为基数的版本。整数的表示虽然只能编码一个相对较小的数值范围,但是这种表示是精确的;而浮点数虽然可以编码...原创 2018-05-26 16:38:14 · 708 阅读 · 0 评论 -
X86_64汇编与IA32比较
什么是X86-64?所谓IA32就是“Intel32位体系结构”(Intel Architecture 32-bit),而我们常说的X86-64就是IA32的64为拓展。数据格式 C声明 Intel数据类型 汇编代码后缀 大小(字节) char 字节 ...原创 2018-05-26 17:08:42 · 9663 阅读 · 0 评论 -
从进程地址空间分布到缓冲区溢出
进程的地址空间一个进程的空间分布大致如上图所示,主要由数据段、代码段、堆、栈这几部分组成,其中代码段(.code)主要存放程序代码在内存中的映射;数据段具体会分为初始化数据段(.data)和为初始化数据段(.bss);而堆主要用于存放局部变量、临时变量,函数调用时,存放函数的返回指针,用于控制函数的调用和返回;堆用于存储动态内存分配,需要手动分配,手动释放,比如我们常见的malloc()函数产生的...原创 2018-05-26 17:18:30 · 638 阅读 · 0 评论 -
处理器体系结构
在《深入理解计算机系统》一书中,作者自己定义了一个新的指令集,Y86-64,它其实就是X86-64的精简版,来说明处理器的体系结构。1、Y86-64指令集体系结构(ISA)该指令集有15个程序寄存器、3个条件码、程序寄存器(PC)、程序状态、内存,如下所示。下面是具体指令,左边是指令的会编码表示,邮编是字节编码,其中fn表示它可以取0~9任意数字,也就是它还有很多别的指令。具体看下面的图。2、逻辑...原创 2018-05-26 17:30:49 · 2478 阅读 · 0 评论 -
计算机存储器结构体系详解
生活中的大部分物品,基本都满足“好的不一定是最贵的,但是最贵的一定是好的”。在计算机存储体系中,基本满足了上面这句话,就是存储速度越快,价格就会越贵。因为价格的限制,我们在存储器中,就得有个恰当的搭配,以达到价格与性能的平衡。在前面那些大神的不断努力之后,弄出了很多种材料,不同的存储器,最后,得到了下面这张图。在以前还在的学校的时候,我长期被以下这些名词弄得晕头转向,ROM/RAM/...原创 2018-05-26 17:47:52 · 26980 阅读 · 4 评论 -
局部性原理
1、什么是局部性原理?一个编写良好的计算机程序,它们倾向于引用邻近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身,我们称这种程序具有良好的局部性。这种倾向性,我们称之为局部性原理,是一个持久的概念,对于硬件和软件系统的设计和性能都有着极大的影响。2、局部性的形式时间局部性和空间局部性。在一个具有良好时间局部性的程序中,被引用过一次的存储器在不远的将来会被再次引用。在一个具...原创 2018-05-26 17:50:22 · 13446 阅读 · 0 评论 -
从异常到进程(外加fork原理)
什么是异常控制流?现代系统使用控制流发生突变来对系统状态变化做出反应,一般而言,我们把这些突变称为异常控制流(Exceptional Control Flow,ECF)。 什么是异常?异常(Exception)就是控制流中的突变,用来响应处理器状态中的某种变化。异常处理的过程是什么样的?在我们的系统中,系统为异常的每种类型都分配了一个唯一的非负整数的异常号。这个异常号相当于一个指针,指向具体的异常...原创 2018-05-26 18:00:51 · 353 阅读 · 0 评论 -
虚拟内存
1、什么是虚拟内存?一个进程是和其他进程共享CPU和主存的,但是主存的空间是有限的,当同时运行多个进程时,就会使内存不够用。这个时候,我们就引入了虚拟内存的概念,它是一种对主存的抽象的计算机内存管理技术。对于32位的Linux操作系统,系统为每个进程分配4G的虚拟内存。如下图所示。2、虚拟寻址使用虚拟寻址,CPU通过生成一个虚拟地址来访问主存,这个虚拟地址在被送到内存之前会被...原创 2018-05-26 18:16:02 · 2779 阅读 · 0 评论 -
系统级IO
1、I/O有哪些?输入/输出是在主存和外部设备之间拷贝数据的过程。下图是本文讨论的各种I/O之间的关系。Unix I/O模型是在操作系统内核中实现的,较高级的I/O都是基于Unix I/O函数来实现的。2、Unix I/O一个Linux文件就是一个由多个字节组成的序列,所有的I/O设别都被模型化为文件,所有的输入和输出都被当作对相应的文件进行读和写来执行。这种允许Linux内核引出一个简单的接口,...原创 2018-05-26 18:29:06 · 389 阅读 · 0 评论