计算机系统漫游

1.1 信息=位+上下文

系统中的信息,都是由一串比特表示的。

区分不同数据对象的唯一方法是读到这些数据的上下文。比如,一个同样的字节序列可能表示的是一个整数、浮点数字符串或机器指令。

1.2 程序被其他程序翻译成不同的格式

说的是一个编译系统的构成。

Hello.c -> 1. 预处理器 -> hello.i -> 2.编译器 -> hello.s -> 3. 汇编器 -> hello.o -> 4. 链接器 -> hello

  1. 读取系统头文件的内容,直接插入到程序文本中
  2. 将文本文件hello.i 翻译成汇编语言程序的文件hello.s
  3. 将hello.s 翻译成机器语言指令,将指令打包成可重定位目标的格式,保存到hello.o中
  4. 链接器负责处理标准预编译好的文件合并到hello.o中。(如在程序中调用C库中的printf函数)

1.3 了解编译系统如何工作的益处

  • 优化程序性能
  • 理解链接时出现的错误
  • 避免安全漏洞

1.4 处理器读并解析内存中的指令

一. 系统硬件组成

  1. 总线
    • 贯穿整个系统的一组电子管道。
    • 被设计成传送定长的字节块,字节块=字。
    • 字长通常是4个字节(32位),或者8个字节(64位)
  2. I/O设备
    • 键盘、鼠标、显示器、磁盘驱动等都是IO设备
    • 每个IO设备通过一个控制器或适配器和IO总线相连。控制器是IO设备本身或系统的主印刷电路板(即主板)上的芯片组。适配器是一块插在主板插槽上的卡。
  3. 主存
    • 物理上,主存由一组动态随机存取存储器(DRAM)芯片组成。逻辑上,是一个线性字节数组,每个字节都有唯一地址(数组索引),地址从0开始 。
    • 每条机器指令由不同数量的字节组成,如Linux x86-64机器上,short类型 2字节,int float 4字节,long double 8字节
  4. 处理器
    • 中央处理单元(CPU),解释或执行存储在主存中指令的引擎。
    • 程序计数器(PC),大小只有一个字,任何时刻都指向主存中的某条机器语言指令。(即含有该条指令的地址)
    • 寄存器文件(Register file),一个小的存储设备,由一些单个字长的寄存器组成。
    • 算术/逻辑单元(ALU),计算新的数据和地址值。
    • 指令集架构描述的是每条机器代码指令的效果,微体系架构描述的是处理器实际上如何实现。

二. 存储器层次结构

image

上一层的存储器作为第一层存储器的高速缓存。

三、操作系统管理硬件

  • 两个基本功能:
    • 防止硬件被失控的应用程序滥用。
    • 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。
  • 通过几个抽象概念来实现上述两个功能:
    • 文件是对IO设备的抽象表示
    • 虚拟内存是对主存和磁盘IO设备的抽象表示
    • 进程是对处理器、主存和IO设备的抽象表示

1、进程

  • 进程是操作系统对一个正在运行的程序的一种抽象。
  • 并发执行,是指一个进程的指令和另一个进程的指令交错执行。实现这种交错执行的机制称为上下文切换。
  • 上下文是指操作系统保持跟踪进程运行所需的所有状态信息。
  • 内核管理着进程之间的转换,内核是操作系统代码常驻主存的部分,它不是一个独立进程,它是系统管理全部进程所用代码和数据结构的集合。

2、线程

  • 一个进程实际上由多个线程组成
  • 每个线程运行在进程的上下文中,共享同样的代码和全局数据

3、虚拟内存

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

  • 进程虚拟地址空间如图:

image
  • 地址空间最上面的区域是保留给操作系统中代码和数据的
  • 底部区域存放用户进程定义的代码和数据
  • 地址是从下往上增大的

