进程的创建与并发执行-带答案版

进程的创建与并发执行-带答案版
进程的创建与并发执行-带答案版

进程的创建与并发执行-带答案版

实验二进程管理

2.1 进程的创建与并发执行

1.实验目的

(1) 加深对进程概念的理解,理解进程和程序的区别。

(2) 认识并发进程的实质。分析进程争用资源的现象,学习解决进程互斥的方法。

(3) 理解系统调用和用户命令的区别。

2.实验类型:验证型

3.实验学时:2

4.实验原理和知识点

(1) 实验原理:程序的并发执行具有随机性和不可再现性。程序并发执行会导致资源共享和资源竞争,各程序向前执行的速度会受资源共享的制约。程序的动态执行过程用进程这个概念来描述。由于向前推进的速度不可预知,所以多个进程并发地重复执行,整体上得到的结果可能不同。但要注意,就其中某单个进程而言,其多次运行结果是确定的。

(2) 知识点:进程、子进程、并发执行的特性;

5.实验环境(硬件环境、软件环境):

(1)硬件环境:Intel Pentium III 以上CPU,128MB以上内存,2GB以上硬盘

(2)软件环境:linux操作系统。

6. 预备知识

(1) fork()系统调用

头文件:#include unix standard header

/*是POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数、write函数和getpid 函数*/

函数原型: pid_t fork(void);

/*是Linux下的进程号类型,也就是Process ID _ Type 的缩写。其实是宏定义的unsigned int类型*/

函数功能:fork的功能是创建子进程。调用fork的进程称为父进程。如图2.1所示。子进程是父进程的一个拷贝,它继承了父进程的用户代码、组代码、环境变量、已打开的文件代码、工作目录及资源限制。fork语句执行后,内核向父进程返回子进程的进程号,向子进程返回

0。父子进程都从fork()的下一句开始并发执行。

返回值:

返回值==-1:创建失败。

返回值==0:程序在子进程中。

返回值>0:程序在父进程中。(该返回值是子进程的进程号)

编程提示:虽然子进程是父进程的一个复制品,但父子的行为是不同的。编程时要抓住内核的返回值。通过返回值,可以知道是父进程还是子进程,因而可以编写不同行为的代码。

图2.1 fork()创建进程示意图

(2) wait()系统调用

头文件:#include

函数原型:pid_t wait(int *status);

函数功能:wait的功能是等待子进程结束。发出wait调用的进程只要有子进程,就会睡眠直到子进程中的一个终止为止。若没有子进程,则该调用立即返回。

函数参数:status是子进程退出时的状态信息。返回值:成功则返回子进程号,否则返回-1。(3) getpid()系统调用

头文件:unistd.h,在VC++6.0下可以用process.h

函数原型:pid_t getpid(void);

函数功能:wait的功能是将父进程挂起,等待子进程终止。getpid函数用来取得目前进程的进程ID,许多程序利用取到的此值来建立临时文件,以避免临时文件相同带来的问题。

返回值:目前进程的进程ID。

(4) 其他系统调用

exit –终止进程

exec –执行一个应用程序

nice –改变进程的优先

7. 实验内容与步骤(将所有截图换成用户名为你们自己姓名的拼音,并回答所有的问题)(1)运行图2.1所示程序

将图2.1中的源程序保存为e201.c

在终端中编译gcc –o e201 e201.c

运行 ./e201

此时,程序为死循环,在该终端中无法继续输入命令执行,于是,我们可以暂时不管这一个终端,而是再新建一个终端,然后键入 ps –e,列出当前所有进程

观察屏幕,是否有两个名为e201的进程。比较它们的进程号,判别哪个是父进程,哪个是子进程。

程序中的while(1);语句是为了不让程序退出来,以便于你观察进程状态。用kill命令把这两个进程终止。可见,第一个终端如下图所示,已经从死循环中解救出来了。

当然,最简单粗暴的方法不是关闭相关进程,而是直接通过ctrl+c 强制结束。

对图2.1的程序稍加改进,可看见两个进程的进程号。

(2)编写一段名为e202.c的源程序,使用系统调用fork()创建两个子进程p1和p2。p1的功能为显示字符'b',p2的功能为显示字符'c',父进程的功能为显示字符'a',父进程和两个子进程并发运行。不停的运行e202,观察并记录屏幕上的显示结果。

程序设计过程:

用while语句控制fork()直到创建成功。用if语句判别是在子进程中还是在父进程中。程序运行后会创建三个进程,它们分别是子进程p1、p2、父进程。这三个进程并发运行。假定子进程有些任务要做,完成这些任务要花一定时间,因此,可以用一个延时函数简单地模拟这些任务。

//e202.c

#include

void delay(int x) /* 延时函数 */

