@[toc]

计算机系统漫游

计算机系统是由硬件和软件组成的。

信息就是位+上下文

文本文件: 由ASCII字符构成的文件
二进制文件:
系统中所有的信息——包括磁盘文件,内存中的程序,内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示的。
区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文
C语言介绍

程序被其他程序翻译成不同的格式

在Unix系统上,从源文件目标文件的转化是由编译器驱动程序完成的。

linux > gcc -o hello hello.c

graph LR
  hello.c-->A
  A[预处理器cpp]
  B[编译器ccl]
  C[汇编器as]
  D[链接器ld]
  A--hello.i-->B
  B--hello.s-->C
  C--hello.o-->D
  printf.o-->D
  D-->hello

这个翻译过程可分为四个阶段,执行这四个阶段的程序(预处理器,编译器,汇编器和链接器)一起构成了编译系统
预处理阶段:预处理器根据以字符#开头的命令,修改源程序。得到hello.i。
编译阶段:编译器将文本文件hello.i翻译为文本文件hello.s
汇编阶段:汇编器将hello.s翻译成机器指令,把这些指令打包成一种叫做可重定位目标程序的格式,并将结果保存在目标文件hello.o中,为二进制文件。
链接阶段:将多个需要的目标文件(例如调用了printf,所以需要printf.o)以某种方式整合在一起,形成可执行文件,将被加载到内存中,由系统执行。
GUN项目

了解编译系统如何工作是大有益处的

  • 优化程序性能
  • 理解链接时出现的错误
  • 避免安全漏洞

    系统的硬件组成

  • 总线
  • I/O设备
  • 主存
  • 处理器

存储设备形成层次结构

局部性原理:

  • 时间上:
  • 空间上:

操作系统管理硬件

操作系统是应用程序和硬件之间的一层。
操作系统具有两个基本功能:

  1. 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件。
  2. 防止硬件被失控的应用程序滥用。

    进程

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

    线程

    一个进程实际上由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。

    虚拟内存

    每个进程看到的内存都是一致的,称为虚拟地址空间。
  • 程序代码和数据
  • 共享库
  • 内核虚拟内存

    文件

    文件是对IO设备的抽象。它为应用程序提供了一个统一的视图,来看待系统中可能含有的所有各式各样的IO设备。