05-进程管理-2

合集下载

操作系统进程管理2PPT课件

操作系统进程管理2PPT课件

2
1
3
4
5
7 6
Fig2-2 前趋图示例
7
.
1.2程序的顺序执行
顺序是指程序执行时,仅当前一操作完成后,才 能执行后继操作。
I1
C1
P1
I2
C2
P2
特点: ➢ 顺序性 ➢ 封闭性(运行时独占资源,与外 界封闭) ➢ 可再现性
8 .
1.3程序并发执行
1. 思想:以输入、计算、打印三个操作为例:对于某 一作业的三个操作必存在顺序关系,但多个作业之 间并不一定。其前趋图如下:
16 .
2.3进程的特征
5)结构特征:为能正确的执行并发,为每一个进程配置
了一个数据结构,称为进程控制块(PCB)。则一个进 程实体就由数据段、程序段、PCB三部分构成。
• 进程实体 = 数据段+程序段+PCB
PCB
私有 数据块
程 序 段
进程的结构
• 程序和进程不一定具有一一对应的关系。 17 .
19 .
2.5 进程的类型与区别
进程的类型
▪ 在系统中同时有多个进程存在,但归纳起来 有两大类:
▪ 1、系统进程 执行操作系统核心代码的进程。 系统进程起着资源管理和控制的作用。
▪ 2、用户进程 执行用户程序的进程。
20 .
2.5 进程的类型与区别
系统进程的特征 ➢ (1)系统进程是操作系统用来管理系统资源并
行活动的并发软件。 ➢ (2)系统进程之间的关系由操作系统自己负责。 ➢ (3)系统进程直接管理有关的软、硬设备的活
动。 ➢ (4)在进程调度中,系统进程的优先级高于用
户进程。
21 .
2.5 进程的类型与区别

《进程管理》课件

《进程管理》课件

和协作。
进程迁移
02
为了提高系统可靠性和可用性,分布式系统支持进程迁移,确
保关键任务能够持续运行。
负载均衡
03
分布式系统通过负载均衡技术,将任务分配到不同节点上执行
,提高系统整体性能。
THANKS
感谢观看
当系统中存在多个等待资源的进程,且每 个进程都持有至少一个资源并等待获取被 其他进程持有的资源时,就会产生死锁。
通过设置资源分配顺序或限制资源请求量 来避免饥饿。
• 死锁预防
• 死锁避免
通过破坏死锁产生的必要条件来预防死锁 ,例如预先分配资源、设置最大需求量等 。
在分配资源时进行检测和限制,避免产生 死锁,例如银行家算法。
进程的状态及其转换
总结词
阐述进程的三种基本状态及转换关系
详细描述
进程状态分为新建、运行、阻塞和就绪等状态。新建状态是进程被创建时的状态,运行状态是进程获 得CPU并执行的状态,阻塞状态是进程等待某个条件成立而暂时无法执行的状态,就绪状态是进程已 具备运行条件但未获得CPU时的状态。不同状态之间可以相互转换。
进程管理在操作系统中的应用
01
02
03
进程调度
操作系统通过进程调度算 法,合理分配系统资源, 确保进程能够高效地运行 。
进程同步
操作系统提供进程同步机 制,实现多个进程之间的 协同工作,避免资源竞争 和死锁。
进程通信
进程之间通过消息传递、 共享内存等方式进行通信 ,实现数据交换和协同工 作。
多核处理器下的进程管理技术
进程与程序的区别和联系
总结词
比较进是程序的一次执行过程,具有动态特性和独立性。 程序是静态的,而进程是动态的。程序是永存的,进程是暂时的。程序是过程的代码, 而进程是执行这些代码的过程。一个程序可以对应多个进程,但一个进程不能对应多个

计算机操作系统 第二章 进程管理(2)

计算机操作系统 第二章 进程管理(2)

