昨天面腾讯时候面试官问:你说你看过经典的书籍来学习操作系统,那么这些书是按照什么顺序来讲解操作系统的?目录是怎样的顺序?
我人傻了,我都是跳着看的,确实没注意到这点,所以今天重拾这本书来学一下
进程与线程
一般会知道进程是资源分配单位,线程是调度单位,但阿岳说:我觉得不行。再细点
进程
以下内容来自书中原文摘抄
UNIX系统中,只有一个系统调用可以创建新进程:fork。这个系统调用会创建一个与调用进程相同的副本。调用了fork以后,这两个进程(父进程和子进程)拥有相同的内存映像、同样的环境字符串和同样的打开文件。
父进程和子进程有着各自不同的地址空间,不可写的内存区是共享的。如果子进程和父进程共享所有内存,那么会采用写时复制技术,这意味着一旦要修改部分内存,则这块内存要首先被明确地复制,以确保修改发生在私有内存区域。再次强调,可写的内存是不可以共享的。
PCB进程表
PCB包含了进程状态的重要信息,包括程序计数器、堆栈指针、内存分配状况、打开的文件状态、账号和调度信息、优先级、进程状态、进程ID...
线程
若CPU密集型,多线程不能获得性能增强,若IO密集,则会加快程序执行的速度
为什么要有进程
把相关的资源集中在一起,包括打开的文件、子进程、即将发生的定时器、信号处理程序、账号信息等,把他们放在一起会更容易管理。
线程呢?
线程拥有寄存器,来保存当前线程的工作变量。进程用于把资源集中在一起,而线程则是在CPU上被调度执行的实体。
除了共享地址空间之外,所有线程还共享一个打开文件集、子进程、定时器以及相关信号
进程线程内容对比
每个进程中的内容 | 每个线程中的内容 |
---|---|
地址空间 | 程序计数器 |
全局变量 | 寄存器 |
打开文件 | 堆栈 |
子进程 | 状态 |
即将发生的定时器 | |
信号与信号处理程序 | |
账户信息 |
进程调度
- 先进先出
- 最短任务优先
- 最短完成时间优先
- 最短响应时间优先
- 轮转调度
- 多级反馈队列
- 比例份额调度:彩票调度、步长调度
最后
书的整体讲解流程是:介绍进程和线程,进程的通信,内存管理,死锁,然后是系统安全,文件系统这样的流程