操作系统作用
操作系统是负责让电脑上安装的各类程序运行变得容易:
1.允许同时运行多个程序,比如可以一边打开网易云音乐听歌,一边打开Safari浏览器浏览网页
2.允许程序共享内存
3.让程序与设备交互,比如微信聊天可把键盘敲的字显示在对话框里面
即确保系统易于使用又正确高效地运行。
操作系统虚拟化
注:进程就是运行中的程序
虚拟化CPU
通过让一个进程只运行一个时间片,然后切换到其他进程,可以使操作系统达到提供多个虚拟CPU的假象,称之为时分共享CPU技术,允许多个进程并发运行。缺点是性能损失。
上下文切换技术:操作系统能够停止运行一个程序,并开始在给定的CPU上运行另一个程序
进程的机器状态:内存和寄存器
进程状态:运行/就绪/阻塞
上下文切换:用于切换进程
创建新进程:
1.创建进程 fork()系统调用,从父程序中新建子程序
2.wait()系统调用,等待子进程/父程序完成相应的操作
3.exec()系统调用,可以让子进程执行与父程序不同的程序
调用fork()创建新进程,调用exec()的某个变体来执行这个可执行程序,调用wait()等待该命令完成。子进程执行结束后,shell从wait()返回并再次输出一个提示符,等待用户输入下一条命令。
高效/可控地虚拟化CPU:
受限的直接执行:直接在CPU上运行程序,有两个问题需要解决:
1.需要访问一些敏感信息时怎么操作 用户模式/内核模式
2.怎么做进程切换 时钟中断
在特定时间内,操作系统应该运行哪个进程?
优化周转时间:先进先出 最短任务优先 抢占式最短作业优先
优化响应时间:轮转调度
重叠操作
注:进程在向I/O发起请求的时候,是不会使用CPU的
多级反馈队列:操作系统通常不知道工作要运行多久,而这又是SJF(或STCF)等算法所必需的。其次,MLFQ希望给交互用户(如用户坐在屏幕前,等着进程结束)很好的交互体验,因此需要降低响应时间。
MLFQ中有许多独立的队列(queue),每个队列有不同的优先级(priority level)。任何时刻,一个工作只能存在于一个队列中。MLFQ总是优先执行较高优先级的工作。
规则1:如果A的优先级 > B的优先级,运行A(不运行B)。
规则2:如果A的优先级 = B的优先级,轮转运行A和B。
饥饿问题
比例份额调度程序
在硬件的一些帮助下,操作系统可将单个CPU转换成虚拟的无限数量的CPU,从而让许多程序看似同时运行。同时运行多个程序会引发各种新问题,如两个程序想要在特定时间运行,应该运行哪个?
虚拟化内存