深入理解计算机系统(第三版)概念总结(一)

  • 第1章 计算机系统漫游

 

计算机系统:由硬件和软件组成,它们共同工作来运行应用程序

 

程序的生命周期

源程序(源文件)文本文件(只由ASCII(用一个唯一的单字节大小的整数值表示字符)字符构成的文件,其它文件都称为二进制文件);0、1称为或比特,8个位组成一个字节,一个字节代表一个文本字符;系统中的信息(包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据)都是由一串比特表示的;上下文用于区分不同的数据对象,一个同样的字节序列在不同的上下文中可能表示一个整数、浮点数、字符串或指令;高级程序语言

编译系统:预处理、编译、汇编、链接

        预处理阶段:预处理器(cpp)根据以字符#开头的命令,修改原始的C程序 。比如#include<stdio.h>命令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入程序文本中。结果就得到了另一个C程序,通常是以 .i 作为文件扩展名。

        编译阶段:编译器(ccl)将文本文件hello.i翻译成汇编语言程序文本文件hello.s。【高级语言 ==> 汇编语言】

        汇编阶段:汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序(relocatable object program)的格式,并将结果保存在二进制目标文件hello.o中。 【汇编语言 ==> 机器语言】

        链接阶段:链接器(ld)通过某种方式将其它单独的目标文件(如printf.o)合并至hello.o中,得到可执行目标文件hello,并存放在磁盘上。

加载可执行目标文件并执行:在Unix系统中,通过shell应用程序加载可执行目标文件至内存并运行文件中的指令

输出执行消息并终止

 

计算机系统硬件组成

总线:贯穿整个系统的一组电子管道,携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,称为(word),字中的字节数(字长)是一个基本的系统参数,现在大多数机器字长为4个字节(32位)、8个字节(64)位。

I/O设备:输入输出设备,是系统与外部的联系通道。如键盘、鼠标、显示器、磁盘等。每个I/O设备都通过一个控制器或适配器与I/O总线相连;控制器是I/O设备本身或主板上的芯片组;适配器是一块插在主板插槽上的卡。

主存:临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。物理上,主存是由一组DRAM(动态随机访问存储器)芯片组成;逻辑上,主存是一个线性的字节数组,每个字节都有其唯一的地址(数组索引),这些地址从0开始。

处理器:CPU(中央处理单元),是执行(解释)存储在主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备(或寄存器),称为PC(程序计数器),任何时刻PC都指向主存中的某条机器语言指令的地址

 

hello程序的运行图解

读取键盘在shell应用程序中输入的字符串 ./hello 至主存

键盘输入回车,shell执行指令从磁盘中加载可执行文件hello至主存

可执行文件hello加载至主存完成后,处理器开始执行程序中的机器语言指令,并显示执行结果

 

程序加载的优化

程序加载时,系统会花费大量的时间把信息从一个地方复制到另一个地方,如磁盘至主存、主存至寄存器,这些复制操作增加了开销,减慢了程序“真正”的工作。机械原理:较大的存储设备比较小的存储设备运行慢,而快速设备的造价远高于同类的低速设备。运行速度排序:寄存器 > 主存 > 磁盘。

处理器从寄存器中读取数据的速度比主存快100倍,为了降低这种幅度差异,在寄存器和主存之间采用高速缓存存储器(cache memory,简称cache或高速缓存)作为暂时的集结区域,存放处理器近期可能会需要的信息。高速缓存的局部性原理:程序具有访问局部区域里的数据和代码的趋势,通过让高速缓存存放可能经常访问的数据,使得大部分的内存操作都能在快速的高速缓存中完成。

存储器层次结构:主要思想是上一层的存储器作为低一层存储器的高速缓存

DRAM:动态随机访问存储器

SRAM:静态随机访问存储器

 

应用程序  ==> 操作系统 ==> 硬件

所有应用程序对硬件的操作尝试都必须通过操作系统,操作系统的两个功能:防止硬件被失控的应用程序滥用;向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备

实现操作系统两个功能涉及到的抽象概念:

进程:对处理器、主存和I/O设备的抽象表示。进程实现了一些假象,如系统上只有某个程序在运行,程序看上去独占地使用处理器、主存和I/O设备,处理器连续不间断的执行程序中的指令;进程是操作系统对一个正在运行的程序的一种抽象;一个系统上可以同时运行多个进程,而每个进程都好像在独占地使用硬件。并发运行,是通过处理器在进程间切换实现的(称为上下文切换)。在任一时刻,单核处理器只能执行某一个进程的代码,而多核处理器可以执行多个进程的代码。上下文切换中的上下文保存了进程运行所需的所有状态信息,如PC和寄存器文件的当前值以及主存的内容;上下文切换时,保存当前进程的上下文、恢复新进程的上下文,并将控制权传递给新进程。

虚拟内存:对主存和I/O设备的抽象表示。为每个进程提供了一个假象,每个进程都独占地使用主存,每个进程看到的主存都是一致的(称为虚拟地址空间)。在linux系统中,虚拟地址空间最上面的区域保留给操作系统中的代码和数据,对所有进程都是一样的;虚拟地址空间的底部区域存放用户进程定义的代码和数据,地址从下往上增大。每个进程看到的虚拟地址空间由大量准确定义的区构成,每个区都有专门的功能。地址由低到高依次为:程序代码和数据(全局变量)、堆(可动态扩展)、共享库(动态链接)、栈(可动态扩展)、内核虚拟内存(用户应用程序不可读写和调用)

文件:对I/O设备的抽象表示。文件就是字节序列,每个I/O设备(如磁盘、键盘、显示器、网络等)都可以看成是文件。Unix系统中所有的输入输出都是通过使用一小组成为Unix I/O的系统函数调用读写文件来实现的。文件向应用程序提供了一个统一的视图,来看待系统中可能含有的各式各样的I/O设备。

 

系统间通信 —— 网络

从一个单独的系统看,网络可视为一个I/O设备,可以输入和输出数据

客户端、服务器交互模式是典型的网络应用,实现了从一台主机复制信息到另外一台主机。电子邮件、即时通信、万维网、FTP和telnet等应用都是基于网络复制信息的功能。

 

贯穿计算机系统所有方面的重要概念

Amdahl定律:当对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度。

若系统执行某应用程序需要时间为Told,假设系统某部分所需执行时间与该时间的比例是a,而该部分性能提升比例为k,由此得到:

该系统部分初始需要时间:a * Told

该系统部分现在所需时间:(a * Told) / k

该系统部分性能提升后系统总的执行时间: Tnew = (1 - a) * Told + (a * Told) / k = Told* [(1 - a) + a / k]

加速比:S = Tnew / Told = 1 / ((1 - a) + a / k)

Amdahl定律的主要结论:对系统的一个主要部分做出了重大改进,但是获得的系统加速比小于这部分的加速比;要想显著加速整个系统,必须提升全系统中相当大的部分的速度。

并发和并行:并发(concurrency)是一个通用的概念,指一个同时具有多个活动的系统;并行(parallelism)指的是使用并发来使一个系统运行的更快。并发让计算机做的更多,并行让计算机做的更多的同时运行的更快。线程级并发、指令级并行、单指令多数据并行。

抽象的使用:是计算机科学中最为重要的概念之一。

指令集架构:提供了对实际处理器硬件的抽象,提供了一个假象,机器代码程序就好像运行在一个一次只执行一条指令的处理器上。

虚拟机:提供了对整个计算机的抽象,包括操作系统、处理器和程序。

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值