十天玩转操作系统,做一个热爱学习的程序猿,重点讲解,每天进步一点点!

Posted 柠笙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十天玩转操作系统,做一个热爱学习的程序猿,重点讲解,每天进步一点点!相关的知识,希望对你有一定的参考价值。


       操作系统(OS)这门学科在计算机领域有着很重要的作用,作为计算机硬件和软件的临界者,对计算机发展有着很重要的意义,随着时代的不断发展,越来越多的操作系统进入大众视野,无论是大家耳熟能详的Windows、MAC,抑或是程序员口中经常念叨的Linux。除了电脑操作系统,手机中的鸿蒙、苹果、安卓也是大家关注的热点,因此要想在计算机领域有所造诣,操作系统是必须要了解掌握的一门学科,因此在这里借助平台,跟大家分享一下我学习操作系统的经验和笔记,用十天的时间来和大家梳理和整理这门学科,让我们一起探索其中的奥秘,享受知识带给我们的快乐吧!!!

调度

当有一堆进程任务要进行处理时,由于资源有限,就需要遵循某种规则来决定处理这些任务的顺序

  • 高级调度(外存与内存之间的调度)面向作业
    按一定原则挑选作业分配内存等必要资源,建立相应进程,以使它们获得竞争处理机的权利
  • 中级调度(外存与内存之间的调度)面向进程
    引入虚拟存储技术之后,暂时将不能运行的进程调至外存等待,提高内存利用率和系统吞吐量
    暂时调到外存等待的进程状态称为挂起状态(PCB不会一起调出,常驻内存,存放在挂起队列中)
    决定将哪个处于挂起状态的进程重新调入内存

挂起状态:就绪挂起、阻塞挂起
                                                                七状态模型

  • 低级调度(内存与CPU之间的,又称“进程调度”)
    通过某种算法和策略从就绪队列中选取一个进程,分配其处理机

进程调度

需要进程调度的情况:

  • 主动放弃
    进程正常终止
    运行过程中发生异常而终止
    进程主动请求阻塞(等待I/O)

  • 被动放弃
    分给进程的时间片用完
    有更紧急的事需要处理
    有更高优先级的进程进入就绪队列

不能进程调度的情况:

  • 处理中断的过程
  • 操作系统内核临界区中的进程(如果是普通临界区是可以进行进程调度的)
  • 原子操作过程中(原语)

进程调度方式

(1)非剥夺调度方式(非抢占式)
只允许主动放弃处理机,无法及时处理紧急的任务
(2)剥夺调度方式(抢占式)
优先处理更紧急的进程,也可实现让各进程按时间片轮流执行的功能(时钟中断)

进程切换是指一个进程让出处理机,由另一个进程占用处理机的过程
1、对原来运行进程各种数据的保存
2、对新的进程各种数据的恢复
(如:程序计数器、程序状态字、各种数据寄存器等处理现场信息,一半保存到进程控制块)

进程调度、切换是有代价的

调度算法指标

1、CPU利用率:CPU“忙碌”的时间占总时间的比例
利用率=忙碌的时间/总时间
2、系统吞吐量:单位时间内完成作业的数量
系统吞吐量=总共完成了多少道作业/总共花费的时间
3、周转时间:作业被提交系统开始到作业完成为止的时间间断
周转时间=作业完成时间—作业提交时间
平均周转时间 = 各作业周转时间之和/作业数
带权周转时间 = 作业周转时间/作业实际运行的时间 =(作业完成时间 - 作业提交时间)/ 作业实际运行时间
平均带权周转时间 = 各个作业带权周转时间之和/作业数
4、等待时间:进程/作业处于等地啊处理机状态时间之和,时间越长,客户满意度越低
5、响应时间:从用户从提出请求到首次响应时间间隔


调度作为进程中很重要的一个环节,除了了解调度的含义之外,还需要对不同情况的进程采取不同调度方案,也就是我们常说的调度算法,也是进程环节很重要的一趴,要充分了解每种算法的思想和意义!


调度算法

(1)FCFS(先来先服务)
算法规则                              按照作业/进程到达的先后顺序进行服务
是否可抢占                          非抢占式
优缺点                                 对长作业有利,短作业不利
是否会导致饥饿                  不会

(2)SPF(短进程优先)
算法规则                              当前已到达且运行时间最短的进程优先得到服务
是否可抢占                          非抢占式
优缺点                                  “最短的”平均等待时间、平均周转时间
是否会导致饥饿                   会

(3)SJF(短作业优先)
算法规则                              最短剩余时间优先算法(SRNT),改变就绪队列顺序。
是否可抢占                          抢占式
优缺点                                 最短的平均等待时间、平均周转时间
是否会导致饥饿                  会


抢占式的短作业/进程优先调度算法(最短剩余-时间优先,SRNT算法)的平均等待时间、平均周转时间最少。


(4)HRRN(高响应优先比)
算法规则                              计算各个作业/进程的响应比,响应比最高的作业/进程为其服务
                                            响应比=(等待时间+要求服务时间)/要求服务时间(>=1)
是否可抢占                          非抢占式
优缺点                                 综合考虑等待时间和运行时间(要求服务时间)
是否会导致饥饿                  不会

(5)RR(时间片轮转)
算法规则                              按照进程到达就绪队列顺序,轮流执行一个时间片(自行设定)。用于进程调度
是否可抢占                          抢占式(时钟中断控制)
优缺点                                 综合考虑等待时间和运行时间(要求服务时间)适合分时操作系统
是否会导致饥饿                  不会


时间片设置较大会自动退化成FCFS算法
时间片设置较小进程切换过于频繁,系统花大量时间来处理进程切换


