1.操作系统基本概念
1.1操作系统与 “内核” 同义,其为了完成两个主要目标:
- 与硬件交互。
- 为应用程序提供运行环境。
1.2多用户系统
多用户系统就是一台能够并发和独立的执行分别属于两个或多个用户的若干应用程序的计算机。
并发:几个应用程序能同时处于活动状态。
独立:每个应用程序能执行自己的任务。
1.3进程
定义:程序运行的实例,或者一个运行程序的执行上下文。
进程与程序的区别:几个进程能并发的执行同一程序,而同一进程能顺序的执行几个程序。
在单处理系统上,只有一个进程能占有CPU,因此在某一时刻只能有一个执行流。
1.4内核体系结构
使用模块化优点
- 模块可在运行时动态链接和解除链接。
- 不依赖于某个固定的平台。
- 当需要时才链接到运行的内核中,节省内存。
- 当链接到内核之后,其作用与静态链接的内核目标完全等价。
2.UNIX文件系统
2.1硬链接和软链接
硬链接:包含在目录中的文件名就是一个文件的硬链接,简称链接 Link.
命令:$ In P1 P2 创建一个硬链接,为路径P1标识的文件创建一个路径名为P2的硬链接。
硬链接限制:
- 不允许给目录创建硬链接,可能导致目录树为环形。
- 在同一文件系统中的文件才可以创建链接。
软链接:即符号链接 symbolic link,符号链接是短文件,这些文件包含有另一个文件的任意一个路径名,路径名可以指向位于任意一个文件系统的任意文件或目录,甚至可以指向一个不存在的文件。
命令:$ ln -s P1 P2 创建一个名路径名为P2的新软链接,P2指向路径名P1,当这个命令执行的时候,文件系统抽出P2的目录部分,并在目录下创建一个名为P2的符号链接类型的新项。这个新文件包含路径名P1,这样对P2的引用都可以指定转化成指向P1的一个引用。
2.2 文件类型
unix 文件类型如下:
- 普通文件
- 目录
- 符号链接
- 面向块的设备文件 block-oriented device file
- 面向字符的设备文件 character-oriented device file
- 管道pipe和命名管道FIFO
- 套接字 socket
2.3 索引节点 与 文件描述符
索引节点inode:文件系统处理文件所需要的所有信息包含在一个名为索引节点的数据结构中,每个文件都有自己的索引节点,文件系统用索引节点标识文件。
文件描述符fd:表示进程与打开文件之间的交互。
3.UNIX内核概述
3.1 进程/内核模式
当一个用户执行时,大部分时间处于用户态下,只有需要内核所提供的服务时才切换到内核态,当内核满足了用户程序的请求后,让程序又回到用户态下。
内核线程特点:
- 以内核态运行在内核地址空间。
- 不与用户直接交互。
- 系统启动时创建,系统关闭时消亡。
3.2 进程实现
进程描述符:包含有关进程当前状态信息。
当内核暂停一个进程的执行时,就把几个相关处理器寄存器的内容保存在进程描述符中,这些寄存器包括:
- 程序计数器PC和栈指针SP寄存器
- 通用寄存器
- 浮点寄存器
- 包含CPU状态信息的处理器控制寄存器
- 用来跟踪进程堆RAM访问的内存管理寄存器
3.3 可重入内核
可重入意味着若干进程可以同时在内核态下执行。当然在单处理器系统上只有一个进程在真正的运行。
以下事件导致CPU交错执行内核控制路径:
第一个内核控制路径无法满足执行,CPU又重新开始执行其他的内核控制路径。
CPU检查到异常,内核控制路径被挂起。
内核控制路径没执行完,硬件中断发生。
在抢占调动内核中,更高优先级进程加入就绪队列,中断发生。
4.进程管理
fork() 将父进程的代码和数据都复制,并把这个拷贝赋予子进程,采用写时复制的方法,把页的复制延迟到最后一刻。
exec()装入一个新进程。
5.内存管理
5.1虚拟内存:
作为一种逻辑层,处于应用程序的内存请求与硬件内存管理单元之间,优点:
- 并发执行若干进程
- 应用程序所需内存大于物理内存时也可以执行
- 程序只有部分代码装入内存时程序可以执行它
- 允许每个进程访问可用物理内存的子集
- 进程可以共享库函数或者程序的一个单独内存映像
- 可以把程序放在物理内存的任何地方
- 可以不关心物理内存组织结构编写机器无关代码
虚拟地址 --------页表---------> 物理地址(RAM)
[页面] [页框]
5.2 内核存储分配器 KMA
试图满足系统中所有部分对内存的请求,具有以下特点:
快
减少内存碎片以及浪费
与其他内存管理系统合作,以便借用和释放页框。
5.3进程虚拟地址空间
内核分配给进程的虚拟地址空间由以下组成:
- 程序的可执行代码
- 程序的初始化数据
- 程序的未初始化数据
- 初始程序栈(用户态栈)
- 所需共享库的可执行代码和数据
- 堆(程序动态请求)
5.4设备驱动程序
内核通过设备驱动程序与I/O设备交互,设备驱动程序包含在内核中,由控制一个或多个设备(键盘,鼠标,屏幕等)的数据结构和函数组成。具有以下特点:
- 特定的模块封装特定的设备代码。
- 只需知道接口规范而不需要知道内核代码而增加新设备。
- 动态的装进/卸载 进内核而不需要重新启动系统。