[操作系统]进程管理笔记-xp

 

(一)

进程和线程

 

进程概念;进程的状态和转换

 

进程控制;进程组织

 

进程通信;线程的概念与多线程模型

 

 

(一)为什么要进入进程

      多道程序环境下,允许多个程序并发执行,此时它们将失去「封闭性」,并具有间断性和不可再现性,它们的执行结果将和它们的执行速度有关。为此引入进程的概念,以便更好地描述和控制程序的【并发执行】,实现操作系统的并发性和共享性。

 

异步性会导致执行结果的不可再现性,为此,在操作系统中必须配置相应的进程同步机构。

 

(1)运行态:进程正在处理机上运行。单道环境下,每个时刻最多只有一个进程处于运行态。

(2)就绪态:进程处于准备运行的状态,即它获得了除开处理机以外的一切所需资源,一旦得到处理机便可以运行啦。

(3)阻塞态(等待态):进程运行着的时候,突然突然需要等待一件事情,所以被暂停运行啦(它原来是在运行的哦,所以它等待可不是处理机,而是别的资源)。

(4)创建态:进程正在被创建(孵化ing…),尚未转到就绪状态。

(5)结束态:进程正在从系统中消失(destroying…)

PS:运行态转就绪态:时间片用完了呗

        运行态转阻塞态:是进程的自我阻塞

        阻塞态转就绪态:是被转为就绪态,被动行为,需要其他相关进程的协助

 Block和Wakeup是作用相反的原语,必须成对出现,不然造成系统资源浪费或出错。Block是被阻塞的进程自我调用实现的,Wakeup原语是由一个与被唤醒进程相合作或被其他相关进程调用实现的。

 进程切换与处理机模式切换:模式切换时,处理机逻辑上可能还处于同一进程中运行。如果进程因中断或异常进入核心态运行,执行完后又回到用户态刚被中断的程序运行,则操作系统只需要恢复进程进入内核时保存的cpu现场,无需改变当前进程的环境。但若要切换进程,则当前的环境信息也需要改变。

 

在操作系统中,进程是竞争和分配计算机系统资源的基本单位,每个进程优自己的独立地址。为了保证多个进程能够彼此互不干扰地共享物理内存,操作系统利用硬件机制对进程的地址空间进行了严格的保护,限制每个进程只能访问自己的地址空间。

进程通信是指进程之间的信息交换。PV操作是低级的通讯方式,高级通信方式是指以较高效率传输大量数据的通信方式。三个分类:

在通信进程之间存在一块可以直接访问的共享共建,通过对这片共享空间进行写/读操作实现进程之间的信息交换。在对共享空间进行写/读操作的时候,需要使用同步互斥工具(PV),对共享空间的写/读进行控制。共享存储又分为两种

在消息传递系统中,进程间的数据交换是以格式化的消息(Message为单位的。若通信进程之间不存在可以直接访问的共享空间,则必须利用操作系统提供的消息传递方式实现进程通信。进程通过系统提供的发送(sent)和接收(recv)信息两个原语进行数据交换。

1)直接通信:发送进程把消息直接发送给接收进程,并将信息挂在接受进程的消息缓冲队列上,接受进程从自己的消息缓冲队列中取得信息

2)间接通信:发送进程发送给某个中间实体,接受进程从中间实体取得消息。

“管道”,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,pipe文件。向管道提供「输入」的发送进程,以字符流形式将大量的数据送入管道;而接收管道输出的接收进程,则从管道中读数据。

管道通信是共享存储的优化和发展,因为在共享存储中,如果某进程要访问共享存储空间,【必须是】,该该空间,没有别的进程在里面进行操作,否则访问行为就会被【阻塞】。而管道通信中,存储空间进化成了缓冲区,缓冲区只允许一边读写,另一边读出,那么只要缓冲区中有数据,进程就可以读出了,不必担心会因为被读进程在里面进行写操作而遭到阻塞 ,因为进程会先把缓冲区写满,然后才让进程读走,当缓冲区里还有数据的时候,写进程不会往缓冲区里写数据。(半双工通信)

 

 

二、处理机调度

 1、调度:在多道程序设计中,进程的数量往往多于处理机的个数,进程争用处理机的情况就在所难免。处理机调度是对处理机的分配:从就绪队列中,按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程并发地执行。

  (2)作业调度次数少,中级调度次数略多,进程调度频率最高。