(6)优先级调度算法
算法规则                             每个作业/进程有各自的优先级,调度时选择优先级最高的
是否可抢占                          抢占式、非抢占式
优缺点                                 优先级区分紧急程度、重要程度,适合实时操作系统。可以灵活调整对各种作业/进程偏好程度
是否会导致饥饿                  会


就绪队列按照不同的优先级组织,优先级高的进程在队头位置

  • 静态优先级:创建进程时确定,之后一直不变
  • 动态优先级:创建进程时有一个初始值,之后会根据情况动态调整

如何设置进程优先级?

  • 系统进程优先级高于用户进程
  • 前台进程优先级高于后台进程
  • 操作系统更偏好I/O型进程(I/O繁忙型进程)

如何动态改变优先级?

  • 等待时间过久,则适当提升其优先级
  • 占用处理机运行时间长,适当降低优先级
  • 进程频繁进程I/O操作,可适当提升优先级

(7)多级反馈队列调度算法
算法规则
1、设置多级就绪队列,各级队列优先级从高到低,时间片从小到大。
2、新进程到达时先进入第1级队列,按FCFS原则分配时间片,用完时间片未结束,则进程进入下一级队列队尾,若是最后一级队列,未执行完重新放回当前队列
3、只有K级队列为空时,才会为K+1级队头的进程分配时间片
是否可抢占                         抢占式
优缺点                                集合多个算法的优点
是否会导致饥饿                  会


被抢占处理机进程重新放回原队列队尾


同步与互斥

进程同步

直接制约关系
两个或多个进程在有时相互合作完成,但是需要规定一定的次序执行。

进程互斥软件

间接制约关系

do{
    entry section           //进入区            负责检查是否可进入临界区,若可进入,设置正在访问临界资源的标志(“上锁”),阻止其他进程进入临界区
    critical section         //临界区            访问临界资源
    exit section              //退出区            解除正在访问临界资源标志(“解锁”)
    remainder section   //剩余区            其他处理
}while(true)

临界区是进程中访问临界资源的代码段
进入区和退出区时负责实现互斥的代码段

1、空闲让进 临界区空闲可以允许请求进入临界区
2、忙则等待 已有进程占用,必须等待使用完进入
3、有限等待 有限等待时间内进程都可进入临界区
4、让权等待 进程不能进入临界区需要释放处理机

同步互斥的实现

(1)单标志法
int turn = 0; //turn表示当前允许进入临界区的进程号

如果P0进程一直不访问临界区,但是P1进程也无法访问,会造成临界区空闲
单标志法的主要问题:违背“空闲让进”原则

(2)双标志先检查法
bool flag[2]; //数组长度为进程个数
flag[0] = false;
flag[1] = false;

双标志先检查法主要问题是 :违反“忙则等待”原则

(3)双标志后检查法
bool flag[2]; //数组长度为进程个数
flag[0] = false;
flag[1] = false;

双标志后检查法主要问题是:违背了“空闲让进”和“有限等待”原则,导致进程“饥饿”现象

(4)Peterson算法
bool flag[2];
int turn = 0;

1、主动争取
2、主动谦让
3、检查对方是否想用临界资源,且自己是否属于最后“谦让”

双标志后检查法主要问题是:未遵循“让权等待”原则

进程互斥硬件

(1)中断屏方法
利用“开/关中断指令”实现(与原语思想相同)
优点:简单、高效
缺点:不适用与多处理机;只适用于操作系统内核进程;

(2)TestAndSet指令(TSL指令)
硬件实现,C语言描述逻辑如下:

//布尔型共享变量lock表示当前临界区是否被加锁
//true表示已加锁,FALSE表示未加锁
bool TestAndSet(bool *lock){
    bool old;
    old=*lock;        
    *lock=true;
    return old;
}


//以下是使用TSL指令实现互斥的算法逻辑
while(TestAndSet(&lock));//“上锁”并“检查”
临界区代码……
lock=false;//“解锁”
剩余区域代码……

缺点:不满足“让权等待”

(3)Swap指令(Exchange指令,XCHG指令)
硬件实现,C语言逻辑:

//Swap指令的作用是交换两个变量的值
Swap (bool *a,bool *b){
    bool temp;
    temp=*a;
    *a=*b;
    *b=temp;
}


//以下是用Swap指令实现互斥的算法逻辑
//lock表示当前临界是否被加锁
bool old=true;
while(old==true)
    Swap(&lock,&old);
临界区代码……
lock=false;
剩余区代码……

缺点:不满足“让权等待”


      第三天的学习到这里就结束了,不知道小伙伴们收获如何呢?欢迎评论区交流学习,也恳请各位批评指正!!

      操作系统其实就是计算机中的一个大管家,这个大管家有着很多很厉害的角色(就像谍战片里面的大府中的老管家一样),因此学习操作系统这门课,就像是在欣赏一部谍战片,要想理解角色内涵,你就必须站在其角度去思考,思考其可能会遇到的危险以及应对策略(bug与bug的修复),这样你才能在凶险的代码江湖生存下来,成为一代英雄,留下你的印记,期待与各位在江湖的相遇,也希望大家能给作品一个三连!!


本文参考教材:王道考研——操作系统(配套PDF文件,点赞留言后私信我发你)
教材配套讲解视频:b站链接


以上是关于十天玩转操作系统,做一个热爱学习的程序猿,重点讲解,每天进步一点点!的主要内容,如果未能解决你的问题,请参考以下文章

程序员带你十天快速入门Python,玩转电脑软件开发

程序员带你十天快速入门Python,玩转电脑软件开发

我的python学习--第十天

Python学习入门教程,字符串函数扩充详解

10天学会phpWeChat——第十天:phpWeChat的会员注册登录以及微信网页开发

学习总结快速上手Linux玩转典型应用-第6章-linux常用命令讲解