1. 程序执行特征?
- 顺序执行
- 封闭性
- 执行结果可再现
2. 进程执行特征?
- 并发程序在执行过程相互制约
- 失去封闭性
- 程序与计算不再一一对应(可能一对多)
3. 进程概念的引入
- 程序的概念已经无法描述动态执行过程中的一些特性
4. 进程的定义?
- 描述程序在并发环境中的执行过程
5. 进程和程序的区别?
- 动与静:进程执行结束便自动消亡,程序却会仍留在磁盘
- 独立单位可并发与不可并发
- 程序和进程无一一对应关系:一个程序可被多个进程用,一个进程运行过程可能用到多个程序
- 进程相互制约、异步性
6. 进程3种状态?
- Running:资源满足 有CPU
- Ready :资源满足 无CPU
- Blocked:资源不满足 无CPU
7. 进程状态之间的转换?
- Running -> Ready : 时间片到,中断
- Running -> Blocked: 缺少资源或I/O操作
- Blocked -> Ready: 获得资源
- Ready -> Running: 拿到CPU
8. 进程的组成:
- 程序
- 数据集合
- 栈
- PCB
9. PCB的组成?
- PCB是描述进程特性的数据结构,所包含的特性有:
- 进程名:唯一标志
- 特征信息:标志是用户进程还是系统进程
- 状态信息:running/ready/blocked
- 调度优先权:优先获得CPU
- 通信信息:与其他进程的通信关系
- 现场保护区:时间片到被中断,保留此刻的状态,待下次获得CPU继续运行
- 资源需求、分配和控制方面的信息
- 进程实体信息
- 族系关系
- 其他信息
10. PCB的作用?
- 进程特性的描述
- 是进程存在的唯一标志
11. 进程的组织方式?
- 线性:预先创建好整个系统的进程的最大数目。缺点:不能扩展,调度选择时需要遍历整个表,效率低
- 链接:按照状态分为多队列,调用时按先进先出的顺序调用
- 索引:索引表
12. 进程的创建
- 申请空闲PCB
- 为新进程分配资源
- 初始化新进程的PCB
- 将新进程加入到就绪队列当中
13. 进程的终止(调用终止原语)
- 找到PCB终止它
- 回收进程所占的资源
- 回收进程所有子孙进程的资源,如果存在的话
- 释放终止进程的PCB,并从原来队列中摘走
14. 进程的阻塞(调用阻塞原语)
- 找到PCB停止它
- 保存现场
- 修改PCB信息,由运行改为阻塞并插入阻塞队列
- 转到调度程序,重新选取进程投入运行
15. 进程的唤醒(调用唤醒原语)
- PCB从阻塞队列摘下
- 由阻塞改为就绪并插入就绪队列中
- 如果被唤醒优先级比运行进程优先级更高则设置重新调度标志
16. 进程映像的更换
- 释放子进程原来的程序和数据所占用的内存空间
- 从磁盘上找出子进程所要执行的程序和数据
- 分配内存空间,装入新的程序和数据
- 为子进程建立初始化的运行环境
17. Linux进程状态
- 运行态
- 可中断等待态
- 不可中断等待态
- 停止态
- 僵死态
18. 进程的模式
- 用户模式:用户程序,应用程序等
- 内核模式:内存机制
19. 进程的类型
- 用户进程
- 系统进程
20. Linux task_struct结构
- 标识符
- 进程状态
- 调度信息
- 进程通信
- 进程宗族
- 时间和计时器
- 文件系统:打开关闭文件
- 虚拟内存:内存映射
- 中断现场保护
21. 进程系统堆栈
- 存放中断现场信息,在分配task_struct结构的内存空间时,分配了两个页8k,7k为堆栈,1k为task_struct结构
22. 有关进程操作的命令
- ps:查看进程状态的相关信息(PID/UID/PPID//C/STIME/USER/%CPU/%MEM/VSZ/RSS/STAT/TTY/TIME/CMD)
- kill:相当于control + c,终止进程
- sleep:暂停进程,后面时间值单位为·秒
23. 有关系统调用的格式和功能
- fork:创建一个子进程,在父进程中返回子进程PID号,在子进程返回0,失败返回-1
- getpid:返回当前进程的PID,getppid则返回父进程PID
- execl:更换映像
- exit:终止调用程序,参数状态有:正常退出0,非正常退出为其他数值
- wait:等待其他进程终止,成功返回终止进程的PID,否则返回-1
- sleep:挂起进程指定时间
- nice:改变进程优先级,成功返回0,否则返回-1
24. 引入线程概念原因
- 同一进程的不同线程可共享同一地址空间,资源可共享,而不同进程间地址不同,不可共享
- 易于创建,切换,代价低
- 改善系统性能
25. 什么是线程
- 资源分配,处理机调度的基本单位
26. 线程的组成
- 标识符:线程的唯一标识
- 寄存器:调度状态信息
- 栈指针:指向核心栈指针,指向用户栈指针
- 存储区:保护现场信息
27. 线程的状态
- 运行
- 就绪
- 阻塞
- 终止
28. 线程和进程的关系
- 多对一或一对一
- 线程共享进程的所有资源
- 真正在CPU上运行的是线程
- 线程执行过程需要协作同步,不同进程的线程间通过消息机制实现同步
29. 线程的实现方式
- 用户级线程:线程表放置在用户空间,线程的切换不涉及核心层,速度快,但不能享受多处理器的优点
- 核心级线程:线程表放置在核心空间,每次线程的创建删除等操作都要系统调用,花费一定的开销,但可以享受多处理器的优点,实现真正的并行
30. 进程同步机制
- 互斥:资源互斥
- 同步:缓存区协作,时间次序
- 通信:直接通信交换信息
31. 竞争条件
- 两个或多个进程同时访问和操控相同的数据时,最后的执行结果取决于进程运行的精确时序
- 临界区和临界资源
- 临界区设置原则是避免竞争条件
32. 实现互斥方式
- 硬件:
- 禁止中断(进临界区后关闭所有的中断,出临界区后再开放)
- 专用机器指令(原语:原则是要么全做要么全不做)
- 软件:软件锁(用0、1表示锁的状态,忙等)
33. 信号量及P、V操作原语
- 结构体信号量:信号量的值(+表示现所持有的资源数;-表示现等待队列的长度;信号的值只能通过P、V原语修改)+ 指向PCB的指针
- P操作(wait)
- 信号量减一
- 判断信号量是否小于0
- V操作(signal)
- 信号量加一
- 判断信号量是否大于0
34. 信号量的一般应用
- 实现进程互斥:打印机的使用实例
- 实现进程同步:生产者和消费者问题
35. 进程通信
- 低级:P、V原语操作
- 高级:
- 共享存储器:类似于线程共享进程的内存地址空间一样,共享存储器在内存中分配一块内存作为共享存储区,各进程把共享存储区加载到自己的地址空间
- 管道文件:是一个打开文件,连接读和写两个命令,向该文件写如数据的进程叫写者,读出数据的进程叫读者
- 消息传递
- 直接通信方式(消息缓冲区):系统管理一组缓冲区,发送进程像系统申请缓冲区,写入后把它挂到接受者的消息队列,然后通知它。接收者取出后释放缓冲区并通知发送者
- 间接通信方式(信箱:信箱头+信箱体)
36. 管程组成
- 管程名
- 局部于管程的共享数据的说明
- 对数据进行操作的一组过程
- 对该共享数据赋初值的语句
37. 管程三大特性:
- 管程内部局部变量不允许外部直接访问
- 进程进入管程必须调用管程内的某个过程
- 管程内一次只能有一个进程进入
38. 经典进程同步问题
- 读者写者问题
- 哲学家思考问题
- 打瞌睡的理发师问题
39. 死锁定义
- 系统循环等待的一种状态
40. 产生死锁原因
- 资源有限且操作不当
41. 产生死锁的必要条件
- 互斥
- 不可抢占
- 占有且申请
- 环路等待
42. 对待死锁的策略
- 忽略死锁问题
- 死锁的预防:静态。在申请资源之前,先把所有可能导致死锁的可能扼杀在摇篮。
- 破坏互斥条件:不太科学,这是取决于资源本身的属性
- 破坏占有且等待条件:一次性申请所有资源
- 破坏非抢占条件:优先级
- 破坏环路等待条件:编号排序
- 死锁的避免:动态,边申请边检测判断,如果可能导致死锁,则不分配,银行家算法
43. 安全状态
- 至少有一个序列可让进程顺利执行完毕则是安全状态
- 死锁状态是不安全状态
- 不安全状态不意味着死锁状态,表示存在产生死锁的危险
44. 银行家算法的数据结构
- Available:每类资源的可用数量
- Max:每个进程对资源的需求的最大数
- Allocation:当前已经分配给每个进程的资源数
- Need:每个进程还缺多少个资源
45. 银行家的分配算法
46. 死锁中恢复
- 抢占资源:缺什么从别的进程拿
- 回退执行:如操作系统的还原点
- 杀掉进程:如操作系统某个进程卡死导致系统死机,这时杀掉这个进程就可以恢复
47. 活锁与饥饿
- 活锁:相当于忙等,测试询问
- 饥饿:看似有机会执行的进程但却是永远得不到执行