深入理解计算机系统(1)-----计算机系统漫游

思维导图:

深入理解计算机系统(1)-----计算机系统漫游_第1张图片

 

引言:

    深入理解计算机系统系列是我看<<深入理解设计系统>>的读书总结.本章既为开篇的第一章-计算机系统漫游.其主要内容是从整体上介绍什么是计算机系统.例如:

  • 计算机系统由那些部分构成
  • 计算机系统是如何管理硬件的
  • 计算机系统是如何执行程序代码的

一.计算机系统的组成

    计算机系统是由硬件和系统软件组成的,他们共同工作来运行引用程序.

1.1 系统硬件

    计算机系统的硬件由以下几类组成:

  • 总线:总线是贯穿整个系统的一组电子管道,它携带信息字节并负责在各个部件间传递.总线通常被设计为传递定长的字节块,也就是我们常说的字
  • I/O设备:I/O(s输入/输出)设备是系统与外部世界联系的通道.例如键盘和鼠标是输入设备,显示器是输出设备.I/O设备会通过控制器或者适配器与总线相连.控制器和适配器的区别在于封装方式.网络通信也算是I/O设备的一种.
  • 主存:主存是一个临时存储设备,在处理器执行程序时,用来处理程序和程序处理的数据..
  • 处理器:中央处理单元(CPU),简称处理器.是解释或执行储存在主存中指令的引擎.处理器的核心是一个大小为一个字的存储设备(寄存器),称为程序计数器,它指向一条机器语言指令.

深入理解计算机系统(1)-----计算机系统漫游_第2张图片

 1.2 系统软件

    计算机的系统软件是如何管理系统硬件的呢?这是由操作系统提供的服务.我们可以把操作系统看为应用程序和硬件之间插入的一层软件.

    操作系统的功能有以下两点:

  • 防止硬件被失控的应用程序滥用
  • 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备.

    系统通过基本的抽象概念实现了这两个功能.深入理解计算机系统(1)-----计算机系统漫游_第3张图片.

    系统实现的抽象概念如下:

  • 进程:进程是操作系统对一个正在运行的程序的抽象.一个计算机系统上可以同时运行多个进程,每个进程都好像在单独的使用硬件.一个进程的指令是和另一个进程的执行交错运行的.操作系统实现的这种交错运行的机制称为上下文切换.深入理解计算机系统(1)-----计算机系统漫游_第4张图片
  • 线程:在现代操作系统中,一个进程实际上有多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据.
  • 虚拟内存:虚拟内存是一个抽象概念,他为每个进程提供了一种假象,即每个进程都在独占的使用主存.每个进程看到的内存都是一致的,称为虚拟地址空间.

深入理解计算机系统(1)-----计算机系统漫游_第5张图片

  • 文件:文件就是字节序列,仅此而已.他是每个I/O设备的抽象表示.

二.程序执行

    一个程序是如何在计算机系统中执行的呢,又会经过怎样的执行步骤呢?

    我们以如下这个名为hello.c的程序代码为例.

#include 

int main()
{
    printf("hello, world\n");
    return 0;
}

2.1 什么是信息

    首先,我们需要知道,到底什么是信息.信息其实就是位+上下文.以上程序代码其实就是由值为0和1组成的位(也称为比特)序列,他们8个位一组,称为字节.每个字节都可以表示某些文本字符.

    所有的信息都是有一串比特表示的,而区分他们的唯一方式就是读到这些数据对象时的上下文..

2.2 编译

    硬件是不认识C语言或其他高级语言的,硬件只会执行最基本的机器语言,所以,我们需要将上述程序代码翻译成机器语言代码才可供硬件执行,此时的文件称之为目标文件,也称为可执行目标文件.这就需要借助于几种中间程序,也就是我们的编译系统.

深入理解计算机系统(1)-----计算机系统漫游_第6张图片

  • 预处理阶段:预处理器cpp会根据以#开头的命令,修改原始的C程序.比如像我们的hello.c中第一行的 # include命令告诉预处理器读取系统头文件中stdio.h的内容,并把它直接插入程序文本中.结果就得到了以.i为扩展名的文件.
  • 编译阶段:编译期ccl将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序.
  • 汇编阶段:汇编器as会将hello.s翻译成机器语言指令,把这些指令打包成一种叫可重定位目标程序的格式并将结果保存在hello.o中.
  • 链接阶段:我们注意到,hello.c程序中调用了printf函数,这是每个C语言编译期都提供的标准C库中的一个函数.printf存在于一个名为printf.o的单独的预编译好了的目标文件中,而这个文件必须以某种方式合并的我们的hello.o中.链接器ld就负责处理这种合并.最后就会生成一个可执行目标文件hello.

2.3 执行

    我们来看看当hello.c被编译好以后是如何在计算机系统中执行的.

  • 1.我们在键盘上输入字符串"./hello.c"后,shell程序将字符串足以读入寄存器,在把它们存放到内存中.

深入理解计算机系统(1)-----计算机系统漫游_第7张图片

  • 2.当我们敲下回车键后,shell程序知道我们已经结束的命令的输入.然后shell程序执行一系列的指令来加载可执行的hello文件,这些指定会将hello代码和数据从磁盘复制到主存中.

深入理解计算机系统(1)-----计算机系统漫游_第8张图片

  • 3.一旦主存加载了hello文件的代码和数据,处理器就会执行其中的main函数的代码片段,然后将结果"hello,world"复制到寄存器文档,然后从寄存器文档复制到显示设备,最终显示在屏幕上.

深入理解计算机系统(1)-----计算机系统漫游_第9张图片

 2.4 存储层次

    从以上hello文件被执行的过程中可以看到,系统花费了大量的时间把信息从一个地方移动到另一个地方.为了减少移动信息的时间开销,同时也考虑到成本的节约.就形成了我们当前的存储器层次结构.

深入理解计算机系统(1)-----计算机系统漫游_第10张图片

 三.重要主题

    作为本章的结尾,还需要介绍两个贯穿整书的重要的概念.

3.1 Amdahl定律

    Amdahl定律用于衡量系统部分的加速效果对于系统整体的加速效果的影响.其中S表示加速比,用于衡量加速效果.a表示在旧系统中部分系统执行时间与系统整体执行时间的比例.k表示部分系统的加速效果.

3.2 并发和并行

  •     并发:并发是一个通用的概念,指一个同时具有多个活动的系统.
  •     并行:并行指用并发使一个系统运行的更快. 

    在了解了上述概念后,我们按照系统层次结构中由高到低的顺序重点强调三个层次:

  • 线程级并发:构建在进程这个抽象之上,我们能够设计出同时具有多个程序执行的系统,就导致了并发.使用线程,我们甚至能够在一个进程中执行多个控制流.
  • 指令级并行:在较低的抽象层次上,现代处理器可以同时执行多条指令的属性称为指令级并行.
  • 单指令,多数据并行:在最低层次上,许多现代处理器拥有特殊的硬件,允许一条指令产生多个可以并行执行的操作.这种方式称为单指令,多数据,即SIMD并行.

你可能感兴趣的:(深入理解计算机系统,深入理解计算机系统,计算机系统漫游,计算机组成,程序执行,存储器层次结构)