前言
- 这个系列的文章是摘自深入理解计算机系统
- 我看过这方面的书,但是一直没有形成一个系统的理解。
- 看完这个基础知识之后,就可以去看我的30天自制操作系统博客
基础硬件架构
- 系统总线 贯穿整个系统,并携带信息字节在各个部件间传递,一般被设计成传送定长的字节块。现在大多数机器要么是4字节,要么是8字节,即32位或64位电脑
- I/O设备有鼠标,键盘,显示器,磁盘,最开始,可执行程序hello就存放在磁盘上,每个I/O设备都通过控制器或适配器与I/O总线相连。控制器与适配器之间的区别在封装方式,控制器是I/O设备本身的主印刷电路板上的芯片组。适配器则是插在主板插槽上的卡【功能都是在I/O总线和I/O设备之间传递信息】
- 主存则是一个临时存储设备,用来存放程序和程序处理的数据。从物理上说,就是一组动态随机存取存储器(DRAM)芯片组成,从逻辑上来说,存储器就是一个线性的字节数组,每个字节有其唯一的地址
- 为了应付CPU能够高速的读取数据,计算机体系建立了一个多级的缓存体系,磁盘的数据被加载到内存,内存的数据又被加载到高速缓存,高速缓存又分为一二三级,最后又是寄存器。
CPU的常见操作
- CPU是解释或执行存储在主存中指令的引擎。核心是一个字的存储设备,称为程序计数器,任何时候,PC都指向主存中的某条机器语言指令。
- 加载 从主存复制数据到寄存器
- 存储 从寄存器复制数据到内存
- 操作 把寄存器的内容复制到ALU进行计算
- 跳转 从指令中抽取一个字,复制到程序计数器,覆盖PC原来的值
Intel处理器历史
- 8086 1978年,
- 80286
- i386
- i486
- Pentium
- PentiumPro
- Pentium/MMX
- Pentium II
- Pentium III
- Pentium 4
- Pentium 4E
- Core 2
- Core i7
- Core i7
- Core i7
操作系统作用
- 两个基本功能
- 防止硬件被失控的应用程序滥用
- 向应用程序提供简单一致的机制来控制复杂而又通常不大相同的低级硬件设备
- 通过基本的抽象概念实现这两个功能,进程,虚拟内存,文件
- 文件是对I/O设备,虚拟内存是对主存和磁盘I/O,进程则是对处理器,主存和I/O设备的抽象表示
进程
- 操作系统实现这种交错执行的机制称为上下文切换
- 操作系统保持跟踪进程运行所需的所有状态信息,这种状态就是上下文,包括PC和寄存器文件的当前值,以及主存的内容
- 从一个进程到另一个进程的转换是由操作系统内核管理的,内核是操作系统代码常驻内存的地方
虚拟内存空间
- 每一个进程的虚拟内存空间都是由下面几个区构成的,在Linux中,操作系统的内核放置在主存的顶部。接下来的介绍按照地址从低到高排列
- 首先是只读的代码和数据区, 他放置从磁盘加载的代码和C语言全局变量,一开始就指定了大小
- 运行时堆,他会在程序运行的时候动态的分配内存空间,可以动态的扩展和收缩
- 共享库 在地址的中间部分是一块用来存放像C标准库和数学库这样共享库代码和数据的区域
- 栈 位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数调用,和堆一样,用户栈可以动态的扩展和收缩
文件
- 文件就是字节序列
- 系统中的所有输入输出都是通过使用一小组称为Unix I/O的系统函数调用读写文件实现