操作系统--进程管理知识整理(内含思维导图与常考知识点总结)

简介: 操作系统--进程管理知识整理(内含思维导图与常考知识点总结)

进程与线程


e115ad0d2d9549b189df573e7847446e.png

1.由于多道程序环境,程序失去了封闭性(常考,另:还失去了顺序性),具有间断性和不可在现性特征。(还具有共享性和制约性),引入了进程。

2.进程是具有独立功能的程序在一个数据集合上运行的过程,—系统进行资源分配和调度的一个独立单位。

3.运行态➡️阻塞态:进程请求某一资源(如外设)的使用和分配或等待某一事件的发生(如I/O操作完成)时。

4.进程创建:

①为新进程分配一个唯一的进程标识号,并申请一个空白的PCB若申请失败,则创建失败。

②分配资源,为新进程的程序和数据及用户栈分配必要的内存空间,若资源不足,不是创建失败,而是处于阻塞态,等待内存资源。

③初始化PCB。

④插入就绪队列。

5.进程终止:

①根据被终止进程的标识符,检索PCB,读出状态

②若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程

③若还有子孙进程将其所有子孙进程终止

④将进程拥有的全部资源归还其父进程或归还操作系统

⑤将PCB从所在序列删除。

6.


引入进程:更好的使多道程序并发,提高资源利用率和系统吞吐量;

引入线程:减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能。

7.线程 进程区别:

①线程是独立调度的基本单位,进程是拥有资源的基本单位。

②线程有一点必不可少的资源,因为切换线程避免产生时空开销

8.用户进程被建立后,随着进程运行的正常或不正常结束而撤销。

9.进程中的线程共享进程内的全部资源,但进程中某线程的栈指针对其他线程是透明的,不能与其他线程共享。(线程实体有线程ID,程序计数器,寄存器集合和堆栈组成,ta唯有的必不可少的资源)

10.系统只有一个键盘,整个系统的键盘输入使用一个线程来处理。

11.进程与程序的关系:

①进程是程序的执行过程,程序是静态的指令集合。

②进程包含了程序,程序是进程的核心内容,没有程序就没有进程。

③进程与程序一对一:执行一条命令或运行一个应用程序时;

进程与程序一对多:一个进程执行过程中加载多个应用程序;

进程与程序多对一:以不同的参数或数据多次执行同一个应用程序时;

进程与程序多对多:并发执行不同的应用程序时。


调度(掌握的比较好,没有详细写)


ea0c1a93231a4336b6449ed5b818bfa5.png

12.时间片轮转是绝对可抢占的


实现临界区互斥的基本方法(掌握不好)


e8cee7c9be1a47b4845b0a703bf42c9d.png


软件方法


单标志法


思想:采用公用变量(一个bool类型的值)用于指定是否允许进入临界区的进程编号。(turn = 0 🈯️p0进程进入临界区)

//P0:
While(turn != 0);  //进入区
critical section; //临界区
turn = 1;        //退出区
remainder section; //剩余区
//P1:
While(turn != 1);  //进入区 *当turn为0时持续循环 直到时间片结束*
critical section; //临界区
turn = 0;        //退出区
remainder section; //剩余区

缺点:该方法必须交替进入临界区,违背“空闲让进”原则。

优点:保证了互斥。


双标志先检查


思想:在每个进程访问临界区资源前,先查看临界资源是否正在被访问,若正在被访问,该进程等待,否则,进程才进去临界区。

一个布尔类型数组flag,第i元素值表示i进程的状态。

flag[i] = false ➡️Pi未进入临界区。(pi不想进入临界区)

//Pi:
While(flag[j]);  //进入区
flag[i] = TRUE;  *先检查后表达自己想使用*
critical section; //临界区
flag[j] = FALSE;   //退出区
remainder section; //剩余区
//Pj:
While(flag[i]);  //进入区
flag[j] = TRUE;
critical section; //临界区
flag[j] = FALSE;    //退出区
remainder section; //剩余区

缺点:并发操作时,此方法由于检查和修改操作不能一起执行导致pi,pj同时进入临界,违背“忙则等待”原则。


双标志后检查


思想:对于上面的双标志先检查进行优化,即将1⃣️2⃣️句颠倒。

