zoukankan      html  css  js  c++  java
  • 【CSAPP】一、计算机系统漫游

    一、位+上下文

    文本文件 / 二进制文件: 文本文件是只由ASCII码构成的文件

    二、从源代码到可执行文件的顺序

    源代码 ——> 可执行文件(机器代码)共有四步:

    全过程代码 gcc hello.c -o hello

    1、预处理,(预处理器cpp)将#开头的命令执行,例如将#include中文件加入, 扩展名为.i

      gcc -E hello.c -o hello.i

      输出文件为文本文件,前面大部分为 <stdio.h>内容,后面部分原版照抄。。

    2、编译, (编译器ccl)将.i文件翻译为.s文件,输出为 汇编语言程序。

      gcc -S hello.i -o hello.s

      输出的文件我不太认识。。。估计是汇编程序

      

    3、汇编,(汇编器as)将.s文件翻译成.o文件,这是一种 可重定位目标程序,是二进制文件。

      gcc -c hello.s -o hello.o

      已经是二进制文件了,查看是乱码。

    4、链接, (链接器ld)将.o文件转化为hello文件,输出为可执行文件。处理一些标准库中的函数,例如printf函数, 存在于已经编译好的printf.o文件中,链接器的作用是将这两个.o文件综合,输出可执行文件。

      gcc hello.o -o hello

      这两个乱码看起来不太像,不知道内部机制是什么样的。

    三、硬件简单浏览

    1、总线:字长, 一般4字节(32位)或者8字节(64位)

    2、主存:DRAM(动态随机存储器), 最小单位是字节,每个字节有自己的存储地址,

    3、CPU构成:寄存器文件, 程序计数器,逻辑算数单元,寄存器都是1字长, 

    四、高速缓存

    L1: 位于处理器芯片中,数万字节,速度与寄存器文件几乎一样快。

    L2: 特殊的总线连接,比L1慢5倍,比主存快5倍,数十万到数百万字节, 静态随机访问存储器。

    五、操作系统管理硬件

    1、操作系统两个功能:防止滥用;向程序提供一致的机制控制低级硬件设备,涉及进程、虚拟存储器、文件。

      其中文件是io抽象,虚拟存储器是io主存抽象,进程是处理器主存io抽象

    2、进程:操作系统对正在与运行的程序的抽象。上下文切换。

    3、线程:执行单元。每个线程共享代码和全局数据,处于同样的上下文中。一般比进程更加高效。

    4、虚拟存储器:地址由低到高

      程序代码和数据、堆、共享库、栈、内核虚拟存储器,

    5、文件:字节序列,io设备均可以抽象为文件。

    六、并发和并行

    并发概念比较广泛,指同时具有多个活动的系统。

    并行指通过并发使一个系统运行得更快。

    1、线程级并发

      多核处理器:同一个微处理器芯片上有多个cpu, 每个核有自己的L1, L2缓存,但共享高层的高速缓存和到主存的接口。

      超线程:程序计数器和寄存器文件有多个备份,运算单元只有一份,常规处理器切换线程要20000时钟周期,超线程可以自由切换。i7可以一个核2线程,那么4核就有8线程。

    2、指令级并行

      更加底层,现在每个时钟周期2-4条指令,但每条指令的时间大约20个周期,通过流水线的使用,实现并行

    3、单指令、多数据并行

      SIMD并行,并行对4对float数据做加法的指令。一般是为了提高处理影像、声音和视频数据应用的执行速度。

    七、抽象

  • 相关阅读:
    Centos7中在线/离线安装DockerCE最新版
    Centos7中离线安装DockerCE最新版
    Docker中部署Mysql5.7和DbAdmin的docker-compose.yml
    在三台Centos或Windows中部署三台Zookeeper集群配置
    Python爬虫指定关键词下载百度图片的角本
    JAVA基于图片相似性算法实现以图搜图样例
    Foxmail中配置O365邮箱和Hotmail邮箱
    .Net混淆工具和反混淆工具
    MyBatis中使用实体中使用枚举,数据库中使用数值
    Mybatis中使用集合、数组
  • 原文地址:https://www.cnblogs.com/yesuuu/p/6927556.html
Copyright © 2011-2022 走看看