zoukankan      html  css  js  c++  java
  • [读书笔记]计算机系统漫游

    信息就是比特+上下文

    何为比特?就像人类发明的文字,比特就是信息的载体。英语有26个字母,不同的字母组合构成了各种单词。同理,比特(即0或1)的不同组合也构成了各种信息。正如同一个单词在不同的上下文中有不同的意思,同一串比特在不同的上下文中也代表着不同的信息。所以才会有各种变量类型,各种Content-Type,各种编码……,毕竟在计算机眼里,一切不过是01,只有将其转换为人所规定并理解的含义,才有“意义”,就像文字,如果失去了人类文明,文字本身又有什么意义呢?

    0和1只不过是两个符号,但是他们的排列组合的数量却是指数级增长的,所以能表示几乎无穷多的信息。但是为什么有26个英文字母而不是2个英文字母,为什么阿拉伯数字是十进制不是二进制,一方面是因为人类需要“可读性”,毕竟让我们看十进制比看二进制容易多了,而计算机恰好不需要这样的“可读性”。而且,只使用两个“符号”恰好又满足了硬件的某些特性。当我们要求计算机做一件事时,它找到对应的比特,然后将这些比特转换为人类“语言”(通过硬件)。

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

    高级语言也是为了可读性,由于计算机只“懂”由0和1组成的机器指令,所以需要一些软件,将高级语言转换为机器指令。比如,将一个C语言源文件转换为可执行程序的过程依次为:

    • 预处理阶段。比如去掉所有注释。

    • 编译阶段。将上一步得到的代码翻译为汇编语言。

    • 汇编阶段。将上一步的汇编代码翻译为机器指令。

    • 链接阶段。比如将用到的其他库中的函数的指令合并进来。

    系统的硬件组成

    总线(bus)是贯穿在系统内的电子管道,负责运输字节。I/O(输入/输出)设备通过controller或adapter与I/O总线相连。主存(Main Memorex)用来存放指令和数据。处理器(CPU)用来执行主存中的指令,在任何时候,CPU内部的PC(program counter,一个一个word大的寄存器)都指向某个指令。CPU不断执行指向的指令,并不断更新PC中存放的地址。register file包含了有各自唯一名字的一组寄存器,ALU(arithmetic/logic unit)负责算数逻辑运算。可以说CPU就像是指令集的实现,但实际的实现是和硬件紧密相关的。

    缓存是提升性能的关键

    计算机总是在将一些字节信息从一个地方移动到另一个地方,比如将硬盘中的程序拷贝到主存中,再从主存中拷贝到CPU的寄存器中,或是将一些信息从主存拷贝到输出设备。但有一个限制:容量越大的存储设备速度越慢。比如内存的速度就跟不上CPU的速度,于是就有了由高速缓存组成的存储结构:

    越靠近金字塔塔尖的缓存速度越快,但容量也越小,其中的关键在于:只要能把那些此时此刻更有可能被程序访问的信息放到靠近上层的缓存中,就能有效地利用CPU的速度并且也拥有一个足够的存储空间。

    操作系统是软件和硬件的桥梁

    操作系统隐藏了硬件的复杂性,向软件提供简单且统一的API,软件也不能直接访问像CPU、主存这些硬件。

    • 进程是操作系统对一个正在运行的程序的一种抽象。进程上的下文就是一个进程能运行所需要的所有状态信息。上下文切换就是保存当前运行的进程的上下文,然后恢复下一个要运行的进程的上下文,这个工作是由操作系统完成的,更具体来说,是由操作系统内核(kernel)完成的,这个内核只不过是总是存放在内存中的一部分操作系统代码。

    一个进程可以有多个叫做线程的执行单元,这些线程共享这个进程的上下文。

    • 虚拟内存是一种对内存和磁盘的抽象,它让每个进程都有种自己在独占所有内存的感觉,每个进程眼里的内存都是一样的,叫做虚拟地址空间,它长这样:

    • 一个文件不过就是一串字节。在一个应用软件的眼里,所有I/O设备(网络也可以看做一个I/O设备)都可以看作文件。
    • 甚至整个计算机都可以抽象为一个概念:虚拟机,它包括操作系统、处理器和程序。

    重要主题

    Amdahl定律主要就是说:即使对系统的一部分做出了巨大的速度(性能)优化,对整体系统的影响也并没有多大,除非优化的那一部分占整个系统的很大一部分。

    多核处理器中的每一个“核”都是一个CPU,大致长这样:

    这些CPU都由操作系统内核来管理。

    超线程(Hyperthreading)简单来说就是:只有一个CPU,但是有很多份程序计数器(PC)和寄存器组,所以可以省下很多线程上下文切换的时间。

    指令级别也可以做到并行,比如CPU对指令的流水线处理(pipelining ,以后会细讲)等等。

  • 相关阅读:
    有点郁闷,但是又不能表现出来,好难过
    搞平衡,我们公司跟国企也没有啥区别
    找兼职遇到的尴尬
    两岁的儿子
    Shark DB Expert 2.6数据库客户端工具终结者 问世
    .Net 中访问Oracle 数据表,出现OCI22053: overflow error
    Oracle冷备迁移过程和在线日志损坏处理
    转:Oracle数据库的优化之数据库磁盘I/O
    Linux批量移动文件grep+mv
    Oracle下导入txt的shell脚本以及配置
  • 原文地址:https://www.cnblogs.com/raytheweak/p/9782999.html
Copyright © 2011-2022 走看看