• 计算机系统-概述


    1.信息

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

    二进制文件:所有其他文件

    区分不同数据对象的唯一方法:根据字节序列的上下文

    2.编译过程

    从源文件到可执行目标文件,执行:

    gcc -o hello hello.c
    

    分为四个阶段:

    • 预处理阶段:预处理器(cpp)修改原来的C程序,得到hello.i文件
    • 编译阶段:编译器(ccl)将hello.i文件翻译成hello.s文件,包含汇编语言程序
    • 汇编阶段:汇编器(as)将hello.s文件翻译成机器语言指令,将指令打包并保存在hello.o文件中
    • 链接阶段:将其他预编译好的目标文件合并到hello.o文件中,得到hello可执行文件

    3.处理器读取并解释指令

    3.1 硬件组成

    1. 总线:携带信息字节并在各个部件之间传递
    2. I/O设备:键盘、鼠标、显示器、磁盘,通过控制器或适配器和I/O总线相连
      控制器:I/O设备本身或系统的主板
      适配器:插在主板插槽上的卡
    3. 主存:临时存储设备,物理上看,由一组动态随机存取存储器芯片组成,逻辑上看,是一个线性的字节数组
    4. 处理器:解释或执行存储在主存中指令的引擎,核心是程序计数器(PC)

    CPU的一些操作如下:

    • 加载:主存 -> 寄存器
    • 存储:寄存器 -> 主存
    • 操作:复制两个ALU(算术逻辑单元)的内容到寄存器并做算术运算,将结果保存到一个寄存器中
    • 跳转:从指令中抽一个字,复制到PC中,覆盖原来的值

    3.2 程序的运行

    1. shell程序等待我们输入指令,然后将我们输入的"./hello"字符逐一读入寄存器,再存放到内存
    2. 敲回车后,shell程序得知命令输入结束,执行一系列指令加载可执行文件,将hello目标文件中的代码和数据从磁盘复制到内存
    3. 处理器执行main程序中的机器语言指令,将要输出的字符串中的字节从主存复制到寄存器文件,再从寄存器文件复制到显示设备,最终显示在屏幕上

    4.缓存

    为什么需要缓存?

    因为从磁盘上读取数据的时间要远远大于主存中的时间,寄存器的速度又比主存快100倍,而且随着半导体技术进步,差距还在增大,针对这种差异,将处理器近期可能会需要的信息存储在高速缓存,让大部分的内存操作在缓存中完成

    5.存储设备层次结构

    从上到下,访问速度越来越慢,容量越来越大:

    • L0:寄存器
    • L1高速缓存
    • L2高速缓存
    • L3高速缓存
    • 主存
    • 本地磁盘
    • 远程存储

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

    6.操作系统

    应用程序和硬件之间的一层软件,有两个功能:

    1. 防止硬件被失控的软件滥用
    2. 向应用程序提供简单一致的机制控制硬件设备

    6.1 进程

    操作系统对一个正在运行的程序的抽象

    上下文:操作系统保持跟踪进程运行所需的所有状态信息

    上下文切换:保存当前进程的上下文,恢复新进程的上下文,将控制器交给新的进程

    6.2 线程

    一个进程由多个称为线程的执行单元组成,线程之间共享全局数据和代码

    6.3 虚拟内存

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

    Linux中地址空间最上面区域保留给操作系统中的代码和数据,底部区域存放用户进程定义的代码和数据。

    6.4 文件

    就是字节序列,每个I/O设备都可以堪称是文件

  • 相关阅读:
    【区间DP&&记忆化搜索】乘法游戏
    洛谷P1608路径统计
    2021省选游记
    涂色计划P4170
    01迷宫及路径记录(DFS&&BFS)
    [YBTOJ递推算法强化训练4]序列个数
    C++关于string 的优先队列以及重载运算符
    浅谈C++STL容器
    集合的划分
    图的表示
  • 原文地址:https://www.cnblogs.com/jordan95225/p/13904977.html
Copyright © 2020-2023  润新知