缺点:
(1)进程在等待进入临界区时也要耗费处理器时间, 不能实现“让权等待” (2)可能出现进程“饥饿”
2.3.2 信号量机制
新的同步工具——信号量和P、V操作。
信号量:是一种数据结构,代表可用资源实 体的数目。
信号量只能通过初始化和两个标准的原语: P(wait(S))、V((signal(S))来访问。 P原语相当于进入区操作,V原语相当于退 出区操作。
AND同步机制
AND同步机制的基本思想是:进程运行时所 需要的所有资源,要么全部分配给它,使用完 毕后一起释放;要么一个都不分配给它。实现 时,采用原子操作:要么全部分配到所有资源, 要么一个也不分配到。 称AND型信号量P原语为:
Swait(Simultaneous wait)
V原语为Ssignal(Simultaneous signal)。
SP原语描述
Swait(S1,S2,„,Sn) /* SP原语描述 */ {while(1) {if(S1>=1&&S2>=1&&„&&Sn>=1) {for(i=1;i<=n;i++) Si--; /* 先确信可满足所有资源要求再减1操作 */ berak; } else /* 资源不够时 */ {将进程放入第一个信号量小于1的阻塞队列Si.sqeue; 将PC中的地址回退到SP开始处; 阻塞进程; } } }
第二章 进程管理(2)
2.3 进程同步
多进程并发执行时,由于资源共享或进程合 作,使进程间形成间接相互制约和直接相互制 约关系,这需要用进程互斥与同步机制来协调 两种制约关系。 进程同步的主要任务:协调进程执行次序, 使并发执行的诸进程间能有效地共享资源和相 互合作,使程序的执行具有可再现性。

进程管理-前驱图和程序执行

进程管理-前驱图和程序执行

第二章进程管理一、前驱图和程序执行1、前驱图概念:是指一个有向无循环图,科技委DAG,它用于描述进程之间执行的先后顺序。

图中的每个节点可用来表示一个进程或程序段,节点之间的有向便则表示俩个节点之间存在的偏序,或前趋关系。

进程或程序之间的前趋关系可用“->”表示,P1->P2,P1表示前趋,P2表示后继。

或表示(P1,P2)注意事项:1、前趋图中不允许油循环的,否则必然会产生不可能实现的前趋关系程序的顺序执行通常,一个应用程序由若干个程序段组成,每一个程序段完成特定的功能,他们再执行时,都需要按照某种先后次序顺序执行,仅当前一程序段执行完后,才运行后一程序段。

S1 : a :=x+y表示在用到S1之前时不会给a赋值,当需要使用S1时,才会给a赋值。

:=表示赋值程序顺序执行时的特征:1、顺序性:指处理机严格的按照程序所规定的顺序执行,即每一操作必须在下一个操作开始之前结束;2、封闭性:指程序在封闭的环境下运行,即程序运行时独占全机资源,资源的状态(除初始状态外)只有本程序才能改变它,程序一旦开始执行,其执行结果不受外界因素影响;3、可再现性:指只要程序执行时的环境和初始条件相同,当程序重复执行时,不论它时从头到尾不停顿的执行,还是“停停走走”的执行,都可获得相同的结果。

程序顺序执行时的这种特性,为程序员检测和矫正程序的错误带来了很大的方便;4、唯一对应性:程序与执行过程一一对应程序的并发执行:1、间断性(制约):程序在并发执行时,由于它们共享系统资源,以及为完成同一项任务而互相合作,致使在这些并发执行的程序之间形成了相互制约的关系。

2、失去封闭性:当系统中存着多个可以并发执行的程序时,系统中的各种资源将为它们所共享,而这些资源的状态也由这些程序来改变,致使其中任一程序在运行时,其环境都必然会受到其它程序的影响。

3、不可再现性:程序在并发执行时,由于失去了封闭性,也将导致其又失去可再现性;失去程序的封闭性和可再现性若一个程序的执行可以改变另一个程序的变量,那么,后者的输出就可能有赖于各程序执行的相对速度,即失去了程序的封闭性特点。

第2章 进程管理课后习题解答

第2章 进程管理课后习题解答

第题中,如果修改问题中的同步算法,要求 对写进程优先,即一旦写进程到达,后续的读者进程必须等待, 而无论是否有读者进程在读文件。写出相应进程的程序段。 semaphore fmutex=1, rmutex=1, wmutex=1;que=1;
int rcount=0, wcount=0; void main() { parbegin(reader, writer); }
12
void reader { while(1) { wait(que); wait(rmutex); if(0==readcount) wait(fmutex); readcount++; signal(rmutex); signal(que); …. begin to read wait(rmutex); readcount--; if(readcount==0) signal (fmutex); signal(rmutex); } }
读者—写者问题(读优先) 读者 写者问题(读优先) 写者问题 semaphore rmutex=1,wmutex=1; int readcount=0; = void main() { parbegin(reader,writer); }
读者进程: 读者进程: void reader() { while(1) { wait(rmutex); if (readcount==0) wait(wmutex); readcount++; signal(rmutex); … 读操作 wait(rmutex); readcount--; if (readcount==0) signal(wmutex); signal(rmutex); } }
18
chopstick[ ={1 semaphore chopstick[5]={1,1,1,1,1}; viod main() { parbegin(P0(),P1(),P2(),P3(),P4()); parbegin(P0(),P1(),P2(),P3(),P4()); } Pi() /*i=0,1,2,3,4*/ { while(1) { wait(chopstick[i]); [ ] wait(chopstick[(i+1)%5]); [ ] eating; … signal(chopstick[i]); [ ] signal(chopstick[(i+1) %5]); [ ] thinking; } }

计算机专业基础综合操作系统(进程管理)-试卷2

计算机专业基础综合操作系统(进程管理)-试卷2

计算机专业基础综合操作系统(进程管理)-试卷2(总分:68.00,做题时间:90分钟)一、单项选择题(总题数:22,分数:44.00)1.单项选择题1-40小题。

下列每题给出的四个选项中,只有一个选项是最符合题目要求的。

__________________________________________________________________________________________2.计算机系统中判别是否有中断事件发生应是在( )。

A.进程切换时B.执行完一条指令后√C.执行P操作后D.由用户态转入核心态时系统中,只有当执行完一条指令后,才判别是否有中断发生。

3.若当前进程因时间片用完而让出处理机时,该进程应转变为( )状态。

A.就绪√B.等待C.运行D.完成当时间片用光后,进程变为就绪状态。

4.一种既有利于短小作业又兼顾到长作业的作业调度算法是( )。

A.先来先服务B.轮转C.最高响应比优先√D.均衡调度5.作业调度程序是从处于( )状态的作业中选取一个作业并把它装入主存。

A.输入B.收容√C.执行D.完成在作业调度中,选取的是正在收容的作业装入内存。

6.进程处于下列( )等待状态时,它是处于非阻塞状态。

A.等待从键盘输入数据B.等待协作进程的一个信号C.等待操作系统分配CPU时间√D.等待网络数据进入内存等待操作系统分配CPU时间属于就绪状态,其他三种均属于阻塞状态。

7.若系统中有五个并发进程涉及某个相同的变量A,则变量A的相关临界区是由( )临界区构成。

A.2个B.3个C.4个D.5个√8.在多进程的并发系统中,肯定不会因竞争( )而产生死锁。

A.打印机B.磁带机C.磁盘D.CPU √9.通常不采用( )方法来解除死锁。

A.终止一个死锁进程B.终止所有死锁进程C.从死锁进程处抢夺资源D.从非死锁进程处抢夺资源√解除死锁的主要方法有:①终止一个或多个死锁进程:②剥夺死锁进程的资源。

操作系统__第二章_进程管理_习题答案

操作系统__第二章_进程管理_习题答案

操作系统__第二章_进程管理_习题答案第二章进程管理2. 试画出下面4条语句的前趋图:S1S1: a:=x+y;S4S3S2: b:=z+1;S2S3: c:=a-b; S4: w:=c+1; 3. 为什么程序并发执行会产生间断性特征?程序在并发执行时,由于它们共享系统资源,以及为完成同一项任务而相互合作,致使在这些并发执行的进程之间,形成了相互制约的关系,从而也就使得进程在执行期间出现间断性。

4. 程序并发执行时为什么会失去封闭性和可再现性?因为程序并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态是由多个程序来改变,致使程序的运行失去了封闭性。

而程序一旦失去了封闭性也会导致其再失去可再现性。

5. 在操作系统中为什么要引入进程概念?它会产生什么样的影响?为了使程序在多道程序环境下能并发执行,并能对并发执行的程序加以控制和描述,从而在操作系统中引入了进程概念。

影响: 使程序的并发执行得以实行。

6. 试从动态性,并发性和独立性上比较进程和程序?a. 动态性是进程最基本的特性,可表现为由创建而产生,由调度而执行,因得不到资源而暂停执行,以及由撤销而消亡,因而进程由一定的生命期;而程序只是一组有序指令的集合,是静态实体。

b. 并发性是进程的重要特征,同时也是OS的重要特征。

引入进程的目的正是为了使其程序能和其它建立了进程的程序并发执行,而程序本身是不能并发执行的。

c. 独立性是指进程实体是一个能独立运行的基本单位,同时也是系统中独立获得资源和独立调度的基本单位。

而对于未建立任何进程的程序,都不能作为一个独立的单位来运行。

7. 试说明PCB的作用?为什么说PCB是进程存在的唯一标志?a. PCB是进程实体的一部分,是操作系统中最重要的记录型数据结构。

PCB中记录了操作系统所需的用于描述进程情况及控制进程运行所需的全部信息。

因而它的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能和其它进程并发执行的进程。

实验二-实验报告(进程管理)

实验二-实验报告(进程管理)

实验二模拟实现进程管理组长:李和林软件1402一、实验目的1.理解进程的概念,明确进程和程序的区别。

2.理解并发执行的实质。

3.掌握进程的创建,睡眠,撤销等进程控制方法。

二、实验内容用C语言,JAVA语言,C++语言编写程序,模拟实现创建新的进程;查看运行进程,换出某个进程;杀死运行进程。

三、实验准备1.进程的定义进程是程序在一个数据集合上的运行过程,是系统资源分配和调度的一个独立单位。

一个程序在不同的数据集合上运行,乃至一个程序在同样数据集合上的多次运行都是不同的进程。

2.进程的状态通常情况下,一个进程必须具有就绪,执行和阻塞三种基本情况。

1)就绪状态当进程已分配到除处理器外的所有必要资源后,只要再获得处理器就可以立即执行,这时进程的状态就为就绪状态。

在一个系统里,可以有多个进程同时处于就绪状态,通常把这些就绪进程排成一个或多个队列,称为就绪队列。

2)执行状态处于就绪状态的进程一旦获得处理器,就可以运行,进程状态也就处于执行状态,在单处理器系统中,只能有一个进程处于执行状态,在多处理器系统中,则可能有多个进程处于执行状态3)阻塞状态正在执行的进程因为发生某些事件而暂停运行,这种受阻暂停的状态称为阻塞状态,也可称为等待状态。