{

int i,j;

for(i=0;i

for(j=0;j

}

int main()

{

int p1,p2;

while((p1=fork())==-1); /* 创建子进程p1 */

if(p1==0) /* 子进程p1创建成功 */

{

delay(4096); /* 子进程p1延时*/

putchar('b'); /* 子进程p1显示字符'b' */

}else{

while((p2=fork())==-1); /* 创建子进程p2 */

if(p2==0) /* 子进程p2创建成功 */

{

delay(2048); /* 子进程

p2延时*/

putchar('c'); /* 子进程p2显示字符'c' */

}else{

putchar('a'); /* 父进程显示字符'a' */

}

}

return 0;

}

按向上的光标键、回车,运行刚才的程序。快速重复这个步骤,观察并记录结果。

请回答问题:屏幕上是否有时显示bac,有时显示bca,…。为什么会这样呢?

(3) 参考(1)完成下列程序设计

父子进程同步实验:编写一段程序, 使用系统调用fork()创建一个子进程,子进程求1+2+……+100的和并打印出来,使用系统调用wait()让父进程等待子进程结束。

请贴出源代码截图:

请贴出正确运行截图:

(4) 已知下列Linux程序执行后, 运行结果如下,请画出进程家族树(以进程号标示进程,注意,每次运行进程号都不一样)。

//Linux程序

#include "stdio.h"

#include "unistd.h"

int main()

{

int p1,p2,p3;

p1=fork();

p2=fork();

p3=fork();

//注:getpid()获取当前进程pid

if(p1>0 && p2>0 && p3>0) printf("A:%d\n",getpid());

if(p1==0 && p2>0 && p3>0) printf("B:%d\n",getpid());

if(p1==0 && p2==0 && p3>0) printf("C:%d\n",getpid());

if(p1==0 && p2==0 && p3==0)printf("D:%d\n",getpid());

if(p1==0 && p2>0 && p3==0) printf("E:%d\n",getpid());

if(p1>0 && p2==0 && p3>0) printf("F:%d\n",getpid());

if(p1>0 && p2==0 && p3==0) printf("G:%d\n",getpid());

if(p1>0 && p2>0 && p3==0) printf("H:%d\n",getpid());

sleep(10);

return 0;

}

这些进程构成的进程树为(要画出进程树才有加分哦!):

ps f 命令可以查看当前终端进程的进程数关系图

8. 心得体会

附录pstree的用法

格式:pstree

以树状图显示进程,只显示进程的名字,且相同进程合并显示。

格式:pstree -p

以树状图显示进程,还显示进程PID。

格式:pstree

格式:pstree -p

以树状图显示进程PID为的进程以及子孙进程,如果有-p参数则同时显示每个进程的PID。

附录 Linux系统调用列表

以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数。其中有一些函数的作用完全相同,只是参数不同。(有点像C++函数重载,但是Linux核心是用C语言写的,所以只能取成不同的函数名)。还有一些函数已经过时,被新的更好的函数所代替了(gcc在链接这些函数时会发出警告),但因为兼容的原因还保留着,这些函数在前面标上“*”号以示区别。

各系统调用的使用方法,可以通过man命令获得。

一、进程控制:

fork 创建一个新进程

clone 按指定条件创建子进程

execve 运行可执行文件

exit 中止进程

_exit 立即中止当前进程

getdtablesize 进程所能打开的最大文件数

getpgid 获取指定进程组标识号

setpgid 设置指定进程组标志号

getpgrp 获取当前进程组标识号

setpgrp 设置当前进程组标志号

getpid 获取进程标识号

getppid 获取父进程标识号

getpriority 获取调度优先级

setpriority 设置调度优先级

modify_ldt 读写进程的本地描述表

nanosleep 使进程睡眠指定的时间

nice 改变分时进程的优先级

pause 挂起进程,等待信号

personality 设置进程运行域

prctl 对进程进行特定操作

ptrace 进程跟踪

sched_get_priority_max 取得静态优先级的上限

sched_get_priority_min 取得静态优先级的下限

sched_getparam 取得进程的调度参数

sched_getscheduler 取得指定进程的调度策略

sched_rr_get_interval 取得按RR算法调度的实时进程的时间片长度

sched_setparam 设置进程的调度参数

sched_setscheduler 设置指定进程的调度策略和参数

sched_yield 进程主动让出处理器,并将自己等候调度队列队尾

vfork 创建一个子进程,以供执行新程序,常与execve等同时使用wait 等待子进程终止

wait3 参见wait

waitpid 等待指定子进程终止

wait4 参见waitpid

capget 获取进程权限

capset 设置进程权限

getsid 获取会晤标识号

setsid 设置会晤标识号

二、文件系统控制

1

fcntl 文件控制

open 打开文件

creat 创建新文件

close 关闭文件描述字

read 读文件

write 写文件

readv 从文件读入数据到缓冲数组中

writev 将缓冲数组里的数据写入文件

pread 对文件随机读

pwrite 对文件随机写

lseek 移动文件指针

_llseek 在64位地址空间里移动文件指针

dup 复制已打开的文件描述字

dup2 按指定条件复制文件描述字

flock 文件加/解锁

poll I/O多路转换

truncate 截断文件

ftruncate 参见truncate

umask 设置文件权限掩码

fsync 把文件在内存中的部分写回磁盘

2

access 确定文件的可存取性

chdir 改变当前工作目录

fchdir 参见chdir

chmod 改变文件方式

fchmod 参见chmod

chown 改变文件的属主或用户组

fchown 参见chown

lchown 参见chown

chroot 改变根目录

stat 取文件状态信息

lstat 参见stat

fstat 参见stat

statfs 取文件系统信息

fstatfs 参见statfs

readdir 读取目录项

getdents 读取目录项

mkdir 创建目录

mknod 创建索引结点

rmdir 删除目录

rename 文件改名

link 创建链接

symlink 创建符号链接

unlink 删除链接

readlink 读符号链接的值

mount 安装文件系统

umount 卸下文件系统

ustat 取文件系统信息

utime 改变文件的访问修改时间

utimes 参见utime

quotactl 控制磁盘配额

三、系统控制

ioctl I/O总控制函数

_sysctl 读/写系统参数

acct 启用或禁止进程记账

getrlimit 获取系统资源上限

setrlimit 设置系统资源上限

getrusage 获取系统资源使用情况

uselib 选择要使用的二进制函数库

ioperm 设置端口I/O权限

iopl 改变进程I/O权限级别

outb 低级端口操作

reboot 重新启动

swapon 打开交换文件和设备

swapoff 关闭交换文件和设备

bdflush 控制bdflush守护进程

sysfs 取核心支持的文件系统类型

sysinfo 取得系统信息

adjtimex 调整系统时钟

alarm 设置进程的闹钟

getitimer 获取计时器值

setitimer 设置计时器值

gettimeofday 取时间和时区

settimeofday 设置时间和时区

stime 设置系统日期和时间

time 取得系统时间

times 取进程运行时间

uname 获取当前UNIX系统的名称、版本和主机等信息vhangup 挂起当前终端

nfsservctl 对NFS守护进程进行控制

vm86 进入模拟8086模式

create_module 创建可装载的模块项

delete_module 删除可装载的模块项

init_module 初始化模块

query_module 查询模块信息

*get_kernel_syms 取得核心符号,已被query_module代替

四、内存管理

brk 改变数据段空间的分配

sbrk 参见brk

mlock 内存页面加锁

munlock 内存页面解锁

mlockall 调用进程所有内存页面加锁

munlockall 调用进程所有内存页面解锁

mmap 映射虚拟内存页

munmap 去除内存页映射

mremap 重新映射虚拟内存地址

msync 将映射内存中的数据写回磁盘mprotect 设置内存映像保护

getpagesize 获取页面大小

sync 将内存缓冲区数据写回硬盘

cacheflush 将指定缓冲区中的内容写回磁盘

五、网络管理

getdomainname 取域名

setdomainname 设置域名

gethostid 获取主机标识号

sethostid 设置主机标识号

gethostname 获取本主机名称

sethostname 设置主机名称

六、socket控制

socketcall socket系统调用

socket 建立socket

bind 绑定socket到端口

connect 连接远程主机

accept 响应socket连接请求

send 通过socket发送信息

sendto 发送UDP信息

sendmsg 参见send

recv 通过socket接收信息

recvfrom 接收UDP信息

recvmsg 参见recv

listen 监听socket端口

select 对多路同步I/O进行轮询

shutdown 关闭socket上的连接

getsockname 取得本地socket名字

getpeername 获取通信对方的socket名字getsockopt 取端口设置

setsockopt 设置端口参数

sendfile 在文件或端口间传输数据

socketpair 创建一对已联接的无名socket

七、用户管理

getuid 获取用户标识号

setuid 设置用户标志号

getgid 获取组标识号

setgid 设置组标志号

getegid 获取有效组标识号

setegid 设置有效组标识号

geteuid 获取有效用户标识号

seteuid 设置有效用户标识号

setregid 分别设置真实和有效的的组标识号

setreuid 分别设置真实和有效的用户标识号

getresgid 分别获取真实的,有效的和保存过的组标识号

setresgid 分别设置真实的,有效的和保存过的组标识号

getresuid 分别获取真实的,有效的和保存过的用户标识号

setresuid 分别设置真实的,有效的和保存过的用户标识号

setfsgid 设置文件系统检查时使用的组标识号

setfsuid 设置文件系统检查时使用的用户标识号

getgroups 获取后补组标志清单

setgroups 设置后补组标志清单

八、进程间通信

ipc 进程间通信总控制调用

1

sigaction 设置对指定信号的处理方法

sigprocmask 根据参数对信号集中的信号执行阻塞/解除阻塞等操作

sigpending 为指定的被阻塞信号设置队列

sigsuspend 挂起进程等待特定信号

signal 参见signal

kill 向进程或进程组发信号

*sigblock 向被阻塞信号掩码中添加信号,已被sigprocmask代替

*siggetmask 取得现有阻塞信号掩码,已被sigprocmask代替

*sigsetmask 用给定信号掩码替换现有阻塞信号掩码,已被sigprocmask代替*sigmask 将给定的信号转化为掩码,已被sigprocmask代替

*sigpause 作用同sigsuspend,已被sigsuspend代替

sigvec 为兼容BSD而设的信号处理函数,作用类似sigaction

ssetmask ANSI C的信号处理函数,作用类似sigaction

2

msgctl 消息控制操作

msgget 获取消息队列

msgsnd 发消息

msgrcv 取消息

操作系统课程设计并发进程的模拟

课程设计说明书题目: 并发进程的模拟 院系:计算机科学与工程 专业班级: 学号: 学生姓名: 指导教师: 2014年 11月 12 日

安徽理工大学课程设计(论文)任务书 2014年11月21日

安徽理工大学课程设计(论文)成绩评定表 I

目录 1问题描述 0 2需求分析 0 3概要设计 (1) 1. P操作 (1) 2. V操作 (2) 3. P,V操作实现进程同步 (3) 4. 功能模块设计 (4) 4详细设计 (6) 1.主界面的设计程序 (6) 2.进程Pa的执行 (7) 3.进程Pb的执行 (8) 4.进程Pc的执行 (8) 5.按钮的执行 (9) 5 调试的分析与运行结果 (10) 6 设计体会 (12) 参考文献 (13)

1问题描述 在进程并发执行的过程中,进程之间存在协作的关系,例如,有互斥、同步的关系。该课程设计的是了解进程同步的概念,理解信号量机制的原理,掌握运用信号量解决进程并发控制问题的方法,进而学会运用进程的同步,利用信号灯的P,V操作实现三个进程的同步。这三个进程的同步关系如下: 从上图中可以看出:任务启动后pa先执行,当它结束后,pb、pc可以开始执行,pb、pc 都执行完毕后,任务终止;设两个同步信号灯sb、sc分别表示进程pb和pc能否开始执行,其初值均为0。 在现代操作系统中,有大量的并发进程在活动,它们都处在不断的申请资源,使用资源以及其它进程的相互制约的活动中,这些进程什么时候停止运行,什么时候该继续向前推进,应根据事先的约定来规范它们的行为,这时我们可以根据同步信号灯来实现进程的同步协调工作。例如本题中,只有pa进程顺利的进行完,Pb,Pc这两个进程才能正常的进行。如果进程Pa在进行中出现停止或中断,则Pb和Pc是不会顺利的完成的;而进程Pb,Pc这两个进程是并行执行的,两个进程的进行是互不干扰的,只要进程Pa完成后,进程Pb和Pc才会正常执行,否则只有处在等待就绪中。 2需求分析 进程执行的并发性的意义是关于一组进程的执行在是时间上是重叠的,从宏观上看,并发性反应的是一个时间段中几个进程都在同一个处理器上,处于运行还未运行结束状态。从微观上看,任何一个时刻仅有一个进程在处理器上运行。并发的实质是一个处理器在几个进程之间的多路复用,并发是对有限的物理资源强制行驶多用户共享,消除计算机部件之间的乎等现象,以提高系统资源利用率。

惠州学院操作系统进程的创建与并发执行实验(精编文档).doc

【最新整理,下载后即可编辑】 实验一进程的创建与并发执行 一、实验目的: (1) 熟悉Linux工作环境、文本编辑器工具和GCC工具 (2) 加深对进程概念的理解,明确进程和程序的区别 (3) 进一步认识并发进程的实质和特征 二、实验仪器及材料: 微型计算机、Linux系统 三、实验内容: 1、任务1:进程创建 编写一段程序,让父进程产生两个子进程,父进程显示字符“a”、两个子进程,分别显示字符“b”、“c”。 任务2:将上述的输出字符改为输出较长的字符串,观察进程并发执行,分析执行结果。 2、源代码: 任务1: #include main(){ int p1, p2; while ((p1=fork())==-1); /*父进程创建第一个进程,直到成功*/ if (p1==0) /*0返回给子进程1*/ printf(“b\n”); /*P1的处理过程*/ else/*正数返回给父进程(子进程号)*/ { while ((p2=fork())==-1); /*父进程创建第二个进程,直到成功*/ if (p2==0) /* 0返回给子进程2*/ printf(“c\n”); /*P2的处理过程*/ else printf(“a\n”); /*P2创建完成后,父进程的处理过程*/

} } 任务2: #include main(){ int p1, p2; while ((p1=fork())==-1); /*父进程创建第一个进程,直到成功*/ if(p1==0) while (1) printf(“A ”) else { while ((p2=fork())==-1); /*父进程创建第二个进程,直到成功*/ if (p2==0) while (1) printf(“B ”) else /*P2创建完成后,父进程的处理过程*/ while (1) printf(“P ”); } } 四、实验结果记录: 任务1:

第2章 进程管理练习答案演示教学

第2章进程管理 练习答案

第二章进程管理 一、单项选择题 1、在单一处理机上执行程序,多道程序的执行是在(B)进行的。 A.同一时刻 B. 同一时间间隔内 C.某一固定时刻 D. 某一固定时间间隔内 2、引入多道程序技术后,处理机的利用率( C)。 A.降低了 B. 有所改善 C.大大提高 D. 没有变化,只是程序的执行方便了 3、顺序程序和并发程序的执行相比,( C)。 A.基本相同 C.并发程序执行总体上执行时间快 B. 有点不同 D.顺序程序执行总体上执行时间快 4、单一处理机上,将执行时间有重叠的几个程序称为(C )。 A.顺序程序 B. 多道程序 C.并发程序 D. 并行程序 5、进程和程序的本质区别是(D )。 A.存储在内存和外存 B.顺序和非顺序执行机器指令 C.分时使用和独占使用计算机资源 D.动态和静态特征 6、进程就是程序在并发环境中的执行过程,它是系统进行资源分配和调度的一个基本单位。进程具有[1A]、[2D]、调度性、异步性和结构性等基本特征。进程是一次执行过程,具有生命期体现了进程的[1]特征。进程由程序段、[3B]、[4C]组成,其中[4]是进程在系统中存在的唯一标识。 供选择的答案: [1][2] :A、动态性 B、静态性 C、共行性 D、并发性 E、可执行性 F、易用性 [3] :A、过程 B、数据 C、进程标识符 D、函数

[4] :A、FCB B、FIFO C、PCB D、JCB 7、进程执行时的间断性,决定了进程可能具有多种状态。进程的基本状态有三种,在分时系统中,当一个进程拥有的时间片到时,则该进程即由[1D]进入[2A]。如果出现因某种原因使得处理机空闲时,则需要从就绪队列中选择一进程,并将处理机分配给它,此时该进程进入[3D],这个过程是由[4C]来完成。供选择的答案:[1][2][3] :A、就绪状态 B、静止状态 C、阻塞状态 D、运行状态 [4] :A、进程控制程序B、资源分配程序C、进程调度程序 D、处理机分配程序 8、为描述进程的动态变化过程,采用了一个与进程相联系的(C ),根据它而感知进程的存在。 A.进程状态字 B. 进程优先数 C.进程控制块 D. 进程起始地址 9、下列进程状态的转换中,哪一个是不正确的( C)。 A. 就绪->运行 B. 运行->就绪 C. 就绪->阻塞 D. 阻塞->就绪 10、下列各项步骤中,哪一个不是创建进程所必须的步骤( B)。 A. 建立一个进程控制块PCB B. 由CPU调度程序为进程调度CPU C. 为进程分配内存等必要的资源 D. 将PCB链入进程就绪队列 11、在下列特性中,哪一个不是进程的特性( C)。 A. 异步性 B. 并发性 C. 静态性 D. 动态性 12、在单处理机系统中,处于运行状态的进程(A )。 A.只有一个 B. 可以有多个 C.不能被挂起 D. 必须在执行完后才能被撤下 13、如果某一进程在运行时,因某种原因暂停,此时将脱离运行状态,而进入( C) A.自由状态 B. 停止状态 C.阻塞状态 D. 静止状态

第3章 进程同步与通信 练习题答案

第3章进程同步与通信练习题 (一)单项选择题 1.临界区是指( )。 A.并发进程中用于实现进程互斥的程序段 B.并发进程中用于实现进程同步的程序段 C.并发进程中用户实现进程通信的程序段 D.并发进程中与共享变量有关的程序段 2.相关临界区是指( )。 A.一个独占资源 B.并发进程中与共享变量有关的程序段 c.一个共享资源 D.并发进程中涉及相同变量的那些程序段 3.管理若干进程共享某一资源的相关临界区应满足三个要求,其中( )不考虑。 A一个进程可以抢占己分配给另一进程的资源 B.任何进程不应该无限地逗留在它的临界区中c.一次最多让一个进程在临界区执行 D.不能强迫一个进程无限地等待进入它的临界区4、( )是只能由P和v操作所改变的整型变量。 A共享变量 B.锁 c整型信号量 D.记录型信号量 5.对于整型信号量,在执行一次P操作时,信号量的值应( )。 A.不变 B.加1 C减1 D.减指定数值 6.在执行v操作时,当信号量的值( )时,应释放一个等待该信号量的进程。 A>0 B.<0 c.>=0 D.<=0 7.Pv操作必须在屏蔽中断下执行,这种不可变中断的过程称为( )。 A初始化程序 B.原语 c.子程序 D控制模块 8.进程间的互斥与同步分别表示了各进程间的( )。 A.竞争与协作 B.相互独立与相互制约 c.不同状态 D.动态性与并发性 9并发进程在访问共享资源时的基本关系为( )。 A.相互独立与有交往的 B.互斥与同步 c并行执行与资源共享 D信息传递与信息缓冲 10.在进程通信中,( )常用信件交换信息。 A.低级通信 B.高级通信 c.消息通信 D.管道通信 11.在间接通信时,用send(N,M)原语发送信件,其中N表示( )。 A.发送信件的进程名 B.接收信件的进程名 C信箱名 D.信件内容 12.下列对线程的描述中,( )是错误的。 A不同的线程可执行相同的程序 B.线程是资源分配单位 c.线程是调度和执行单位 D.同一 进程中的线程可共享该进程的主存空间 13.实现进程互斥时,用( )对应,对同一个信号量调用Pv操作实现互斥。 A.一个信号量与一个临界区 B.一个信号量与—个相关临界区 c.一个信号量与一组相关临界 区 D一个信号量与一个消息 14.实现进程同步时,每一个消息与一个信号量对应,进程( )可把不同的消息发送出去。 A.在同一信号量上调用P操作 B在不同信号量上调用P操作 c.在同一信号量上调用v操作D.在不同信号量上调用v操作 (二)填空题 1.目前使用的计算机的基本特点是处理器______执行指令。 2.进程的______是指进程在顺序处理器上的执行是按顺序进行的。 3.当一个进程独占处理器顺序执行时,具有______和______两个特性。 4.进程的封闭性是指进程的执行结果只取决于______,不受外界影响。 5 进程的可再现性是指当进程再次重复执行时,必定获得______的结果。 6.一个进程的工作在没有全部完成之前,另一个进程就可以开始工作,则称这些进程为______.

第三章进程管理课后习题答案

进程管理习题 1现代操作系统中为什么要引入“进程”概念? 它与程序有什么区别? 答:之所以要引入进程的概念,是因为在一些可以并发的程序段之间,存在着某种相互制约的关系,每个程序段的执行不仅要受到其它程序执行的制约,而且还要动态地依赖系统资源的分配情况,因此每个可以并发执行的程序段就会因外界条件的限制而不能运行,被迫处于阻塞状态。仅用程序的概念无法表示程序的走走停停以及程序运行过程中对资源的竞争现象,因此需要采用一种动态的概念描述并发程序这种走走停停的现象,这就产生了进程的概念。 进程和程序的区别: (1)进程是程序的执行过程,是动态的过程,属于一种动态概念。程序是一组有序静态指令和数据的集合,用来指示处理机的操作,是一种静态概念。 (2)从结构上看,每个进程实体是由程序段和相应的数据段两部分构成,并且进程结构中还要包含PCB,即进程控制块。 (3)一个进程可以涉及到一个或几个程序的执行;反之,同一程序可以对应多个进程,即同一个程序段可以在不同数据集合上运行,可以构成不同的进 程。 (4)进程能真实地描述并发执行的过程,而程序仅仅是静态指令堆积的序列。 (5)进程有可创建其他进程的功能,而一般的程序不具有创建其它程序的功能。 (6)每一个程序都是在一个进程现场中运行的。 2叙述进程的并发性和制约性。 答:并发性是进程的重要特征。即多道程序中多个进程同时向前推进的过程,没个进程总是与其它进程并发地执行的。进程的制约性是指一个进程的运行受到另一进程的制约。比如有的进程可能正在等待另一进程的计算结果而无法运行,或者进程所需的资源被别的进程占有而无法运行。 3进程的含义是什么? 如何构造和描述进程? 答:进程是程序的一次执行。进程由“进程控制块+程序+数据”构成,用进程控制块描述进程。 4有三个并发进程,R负责从输入设备读入信息并传送给M,M将信息加工并传送给P,P将打印输出,写出下列条件下的并发程序。 (1) 双缓冲区,每个区大小为K。 (2) 单缓冲区,其大小为K。 答: (1)双缓冲区,每个区大小为K,信号量初值如下: mutexR=mutexP=1; emptyR=emptyP=k; fullR= fullP=0; 变量的初值如下: inR=outR=inP=outP=0; 用类Pascal编写程序如下:

进程的创建与并发执行-带答案版..

实验二进程管理 2.1 进程的创建与并发执行 1.实验目的 (1) 加深对进程概念的理解,理解进程和程序的区别。 (2) 认识并发进程的实质。分析进程争用资源的现象,学习解决进程互斥的方法。 (3) 理解系统调用和用户命令的区别。 2.实验类型:验证型 3.实验学时:2 4.实验原理和知识点 (1) 实验原理:程序的并发执行具有随机性和不可再现性。程序并发执行会导致资源共享和资源竞争,各程序向前执行的速度会受资源共享的制约。程序的动态执行过程用进程这个概念来描述。由于向前推进的速度不可预知,所以多个进程并发地重复执行,整体上得到的结果可能不同。但要注意,就其中某单个进程而言,其多次运行结果是确定的。 (2) 知识点:进程、子进程、并发执行的特性; 5.实验环境(硬件环境、软件环境): (1)硬件环境:Intel Pentium III 以上CPU,128MB以上内存,2GB以上硬盘 (2)软件环境:linux操作系统。 6. 预备知识 (1) fork()系统调用 头文件:#include unix standard header /*是POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数、write函数和getpid函数*/ 函数原型: pid_t fork(void); /*是Linux下的进程号类型,也就是Process ID _ Type 的缩写。其实是宏定义的unsigned int类型*/ 函数功能:fork的功能是创建子进程。调用fork的进程称为父进程。如图2.1所示。子进程是父进程的一个拷贝,它继承了父进程的用户代码、组代码、环境变量、已打开的文件代码、工作目录及资源限制。fork语句执行后,内核向父进程返回子进程的进程号,向子进程返回0。父子进程都从fork()的下一句开始并发执行。 返回值: 返回值==-1:创建失败。 返回值==0:程序在子进程中。 返回值>0:程序在父进程中。(该返回值是子进程的进程号) 编程提示:虽然子进程是父进程的一个复制品,但父子的行为是不同的。编程时要抓住内核的返回值。通过返回值,可以知道是父进程还是子进程,因而可以编写不同行为的代码。

高并发多个进程写入到一个文件

时,它就可以放心大胆的对文件进行锁定,独自享用。所以一般的方案会是: $fp = fopen ( "/tmp/lock.txt", "w+" );

fwrite ( $fp, "Write something here\n" ); flock ( $fp, LOCK_UN ); } else { echo "Couldn't lock the file !"; } fclose ( $fp ); 但在PHP中,flock似乎工作的不是那么好!在多并发情况下,似乎是经常独占资源,不即时释放,或者是根本不释放,造成死锁,从而使服务器的cpu占用很高,甚至有时候会让服务器彻底死掉。好像在很多linux/unix系统中,都会有这样的情况发生。所以使用flock 之前,一定要慎重考虑。那么就没有解决方案了吗?其实也不是这样的。如果flock()我们使用得当,完全可能解决死锁的问题。当然如果不考虑使用flock()函数,也同样会有很好的解决方案来解决我们的问题。经过我个人的搜集和总结,大致归纳了解决方案有如下几种。方案一:对文件进行加锁时,设置一个超时时间. if ($fp = fopen ( $fileName, 'a' )) { $startTime = microtime (); do { $canWrite = flock ( $fp, LOCK_EX ); if (! $canWrite) usleep ( round ( rand ( 0, 100 ) * 1000 ) ); } while ( (! $canWrite) && ((microtime () - $startTime) < 1000) ); if ($canWrite) { fwrite ( $fp, $dataToSave ); } fclose ( $fp ); } 超时设置为1ms,如果这里时间内没有获得锁,就反复获得,直接获得到对文件操作权为止,当然。如果超时限制已到,就必需马上退出,让出锁让其它进程来进行操作。 方案二:不使用flock函数,借用临时文件来解决读写冲突的问题。 大致原理如下: 1。将需要更新的文件考虑一份到我们的临时文件目录,将文件最后修改时间保存到一个变量,并为这个临时文件取一个随机的,不容易重复的文件名。 2。当对这个临时文件进行更新后,再检测原文件的最后更新时间和先前所保存的时间是否一致。 3。如果最后一次修改时间一致,就将所修改的临时文件重命名到原文件,为了确保文件状态同步更新,所以需要清除一下文件状态。 4。但是,如果最后一次修改时间和先前所保存的一致,这说明在这期间,原文件已经被修改过,这时,需要把临时文件删除,然后返回false,说明文件这时有其它进程在进行操作。大致实现代码如下: $dir_fileopen = "tmp"; function randomid() {

第三章进程同步与通信作业习题与答案

第三章 一.选择题(50题) 1.以下_B__操作系统中的技术是用来解决进程同步的。 A.管道 B.管程 C.通道 D.DMA 2.以下_B__不是操作系统的进程通信手段。 A.管道 B.原语 C.套接字 D.文件映射 3.如果有3个进程共享同一程序段,而且每次最多允许两个进程进入该程序段,则信号量的初值应设置为_B__。 A.3 B.2 C.1 D.0 4.设有4个进程共享一个资源,如果每次只允许一个进程使用该资源,则用P、V操作管理时信号量S的可能取值是_C__。 A.3,2,1,0,-1 B.2,1,0,-1,-2 C. 1,0,-1,-2,-3 D.4,3, 2,1,0 5.下面有关进程的描述,是正确的__A__。 A.进程执行的相对速度不能由进程自己来控制 B.进程利用信号量的P、V 操作可以交换大量的信息 C.并发进程在访问共享资源时,不可能出现与时间有关的错误 D.P、V操作不是原语操作 6.信号灯可以用来实现进程之间的_B__。 A.调度 B.同步与互斥 C.同步 D.互斥 7.对于两个并发进程都想进入临界区,设互斥信号量为S,若某时S=0,表示_B__。 A.没有进程进入临界区 B.有1个进程进入了临界区 C. 有2个进程进入了临界区 D. 有1个进程进入了临界区并且另一个进程正等待进入 8. 信箱通信是一种_B__方式 A.直接通信 B.间接通信 C.低级通信 D.信号量

9.以下关于临界区的说法,是正确的_C__。 A.对于临界区,最重要的是判断哪个进程先进入 B.若进程A已进入临界区,而进程B的优先级高于进程A,则进程B可以 打断进程A而自己进入临界区 C. 信号量的初值非负,在其上只能做PV操作 D.两个互斥进程在临界区内,对共享变量的操作是相同的 10. 并发是指_C__。 A.可平行执行的进程 B.可先后执行的进程 C.可同时执行的进程 D.不可中断的进程 11. 临界区是_C__。 A.一个缓冲区 B.一段数据区 C.一段程序 D.栈 12.进程在处理机上执行,它们的关系是_C__。 A.进程之间无关,系统是封闭的 B.进程之间相互依赖相互制约 C.进程之间可能有关,也可能无关 D.以上都不对 13. 在消息缓冲通信中,消息队列是一种__A__资源。 A.临界 B.共享 C.永久 D.可剥夺 14. 以下关于P、V操作的描述正确的是__D_。 A.机器指令 B. 系统调用 C.高级通信原语 D.低级通信原语 15.当对信号量进行V源语操作之后,_C__。 A.当S<0,进程继续执行 B.当S>0,要唤醒 一个就绪进程 C. 当S<= 0,要唤醒一个阻塞进程 D. 当S<=0,要唤醒 一个就绪 16.对临界区的正确论述是__D_。 A.临界区是指进程中用于实现进程互斥的那段代码 B. 临界区是指进程中用于实现进程同步的那段代码 C. 临界区是指进程中用于实现进程通信的那段代码 D. 临界区是指进程中访问临界资源的那段代码

最新Linux多进程并发执行实验

一、实验目的 1 2 1、对理论课中学习的进程、程序等的概念作进一步的理解,明确进程和程序3 的区别; 2、加深理解进程并发执行的概念,认识多进程并发执行的实质; 4 5 3、观察进程争夺资源的现象,分析其过程和原因,学习解决进程互斥的方法;6 4、对经典的多用户、多任务的优先级轮转调度系统Linux有一定的了解; 7 5、了解Linux系统中多进程之间通过管道通信的基本原理和应用方法。 8 9 二、实验内容 10 1、用virtual虚拟机运行linux虚拟系统; 11 2、分析并理解源程序; 12 3、在linux中输入相应程序并观察运行结果。 13 14 三、实验原理 15 (一)多进程并发执行是使用后台任务来实现任务的“多进程化”。在不加控16 制的模式下,不管有多少任务,全部都后台执行。也就是说,在这种情况下,有17 多少任务就有多少“进程”在同时执行。 18 (二)实验中要用到的函数 19 1、fork()函数——进程创建函数。

2、getpid()函数——取得目前进程的进程标识码。 20 21 3、exit()函数——用来正常终结目前进程的执行。 22 4、sleep()函数——用来延时,它会被挂起,把处理器让给其他的进程。 23 5、printf()函数——是格式化输出函数, 一般用于向标准输出设备按规24 定格式输出信息。 25 (三)实验中要用的命令 1、cd 命令: 26 27 功能:改变工作目录。 28 语法:cd [directory] 说明:该命令将当前目录改变至directory所指定的目录。若没有指定 29 30 directory,则回到用户的主目录。为了改变到指定目录,用户必须拥有对指定31 目录的执行和读权限。该命令可以使用通配符。 32 2、mkdir命令: 33 功能:创建一个目录(类似MSDOS下的md命令)。 34 语法:mkdir [选项] dir-name 35 说明:该命令创建由dir-name命名的目录。要求创建目录的用户在当前目录36 中(dir-name的父目录中)具有写权限,并且dirname不能是当前目录中已有37 的目录或文件名称。 38 3、ls 命令: 功能:ls是英文单词list的简写,其功能为列出目录的内容。这是用户最常 39 40 用的一个命令之一,因为用户需要不时地查看某个目录的内容。该命令类似于

自考_操作系统概论真题第6章 并发进程

一、单项选择题 18.并发进程执行的相对速度是( ) A.由进程的程序结构决定的B.由进程自己来控制的 C.在进程被创建时确定的D.与进程调度策略有关 19.并发进程执行时可能会出现“与时间有关的错误”,引起这种错误的原因是( ) A.进程执行的顺序性B.访问了共享变量 C.程序的结构D.需要的处理器时间 20.进程间采用信箱通信方式时,可调用send原语把信件投放到( ) A.发送者信箱B.接受者信箱 C.指定的工作区D.指定的PCB 16、有关并发进程的阐述中,不正确 ...的说法是( ) A、进程的执行速度不能由进程自己来控制 B、进程的执行速度与进程能占用处理器的时间有关 C、进程的执行速度与是否出现中断事件有关 D、任何两个并发进程之间均存在着相互制约关系 17、用V操作唤醒一个等待进程时,被唤醒进程的状态应该是( ) A、运行 B、就绪 C、收容 D、执行 18、系统出现死锁时一定同时保持了四个必要条件,对资源采用按序分配策略后可破坏其 中的( ) A、互斥条件 B、占有且等待条件 C、不可抢占资源条件 D、循环等待条件 19、有n个进程竞争必须互斥使用的共享资源时,若某进程调用P操作后成为第一个等待使 用资源者,则此时信号量的值为( ) A、n-1 B、0 C、1 D、-1 20、有n个进程竞争某共享资源,系统允许每次最多m个进程同时使用该资源,若用PV操 作管理时信号量的变化范围为( ) A、[m,(m+n)] B、[n,(m+n)] C、[(m-n),m] D、[(m-n),n] 18.若进程用信件来传递信息,那么发送信息者的进程名应() A.存放在信件中B.作为send原语的参数 C.作为receive原语的参数D.存放在信箱说明中 19.不能 ..防止死锁的资源分配策略是() A.剥夺式分配方式B.按序分配方式 C.静态分配方式D.互斥使用分配方式 20.系统有某类资源5个,供3个进程共享,为保证系统的安全,应限定每个进程申请的资

计算机操作系统实验-进程与并发执行

重庆交通大学综合性设计性实验报告 班级:计科专业 2010级四班 姓名:叶秀梁 实验项目名称:模拟进程并发执行 实验项目性质:操作系统多任务 实验所属课程:计算机操作系统 实验室(中心):语音大楼 8 楼 801 指导教师:米波 实验完成时间: 2012 年 11 月 4 日

一、实验目的 1、通过实验来模拟进程的并发执行,来深入了解什么事操作系统的进程,以及进程有些什么特性。 2、了解进程间是如何做到并发执行的,进程间是如何做到资源共享的。以及验证进程在运行过程中的进度是随机的,不可控制的。 3、通过实验来了解进程的三种状态以及状态间的转换条件。 4、加深对进程概念的理解; 5、认识进程并发执行的实质 6、分析进程争用资源的现象,学习解决进程互斥的方法。 二、实验内容及要求 用直观的方式模拟进程执行时的过程,显示在屏幕上。 实现一个能够直观反应单个进程执行与多个进程并发执行时由于资源竞争而引起的进程执行速度变化的过程。且进程的初始状态和进度都是随机的,不可控制的。 三、实验设备 PC机1台、JCreator LE开发环境 四、设计方案 ㈠设计主要思想 (1)、每个进程能够随机暂停和开始。

(2)、用Java的多线程来实现。 模拟多线程并发性。通过进度条来表示进程的运行,通过进度条的运行速度来表示程序的运行速度。而要体现多进程并发,所以需要在实验中至少定义两个以上的进程,在实验中定义3个进程并发执行。为了使3个进程的属性和调度方法都是顺利执行,则可以通过三个进程类来分别控制进程对象。 进程的启动时进程的速度是随机性。要模拟这样一个效果,则可以使用一个随机数对象产生一个随机的数来定义进程运行的位置。而某个进程的运行速度也是随机的,由进程获得资源的多少来实现。 ㈡设计的主要步骤 本实验用java语言实现 (1)在Jcreator中新建一个ThreadProcess类,分别建立三个公共 的线程类,Thread1,Thread2,Thread3. (2)在ThreadProcess类的主函数啊中新建三个线程和和窗口。 (3)在主函数产生随机数来控制三条线程的随机调用过程。 (4)在类外分别添加三条进程的控制函数。 能够达到实验的要求效果,程序启动后,进程的运行位置是随机的,每一个进程的运行进度也是随机的,速度可快可慢。而且能够达到系统资源共享的效果,但其中一个或几个进程停止执行时,其它的进程的执行速度会加快。 五、主要代码 //package test; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.Time; import java.util.Calendar; import java.util.Date; import java.util.Random; import javax.security.auth.kerberos.KerberosKey; import javax.swing.*; public class ThreadProcess { public static void main(String[] args) { ThreadFrame thFrame=new ThreadFrame(); thFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

设计一个若干并发进程的进程调度程序

操作系统实验题1:设计一个若干并发进程的进程 调度程序 一、实验目的 二、实验要求 用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 三、实验内容 进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。 每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。 进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间是程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F (Finish)三种状态之一。 就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运

行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查重复以上过程,直到所要进程都完成为止。 四、实验算法流程: 调度算法的流程图如下 :

五、实验程序清单:(参考某资料)#include "stdio.h" #include #include

#define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0 struct pcb { /* 定义进程控制块PCB */ char name[10]; char state; 状态 int super; 优先级 int ntime; 运行时间 int rtime; 已运行时间 struct pcb* link; }*ready=NULL,*p; typedef struct pcb PCB; char sort() /* 建立对进程进行优先级排列函数*/ { PCB *first, *second; int insert=0; if((ready==NULL)||((p->super)>(ready->super))) /*优先级最大者,插入队首*/ { p->link=ready;

进程管理习题及答案

第二章进程管理习题及答案 一、填空题 1.进程的静态描述由三部分组成:① 、② 和③ 。 【答案】①PCB、②程序部分、③相关的数据结构集 【解析】PCB是系统感知进程的唯一实体。进程的程序部分描述了进程所要 完成的功能,而数据结构集是程序在执行时必不可少的工作区和操作对象。后两 部分是进程完成所需功能的物质基础。 2.进程存在的标志是。 【答案】进程控制块PCB 【解析】系统根据PCB感知进程的存在和通过PCB中所包含的各项变量的变化,掌握进程所处的状态以达到控制进程活动的目的。 3.① 是现代操作系统的基本特征之一,为了更好地描述这一特征而 引入了 ② 这一概念。 【答案】①程序的并发执行,②进程 【解析】程序的并发执行和资源共享是现代操行系统的基本特征。程序的并 发执行使程序失去了程序顺序执行时所具有的封闭性和可再现性。在程序并发执 行时,程序这个概念不能反映程序并发执行所具有的特性,所以引入进程概念来 描述程序并发执行所具有的特点。 4.给出用于进程控制的四种常见的原语① 、② 、③ 和④ 。【答案】①创建原语、②撤消原语、③阻塞原语、④唤醒原语 【解析】进程控制是系统使用一些具有特定功能的程序段来创建、撤消进程 以及完成进程各状态间的转换,从而达到多个过程高效率地并行执行和协调,实 现资源共享的目的。把那些在管态下执行的具有特定功能的程序段称为原语。 5.进程被创建后,最初处于① 状态,然后经② 选中后进入③ 状态。 【答案】①就绪,②进程调度程序,③运行 【解析】进程的从无到有,从存在到消亡是由进程创建原语和撤消原语完成的。被创建的进程最初处于就绪状态,即该进程获得了除处理机以外的所有资源,处于准备执行的状态;从就绪状态到运行状态的转换是由进程调度程序来完成的。 6.进程调度的方式通常有① 和② 方式两种。 【答案】①可剥夺、②非剥夺 【解析】所谓可剥夺方式,是指就绪队列中一旦有优先级高于当前运行进程 的优先级的进程存在时,便立即发生进程调度,转让处理机。而非剥夺方式则是指:即使在就绪队列中存在有优先级高于当前运行进程的进程,当前进程仍将继 续占有处理机,直到该进程完成或某种事件发生(如I/O事件)让出处理机。 7.轮转法主要是用于① 的调度算法,它具有较好的② 时间, 且对每个进程来说都具有较好的③ 性。 【答案】①分时系统②响应③公平 【解析】所谓轮转调度算法,就是将CPU的处理时间分成固定的时间片,处 于就绪状态的进程按一定的方式(如先到先服务FCFS)排成一个队列,该队列

操作系统-进程同步习题答案(22)

第二章进程同步 一、选择最合适的答案 1. 用P、V操作管理临界区时,信号量的初值一般应定义为( C )。 A.–1 B.0 C.1 D.任意值 2. 有m个进程共享同一临界资源,若使用信号量机制实现对一临界资源的互斥访问,则信号量的变化范围是( A )。 A.1至–(m-1) B.1至m-1 C.1至–m D.1至m 3. 在下面的叙述中,正确的是( C )。 A.临界资源是非共享资源 B.临界资源是任意共享资源 C.临界资源是互斥共享资源 D.临界资源是同时共享资源 4. 对进程间互斥地使用临界资源,进程可以(D) A.互斥地进入临界区 B.互斥地进入各自的临界区 C.互斥地进入同一临界区 D.互斥地进入各自的同类资源的临界区 5. 设两个进程共用一个临界资源的互斥信号量mutex,当mutex=1时表示( B )。 A.一个进程进入了临界区,另一个进程等待 B.没有一个进程进入临界区 C.两个进程都进入了临界区 D.两个进程都在等待 6. 设两个进程共用一个临界资源的互斥信号量mutex,当mutex=-1时表示( A )。 A.一个进程进入了临界区,另一个进程等待 B.没有一个进程进入临界区 C.两个进程都进入了临界区 D.两个进程都在等待 7.当一进程因在记录型信号量S上执行P(S)操作而被阻塞后,S的值为( B )。 A.>0 B.<0 C.≥0 D.≤0 8.当一进程因在记录型信号量S上执行V(S)操作而导致唤醒另一进程后,S的值为( D )。 A.>0 B.<0 C.≥0 D.≤0 9.如果信号量的当前值为-4,则表示系统中在该信号量上有( A )个进程等待。 A.4 B.3 C.5 D.0 10.若有4个进程共享同一程序段,而且每次最多允许3个进程进入该程序段,则信号量的变化范围是( B )。 A. 3,2,1,0 B. 3,2,1,0,-1 C. 4,3,2,1,0 D. 2,1,0,-1,-2 11.若信号S的初值为2,当前值为-1,则表示有( B )个等待进程? A.0 B.1 C.2 D.3 12.如果有三个进程共享同一互斥段,而且每次最多允许两个进程进入该互斥段,则信号量的初值应设置为( C )。 A. 3 B. 1 C. 2 D. 0 13.并发进程之间( D ) A.彼此无关 B.必须同步 C.必须互斥 D.可能需要同步或互斥

第六章 并发进程

“操作系统概论”习题解答之并发进程 第6章习题解答 1、什么叫并发进程? 答:在多道程序设计系统中,作为单个作业可以同时执行,而每一个作业又需要有多个进程的协作来完成。因此,系统会同时存在着许多进程,在单处理器的情况下,这些进程轮流的占用处理器,即一个进程的工作没有全部完成之前,另一个进程就开始工作,我们说这些可同时执行的进程具有并发性,并且把可同时执行的进程称为“并发进程”。 2、临界区是怎样定义?对临界区的管理应符合哪些要求? 答:并发进程中与共享变量有关的程序段称为“临界区”。对若干个并发进程共享某一变量的相关临界区的管理有三点要求: ①、一次至多一个进程能够进入临界区,当有进程在临界区执行时,其它想进入临界区执行的进程必须等待。 ②、不能让一个进程无限制的在临界区执行,即任何一个进入临界区的进程必须有限的时间内退出临界区。 ③、不能强迫一个进程无限期等待进入它的临界区,即有进程退出临界区时应让一个等待进入临界区的进程进入它的临界区执行。 3、采用PV操作作为同步机制时,假定与某共享变量相关的信号量S的值可在[-1,1]之间,问S的初值是哪个值?当S=-1,S=0,S=l时它们各自的物理含义是什么? 答:S的初值是 1. S=-l,表示有一个进程在等待进入临界区执行。 S=0,表示已有一个进程在临界区执行,这时若有进程想进入临界区则必须等待。 S=l,表示无进程在临界区执行,若有进程想进入临界区则可以立即进入。 4、A、B两个火车站之间是单轨连接的,现有许多列车同时到A站,需经A站到达B站,列车出B站后又可分路行驶(如图6-6)。为保证行车安全,请问应如何调度列车?请用PV 操作作为工具设计一个能实现你的调度方案的自动调度系统。 答:当A、B两站之间无列车停驶时,可让到达A站的一列车进人A、B站之间行驶。 当A、B站之间有列车在行驶时,则到达A站者必须在站外等待。

操作系统实验报告:设计一若干并发进程的进程调度程序

操作系统实验报告 操作系统实验题:设计一若干并发进程的进程调度程序 一、实验目的 无论是批处理系统、分时系统还是实时系统,用户进程数一般都大于处理机数,这将导致用户进程互相争夺处理机。这就要求进程调度程序按一定的策略,动态地把处理及分配给处于就绪队列中的某一进程,以使之执行。进程调度是处理机管理的核心内容。本实验要求采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念。并体会了优先数和先来先服务调度算法的具体实施办法。 二、实验要求 用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 三、实验内容 进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法(将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理)。 每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。 进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。 就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。

北邮-大三-操作系统-进程管理实验报告

实验一进程管理 1.实验目的: (1)加深对进程概念的理解,明确进程和程序的区别; (2)进一步认识并发执行的实质; (3)分析进程争用资源的现象,学习解决进程互斥的方法; (4)了解Linux系统中进程通信的基本原理。 2.实验预备内容 (1)阅读Linux的sched.h源码文件,加深对进程管理概念的理解; (2)阅读Linux的fork()源码文件,分析进程的创建过程。 3.实验内容 (1)进程的创建: 编写一段程序,使用系统调用fork() 创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。 源代码如下: #include #include #include #include #include int main(int argc,char* argv[]) { pid_t pid1,pid2; pid1 = fork(); if(pid1<0){ fprintf(stderr,"childprocess1 failed"); exit(-1); } else if(pid1 == 0){ printf("b\n"); } 1/11

else{ pid2 = fork(); if(pid2<0){ fprintf(stderr,"childprocess1 failed"); exit(-1); } else if(pid2 == 0){ printf("c\n"); } else{ printf("a\n"); sleep(2); exit(0); } } return 0; } 结果如下: 分析原因: pid=fork(); 操作系统创建一个新的进程(子进程),并且在进程表中相应为它建立一个新的表项。新进程和原有进程的可执行程序是同一个程序;上下文和数据,绝大部分就是原进程(父进程)的拷贝,但它们是两个相互独立的进程!因此,这三个进程哪个先执行,哪个后执行,完全取决于操作系统的调度,没有固定的顺序。 (2)进程的控制 修改已经编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。 将父进程的输出改为father process completed 2/11

相关文档
最新文档