先进行对自己的标志修改,后对进程进行检测。

先表达自己想用,后检查对方。

此方法由于两个进程均争抢进入临界区,发现对方也想进去临界区,进行谦让,导致“饥饿”现象。违背了“空闲让进”“有限等待”原则。


Peterson‘s Algorithm


对于上面两个无限等待的方法进行优化,增加变量turn,每个进程先设置自己的标志后设置turn标志。再对于另一个进程标志和不允许进入标志同时检测,保证一个进程进入临界区。

bool flag[2];
int turn = 0;
//Pi:
flag[i] = TRUE;turn = j;  turn的值表达一个谦让于另一个进程的过程,愿意让j进程使用
While(flag[j] && turn == j);  //进入区
*检查对方想进入并且自己谦让*
critical section; //临界区
flag[j] = FALSE;   //退出区
remainder section; //剩余区
//Pj:
flag[j] = TRUE;turn = i;
While(flag[i] && turn == i);  //进入区
critical section; //临界区
flag[j] = FALSE;    //退出区
remainder section; //剩余区

进入区:1.主动争取 2.主动谦让 3.检查对方是否想使用且自己最后表示了谦让动作

缺点:违背了“让权等待”原则,卡在wihle循环,占用cpu。


硬件方法中的硬件指令方法


中断屏蔽方法


优点:简单高效

缺点:::不适用于多处理机::;只适用于os内核进程,不适合将大权利给用户。


TSL指令


