第一章
各种类型的操作系统
- 大型操作系统
数据中心、高端web服务 - 服务器
- 多处理器
- PC
- 掌上计算机操作系统
电子书阅读器 - 嵌入式
- 传感器
使用无线基站通信;能源有限,网络需健壮 - 实时操作系统
- 智能卡
进程
进程包含的信息
- 地址空间
包括开始结束位置、程序、数据、堆、栈 - 资源集
包括寄存器、打开的文件清单、突出的报警、有关进程清单、以及运行该进程需要的其他信息
文件系统
树状结构
- 挂载
接入其他文件系统 - 特殊文件
- /dev下的块特殊文件如磁盘,字符特殊文件如打印机
- 管道
安全
- 权限
shell
操作系统与终端用户之间的界面
个体重复系统发育
系统调用过程
- 寄存器数据压栈
- 系统调用相关数据存入寄存器
- 执行trap指令,陷入内核
- 根据系统调用编号查找系统调用程序
- 执行系统调用程序
- 返回到调用者
- 增加sp
常用系统调用
进程管理
- fork
- waitpid
- execve
- exit
文件管理
- open
- close
- read
- write
- lseek(移动游标)
- stat(获取文件状态)
目录和文件系统管理
- mkdir
- rmdir
- link
- unlink
- mount
- unmount
其他
- chdir
- chmod
- kill(发送信号给进程)
- time
shell伪代码
创建一个新进程来执行命令的原因是可以重定向新进程的标准输入、标准输出和标准错误
while 1:
cmd = input()
if fork() != 0:
waitpid(-1)
else:
exec(cmd)
link
新增的链接拥有与源文件相同的inode号
kill
若进程准备好捕捉一个特定信号,那么在信号到来时,执行信号处理程序;如果进程没有准备好,那信号的到来会杀死进程
windows系统调用
通常是一个事件驱动程序
操作系统架构
单体系统
建议使用的层次结构
-
主过程
处理服务过程请求,调用服务过程 -
服务过程
执行系统调用 -
工具过程
可复用的过程,辅助服务过程
层次式系统
从上往下:
- 用户程序
- 输入输出管理
- 进程通信
- 内存管理
- cpu管理(时分复用)
微内核
减少内核代码量,从而减少致命错误,增加可靠性
CS模式
虚拟机
外核
为每个虚拟机分配固定的地址范围,不用做地址映射
第二章 进程
进程状态
- 运行
- 就绪
- 阻塞
进程切换
操作系统维护着一张进程表(数组),每个进程有一条记录,记录内容包括:
- 进程管理
寄存器,优先级,进程id,父进程,进程组,信号,开始时间,使用的cpu时间 - 存储管理
代码段、数据段、栈段指针 - 文件管理
工作目录、文件描述符、用户id、组id
每个io类都关联到中断,中断程序入口地址位于内存底部,进程运行中遇到io时会往中断地址写入,此时操作系统立即接手,进行保存进程上下文、执行中断程序、运行新进程:
- 程序计数器的保存与覆写
- 保存进程寄存器
- 新增栈帧执行中断程序
- 调度程序决定下一个将运行的进程
- 中断程序完成
- 运行新进程
线程
多线程的诞生原因
- 在单个进程内实现并发
- 创建销毁开销小
- 阻塞io下实现并发,程序设计简单
线程的地址空间
独有:
- 寄存器
- 堆栈
- 状态
共享:
除了独有,进程内的地址空间和资源都可共享
- 堆
- 打开的文件
- 子进程
- 即将发送的报警
- 信号与信号处理程序
- 用户信息