• 深入理解计算机系统(第三版)


    第七章 链接

      链接是将各种代码和数据片段收集并组合成为一个单一文件的过程。(在软件开发中实现分离编译)

    7.1 编译器驱动程序

    7.2 静态链接

    • 符号解析:将每个符号的引用与一个符号的定义关联起来。
    • 重定位:编译器和汇编器生成从地址0开始的代码和数据节,链接器通过把每个符号定义与一个内存位置关联起来,从而重定位这些节,然后修改所有对这些符号的引用,使得它们指向这个内存位置。

    7.3 目标文件

    编译器和汇编器生成可重定位目标文件,链接器生成可执行目标文件。

    7.4 可重定位目标文件

    7.5 符号和符号表

    7.6 符号解析★

    7.7 重定位★

    重定位节和符号定义

    重定位节中的符号引用-重定位条目

    7.8 可执行目标文件

    7.9 加载可执行目标文件

    7.10 动态链接共享库

    7.11 从应用程序中链接和加载共享库

    7.12 位置无关代码

    7.13 库打桩机制(linux链接器)

    7.14 处理目标文件的工具

    第八章 异常控制流(ECF--Exceptional Control Flow)

    8.1 异常

    (1)异常类别:中断、陷阱、故障、终止

    8.2 进程——一个执行中程序的实例

    (1)进程提供给应用程序的关键抽象:

    • 一个独立的逻辑控制流,它提供一个假象,好像我们的程序独占地使用初处理器。
    • 一个私有的地址空间,它提供一个假象,好像我们的程序独占地使用内存系统。

    (2)并发流——一个逻辑流的执行时间与另一个流重叠。

    (3)上下文切换——操作系统内核采用的一种较高形式的异常控制流来实现多任务。

      内核为每个进程维持一个上下文,上下文就是内核重新启动一个被抢占进程所需的状态。它由一些对象的值组成,这些对象包括通用目的寄存器、浮点寄存器、程序计数器、用户栈、状态寄存器、内核栈和各种内核数据结构,比如描述地址空间的页表、包含有关当前进程信息的进程表,以及包含进程已打开文件的信息的文件表。

    (4)信号——就是一条消息,它通知进程系统发生了一个某种类型的事件,并且允许进程和内核中断其他进程。

    (5)非本地跳转

    第九章 虚拟内存

    9.1 物理和虚拟内存

      物理寻址和虚拟寻址

    9.2 地址空间——非负整数地址的有序集合

    9.3 虚拟内存作为缓存的工具★

    9.4 虚拟内存作为内存管理的工具

    9.5 虚拟内存作为内存保护的工具

    9.6 地址翻译★

    9.7 案例研究:Intel Core i7/Linux 内存系统★

    9.8 内存映射

    9.9 动态内存分配★

    9.10 垃圾收集

    9.11 C程序中常见的与内存有关的错误

    第十章 系统级I/O

      输入输出(I/O)是在主存和外部设备(例如磁盘驱动器、终端和网络)之间复制数据的过程。

    10.1 Unix I/O

    10.2 文件(介绍了linux的文件和目录)

    10.3 打开和关闭文件(open和close函数)

    10.4 读和写文件(read和write函数)

    10.5 用RIO包健壮地读写

    • 无缓冲的输入输出函数
    • 带缓冲的输入函数

    10.6 读取文件元数据(stat和fstat函数)

    10.7 读取目录内容(readdir函数)

    10.8 共享文件

    10.9 I/O重定向

    10.10 标准I/O

    10.11 综合:我该使用哪些I/O函数?

    第十一章 网络编程

    11.1 客户端-服务器编程模型

    11.2 网络

    11.3 全球IP因特网

    11.4 套接字接口(socket interface)

    11.5 web服务器

    11.6 综合:TINY WEB服务器(实例学习)

    第十二章 并发编程

      三种构造并发程序的方法:

    • 进程:每个逻辑控制流都是一个进程,由内核来调度和维护。因为进程都有独立的虚拟地址空间,想要和其他流通信,控制流必须使用某种显式的进程间通信(IPC)机制。
    • I/O多路复用:一个应用程序在一个进程的上下文中显式地调度它们自己的逻辑流。逻辑被模型化为状态机,数据到达文件描述符后,主程序显式地从一个状态转换到另一个状态,因为程序是一个单独的进程,所以所有的流都共享同一个地址空间。
    • 线程:是一个运行在单一进程上下文中的逻辑流,由内核进行调度。可以将线程看作是其他两种方法的混合体,像进程流一样又内核进行调度,又像I/O多路复用流一样共性同一个虚拟地址空间。

    12.1 基于进程的并发编程

      一个构造并发服务器的自然方法是,在父进程接受客户端的连接请求后,创建一个新子进程为每个新客户端提供服务。

    12.2 基于I/O多路复用的并发编程

      基本思路:使用select函数,要求内核挂起进程,只有在一个或多个I/O事件发生后,才将控制返回给应用程序。

    12.3 基于线程的并发编程

    12.4 多线程程序中的共享变量

    12.5 用信号量同步线程

    12.6 使用线程提高并行性

  • 相关阅读:
    2020 CCPC Wannafly Winter Camp Day2 E阔力梯的树(树上启发式合并)
    牛客练习赛73D 离别(线段树)
    从零开始部署图书管理系统
    linux下安装nginx(编译安装)及反向代理及负载均衡
    linux下MariaDB安装
    linux下virtualenvwrapper安装
    linux下安装虚拟环境
    linux下安装django2.2
    linux下安装nginx(yum源安装)
    linux系统优化命令--day03
  • 原文地址:https://www.cnblogs.com/nykuo/p/11230042.html
Copyright © 2020-2023  润新知