计算机操作系统原理及应用 期末考试复习知识清单 典型例题 (第二章进程控制)

目录

一.进程的概念

1.程序的顺序执行

2.程序的并发执行

2.1并发执行带来的影响:失去程序的封闭性和可再现性

2.2与时间有关的错误:由于并发执行的程序共享资源或者互相协作, 因其执行速度的不确定性以及多道程序之间缺乏控制所带来的错误称为与时间有关的错误

2.3导致这种“与时间有关的错误”出现的原因是:

2.4 并发的特征:

2.5 进程与程序的区别:

2.6 进程的定义:进程是程序的一次执行过程

2.7进程控制块的主要内容

2.8进程的组成

二,进程状态

1.两态模型:

三.Linux进程结构

1.Linux进程状态及转换

 2.进程的控制结构

 3.处理机状态

4.进程控制的操作

5.原语

6.通常将处理机的执行状态分成 核心态 和 用户态

7.进程的创建

8.进程的撤销

9.进程等待

10.进程的唤醒

四.LINUX进程及进程控制

1.Linux系统中各进程构成树型结构

2.init进程是所有用户进程的祖先

3.进程代码状态

4.fork的使用

5.Linux进程控制

五.进程互斥与同步 

1.进程间的关系:

2.临界资源:

3.使用临界资源的规则:

4.信号量

5.信号量机制

6.PV操作 

7.信号量可能的取值范围 

8.两个过程

9.用P,V原语操作实现进程控制的方法与步骤:

 六.进程通信

1.进程通信IPC:进程间的信息交换。

2.进程通信的分类:

3.常用的消息传递的方式

4.消息缓冲机制


一.进程的概念

1.程序的顺序执行

顺序执行的特点

(1)顺序性

(2)环境的封闭性

(3)结果的可再现性

2.程序的并发执行

2.1并发执行带来的影响:失去程序的封闭性和可再现性

并发执行的优点:使系统的资源利用率提高,从而提高系统的处理能力。

2.2与时间有关的错误:于并发执行的程序共享资源或者互相协作, 因其执行速度的不确定性以及多道程序之间缺乏控制所带来的错误称为与时间有关的错

2.3导致这种“与时间有关的错误”出现的原因是:

与诸程序的执行速度有关;

由于多个程序都共享了同一个变量或者互相需 要协调同步;
对于变量的共享或者互相协作的过程没有进行 有效地控制。

2.4 并发执行的特征:

(1)并发性

(2)共享性

(3)制约性

(4)交互性

2.5 进程与程序的区别:

程序是静态的概念;进程是动态的概念
进程的并发性和程序的顺序性;
进程的暂时性和程序的永久性;
结构特征;
一个程序可以对应多个进程;一个进程 至少包含一个程序

2.6 进程的定义:进程是程序的一次执行过程

         进程是系统进行资源分配的基本单位(最小单位)。
PCB(进程控制块 ):进程存在的唯一标识

2.7进程控制块的主要内容:

①进程标识符 (PID)进程符号名或内部 id号

②进程当前状态 本进程目前处于何种状态 (运 行、就绪、等待)

③当前队列指针 next 该项登记了处于同一状态的下一个进程的PCB地址
④进程优先级 反映了进程要求CPU 的紧迫程度
⑤CPU 现场保护区 当进程由于某种原因释放处理机时,CPU 现场信息被保存在PCB 的该区域中。
⑥通信信息 进程间进行通信时所记录的有关信息
⑦家族联系 指明本进程与家族的联系
⑧占有资源清单

2.8进程的组成

二,进程状态

1.两态模型:

2. 三态模型

新建态 退出态 是进程生存期中必然存 在的两个状态,在进程管理中也非常有 作用

 3.五态模型        进程状态转换:(重点)

 4.进程的创建:

用户提交了一个新任务会创建相应的进程;

在交互环境下,当一个新用户试图登陆系统时会 创建新进程;
在批处理环境下,当作业提交时会创建新进程;
操作系统管理程序会创建新进程代替用户执行一 个功能(如控制打印机操作);
由进程派生新的进程,以解决并行处理的需要, 等情况
5.多等待队列

 6.挂起态的特点:

(1) 进程不能立即执行;

(2) 挂起的进程不一定是在等待某事件;
(3) 可将进程置于挂起态的代理可以是父 进程、进程自身,或者操作系统;
(4) 处于挂起态的进程只能由代理显式地 调用系统命令进行状态转换

