总结操作系统进程管理部分知识
来源:互联网 发布:沈阳北方软件学院 编辑:程序博客网 时间:2024/04/29 11:42
1 程序顺序执行时的特征: 1
2 程序段、数据段和PCB构成了进程的实体。 1
3 进程特征: 1
4 进程定义: 1
5 进程的基本状态: 1
6 PCB的作用: 1
7 PCB中的信息: 1
8 进程控制块的组织方式: 2
9 进程创建过程: 2
10 进程终止过程: 2
11 两种形式的制约关系: 2
12 临界区: 2
13 同步机制遵循的原则: 2
14 整形信号量: 2
15 结构体定义: 2
16 记录型信号量: 3
17 And信号量 3
18 信号量集 4
1 程序顺序执行时的特征:
顺序性、封闭性、可再现性。
2 程序段、数据段和PCB构成了进程的实体。
3 进程特征:
结构特征、独立性、异步性、动态性、并发性。
4 进程定义:
是系统分配和调度资源的独立单元。
5 进程的基本状态:
阻塞、执行、就绪。还有一种附加的挂起状态。
6 PCB的作用:
是进程存在的唯一标志。
7 PCB中的信息:
进程标识符、处理器信息、进程调度信息、进程控制信息。
8 进程控制块的组织方式:
链接、索引。
9 进程创建过程:
申请空白PCB,为新进程分配资源,初始化PCB,插入就绪队列。
10 进程终止过程:
检索进程PCB,读出其状态;若处于执行状态,则立即终止,置调度标志为真;若是父进程,将其子孙全部终止;终止进程拥有的所有资源;从所在队列中移除PCB。
11 两种形式的制约关系:
直接/间接相互制约关系。
12 临界区:
访问临界资源的代码段。
13 同步机制遵循的原则:
空闲则进,忙则等待,有限等待,让权等待。
14 整形信号量:
S初始为1
Wait(s) : {
while s<=0 do no-op;
s--;
}
Signal(s): s++;
15 结构体定义:
typedef struct _RuleListNode
{
ListHead *RuleList; /* The rule list associated with this node */
int mode; /* the rule mode */
int rval; /* 0 == no detection, 1 == detection event */
char *name; /* name of this rule list (for debugging) */
struct _RuleListNode *next; /* the next RuleListNode */
} RuleListNode;
RuleListNode Node1;
等价于:
struct _RuleListNode
{
ListHead *RuleList; /* The rule list associated with this node */
int mode; /* the rule mode */
int rval; /* 0 == no detection, 1 == detection event */
char *name; /* name of this rule list (for debugging) */
struct _RuleListNode *next; /* the next RuleListNode */
} ;
struct _RuleListNode Node1;
16 记录型信号量:
Struct semaphore
{
Int value;
Struct ProcessList L;
}
Wait(S)
{
Struct semaphore S;
S.value--;
If(S.value<0)
Block(S,L);
}
Signal(S)
{
Struct semaphore S;
S.value++;
If(S.value<=0)
Wakeup(S,L);
}
现在我们假设我的电脑有两台打印机,所以S.value的初值为2,表示系统打印机的数目,称为资源信号量。进程B请求打印,那么系统对它执行一次wait操作,执行S.value:=S.value-1语句后S.value减1,S.value的值变为1,表示有一个资源空闲。执行if语句,S.value不小于0,结束。然后又来了一个进程B请求打印,系统对它又执行一次wait操作,执行S.value:=S.value-1语句后S.value减1,S.value的值变为0,表示没有空闲的资源。执行if语句,S.value不小于0,结束。又来一个进程C请求打印,系统对它又执行一次wait操作,执行S.value:=S.value-1语句后S.value减1,S.value的值变为-1,表示有一个进程没有得到打印机资源。执行if语句,S.value小于0,执行block(S,L),进行自我阻塞,放弃处理机,并插入到信号量链表S.L中。此时S.value的绝对值表示了在该信号量链表中已阻塞进程的数目。所以这个时候阻塞的进程为一个,即是进程C。
系统运行了一段时间后,A进程结束,在结束前执行了signal操作,当执行到S.value:=S.value+1语句时,S.value加1,即S.value变为0.然后执行 if 语句,S.value小于等于0,执行wakeup(S,L),从S.L链表中唤醒C进程。过了一会,B进程结束,同样执行signal操作,S.value变为1,表示有一个资源空闲,执行if语句,S.value不小于等于0,直接结束。接着C进程执行wait操作,S.value变为0。然后A进程结束,S.value变为1。紧接着C进程也结束了,S.value变为2。S.value最终等于初值,等待其他的进程进行资源请求。
17 And信号量
其实是记录信号量的补充,将一个共享资源变成多个资源。
Swait(s1,s2,...,sn)
If (s1>=1 && s2>=1&& ...sn>=1)
For(i=1,i<=n,i++)
si--;
Else
{
PCB(program counter):=addr(wait); //则让权等待并将P原语第1条指令作为断点地址,保存到给进程的PCB(上下文保护区),等回复运行时重执行P原语。
Block(WLi); //调用进程进入第一个小于1信号量的等待队列WLi
}
Ssignal(s1,s2,...,sn)
For(i=1,i<=n,i++)
{
Si++;
Wakeup(WLi);
}
18 信号量集
赋予信号量集一种通用的能力,自主性更强。可以设置每种信号量的需求量d和下限值t。
Swait(s1,t1,d1,...,sn,tn,dn)
If (s1>=t1 && ...&& sn>=t2)
For(i=1,i<=n,i++)
Si=si-di;
Else
{
PCB(program counter):=addr(wait);
Block(WLi);
}
Ssignal(s1,s2,...,sn)
For(i=1,i<=n,i++)
{
Si=si+di;
Wakeup(WLi);
}
一般“信号量集”可以用于各种情况的资源分配和释放。下面是几种特殊的情况:
1)Swait(S,d,d)表示每次申请d个资源,当资源数量少于d个时,便不予分配。
2)Swait(S,1,1)表示一般的记录型信号量。
3)Swait(S,1,0)可作为一个可控开关(当S≥1时,允许多个(并不对资源进行减操作)进程进入临界区;当S=0时禁止任何进程进入临界区)。
由于一般信号量在使用时的灵活性,因此通常并不成对使用Swait和Ssignal。为了避免死锁可一起申请所有需要的资源,但不一起释放。
- 总结操作系统进程管理部分知识
- 总结操作系统进程管理部分知识
- 知识储备_计算机操作系统:进程管理
- 操作系统知识整理3:进程管理
- 操作系统内存管理部分知识结构和总结
- 操作系统总结二(进程管理)
- 理解操作系统2--进程管理疑惑总结
- ucore操作系统lab5 -- 用户进程管理(理论部分)
- 操作系统------进程管理(进程)
- 操作系统部分重点知识回顾
- 操作系统进程管理实验
- 操作系统之进程管理
- 操作系统的进程管理
- 操作系统之进程管理
- 操作系统 进程管理
- 操作系统--进程管理
- 操作系统学习-进程管理
- 操作系统--进程管理
- ss整合问题
- 时钟问题--领会全排列算法
- linux书籍推荐
- 1的个数
- nim游戏
- 总结操作系统进程管理部分知识
- 总结操作系统进程管理部分知识
- 《linux内核的设计和实现》笔记
- 信号量的应用
- update
- 昨天,将VS2005和数据库的环境搭建好了,现在来通过.pc文件生成.c文件
- VC 直接发送WM_DROPFILES拖拽消息,模拟拖拽动作代码
- 进程管理续
- 什么是VPN