通常将处于阻塞状态的进程拍成一个队列,称为阻塞队列,在有些系统中,也会按阻塞原因的不同将阻塞状态的进程排成多个队列。

3.进程状态之间的转换4.进程控制块1)进程控制块的作用进程控制块是进程实体的重要组成部分,主要包含下述四个方面的信息:a)进程标示信息b)说明信息c)现场信息d)管理信息5.进程控制块的组织方式1)链接方式2)索引方式6.进程控制原语1)创建原语2)撤销原语3)阻塞原语4)唤醒原语7.程序代码#include<stdio.h>#include<iostream>using namespace std;void clrscr();void create();void run( );void exchange( );//唤出void kill( );void wakeUp( );//唤醒struct process_type{int pid;int priority;//优先次序int size;int state;//状态char info[10];};struct process_type internalMemory[20];int amount=0,hangUp=0,pid,flag=0;//数目,挂起void main( ){int n;int a;n=1;clrscr( );while(n==1){cout<<"\n********************************************";cout<<"\n* 进程演示系统 *";cout<<"\n********************************************";cout<<"\n 1.创建新的进程 2.查看运行进程 ";cout<<"\n 3.换出某个进程 4.杀死运行进程 ";cout<<"\n 5.唤醒某个进程¨ 6.退出系统 ";cout<<"\n*********************************************"<<endl;cout<<"请选择 ";cin>>a;switch(a){case 1:create( );break;case 2:run( );break;case 3:exchange();//换出break;case 4:kill();break;case 5:wakeUp();break;case 6:exit(0);default:n=0;}}}void create(){ //创建进程int i=0;if (amount>=20){cout<<" 内存已满,请先结束或换出进程";}else{for (i=0;i<20;i++){if (internalMemory[i].state==0){break;}}cout<<"请输入新进程的pid: "<<endl;cin>>internalMemory[ i ].pid;cout<<"请输入新进程的优先级: "<<endl;cin>>internalMemory[amount].priority;cout<<"请输入新进程的大小: "<<endl;cin>>internalMemory[amount].size;cout<<"请输入新进程的内容: "<<endl;cin>>internalMemory[amount].info;internalMemory[i].state=1;amount++;}}void clrscr()//清除内存空间{for (int i=0;i<19;i++){internalMemory[i].pid=0;internalMemory[i].priority=0;internalMemory[i].size=0;internalMemory[i].state=0;}amount=0;}void run(){for (int i=0;i<20;i++){if (internalMemory[i].state==1){cout<<"当前内存中的进程:\n"<<endl;cout<<"当前运行的进程: ";cout<<internalMemory[i].pid<<endl;cout<<"当前运行进程的优先级: ";cout<<internalMemory[i].priority<<endl;cout<<"当前运行进程占用的空间大小: ";cout<<internalMemory[i].size;}}}void exchange( ){//唤出优先级最小的进程if (!amount){cout<<"当前没有运行进程\n";return;}cout<<"\n输入换出进程的ID值: ";cin>>pid;for (int i=0;i<20;i++){if (pid==internalMemory[i].pid){if (internalMemory[i].state==1){internalMemory[i].state=2;hangUp++;cout<<"\n已经成功换出进程\n";}else if (internalMemory[i].state==0){cout<<"\n要换出的进程不存在";}else{cout<<"\n要换出的进程已被挂起\n";}flag=1;break;}}if (flag==0){cout<<"\n要换出的进程不存在";}}void kill( ){if (!amount){cout<<"当前没有运行进程\n";return;}cout<<"请输入要杀死的进程: ";cin>>pid;for (int i=0;i<20;i++){if (pid==internalMemory[i].pid){if (internalMemory[i].state==1){internalMemory[i].state=0;amount--;cout<<"此进程被杀死"<<pid;}else if (internalMemory[i].state==0){cout<<"\n要杀死的进程不存在\n";}else{cout<<"\n要杀死的进程已被挂起\n";}flag=1;break;}}if (!flag){cout<<"\n要杀死的进程不存在\n";}}void wakeUp(){if (!amount){cout<<"当前没有运行进程"<<endl;return;}if (!hangUp){cout<<"当前没有挂起进程";return;}cout<<"请输入pid: ";cin>>pid;for (int i=0;i<20;i++){if (pid==internalMemory[i].pid){flag=0;if (internalMemory[i].state==2){internalMemory[i].state=1;hangUp--;cout<<"已经成功唤醒进程\n";}else if (internalMemory[i].state==0){cout<<"\n要换醒的进程不存在\n";}else{cout<<"\n要唤醒的进程已被挂起\n";}break;}}if (flag){cout<<"\n要唤醒的进程已被挂起\n"<<endl;}}8.实现的结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