采用布尔型变量lock表示是否被加锁(true加锁,false未加锁

old记录临界区是否被上锁,无论是否上锁都设为上锁

bool TestAndSet(bool *lock)
{
  bool old;
  old = *lock;     //old用来存放lock原来的值
  *lock = true;   //将lock设为true
  return old;    //返回原来的值
}
While(TestAndSet(&lock)); //上锁并检查
临界区代码段 ;        
lock = false;   //解锁
剩余区代码段;

B进程在将lock变为true时,A进程来,将一直停留在while循环,直至B进程退出时将lock修改为false,才能进入临界区。

缺点:违背了“让权等待”原则。

优点:实现简单,::适用于多处理机环境。::


Swap指令


逻辑同TSL指令

Swap(*a,*b) 函数;
bool old = True;
While(old == true)
  Swap(&lock,&old);
临界区代码
lock = false ;
剩余区代码段

优缺点同TSL指令。

1.png


死锁预防


破坏互斥条件

是一种合理性,但是不可行,os要保持互斥性(比如打印机🖨️


破坏不剥夺条件

长期请求新资源不能被满足,应释放自己的资源。

缺点:实现复杂;同时导致前一阶段失效;反复申请和释放资源增加系统开销,降低吞吐量;对于进程主动释放,可能造成饥饿现象。

适用于状态易于保护和恢复的


破坏请求并保持条件

一次申请完全部资源,才投入执行。

缺点:资源浪费(不使用时长期占用;导致“饥饿”现象(同前一个原因,别的进程长期占用,进程饥饿


破坏循环等待条件

(难懂!着重理解)

顺序资源分配法,对于资源进行编号,规定按资源递增顺序请求资源,同类资源一次申请完。

缺点:限制新类型设备增加(要重新分配编号;资源浪费

1.png

相关文章
|
6天前
|
算法 调度 UED
探索操作系统核心:进程管理与调度
【9月更文挑战第28天】在数字世界的心脏跳动着无数进程,它们像是细胞一样构成了操作系统的生命体。本文将深入探讨操作系统中进程管理与调度的奥秘,揭示如何通过精心设计的数据结构和算法来维护系统的稳定性和效率。我们将从进程的基本概念出发,逐步解析进程状态转换、进程同步机制,以及进程调度策略,旨在为读者呈现一幅清晰、生动的操作系统内部工作机制图景。
|
10天前
|
算法 调度 UED
探索操作系统中的进程调度:理论与实践
【9月更文挑战第24天】 在数字世界的心脏跳动着的是操作系统,它像一位精明的指挥家,精心安排每个音符的演奏。本文将带你进入操作系统的内核,一探进程调度的秘密。我们将从简单的批处理系统谈起,穿越时间隧道,见证现代多道程序设计系统的复杂性与优雅。你将看到代码如何赋予理论以生命,理解调度算法背后的哲理。让我们一起跟随甘地的指引,成为我们希望在世界上看到的改变。
|
6天前
|
存储 消息中间件 资源调度
「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识
该文章总结了操作系统基础知识中的十个关键知识点,涵盖了进程与线程的概念及区别、进程间通信方式、线程同步机制、死锁现象及其预防方法、进程状态等内容,并通过具体实例帮助理解这些概念。
「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识
|
2天前
|
算法 调度 UED
探索操作系统的心脏:进程调度算法
【9月更文挑战第32天】在数字世界的每一次心跳中,都隐藏着一个不为人知的英雄——进程调度算法。它默默地在后台运作,确保我们的命令得到快速响应,应用程序平稳运行。本文将带你走进操作系统的核心,一探进程调度的奥秘,并通过代码示例揭示其背后的智慧。准备好跟随我一起深入这趟技术之旅了吗?让我们开始吧!
|
4天前
|
算法 Linux 调度
深入理解操作系统的进程调度
【9月更文挑战第30天】本文将带你进入操作系统的核心—进程调度。我们将探讨其工作原理,分析几种常见的调度算法,并通过实际代码示例来揭示这些理论是如何在真实系统中实现的。无论你是初学者还是有经验的开发者,这篇文章都能帮助你更好地理解操作系统的这一关键组成部分。
|
4天前
|
消息中间件 算法 调度
探索操作系统核心:进程管理与调度策略
【9月更文挑战第30天】在数字化时代的心脏,操作系统扮演着至关重要的角色。本文将深入探讨操作系统的基石之一——进程管理,以及如何通过调度策略优化系统性能。我们将从进程的基本概念出发,逐步解析进程状态、进程控制和进程间通信等关键要素。同时,我们会探讨几种常见的进程调度算法,并分析它们的优缺点。最后,文章将展示一个简单的代码示例,以加深对理论部分的理解和应用。
|
5天前
|
算法 调度 UED
探索操作系统的心脏:进程管理与调度
【9月更文挑战第29天】在数字世界的海洋中,操作系统是支撑软件与硬件和谐共舞的桥梁。本文将深入探讨操作系统的核心功能—进程管理及其调度机制,揭示它们是如何影响计算机性能和用户体验的。通过浅显易懂的语言和生动的比喻,我们将一起遨游在进程的生命周期、调度算法以及优先级等概念之间,旨在为读者呈现一个清晰的操作系统内部运作图景。
17 6
|
4天前
|
算法 调度 开发者
深入理解操作系统之进程管理与调度
【9月更文挑战第30天】本文旨在通过浅显易懂的语言和具体代码示例,带领读者探索操作系统中进程管理的奥秘。我们将从进程的生命周期出发,逐步解析进程调度的核心概念,并通过实例展示如何实现简单的进程调度算法。无论你是初学者还是有一定基础的开发者,都能在这篇文章中找到有价值的信息,帮助你更好地理解和掌握进程管理与调度的知识。
14 4
|
6天前
|
算法 调度
操作系统的心脏:深入解析进程调度算法
本文旨在深入探讨现代操作系统中的核心功能之一——进程调度。进程调度算法是操作系统用于分配CPU时间片给各个进程的机制,以确保系统资源的高效利用和公平分配。本文将详细介绍几种主要的进程调度算法,包括先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)以及优先级调度(PS)。我们将分析每种算法的基本原理、优缺点及其适用场景。同时,本文还将讨论多级反馈队列(MFQ)调度算法,并探讨这些算法在实际应用中的表现及未来发展趋势。通过深入解析这些内容,希望能够为读者提供对操作系统进程调度机制的全面理解。
|
7天前
|
算法 调度 UED
探索操作系统中的进程调度
【9月更文挑战第27天】操作系统是计算机的灵魂,而进程调度则是其跳动的心脏。本文将深入浅出地探讨进程调度机制,从理论到实践,带你领略这一技术的魅力和复杂性。我们将通过代码示例,揭示调度算法如何影响系统性能和用户体验。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇理解操作系统深层工作原理的大门。
17 6
下一篇
无影云桌面