(3)进程调度使最基本的,不可或缺的

 

 进程调度和切换程序是操作系统内核程序。当请求调度的事件发生后,才可能会运行进程调度程序,当调度了新的就绪进程后,才会去进行进程间的切换。而若发生了一些情况,是会影响不能马上进行调度的。如:

1⃣️处理中断的过程中

2⃣️进程在操作系统内核程序临界区时

3⃣️完全屏蔽中断的原子操作过程中

 

一、当发生引起调度条件,且当当前进程无法继续运行下去时,可以马上进行调度和切换——非剥夺调度。

二、当中断处理结束或者自陷处理结束后,返回被中断进程的用户态程序执行现场前,若出现引起调度的条件,可以马上进行进程调度和切换——剥夺式调度。

 

剥夺式的调度,对提高系统吞吐率和相应效率都有明显的好处,但“剥夺”不是一个任意性行为,必须遵守一定的原则,主要有:优先权、短进程优先、时间片原则等。

 

 

经典调度算法。

相应比Rp=(等待时间+要求服务时间)/要求服务时间

      =1+等待时间/要求服务时间

 

6.多级反馈队列调度算法(终极“完美”算法)

 

  • 多级反馈队列的优点:
    • 终端型作业用户:短作业优先
    • 短破处理作业用户:周转时间较短
    • 长批处理作业用户:经过前面几个队列得到部分执行,不致于“饿死”。
  • 设置多个就绪队列,并为各个队列赋予不同的【优先级】,第一队列的优先级最高,第二次之,其余队列优先级逐次降低。
  • 赋予各个队列中进程执行【时间片】的大小也各不相同,优先级越高的队列中,每个进程的时间片就越小。例如可以如下设计:第二级的时间片是第一级的2倍,第三极是第二级的2倍……
  • 当一个新进程进入内存后,首先先将它放入第一级队列的【末尾】,通过FCFS等待调度。被执行后,若在该时间片内完成执行,则可准备撤离撤离;若为完成,则调度至第二级队列【末尾】……若很不幸,它直至最后的队列,第n个还没完成,则按照时间片轮转的方式运行。
  • 而切而且,仅仅当第一级队列为空时,才调度第二级队列。。如果正在执行第i列中的进程,却有新进程进入更高优先级的队列,则进行【抢占式调度】,将处理机分配给高优先队列,而正在执行的进程,可怜地被放到i列的末尾hhh~
  • 时间片轮转调度算法:具体说是先来先服务的时间片轮转调度算法。
    1. 时间片足够大的时候,就退化成为先来先服务算法
    2. 时间片很小时候,由于进程频繁切换,使得处理机开销增大,真正用于运行用户进程的时间减少。
    3. 决定时间片的长短的因素:系统的响应时间、就绪队列中的进程数目和系统的处理能力。
  • 当作业等待时间相同时,要求服务时间越短,相应比越高。
  • 当要求服务时间相同时,作业等待时间越高,相应比越高。
  • 对于长作业,作业的相应比是随着等待时间的增加而提高的,当其等待时间足够长了,其便可获得处理机。
  • (克服了饥饿现象,兼顾了长作业)
  • 高相应比优先调度算法,主要应用于作业调度,是FCFS和SJF的平衡:计算出各个作业的相应比,选出最高的投入运行。
  • 先来先服务(FCFS:first come first serve)即可以用于作业调度,也可以用于进程调度。
    1. 特点:算法简单,但是效率低下;对长作业比较有利,但对短作业不利(相对SJF和高相应比而言);有利于CPU繁忙型作业,而不利于I/O繁忙性作业(每次访问I/O都要放弃CPU,然后重新排队到队列末端,所以I/O繁忙型效率极低)
  • 短作业优先(SJF:short job first):从后备队列调度入内存、短进程优先(SPF:short process first):从内存的就绪队列中调入处理机。即可以用于作业调度,也可以用于进程调度。
    1. 对长作业不利啊(从名字开始就不利了hhh),运行时间过长的作业长期不被调度(饥饿:吃不到处理器)
    2. 算法未考虑作业的紧迫程度,不能保证紧迫性作业被及时处理。
    3. 由于作业的长短时根据用户提供的估计的时长决定的,而用户主观的决定致使该算法不一定能做到短作业优先。
    1. 短作业调度算法的平均等待时间和平均周转时间最少。
  • 优先级调度算法即可以用于作业调度,也可以用于进程调度
    1. 根据新的更高优先级进程能否抢占ing进程:非剥夺式优先级调度;剥夺式优先级调度。
    2. 根据进程创建后其优先级是否能够改变:静态优先级;动态优先级。
  • 系统吞吐量:单位事件内CPU完成的作业数量。长作业会降低系统吞吐量,短作业能提高。
  • 周转时间:作业从提交到作业完成所经历的时间,、包括作业等待、就绪队列中排队、在处理机上运行以及进行设备(I/O)使用的时间都总和。
  • 响应时间:用户从提交申请到系统首次产生相应所用的时间。
  • 调度时机、切换与切换
  • 处理机调度是多道程序操作系统的基础,是操作系统设计的核心。
  • 调度的层次
    1. 作业调度「将作业调度成为进程」(高级调度):按一定的原则,从外存上处于后备状态的作业中挑选一个或者多个,分配内存、I/O等CPU之外的必要资源,并建立相应进程,是它们获得竞争CPU的权利。——内存与辅存之间的调度,每个作业只调入一次、调出一次。(多存在于多道批处理系统中)
    2. 中级调度「或高或低在中间进行调度」(内存调度「在内存中的调度」):为了提高内存利用率和系统吞吐量,使暂时不能运行的进程,调至外存等待,——挂起状态,被发配边疆,壮志难酬。当它们具备执行状态且内存又稍有空间时,又把它们重新调入内存,该状态为“就绪“,置于就绪队列中,准备赢取白富美。
    3. 进程调度「将进程进行调度」(低级调度「最低级,距离cpu最近的调度」):按照某种方法和策略,从就绪队列中,选取一个进程,将处理机分配给它,升职加薪,实现人生巅峰。
  • 外存的后备作业——(作业调度:高级调度)——内存——(内存调度:中级调度)——或挂起或召回挂起——(进程调度:低级调度)——分配处理器
  • (1)作业调度为进程做准备,进程调度使进程政策活动起来,中级调度将暂时不能运行的进程挂起。
  • 进程映像是PCB结构与程序和数据的组合
  • 线程没有自己独立的地址空间,它用它爸爸(进程)的
  • 线程也是包含CPU现场的,可以独立执行程序
  • 进程和程序的根本区别:静态和动态的
  • 失去封闭性:那么执行结果将和进程运行的速度有关
  • 多对一(多用户线程vs一个内核线程),有一个阻塞,则所有线程阻塞
  • 进程切换是由于CPU调度引起的
  • 管道虽说可以双向传输,但同一时间仅仅可以单向——半双工
  • 父进程创建子进程后,他俩并发执行。而主程序调用子程序,主程序阻塞在调用点,直至子程序结束,主程序才继续。
  • 线程的实现方式
    1. 用户级线程:有关线程的管理的工作,由应用程序完成,内核意识不到线程的存在。应用程序可以通过使用线程库设计成许多线程程序。通常,应用程序从单线程开始,在该线程中开始运行,在其运行的任何时刻,可以通过调用线程库中的派生例程创建一个在相同进程中运行的新线程。
    2. 内核级线程:有关线程的管理的工作,由内核来完成,应用程序没有进行线程管理的代码,只有一个到内核级线程的编程接口。
    3. 用户级和内核级组合:线程的创建完全在用户空间完成,线程的调度和同步也在应用程序中进行。一个应用程序中的多个用户级线程被映射到一些内核级线程上。
    4. 多线程模型:
      1. 多对一
      2. 一对一
      3. 多对多
  • 在多线程操作系统中的进程已经不再是一个基本的可执行实体,但它仍拥有于执行相关的状态,所谓进程处于“执行”状态,其实是线程在执行。
    1. )线程是一个轻型实体,它不拥有资源,但是每个线程都应有一个唯一的标识符和一个线程控制块,线程控制块记录了线程执行的寄存器和栈等现场状态。
    2. )不同的线程可以执行相同的程序,即同一个服务程序被不同的用户调用时,操作系统为它们建立成不同的线程
    3. )同一进程的线程拥有其资源。
    4. )线程时处理机的独立调度单位,多个线程是可以并发执行的。
    5. 线程也拥有生命周期会经历阻塞态、就绪态、运行态等各种状态变化。
  • 线程与进程的比较
    1. 调度。无线程的系统中,拥有资源和接受独立调度的基本单位都是进程,而引入线程的操作系统中,线程是独立调度的基本单位,进程是拥有资源的基本单位。同一进程中,线程的切换,不会引起即成的切换。不同进程中,线程的切换,才会引起进程的切换。
    2. 拥有资源。无论系统中是否引入线程,拥有资源的基本单位都是进程。
    3. 并发性。在引入线程后,进程之间可以可以并发,线程也可以,从而是操作系统拥有更好的并发性,提高系统的吞吐量。
    4. 系统开销。由于创建或撤销进程时,系统都要为之分配和回收资源,因此操作系统所付出的开销远远大于创建或者撤销线程的开销。同样的,在进行进程切换时,涉及当前执行进程CPU环境的保存以及新调度cpu的进程的环境配置,而线程切换只需要保存和设置少量寄存器内容,开销很小。还由于线程共享进程的地址空间,因此线程之间的同步和通信十分容易实现,甚至无需操作系统干预。
    5. 地址空间和其他资源。进程的地址空间之间相互独立,统一线程的各个线程共享进程资源,进程内的线程对其他进程不可见。
    6. 通信。进程通信需要进程同步和互斥,以保障数据的一致性,而线程间可以直接读写进程数据段进行通信。
  • 线程的属性
  • 它是一个基本的cpu执行单元,也是程序执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。进程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它和同属一个进程的其他线程共享进程的所有资源。
  • 一个线程可以创建和撤销另一个线程,同一个进程中多个线程之间可以并发。由于线程之间的相互制约,使得线程在运行呈现间断性,线程也有就绪、阻塞和运行三个状态。
  • 引入线程后,进程只作为除cpu外系统资源的分配单元,线程则作为处理机的分配单元。由于一个进程内部有多个线程,所以线程的切换发生在同一个进程里边,那么只需要很小的时空开销。
  • 线程的概念
  • 管道通信
  • 消息传递
  • 用户进程空间一般都是独立的,进程运行期间一般不能访问其他进程的空间,要想让两个用户进程共享这个空间,必须通过特殊的系统调用实现,而进程内的线程是自然共享进程空间的。
  • 低级方式:基于数据结构的共享
  • 高级方式:基于存储区的共享。操作系统只负责为通信进程提供可供共享使用的存储空间和同步互斥工具,而数据交换则由用户自己安排读写指令完成。
  • 共享存储
  • 进程的通信
  • 进程的组织
    • 进程控制块PCB(process control block)
      1. 进程创建时,操作系统就new一个新的PCB结构,之后这个PCB就长住在内存里边啦,任一时刻可以存取;当进程执行的时候,系统就是通过它住在内存里的PCB来了解进程的状态信息,以便对它进行控制和管理;进程结束时,系统就回收它的PCB,该进程随后死亡,不再被获取。
      2. PCB是进程实体的一部分,是进程存在的唯一标识
      3. 系统中有许多许多进程,它们状态还不一定相同。为了方便进程的调度和管理,需要将各进程的PCB用适当方法组织起来哦,不然乱糟糟啦。
        1. 主流的有两种方法,链接方式和索引方法两种。
          1. 链接方式将同一状态的PCB链接成一个队列(先进先出哦),不同状态对应不同队列,还将阻塞队列按着阻塞原因细分多个队列。
          2. 索引方法是将同一状态的进程组织在一个索引表中,索引表的表项指向对应的PCB,不同状态不同表。
    • 程序段
      • 指能被调度程序调度到CPU执行的程序代码段。程序可被多个进程共享,就是说多个进程可以运行同一个程序。
    • 数据段
      • 指进程对应的程序加工处理的原始数据,也可以是程序执行产生的终极数据或最终结果。
  • 进程切换:处理机从一个进程的运行转换另一个进程的运行
    1. 保存处理机上下文,包括程序计数器、其他寄存器
    2. 更新当前进程PCB信息
    3. 把进程的PCB移到相应的队列
    4. 选择另一个进程执行,并更新其PCB
    5. 更新内存管理的数据结构
    1. 恢复处理机的上下文
  • 进程的控制
    1. 一般地,进程控制用的程序段成为原语:执行期间不允许中断,他是一个不可分割的基本执行单位。
    2. 进程的创建
      • 允许一个进程创建进程,也就是(父进程创建子进程)
      • 子进程拥有父进程的所拥的有资源,撤销时相应地进行归还或者逐步撤销
      • 创建进程(使用创建原语)
        1. 为新进程分配PID(进程标识号),并申请一个空PCB(PCB是有限的,有可能申请失败的哦)若PCB申请失败——创建失败
        2. 为进程分配资源,为新进程的程序、数据、用户栈分配必要的内存。若资源分配不足则进入——阻塞(等待)状态,而不是——“进程创建失败”哦
        3. 初始化PCB,包括标志信息、处理机状态信息和处理机控制信息的初始化,以及进程优先级的设置等
        4. 如果进程就绪队列可以接受新进程,就将新进程插入就绪序列中,等待被调度
    1. 进程的终止
      • 引起终止:
        • 进程的任务已经完成和准备退出运行——正常结束
        • 进程在运行时,发生了某种异常,程序无法继续运行,如存储区越界、保护错、非法指令、特权指令错、I/O故障等——异常结束
        • 进程应外界请求而终止运行,如操作员或操作系统干预、父进程的要求、父进程的终止等——外界干预终止
      • 操作系统终止进程的过程(撤销原语)
        1. 根据PID,检索对应PCB,从PCB中获取进程状态
        2. 若为“运行态”,则立即终止进程执行,把处理机资源分配给其他进程
        3. 若该进程还有子进程,应将其子进程终止
        4. 将该进程所拥有的全部资源归还给父进程或者操作系统
        5. 将该PCB从所在队列(链表)中删除
    2. 进程的阻塞和唤醒
      • 正在“执行”的进程,由于期待的某些事情尚未发生,(如:请求系统资源失败、等待某操作的结束、新数据尚未到达或无新工作可以做),则由进程自动执行阻塞原语(Block),使自己的运行状态变为阻塞状态。
      • (Block阻塞原语)
        1. 根据PID,检索对应的PCB
        2. 若为“运行态”,则保护其现场,将其状态转为阻塞态,停止运行
        3. 把该PCB插入对应资源的等待队列中
      • 当被阻塞进程等待到它期待的事件出现,调用(唤醒原语Wakeup)
        1. 在该时间的等待队列中,找到相应的PCB
        2. 将其从时间等待队列中移出,并置其状态为就绪
        3. 把PCB插入就绪队列,等待调度程序调度
  • 由于进程正常结束或者其他原因中断结束运行
  • 将状态置为:结束状态
  • 系统检测到进程状态,一步步处理资源的释放和回收工作
  • 进程的五状态
  • 结构性:每个进程(结构上:=程序段+相关数据段=PCB)都配置了一个PCB对其进行描述。
  • 进程的特征
    1. 【最基本特性】动态性:进程是程序的一次执行,它有着创建、活动、暂停、终止等过程,具有一定的生命周期,进行的是动态的产生、变化和消亡。
    2. 并发性:指多个进程实体,同存于内存中,能在一段时间内同时运行,并发性是进程的重要特征,同时也是操作系统的重要特征。
    3. 独立性:指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。凡未建立PCB的程序都不能作为一个独立的单位参与运行。
    4. 异步性:由于进程的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知速度向前推行。
  • 进程的概念
    • 定义:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立的单位。
    • 构成:由程序段、相关数据段和PCB三部分构成进程映像(进程实体)
    • 【创建进程】,实质上是创建进程中的PCB。【撤销进程】,实质上是撤销进程的PCB。
    • 进程映像(进程实体)是静态的,静态是动态的。
  • 进程与程序的区别(关系)
    1. 进程是程序的【一次执行】
    2. 进程是一个程序及其数据在处理机上【顺序执行】时所发生的【活动】
    3. 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的独立单位。
  • 引入进程的目的就是为了使程序能与其他进程的程序并发执行,以提高资源利用率。
  • 进程的概念
  • 进程与程序的区别
  • 进程的特征
  • 进程的五状态
  • 进程的控制
  • 进程的组织
  • 进程的通信
  • 线程的概念
  • 线程与进程的比较
  • 线程的属性
  • 线程的实现方式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值