三.Linux进程结构

1.Linux进程状态及转换

TASK_RUNNING :表示进程处在 运行 就绪状态
TASK_INTERRUPTIBLE TASK_UNINTERRUPTIBLE : 这两种状态均表示进程处于睡眠状态
也将它们称为 浅度睡眠 深度睡眠;
TASK_STOPPED :进程处于 暂停 状态, 主要用于调试目的
TASK_ZOMBIE 僵死状态 ,表示进程已 经结束运行并释放了大部分占用的资源, 但task_struct结构还未被释放

 2.进程的控制结构

 3.处理机状态

系统中有两类程序:系统程序和用户程序

4.进程控制的操作

5.原语

进程控制通过原语实现。

原语系统态下执行的特殊系统程序

          原语是原子操作,不可再分 ,要么全做,要么全不做

6.通常将处理机的执行状态分成 核心态 和 用户态

7.进程的创建

功 能:创建一个具有指定标识符进程

创建方式 :由系统程序模块统一创建, 由父进程创建
入口信息 :进程标识符、优先级、进程开始 地址、初始CPU状态、资源清单等

8.进程的撤销

功 能 :撤销一指定进程。
入口信息 :被撤销的进程名
撤销条件
已完成所要求的功能而终止;
由某种错误导致非正常终止;
祖先进程要求撤销某子进程。

9.进程等待

功 能 :停止调用进程的执行,变 为等待
入口信息 :可省

10.进程的唤醒

功 能 :唤醒某一处于等待队 列当中的进程
入口信息 :被唤醒进程的名字

四.LINUX进程及进程控制

1.Linux系统中各进程构成树型结构

2.init进程是所有用户进程的祖先

3.进程代码状态

R: 运行状态
S:   可中断休眠态
D:   不可中断休眠态
T:    停止状态
Z: 僵死状态

4.fork的使用

在Linux下产生新的进程的系统调用就是 fork ,这个词 是英文中“分叉”的意思
fork创建新进程
为新进程生成task_struct结构
为新进程赋予一个统一的标识(PID)
为进程映像分配存储空间
将新进程插入就绪队列
系统调用fork()
fork系统调用格式:
pid=fork();
fork()返回值意义如下:
0:在子进程中,pid变量保存的fork()返回值为0,
表示当前进程是子进程。
>0:在父进程中,pid变量保存的fork()返回值为子
进程的id值(进程唯一标识符)。
-1:创建失败
fork系统调用特点 :一次调用两次返回
父子进程执行不同的代码
#include <stdio.h>
main()
{ char command[32];
char *prompt="$";   //指向字符串的指针
while(printf("%s",promt),gets(command)!=NULL)        //从键盘获取一个字符串
{ if ( (pid = fork( ) ) == 0)
execlp(command,command,(char *)0);                   //将字符串作为命令让子进程执行
else
wait(0);                                    //父进程等待子进程执行完毕,再退出
} }
exec()系统调用:函数执行正确不返回,执行错误则返回-1值
exec函数族的 作用:就是在调用进程内部执行一个可执行文件

5.Linux进程控制

execlp (从PATH 环境变量中查找文件并执行)
头文件 : #include<unistd.h>
定义函数 int execlp(const char * file, const char * arg, ……)
函数说明
execlp()会从PATH环境变量所指的目录中查找符合参数file的文件 名,找到后便执行该文件,然后将第二个以后的参数当做该文件的 argv[0]、argv[1]…,最后一个参数必须用空指针(NULL)结束。
返回值 :如果执行成功则函数不会返回,执行失败则直接返回-1 失败原因存于errno 中。

五.进程互斥与同步 

1.进程间的关系:

互斥-——进程间共享互斥资源
同步-——进程间执行顺序要求
通信-——进程间交流的需要

2.临界资源:

一次只允许一个进程使用的资源称为临界资源(打印机

临界区 : 访问临界资源的那段程序称为临界区

3.使用临界资源的规则:

  1. 有空让进;
  2. 忙则等待;
  3. 有限等待;
  4. 让权等待。

4.信号量

管理相应临界区的公有资源,它代 表可用资源实体数
信号量是一个整型变量。
≥0:可供并发进程使用的资源实体数
<0:正在等待使用临界区的进程数
用于互斥的信号量初值应该大于零

5.信号量机制

借助信号量管理临界区的公有资源 的分配与回收。即由 P操作进行资源申请的操作,由V操作进行资源回收的操作。

6.PV操作 

7.信号量可能的取值范围 

n 个并发进程,互斥信号量mutex的 初值为1
mutex的取值范围为: 1~-( n -1)
1 :表示没有进程进入临界区。有一个资源,无进 程等待;
0 :表示有1个进程进入临界区。无资源,无进程 等待;
- i :表示1个进程进入临界区。无资源,且有 i ( i <= n )个进程等待进入。
互斥问题举例
某车站售票厅有20个窗口,任何时刻最多可容纳20名 购票者进入,当售票厅中少于20名购票者时,则厅外 的购票者可立即进入,否则需在厅外等待。若把一个 购票者看作一个进程,请用P、V操作管理这些并发进 程,要求如下:
⑴.在主函数中给出信号量的定义和初值。
⑵.给出一个购票者进程的算法。
⑶.给出当购票者最多不超过 n (设 n >20)个时,信号 量可能的变化范围。
⑴.主函数描述:                                                ⑵.购票者i的描述:
int main()                                                                    Pi( ) // i =1,2, … , n
{                                                                                   {
        int mutex=20;                                                               P(mutex);
        cobegin                                                                               购票;
                Pi( );                                                                       V(mutex);
        coend                                                                     }
}
⑶.信号量mutex的取值范围 -(n-20) ≤ mutex ≤ 20
物理含义是:
当mutex=20时 ,表示售票厅内没有购票者进入,20个窗口都 是空闲的,表示可用资源数;
当mutex=0时 ,表示售票厅内已经进入了20个购票者,每个窗 口都被占用,没有等待的购票者,可用资源为0;
当mutex=-(n-20)时 ,表示一共有n个购票者,其中20个购 票者已经进入厅内,分别占有一个窗口,还有n-20个购票者 在厅外等待,绝对值表示等待进程个数。
结论
当mutex≥0时其值表示可用资源个数;
当mutex<0时其绝对值表示等待进程的个数

8.两个过程

Wait (semaphore  *S)                                                      Signal(semaphore  *S)

{                                                                                        {

S—>value-;                                                                      S—>value++;

if(S—>value<0) block(S—>list)                                     if(S—>value<=0)wakeup(S—>list)

}                                                                                           }

执行一次wait(S)表示申请一个单位资源

9.用P,V原语操作实现进程控制的方法与步骤:

分析进程间关系
为各并发进程设置信号量(公用or私用)
利用P,V原语和信号量规定各进程的执行顺

每个进程中各个P操作的次序是重要的先检查资源数目,再检查是否互斥――否则可能死锁!

哲学家进餐问题 (例2-17)
问题描述
五个哲学家 共用一张圆桌, 分别坐在周围的五张椅子上,
圆桌上有五个碗和 五只筷子 每两个哲学家之间放一支
哲学家的动作包括 思考 进餐
进餐 时需要同时拿起他左边和 右边的两支筷子;
思考 时则同时将两支筷子放回 原处
eat(i):
begin
if (i mod 2 == 0)
then
{ P(c[i]);
P(c[i+1 mod 5]);
eating;
V(c[i]);
V(c[i+1 mod 5]);
}
else
{ P(c[i+1 mod 5]);
P(c[i]);
eating;
V(c[i+1 mod 5]);
V(c[i]);
}

 六.进程通信

1.进程通信IPC:进程间的信息交换。

2.进程通信的分类:

①低级进程通信(少量)

②高级进程通信(大量)

3.常用的消息传递的方式

直接通信方式(消息缓冲机制)
间接通信方式(邮箱机制)

4.消息缓冲机制

消息:进程之间相互传送的赖以发生交互作用的有结构的数据。

消息缓冲通信机构是以 内存缓冲区 为基础。
管道是以 文件系统 为基础。
管道的分类:有名管道无名管道
例1 用C语言写一个程序,建立一个pipe 同时父进程生成一个子进程,子进程向 pipe中写入一字符串,父进程从pipe中 读出该字符串
#include <unistd.h>
#include <stdio.h>
int main(void)
{ int x,fd[2];
char buf[30],s[30];
pipe(fd); /*创建管道*/
while((x=fork())==-1);/*创建子程序失败时,循环*/
if(x==0)
{ sprintf(buf, "this is an example\n");
write(fd[1],buf,30); /*把buf中字符写入管道*/
exit(0);
}
else
{ wait(0);
read(fd[0],s,30); /*父进程读管道中字符*/
printf("%s",s);
} }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

字母符号数字

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值