从低的区开始:

  • 程序代码和数据

    代码和数据区直接按照可执行目标文件的内容进行初始化。在进程一开始运行时就被指定了大小。

  • 可以在运行时动态地扩展和收缩(malloc 和free)

  • 共享库

    在地址空间中部存放C标准库和数学库这样的代码和数据区域

  • 位于虚拟空间顶部,在调用一个函数时,栈会增长,从一个函数返回时,栈会收缩

  • 内核虚拟内存

    位于地址空间顶部,不允许应用程序读写这个区域的内容或者直接调用内核代码定义的函数,程序要调用内核来执行这些操作。

  • 虚拟内存的基本思想是把一个进程虚拟内存的内容存储在磁盘上,然后用主存作为磁盘的高速缓存。

4、文件

  • 文件是字节序列,每个IO设备都可以看成是文件
  • 所有输入输出都是通过使用一小组称为Unix I/O的系统函数调用读写文件来实现的。

四、系统间的网络通信

  • 网络可视为一个IO设备。一个网络通信的例子如图:

    image

五、重要主题

1、Amdahl定律

  • 主要思想:当对系统的某个部分加速时,对系统整体性能的影响取决于该部分的重要性和加速程度。

    image
  • 当k趋于无穷时,可选取系统的某一部分将其加速到某个点,在这个点上,该部分花费的时间可忽略不计。则此时

    S = 1/(1-alpha)
    

    Amdahl定律描述了改善任何过程的一般原则

2、并发和并行

  • 并发指一个同时具有多个活动的系统,并行指用并发使一个系统运行得更快

  • 线程级并发

    • 一个处理器在多任务间切换,这种配置称为单处理器系统

    • 由单操作系统内核控制的多处理器组成的系统,称为多处理器系统。多核处理器将多个CPU(称为核)集成到一个集成电路芯片

      多核处理器的组织结构

      image
    • 超线程,即 同时多线程,允许一个CPU执行多个控制流,涉及CPU某些硬件有多个备份,如程序计数器和寄存器文件,而其他硬件部分只有一份。超线程处理器可以在一个时钟周期的基础上决定执行哪个线程,使CPU能更好利用处理资源。

    • 多核处理器从两方面提高系统性能:减少了在执行多个任务时模拟并发的需要。可使程序运行得更快。

  • 指令级并行

    • 可同时执行多条指令的属性称为指令级并行
    • 处理器达到比一个周期一条指令更快的并行速率,称为超标量处理器。
  • 单指令、多数据并行

    • 允许一条指令产生多个可并行执行的操作,称为单指令、多数据,即SIMD并行
    • 提供SIMD指令多是为了提高处理影像、声音和视频数据应用的执行速度。

3、计算机中的抽象

各种抽象:

  • 处理器中,指令集架构提供了对实际处理器硬件的抽象。
  • 文件是对IO设备的抽象
  • 虚拟内存是对程序存储器的抽象
  • 进程是对一个正在运行程序的抽象
  • 虚拟机提供对整个计算机的抽象,包括操作系统、处理器和程序。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,123评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,031评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,723评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,357评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,412评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,760评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,904评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,672评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,118评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,456评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,599评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,264评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,857评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,731评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,956评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,286评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,465评论 2 348

推荐阅读更多精彩内容

  • 计算机系统漫游 信息是位 + 上下文 hello程序文件名为hello.c,源程序实际上是由0,1组成的位(又称比...
    ChaLLengerZeng阅读 342评论 0 0
  • 计算机系统是由硬件和软件系统组成的,它们共同工作来运行应用程序。作为程序员,也需要了解这些组件是如何工作的,以及这...
    knightaoko阅读 677评论 0 2
  • 通过研究"hello world"程序的生命周期,介绍计算机系统的主要概念和主题 计算机的组成 计算机是由硬件和软...
    程序员必修课阅读 222评论 0 1
  • 一条主线:跟踪hello程序的生命周期来开始对系统的学习。 1 信息的表示 hello.c的表示方法说明了一个基本...
    王侦阅读 492评论 0 2
  • 计算机系统是由硬件和系统软件组成的,它们共同工作来运行应用程序。 我们从hello,world开始来认识计算机的执...
    量化程序猿阅读 505评论 0 1