• CSAPP笔记-第一章


    快速链接:

    编译系统

    hello程序的运行过程

    高速缓存器

    操作系统

    计算机系统的抽象

    Amdahl加速比定律公式

    并发与并行

    • 这一章术语(请ctrl+F正文内查找):

    位,字节,字符,文本,ASCII, 文本文件,二级制文件,机器指令,可执行目标程序,编译器GCC(缺省),编译系统,预处理器,编译器,汇编器,链接,总线,I/O,主板,适配器,控制器,主存,DRAM,逻辑,处理器,程序计数器,寄存器,ALU,加载,存储,操作,跳转,指令集,高速缓存,操作系统,抽象,进程,多核,并发,上下文切换,内核,系统调用,控制权,线程,虚拟内存,虚拟地址空间,堆(缺省),共享库(缺省),用户栈(缺省),内核虚拟内存(缺省),加速比,Amdahl定律,并行,并发,线程级并发,多核,超线程,指令集并发,SIMD并行,虚拟机


    一个hello world程序的生命周期

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

    编译系统:

    • 编译hello程序的过程

      (1) 预处理阶段:插入头文件
      (2) 编译阶段:编译器翻译,包含main函数定义的汇编语言程序

    main:
        subq    $8, %rsp #一条低级机器语言指令
        movl    $.LCO, %edi
        call    puts
        movl    $0, %eax
        addq    $8, %rsp
        ret
    
    (3) 汇编阶段:汇编器翻译成机器语言指令,打包成可重定位目标程序(relocatable object program), 保存为二进制文件
    
    (4) 链接阶段:链接器合并调用的printf函数,得到可执行目标文件
    
    • shell: 命令行解释器;运行hello程序,(> ./hello)

    • 系统硬件组成

    1. 总线:总线传送定长的字节块(字,word),字长是基本的系统参数:32位系统是4个字节,64位系统是8个字节

    2. I/O设备:每个I/O设备都通过一个控制器(设备/系统主板上的芯片组)/适配器(插在设备/系统主板插槽上的卡)与I/0总线相连

    3. 主存:由一组动态随机存取存储器(DRAM)芯片组成。逻辑上,是一个线性字节数组。

    4. 处理器 (CPU):
      模型 - 指令集架构。
      下一条指令不一定和内存中刚执行的指令相邻。

      4.1 核心 - 大小为一个字的寄存器,成为程序计数器(PC),PC指向主存中某条机器语言指令(的地址)。

      4.2 寄存器文件(register file): 一个小的存储设备,每个寄存器单个字长

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

      4.4 CPU在PC中指令要求下执行的操作:

      加载 - 主存 -> 寄存器;
      存储 - 寄存器到主存;
      操作 - 两个寄存器 -> ALU运算 -> 一个寄存器;
      跳转 - 指令复制到PC

    hello程序的运行过程 (省略细节)

    高速缓存存储器 (cache memory)

    加快从主存中复制到寄存器的速度。

    多级高速缓存:L1, L2, (L3), ...

    可以利用高速缓存将程序的性能提高一个数量级

    • 存储设备的层次:使用上一层存储器作为低一层存储器的高速缓存

    操作系统:应用程序 <--> 硬件

    操作系统两个基本功能:

    (1)防止硬件被失控的应用程序滥用
    (2)向应用程序提供简单一致的机制来控制复杂的低级硬件设备

    因此,操作系统有以下抽象:

    • 进程:操作系统对一个正在运行的程序的一种抽象。

      • 并发运行 - 一个进程的指令和另一个进程的指令交错执行。进程数多于CPU个数。CPU通过处理器在进程间的切换来实现并发。
      • 这种交错执行的机制称为上下文切换 - 保持跟踪运行的状态信息,即上下文(PC,寄存器当前值,主存内容等)。
      • 内核(kernel, 操作系统代码常驻主存的部分,系统关系全部进程所用代码和数据结构的集合)管理进程到进程的转换。
        应用程序执行一条system call指令,将控制权传递给内核/操作系统。
        操作系统保留当前进程的上下文,创建应用程序的新进程以及上下文。
        操作系统将控制权传给新进程(执行请求,返回应用程序)。
    • 线程
      一个进程由多个线程执行单元组成。线程运行在进程的上下文中(?),共享代码和全局数据。

    • 虚拟内存
      一个抽象概念。进程的虚拟地址空间如下(每个进程看到的内存都是一致的):

    地址由下往上增大。

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

    系统之间的网络通信

    简而言之,网络可以视为一个I/O设备。

    Amdahl law

    实际加速比的计算:(S = T_{old} / T_{new}, T_{new} = (1-alpha)T_{old} + alphaT_{old}/k)

    并发(concurrency)和并行(parallelism)

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

    系统层次结构中由高到低的三个并行层次:

    1. 线程级(进程级?):多核处理器, 超线程/同时多线程

    2. 指令集并行:处理器同时执行多条指令 - 超标量(super-scalar)处理器

    3. 单指令、多数据(SIMD并行):多是为了提高处理影像、声音和视频数据应用的执行速度。;编译器支持用特殊的向量数据类型来写程序。

    计算机系统中抽象的重要性

    如,为一组函数规定一个简单的应用程序接口(API)

    计算机系统提供的一些抽象(在上述介绍的基础上增加"虚拟机"抽象):

    Other glossary

    • 8个位(比特) -> 1个字节 -> 程序中某个字符

    • ASCII标准:用唯一的单字节大小的整数值来表示每个字符

    • 文本文件:只由ASCII字符构成的文件。

    • 二进制文件:不是文本文件的所有其他文件

    Unsolved

    • 线程运行在进程的上下文中
    • 线程级并发 - 进程级并发?

    练习题答案

    (略)

  • 相关阅读:
    文件夹选项查看显示所有文件和文件夹..确定后隐藏文件依然不能显示,.
    加速电脑启动,给电脑瘦身
    进行性肌营养不良症的治疗
    可变量程的直流电压表
    数字图象处理课件 下载
    两顾高楼
    技巧心得:给拥有Google AdSense 帐户 朋友的一点忠告
    进行性肌营养不良研究又有新的发现
    电子通讯系统 >> BAS系统在地铁环境控制中的应用及实现
    J2ME游戏开发中时钟的简单实现
  • 原文地址:https://www.cnblogs.com/manqing/p/8867035.html
Copyright © 2020-2023  润新知