计算机系统-概述

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设备都可以堪称是文件

posted @ 2020-10-31 00:52  马晟  阅读(130)  评论(0编辑  收藏  举报