除PCB之外,新进程还必须拥有程序、数据、堆 栈和其它资源,这些资源是否也从父进程继承? 继承多少?
1、全部继承:父子进程共享所有资源。 2、部分继承:父子进程共享部分资源。 3、不继承:父子进程不共享任何资源。 三种情况都应该是合理的,但部分继承似乎更合理。
创建进程
如果父子进程共享资源(全部或部分),那么它 们如何共享这些资源呢?或者说,父进程在创 建子进程之后如何运行呢?
PCB的内容
2、进程控制信息:
– 当前状态 – 优先级(priority) – 代码执行入口地址 – 程序的外存地址 – 运行统计信息(执行时间、页面调度) – 进程间同步和通信;阻塞原因 –进程的队列指针 –进程的消息队列指针
PCB的内容(续)
3、所拥有的资源和使用情况:
– 虚拟地址空间的现状 – 打开文件列表
用户态运行 核心态运行 在内存就绪 在外存就绪 在内存暂停 在外存暂停 在内存睡眠 在外存睡眠 创建态 终止态
Linux进程
Linux操作系统的PCB结构叫做task_struct。 在Linux的演化过程中,该结构发生了巨大的变化, 目前已经变得很大。 任务结构体的大小约1000B,包含的内容十分 丰富,它定义在源代码的include/linux/sched.h 下。 下面是在早期的Linux版本(Linux 0.11)中 定义的task_struct结构,其中已经具备了PCB的 最基本信息。
5)子进程的起始执行点
父进程调用fork算法,创建好一个子进程后,父、 子进程以后的执行起点都在fork算法内部,它们都要 做一些善后处理工作,再转去执行自己的程序段。
如何区别父、子进程? 父进程被调度执行后从fork算法中返回时,父进 程返回值是子进程的标识号,而子进程返回的是0,根 据返回值的不同即可区别父子进程。
1、父进程等待子进程终止(暂借资源) 2、父子进程并发地、独立地运行
两种情况都是存在的,但最常见的是第2种。
创建进程
如果要从父进程复制资源,如地址空间,那么应 该如何复制呢?
1、完全复制。 工作量很大,尤其是大程序,可能有的在内存,有 的在外存。而且,子进程可能很快就重新加载新的应 用程序,释放掉继承的程序、数据等资源。 2、写时复制(Copy on Write)。 父子双方共用(共享)地址空间(程序、数据、堆 栈等),直到一方对其做写操作时,才真正复制,写 多少复制多少。
进程队列组织方式
进程队列:不同状态进程分别组成队列 运行队列、就绪队列、等待队列 进程队列常用的物理组织方式有两种: 链接结构: 同一状态进程的PCB组成一个链表,不同状态 对应多个不同的链表 就绪链表、阻塞链表 索引结构:对具有相同状态的进程,分别设置各 自的PCB索引表,表明PCB在PCB表中的地址
等待资源 sleep_on()
TASK_INTERRUPTIBLE 浅度睡眠
占有CPU,执行 停止信号 ptrace()
等待资源 interruptible_sleep_on()
TASK_STOPPED 暂停
do_exit()
TASK_ZOMBIE 僵死
UNIX S-5中进程状态

