77范文网 - 专业文章范例文档资料分享平台

操作系统—进程管理

来源:网络收集 时间:2018-12-06 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

实验3:进程管理

【实验目的】

掌握进程的概念,深入理解进程的含义。认识并理解并发环境中进程执行的实质问题,了解构成并发机制的进程创建过程;

了解在进程创建后通过对进程控制的系统调用,可实现对进程的有效控制。掌握在进程执行中对进程进行睡眠、同步、撤消等控制方法;

分析进程竞争资源的现象,学习解决进程互斥的方法。 【实验内容】

1、创建新的进程;查看运行进程;换出某个进程;杀死运行进程。

2、采用写者优先重写P94的读者-写者问题,并通过一个读写序列,将算法与读者优先算法进行比较。

3、P98的53题的上机作业。 【实验原理】

回答以下问题:

1. 简述调用fork创建新进程的过程

Unix系统中,fork属于系统调用,会创建一个与调用相同的副本,在调用了fork之后,这两个进程(父进程和子进程)拥有相同的存储映像,同样的环境字符串和同样的打开文件。通常,子进程接着执行execve或一个类似的系统调用,以修改其存储映像并运行一个新的程序。

2. 简述信号量的作用及使用方法

作用:多进程资源共享时,使用信号量,避免死锁。

使用方法:信号量大于或等于0表示可供并发进程使用的资源实体数;小于0代表正在等待使用临界区的进程数;用于互斥的信号量初始值应该大于0;只能通过P ,V 原语操作而改变。

【实验环境】 硬件环境

单核CPU 软件环境 Ubuntu 【实验过程】

1、创建新的进程:使用fork()函数 查看运行进程&换出某个进程:使用execp换出进程,并且用ls来替换以达到查看进程的效果

杀死运行进程:在父进程后使用kill函数 代码:

1.代码如下

#include #include #include #include int main() {

int pid1,pid2;

printf(\

pid1=fork(); if(pid1 < 0 ) {

printf(\ return 1; }

else if (pid1 == 0 ) {

printf(\ return ; }

int r=kill( pid1, SIGKILL); if( r ) {

printf(\ } else {

printf(\ }

pid2=fork(); if( pid2<0 ) {

printf(\ return 1; }

else if(pid2==0)

1

{

printf(\ return 0 ; }

if(execlp(\ {

printf(\ return 1; } else

printf(\ return ; }

【实验结果】

运行结果如下:

分析:如图,调用了fork()函数后,程序先创建了子进程,然后调用kill函数杀死进程1,再创建进程2,然后调用execp函数切换当前进程为ls命令,列出当前文件。

2.采用写者优先重写P94的读者-写者问题,并通过一个读写序列,将算法与读者优先算法进行比较。 代码如下:

#include \

2

#include #include

#define N_WRITER 2 //写者数目 #define N_READER 10 //读者数目 #define W_SLEEP 10 //控制写频率 #define R_SLEEP 8//控制读频率

pthread_t wid[N_WRITER],rid[N_READER];

const int MAX_RAND = 1000;//产生的最大随机数 int data = 0;

int readerCnt = 0, writerCnt = 0;

pthread_mutex_t accessReaderCnt = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t accessWriterCnt = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t writeLock = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t readerLock = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t outerLock = PTHREAD_MUTEX_INITIALIZER;

void write() {

int rd = rand()%MAX_RAND; printf(\ data = rd; }

void read() {

printf(\ }

void * writer(void * in) {

while(1) {

pthread_mutex_lock(&accessWriterCnt);

{//临界区,希望修改 writerCnt,独占 writerCnt writerCnt++;

if(writerCnt == 1){

//阻止后续的读者加入待读队列 pthread_mutex_lock(&readerLock); }

3

}

pthread_mutex_unlock(&accessWriterCnt);

pthread_mutex_lock(&writeLock);

{//临界区,限制只有一个写者修改数据 write(); }

pthread_mutex_unlock(&writeLock);

pthread_mutex_lock(&accessWriterCnt);

{//临界区,希望修改 writerCnt,独占 writerCnt writerCnt--;

if(writerCnt == 0){

//阻止后续的读者加入待读队列 pthread_mutex_unlock(&readerLock); } }

pthread_mutex_unlock(&accessWriterCnt); sleep(W_SLEEP); }

pthread_exit((void *) 0); }

void * reader (void * in) {

while(1) {

//假如写者锁定了readerLock,那么成千上万的读者被锁在这里 pthread_mutex_lock(&outerLock); {//临界区

pthread_mutex_lock(&readerLock);//只被一个读者占有 {//临界区

pthread_mutex_lock(&accessReaderCnt);//代码段 1 {//临界区

readerCnt++;

if(readerCnt == 1){

pthread_mutex_lock(&writeLock); } }

pthread_mutex_unlock(&accessReaderCnt);

4

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库操作系统—进程管理在线全文阅读。

操作系统—进程管理.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/348304.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: