关于Linux操作系统的处理机管理分析

1.处理机管理

在传统的多道程序系统中,处理机的分配和运行都是以进程为基本单位,对处理机的管理可归结为对进程的管理。操作系统处理机管理的主要目标之一是提高处理机的使用率,使其尽可能处于工作状态。在Linux系统中,提高处理机使用率的技术措施主要是多道和分时,处理机在进程之间切换,按照一定的规则轮流执行每个进程。对于单个处理机的系统,这些进程宏观上看似并行执行,而微观上来看仍然是串行执行的,这种执行方式被称为并发执行。操作系统通过并发控制机制,对处理机进行分配、调度,在保证每个进程都得到公平合理执行的同时,使系统中的各种资源得到充分的使用。

2.进程管理

进程:

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。为了更好地研究、描述和控制并发程序的执行过程,操作系统引入了进程的概念。

  1. 比较典型的进程定义有: a.进程是程序的一次执行过程。b.进程是一个程序及其数据在处理机上顺序执行时所发生的活动。c.进程是具有独立功能的程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。
  2. 进程的特性包括: a.动态性:进程由“创建”而产生,由“撤销”而消亡,因“调度”而运行,因“等待”而停顿。b.并发性:同一时间段内有多个进程在系统中活动,它们宏观上并发运行,而微观上交替执行。c.独立性:进程是可独立运行的基本单位,是操作系统分配资源和调度管理的基本对象,每个进程都独立地拥有各种必要的资,独立地占有CPU并独立地运行。d.异步性:每个进程都独立地执行,各自按照不可预知的速度向前推进。
  3. 进程的基本状态包括: a就绪态:进程已分配到了除CPU以外所有的资源。b.运行态:进程已获得CPU,正在运行。c.等待态:进程因某种资源不能满足,或希望某事件尚未发生而暂停执行时,则称它处于等待态。
  4. 进程的组成: 进程是由程序、数据和进程控制块(PCB)组成。其中程序是进程执行的可执行代码,数据是进程所处理的对象,进程控制块记录进程的所有信息。它们存在于内存,其内容随着执行过程的进展而不断变化。
  5. 进程的组织: 管理进程就是管理进程的PCB。系统中进程数量庞大,为了有效管理如此多的进程,就必须采用有效的方式将它们组织在一起,通常采用的组织结构有数组、索引和链表三种方式。数组的方式比较简单,是将所有的PCB顺序存放在一个一维数组中,这种方式操作效率很低。索引的方式就是通过在PCB数组上设置索引表或散列表,以加快访问速度。链表的方式则是将所有PCB链接起来,构成链式队列或链表。

Linux系统中的进程(task):

Linux系统中的进程分为3种不同的类型:交互进程、批处理进程、守护进程,其进程共有5种基本状态,包括运行、就绪、睡眠、暂停和僵死。Linux将这些基本状态归结为4种并加以命名和定义:可执行态(包含了运行和就绪状态)、睡眠态(等待态)、暂停态(一般由运行态转换而来,等待某种特殊处理。)、僵死态(占有PCB但已无法运行的进程处于的状态)。

  1. 进程状态转换过程: 新创建的进程处于可执行的就绪态,等待调度执行。处于可执行态的进程在就绪态和运行态之间轮回。运行态、睡眠态和就绪态形成一个回路。运行态、暂停态和就绪态也构成一个问题。
  2. 进程控制块: Linux系统的PCB用一个称为task_struct的结构体来描述,系统中每创建一个新的进程,就给它分配一个task_struct结构,并填入进程的控制信息。而查看进程的信息时则可以使用ps命令。
  3. 进程运行模式: 进程在其运行期间常常被中断或被系统调用打断,因此CPU也经常在用户态(低特权级模式)和核心态(高特权级模式)之间切换。在运行通常的计算和处理时,进程运行在用户态;执行系统调用或中断处理程序时进入核心态,执行内核代码。调用返回后,回到用户态继续运行。
  4. 进程控制的功能: 进程控制的功能是在整个生命周期中各种状态之间的转换。主要通过原语实现,而原语主要有创建、终止、阻塞和唤醒等。而在Linux系统中,进程控制的功能是由内核的进程控制子系统实现的,并以系统调用的形式提供给用户进程或其他系统进程使用。注意在创建新进程时,UNIX/Linux的方式与众不同,它不是一步构造出新的进程,而是采用先复制再变身的两个步骤,即先按照父进程创建一个子进程,然后再更换进程映像开始执行。而在进程终止时则通过使用退出语句或者被某个信号杀死的方式进行终止。

3.处理器调度

概念:

在多道程序设计系统中,内存中有多道程序运行,它们相互争夺处理机这一重要的资源。处理机调度就是从就绪队列中,按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程并发地执行。

处理机调度层次:

a.高级调度也称为作业调度。作业是比程序更广泛的概念,作业不仅包含了程序与数据,还包含了对程序的控制说明;作业是用户向计算机提交任务的任务实体,一个作业可由多个进程组成,而进程只是执行任务的实体。b. 低级调度也称为进程调度。进程调度是用于决定把处理机分配给哪个就绪队列里面的进程或者说内核级线程。进程调度有两种方式:一种是非抢占式,一种是抢占式,非抢占式要等进程运行完才把处理器分配给别的进程;而抢占式则是根据某种规则去暂停正在执行的进程,将处理器分配给另一个进程。c. 中级调度会把暂时不能运行的进程调到外存上去等待,等具备条件时再重新调入内存。