PCB表组织方式
PCB表:
系统把所有PCB组织在一起,以表 的形式把它们放在内存的固定区域,就 构成了PCB表
PCB表的大小决定了系统中最多可同时 存在的进程个数,称为系统的并发度
注:多道程序中的多道与系统并发度不同
(1)线性表:将所有PCB都放在一个线性表中 优点:简单、易于实现,OS需预先确定整个系统中 同时存在的最大进程数目,静态分配内存。 问题:限定了系统中同时存在的最大进程数目,调 度时需扫描整个表,降低调度效率,用户较少时很多 PCB未用,浪费内存空间。 (2) 链接表: 按照进程的不同状态分别放在不同的队 列中,由指针将同一队列中的PCB链接起来。 好处:使用灵活,管理方便,动态申请内存,内存 储使用效率可以提高。 不足:动态分配内存的方法比较复杂,不限制进程 数目,进程过多时会出现内存43; PCB
Linux进程的状态
1、运行状态(TASK_RUNNING):表示进程正在运行 或者正在运行(就绪)队列中等待运行。 2、可中断等待状态(TASK_INTERRUPTIBLE):表 示进程在等待队列中,正在等待某个事件或资源。在此状态 下的进程可以被信号唤醒。 3、不可中断等待状态(TASK_UNINTERRUPTIBLE) 表示进程在等待队列中,正在等待被唤醒。处于这种状态的 进程不会被信号自动唤醒。 4、停止状态(TASK_STOPPED):表示进程被暂停。 处于停止状态的进程还可以再恢复运行。导致进程停止的原 因有二:收到了停止信号;受其它进程的追踪。 5、僵死状态(TASK_ZOMBIE):表示进程已经结束但 尚未消亡。其祖先负责回收它的task_struct结构。
进程队列组织方式(续)
索引表
PCB表 就绪队列
PCB 1
PCB 2
PCB 3 PCB 4 PCB 5
等待队列 1
PCB 6
PCB 7 … PCB n
等待队列 2
进程映象 (进程要素)
用户程序 用户数据 栈
–用于过程调用和参数传递
进程控制块PCB (进程属性)
– 处于核心段 – 用户进程不能直接访问、修改自己的PCB
理解父、子进程
task struct数据结构包含的进程信息
进程状态 进程状态标志 调度信息 标识符 进程通信信息 链接指针 时间和定时器 文件系统 虚拟内存 处理器相关上下文

