您的位置:首页 > 理论基础

01计算机系统漫游

2018-02-06 17:47 302 查看

信息

系统中所有的信息——包括磁盘文件、存储器中的程序、存储器中存放的用户数据以及网络上传送的数据,都是由一串表示的

区分不同数据对象的唯一方法是我们都到这些数据对象时的上下文

信息就是位加上下文

编译系统



unix> gcc -o hello hello.c


预处理阶段

预处理器(cpp)根据以#开头的命令,修改原始C程序,将头文件内容直接插入到程序文本中,得到另外一个C程序,通常以
.i
作为文件扩展名

编译阶段

编译器(ccl)将文本文件
hello.i
翻译成文本文件
hello.s
,包含一个汇编语言程序。汇编语言程序中的每条语句都以一种标准的文本格式确切地描述了一条低级机器语言指令

汇编阶段

汇编器(as)将
hello.s
翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序的格式,并将结果保存在目标文件
hello.o


链接阶段

hello
程序调用了
printf
函数,
printf
函数存在于一个名为
printf.o
的单独预编译好了的目标文件中,而这个文件必须以某种方式合并到我们的
hello.o
程序中,链接器(ld)就负责处理这种合并

系统硬件组成

总线

贯穿整个系统的一组电子管道叫做总线,携带信息字节并负责在各个部件间传递

通常总线被设计成传送定长的字节块,也就是字(word)

I/O设备

I/O设备时系统与外部世界联系的通道

包括作为用户输入的键盘和鼠标、作为用户输出的显示器、用于长期存储数据和程序的磁盘驱动器

每个I/O通过一个控制器或者适配器与I/O总线相连。控制器是置于I/O设备本身的活着系统的主印制电路板(主板)上的芯片组;适配器是一块插在主板插槽上的卡。

主存

主存是临时存储设备,在处理器执行郑旭时,用来存放程序和程序处理的数据

从物理上说,主存是一组动态随机存取存储器(DRAM)芯片组成

从逻辑上说,存储器是一个线性的字节数组,每个字节都有其为一个地址(数组索引),地址从零开始

处理器

中央处理单元(CPU),简称处理器,是解释(执行)存储在主存中指令的引擎

处理器的核心是一个字长的存储设备(寄存器),作为程序计数器(PC),在任何时刻,PC都指向主存中的某条机器语言指令

寄存器文件是一个小的存储设备,由一些1字长的寄存器组成

算术/逻辑单元(ALU)计算新的数据和地址值

指令集结构和微体系结构

指令集结构

描述的是每条机器代码指令的效果

微体系结构

描述的是处理器实际上是如何实现的

存储器层次结构

层次结构

从上至下,设备变得访问速度越来越慢、容量越来越大,每字节的造价也越来越便宜



主要思想

一层上的存储器作为低一层存储器的高速缓存。因此,寄存器文件就是L1的高速缓存,L1是L2的高速缓存,L2是L3的高速缓存,L3是主存的高速缓存,主存是磁盘的高速缓存

操作系统的功能

两大基本功能

防止硬件被失控的应用程序滥用

向应用程序提供简单一直的机制来控制复杂而又通畅大相径庭的低级硬件设备

抽象

操作系统通过抽象概念(进程、虚拟存储器、文件)来实现这两个功能

进程是对处理器、主存、I/O设备的抽象表示

虚拟存储器是对主存、I/O设备的抽象表示

文件是对I/O设备的抽象表示

进程⎧⎩⎨⎪⎪处理器虚拟存储器{主存文件{I/O设备进程{处理器虚拟存储器{主存文件{I/O设备

进程

在一个系统上可以同时运行多个进程,而每个进程都好像在独占地使用硬件

并发运行是说一个进程的指令和另一个的指令是交错之行的

大多数系统中,需要运行的进程数是多于可以运行它们的CPU个数的

无论是单核还是多核系统中,一个CPU看上去都像是在并发地之行多个进程,这是通过处理器在进程间切换来实现的,操作系统实现这种交错执行的机制称为上下文切换

操作系统保持跟踪进程运行所需的所有状态信息,叫做上下文,包括许多信息,例如PC和寄存器文件的当前值,以及主存的内容。

当操作系统决定要把控制权从当前进程转移到某个新的进程时,就会进行上下文切换,即保存当前进程的上下文、恢复新进程的上下文,然后将控制权传递到新的进程,新进程就会从上次停止的地方开始

实现进程这个抽象的概念需要低级硬件和操作系统软件之间的紧密合作

线程

一个进程实际上可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,贡献同样的代码和全局数据

虚拟存储器

虚拟存储器为每个进程提供了一个假象,即每个进程都在独占地使用主存。每个进程看到的是一致的存储器,称为虚拟地址空间



内核虚拟存储器

内核总是主流在内存中,是操作系统的一部分,地址空间顶部的区域是为内核保留的,不允许应用程序读写这个区域的内容或者直接调用内核代码定义的函数



编译器使用栈来实现函数调用

用户栈在程序执行期间可以动态地扩展和收缩

共享库

大约在地址空间的中间部分是一块用来存放像C标准库和数学库这样共享库的代码和数据的区域



当调用乳malloc和free这样标准C库函数时,堆可以在运行时动态地扩展和收缩

程序代码和数据

对所有进程来说,代码是从同一固定地址开始,紧接着的是和C全局变量相对应的数据位置

代码和数据区是可以直接按照可执行目标文件的内容初始化的

文件

文件就是字节序列

每个I/O设备都可以视为文件,系统中所有输入输出都是通过使用一小组称为Unix I/O的系统函数调用读写文件实现的

并行和并发

两个需求:计算机做的更多,运行的更快

并发

一个同时具有多个活动的系统

并行

使一个系统运行得更快

线程级并发

单处理器系统→→多处理器系统

超线程是一项允许一个CPU执行多个控制流得技术。涉及CPU某些硬件有多个备份,比如PC和寄存器文件,而其它硬件部分只有一份。超线程处理器可以在单个周期的基础上决定要执行哪一个线程

多处理器可以从两方面提高系统性能

首先减少了执行多个任务时模拟并发的需要

其次可以使应用程序运行的更快,这必须要求程序是以多线程的方式来书写的

指令级并行

在较低的抽象层次上,现代处理器可以同时执行多条指令的属性称为指令级并行

使用流水线超标量来实现

单指令、多数据并行

在最低层次上,许多现代处理器有特殊的硬件,允许一跳指令产生多个可以并行执行的操作,称为单指令、多数据(SIMD)并行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: