计算机系统 01

概论

信息就是位+上下文

  • 用ASCII标准表示文本字符: 用一个惟一的单字节大小整数值来表示每一个字符
  • 源文件经过编译器, 汇编器和链接器翻译成二进制可执行文件
  • 全部信息由一串位表示,区分数据对象惟一方法是读到的上下文

总线

  • 传送定长字节块: 字
  • 通常分4字(32位)/8字(64位)

操做系统内核

  • 硬件和软件之间的媒介,提供三种抽象:
    • 文件是对IO的抽象,就是字符序列
    • 虚拟存储器是对主存和磁盘的抽象
    • 进程是对处理器, 主存和IO设备的抽象

虚拟机

  • 对整个计算机的抽象

进程

  • 操做系统对一个正在运行系统的抽象
  • 处理器经过上下文切换实现多进程并发执行
  • 上下文: 操做系统保持跟踪进程运行所需的全部状态信息

线程

  • 一个线程能够由多个线程的执行单元组成
  • 全部线程运行在进程的上下文中,共享代码和全局数据
  • 多线程比多进程更容易共享数据, 网络服务器并行处理中更高效

虚拟存储器

  • 抽象概念, 为每一个进程提供独自使用主存的假象, 称为虚拟地址空间
  • 从低地址到高区域为: 程序代码和数据, 堆, 共享库, 栈, 内核虚拟存储器

信息的表示和处理

信息存储

  • 8位一字节: 最小可寻址存储器单位
  • 存储器可视为很是大的字节数组, 每一个字节由惟一数字标示: 地址
  • 全部可能的地址集合为虚拟地址空间

字长(32/64)

  • 决定虚拟地址空间最大大小
  • 字长w位, 虚拟地址范围0~(2^w)-1, 程序最多访问2^w个字节
  • 如字长32位, 限定虚拟地址空间4GB

连接

连接器

  • 连接是将各类代码和数据部分收集起来并组合成为一个单一文件的过程
    • 能够执行于编译时: 源代码翻译成机器代码
    • 能够执行于加载时: 程序被加载器加载到存储器并执行时
    • 能够执行于运行时: 由应用程序来执行
  • 连接由连接器执行, 实现分离编译

目标文件

  • 字节块集合, 包括三种形式:
    * 可从新定位目标文件: 能够在编译时与其余可从新定位目标文件合并,建立一个可执行目标文件
    * 共享目标文件: 特殊可从新定位目标文件, 能够在加载或运行时被动态地加载到存储器并连接
    * 可执行目标文件: 可被拷贝到存储器并执行
  • 编译器和汇编器生成可从新定位目标文件或共享目标文件, 连接器生成可执行目标文件
  • 目标模块是一个字节序列, 目标文件就是存放在磁盘文件中的目标模块

可从新定位目标文件

  • 各个系统目标文件格式不一样, unix为例格式为ELF
  • ELF头
    * 以一个16字节的序列开始, 其描述了生成该文件系统字的大小和字节顺序
    * 剩下部分包括ELF头的大小, 目标文件的类型, 机器类型, 字节部表的文件偏移, 字节头部表中的条目大小和数量

符号和符号表

  • 每一个可从新定位目标模块m都有一个符号表, 它包含m所定义和引用的符号信息
  • 在连接器的上下文中包含三种符号:
    * m定义并能被其余模块引用的全局符号
    * 其余模块定义并被模块m引用的全局符号, 这些符号称为外部符号
    * 只被模块m定义和引用的本地符号

符号解析

  • 连接器解析符号引用是将每一个引用与它输入的可重定位目标文件的符号表中的一个肯定的符号定义联系起来
  • 编辑器只容许每一个模块中每一个本地符号中有一个定义
  • 引用外部符号时会假设符号在其余模块中定义, 生成连接器符号表条目, 若是连接器在任何输入模块找不到则输出错误信息并终止

解析多重定义全局符号

  • 编译时编译器向汇编器输出每一个全局符号分为强或弱, 汇编器把这个信息隐含地编码在可从新定位目标文件符号里
  • 函数和已经初始化的全局变量为强符号, 未初始化的全局变量为弱符号
  • 连接器处理规则: * 不容许有多个强符号 * 若是有一个强符号和多个弱符号, 选择强符号 * 多个弱符号则随机选择
相关文章
相关标签/搜索