每个进程的管理信息 真是太多了!!
Linux的PCB结构与当前进程
Linux进程的task_struct结构和它的系统堆栈 共用8KB的系统内存。 宏current指向当前进程的task_struct结构。当 前进程是正在运行的进程。
本次课主要内容:
1、进程的描述 2、PCB组成
3、LINUX进程状态
4、进程的操作
进程的描述
进程控制块(Process
Control Block,PCB)
系统为了管理进程设置的一个专门的数据 结构,用它来记录进程的外部特征,描述进程 的运动变化过程(又称进程描述符、进程属性) 系统利用PCB来控制和管理进程,所以PCB 是系统感知进程存在的唯一标志 进程与PCB是一一对应的
PCB的内容
1、进程标识信息,即进程名: 对用户来说,字符串名称比较容易记忆 和使用,但对操作系统来说,用字符串来标 识进程是低效的,也是不方便的。因此,操 作系统通常使用一个整数来标识进程,每个 进程一个,称为进程标识符(pid)。 进程通常属于一个组,因此需要记录进 程的组标识pgrp。 另外,进程代替用户工作,因此需要记录 用户标识(uid)和用户所属的组标识(gid)。
fork系统调用
1)fork( )首先为子进程分配两个连续的物理页 面,低端用作子进程的task struct结构,高端则用 作其系统空间堆栈。 2)再将父进程的整个task struct复制到子进程 的数据结构中去。此后,进程的状态被设置成TASK UNINTERRUPTIBLE,这是因为在get pid()中产生一个 新pid的操作必须是独占的。Task struct数据结构复 制成功后,还要对其中的各种变量进行初始化。
创建进程
Linux系统提供了三种创建进程的系统调用, 它们是fork()、clone()和vfork()。 vfork()采用完全继承方式,父子进程完全共 享同样的资源。通常父进程要等待子进程终止。 fork()采用完全继承方式, 子进程通过Copy on Write方式从父进程复制全部资源。 clone()界于两者之间,由父进程指定共享和 复制的方式,可以实现部分继承和部分复制。如 果需要复制地址空间,也采用Copy on Write方式。 最终完成进程创建的是函数do_fork,上述三 个函数传递给do_fork的参数不同。
Linux进程的状态
收到信号SIGCONT wake_up() 资源到位 wake_up() fork()
TASK_RUNNING 就绪
schedule() 时间片到
资源到位 wake_up_interruptible() wake_up()或收到信号
TASK_UNINTERRUPTIBLE 深度睡眠
4、CPU现场保护信息:
– 寄存器值(通用、程序计数器PC、状态PSW,地 址包括栈指针) –指向赋予该进程的段/页表的指针
PCB的内容(续)
PCB组织方式
显然,要管理一个进程必须首先找到它的进 程控制块(PCB),要管理所有的进程必须能找 到所有的进程控制块(PCB)。 由于进程控制块中记录了与进程相关的所有 重要信息,因此,进程的PCB必须驻留在系统内 存区中。 由于系统中会同时存在多个进程,因此操作 系统必须同时管理多个PCB。 为了提高进程管理的效率,必须有一种办法 来组织系统中的进程控制块(PCB)。
系统堆栈 系统栈顶指针(esp)
8KB
task_struct 进程结构开始位置
Linux系统中只有一个就绪队列,称为运行队 列,所有状态为TASK_RUNNING的进程全部排列 在该队列中。系统的第0号进程,即init_task进程, 在完成初始化以后变成空闲进程,常驻运行队列, 并作为队头。 等待的进程分别在各自的队列中排队。
struct task_struct { long state; /* -1 unrunnable, 0 runnable, >0 stopped */ long counter; long priority; long signal; struct sigaction sigaction[32]; long blocked; /* bitmap of masked signals */ int exit_code; unsigned long start_code,end_code,end_data,brk,start_stack; long pid,father,pgrp,session,leader; unsigned short uid,euid,suid; unsigned short gid,egid,sgid; long alarm; long utime,stime,cutime,cstime,start_time; unsigned short used_math; int tty; /* -1 if no tty, so it must be signed */ unsigned short umask; struct m_inode * pwd; struct m_inode * root; struct m_inode * executable; unsigned long close_on_exec; struct file * filp[NR_OPEN]; struct desc_struct ldt[3]; /* 内存 */ struct tss_struct tss; /* 现场 */ };
相关文档
最新文档