zoukankan      html  css  js  c++  java
  • 深入理解计算机系统-第一章

    第一章主要是对计算机系统的一个概述,以及计算机系统与IO设备等如何交互,计算机硬件的抽象等。

    1.1 信息 = 位 + 上下文

    计算机使用二进制的原因:电子电路采用的基本元件只有通和断两种状态,一切运算在计算机硬件内部都会转换为元件的通和断的状态,使用二进制作为电子计算机的运算语言比较容易实现。

    位 bit 表示信息的最小单位只能是0或1
    字节 byte 等于8个bit 是计算机数据处理的基本单位

    系统中所有的信息:磁盘、程序、用户数据等都是一串bit表示的,在不同的上下文下,同一串bit序列表示的意义可能不同 所以 信息 = 位 + 上下文


    1.2 程序的在系统中的编译过程

    #include <stdio.h>
    int main(){
        printf("hello world");
        return 0;
    }
    


    预处理器:读取stdio.h内容 插入程序文本生成 hello.i
    编译器:生成汇编程序 hello.s
    汇编器:编译成机器语言指令 生成可重定位目标程序 hello.o
    链接器:合并调用的函数 例如printf函数已经提前生成了printf.o,得到可执行目标文件hello,可以加载到内存有系统执行

    汇编语言:使得不同的高级语言经过编译之后都能得到相同语法、格式的输出语句。


    1.3 处理器解读指令集

    运行编译后的可执行目标文件 hello

    ./hello
    

    在shell中输入上述指令,如果指令不是内置的shell命令,就会认为是一个可执行文件 ,加载到内存并运行。

    1.3.1系统硬件组成


    1. 总线
    贯穿整个系统的一组电子管道,称作总线,携带信息字节并在各个部件之间传输

    2. I/O设备
    I/O设备(输入/输出设备)是系统与外部世界的联系通道,I/O设备通过控制器或适配器与I/O总线相连,在通过I/O桥与系统总线或内存总线相通

    3. 主存
    是一个临时存储设备,是由一组 DRAM(动态随机存储器)芯片组成,
    用来在处理器处理程序时,存储程序和程序处理的数据,逻辑上是一个线性的字节数组。

    4. 处理器
    即CPU,是解释、执行存储在主存之中的程序的引擎
    内部包括寄存器文件,由多个寄存器组成,存储数据;
    程序计数器(PC)大小一个字 对应内存中的一个地址,指向主存中某条机器指令的地址
    ALU 逻辑运算单元
    处理器从通电开始就在不停的执行程序计数器指向的指令,执行完毕PC指向下一条指令
    - 加载:从主存中读取数据到寄存器
    - 存储:从寄存器读取值覆盖内存中的值
    - 操作:复制两个寄存器的内容到ALU进行逻辑运算,结果存储到一个寄存器中
    - 跳转:从指令本身中抽取一个字,并将字复制到程序计数器中,覆盖原有值

    ps: 一个字是多大 第二章中会介绍
    每台计算机都有一个字长,指明指针数据的标称大小
    字长为n位 ,一个字的大小就是2^n,可表示的范围即虚拟地址范围 0-2n-1,程序最多访问2n字节。(字节是最小寻址单位 所以是范围*字节)
    32位字长机器 2^32 4GB
    64位字长机器 2^64 虚拟地址空间 16EB
    大多数64位机器可以兼容32机器编译的程序 称为 向后兼容

    1.3.2 hello程序运行过程

    1.从shell中输入 ./hello,将字符读入寄存器,存储到主存中
    2.输入回车 shell程序认为输入结束,shell开始执行一系列命令来加载可执行的hello文件
    3.将编译后的hello文件的代码、数据从磁盘复制到主存 (利用了直接存储器存取 DMA 数据不经过CPU 直接从磁盘到内存)
    4.CPU开始执行hello文件对应的机器指令,将hello world字符从寄存器复制到显示器输出


    1.4 高速缓存 通过特殊总线直接连接处理器 SRAM

    程序执行过程中很大一部分时间都是花费在数据的复制上,
    磁盘——>内存
    主存——>寄存器
    寄存器——>I/O设备
    存储设备容量越大,存储设备运行越慢。所以磁盘与主存之间、处理器与主存之间读取速度的差距非常大
    针对处理器与主存之间的差异,系统设计者采用了更小更快的存储设备,称为高速缓存存储器,作为暂时存储区域,存储处理器近期可能需要的信息

    现代处理器中的缓存 L1、L2、L3

    1.5 存储设备层次结构

    存储器分类:

    • 静态随机存取存储器(SRAM)是随机存取存储器的一种。所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持,例如CPU高速缓存

    • 动态随机存取存储器(DRAM)里面所储存的数据就需要周期性地更新,例如主存

    • 只读存储器(ROM)以非破坏性读出方式工作,只能读出无法写入信息。信息一旦写入后就固定下来,即使切断电源,信息也不会丢失,所以又称为固定存储器 例如电脑磁盘

    1.6 操作系统对硬件的管理

    操作体统是 应用程序、软件和硬件之间的中间层

    向应用程序提供了简单、一致的机制来操控复杂的硬件

    操作系统对系统硬件进行了抽象

    • 进程
      进程是操作系统对正在运行的程序的一种抽象,感觉同时可以运行多个进程,而每个程序都好像在独占的使用处理器。
      单核CPU 同一个时刻只能运行一个进程,同时运行多个是通过进程切换来交错运行来实行(上下文切换),因为CPU计算速度远超与文件读取、网络传输等任务。
      多核CPU 则在同一时刻可以运行多个进程
      上下文包含许多信息,包括PC、寄存器文件和主存中的内容,上下文切换就要报错当前进程的状态,加载新进程的上下文,由操作系统内核(kernel)进行,内核不是一个独立的进程,是系统全部进程所用代码和数据结构的集合

    • 线程
      线程是操作系统可识别的最小执行单元
      现代操作系统中一个进程分为多个线程,这些线程共享该进程的上下文——>引发线程安全问题
      多处理器时,多进程可以使得程序运行的更快

    • 虚拟内存
      虚拟内存是主存的抽象概念,让每个进程都有一种独占主存的错觉,每个进程看到的主存是一致的 称为虚拟地址空间

    • 文件
      文件就是字节序列,每个I/O设备磁盘、键盘、显示器设置网络都可以视为文件,系统中的输入输出都通过调用系统函数来读写文件来进行。

    1.7 网络通信

    随着Internet的出现现代操作系统经常通过网络个其他系统连接到一起。网络可以视为I/O设备。

    系统可以从主存复制一段信息到网络视频日期发送到另一台机器
    也可以从网络适配器读取其他机器发来的数据

  • 相关阅读:
    .NET实现Excel文件的读写 未测试
    权限管理设计
    struts1中配置应用
    POJ 2139 Six Degrees of Cowvin Bacon(floyd)
    POJ 1751 Highways
    POJ 1698 Alice's Chance
    POJ 1018 Communication System
    POJ 1050 To the Max
    POJ 1002 4873279
    POJ 3084 Panic Room
  • 原文地址:https://www.cnblogs.com/shinyrou/p/13141197.html
Copyright © 2011-2022 走看看