调度算法:

a.先来先服务调度算法:从就绪队列中选择最先进入该队列的进程,分配处理器,然后投入工作。FCFS算法适合cpu繁忙型作业。b.短作业优先算法: 该算法是对短作业或短进程优先调度的算法。该算法降低了平均周转时间和平均带权周转时间,但是该算法对长作业不利。c.高优先权优先调度算法: 根据作业或进程的优先权调度作业或者进程。而该算法又能分为非抢占式的和抢占式的。 而优先权又有静态优先权和动态优先权。 静态优先权是在创建进程时确定的,在进程运行期间不会变化。 动态优先权可以随进程的推进而变化。 在优先调度算法中还有个高响应比优先调度算法:优先权=(等待时间+要求服务时间)/要求服务时间。该算法既照顾了短作业,又考虑作业先后到达时间,不会使长作业等太长时间。
d.基于时间片的轮转调度算法:给进程分配一个时间片段,当时间片段一过,把处理器交给别的进程。多级反馈队列调度算法: 该算法首先会设置多个就绪队列,每个队列的优先级不同,优先权高的队列中的进程分到时间片就小;根据FCFS对每个队列中的进程进行排队;当第一队列空闲后,调度程序才调度第二队列中的进程。

Linux的进程调度策略:

Linux操作系统进程调度在选择进程时,首先在可执行队列中寻找优先级最高的进程。由于实时进程的优先级总是高于普通进程,所以实时进程永远优先于普通进程。选中进程后,根据PCB中policy的值确定该进程的调度策略来进行调度。在schedule()函数中实现了3种调度策略:a.先进先出法:调度程序按优先级依次调度各个进程运行,具有相同优先级的进程采用FIFO算法,投入运行的进程将一直运行,直到进入僵死态,睡眠态或者被具有更高实时优先级的进程夺取CPU。b.时间片轮转法(同上不赘述)。c.普通调度法:用于普通进程的调度,每个进程拥有一个静态优先级和一个动态优先级。动态优先级是基于静态优先级调整得到的实际优先级,它与进程的平均睡眠时间有关,进程睡眠的时间越长其动态优先级越高。普通调度法与时间片轮转法类似,都是采用优先级+时间片轮转的调度方法。进程按其优先级prio被链入相应的活动队列中。

调度时机:

当需要切换进程时,进程调度程序就会被调用。引发进程调度的时机有:a.当前进程将转入睡眠态或僵死态。b.一个更高优先级的进程加入到可执行队列中。c.当前进程的时间片用完。d.进程从核心态返回用户态。Linux系统是抢占式多任务系统,上述除了第一种是进程主动调用调度程序放弃CPU的,其他情况下都是由系统强制进行重新调度的,这就是CPU抢占,在必要时抢占CPU可以保证系统具有很好的响应性。为了标志何时需要重新进行进程调度,系统在进程的PCB中设置了一个need_resched标志位,为1时表示需要重新调度。当某个进程的时间片耗尽,或有高优先级进程加入到可执行队列中,或进程从系统调用或中断处理中返回前,都会设置这个标志。每当系统从核心态返回用户态时,内核都会检查need_resched标志,如果已被设置,内核将调用调度函数进行重新调度。

4.死锁

含义:

死锁是指系统中若干个进程相互等待对方所占有的资源而无限地处于等待状态的一种僵持局面,其现象是若干个进程均停顿不前,且无法自行恢复。

产生原因:

死锁的根本原因是系统资源有限,而多个并发进程因竞争资源而相互制约。相互制约的进程需要彼此等待,在极端情况下,就可能出现死锁。

产生必要条件:

a.资源的独占使用。b.资源的非抢占式分配。c.对资源的保持和请求。d.对资源的循环等待。

解决死锁的方案:

a.预防 b.检测 c.恢复

Linux操作系统的死锁:

每个系统都潜在地存在死锁的可能,UNIX/Linux系统也不例外。但是,出于对系统效率的考虑,UNIX/Linux系统对待死锁采取的是“鸵鸟算法”,即系统并不去检测和解除死锁,而是忽略它。这是因为对付死锁的成本过高,而死锁发生的概率过低。如果采用死锁预防或者检测算法会严重降低系统效率。

5.参考文献:

(1)汤荷美,董渊,李莉,程志锐. Linux基础教程(1)操作系统基础[M].北京:清华大学出版社,2008:38-43.
(2)周奇.Linux操作系统基本原理与应用[M].北京:清华大学出版社,2016:164-193.
(3)梁如军,王宇昕,车亚军.Linux基础及应用教程(基于CentOS 7).北京:机械工业出版社,2016:78-85.
(4)费翔林.Linux操作系统实验教程.北京:高等教育出版社[M],2009:28-58.
(5)鸟哥.鸟哥的Linux私房菜[M].北京:人民邮电出版社,2018:134-153.

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值