操作系统课设——linux下基于信号量互斥申请(一)
发布日期:2021-09-29 21:09:47 浏览次数:2 分类:技术文章

本文共 1711 字,大约阅读时间需要 5 分钟。

课设任务

设计内容:

1.创建进程:手动创建几个进程,或者随即创建几个进程,都在界面上完成;要求包括进程的名称(不能重复)、执行时间和申请资源的等待时间等。在此同时刻可能有多个进行在内存申请某资源。 假设创建5个进程

2.类临界资源的管理,包括申请以及分配等。分别通过信号量实现或者管程实现。

3.银行家算法,判断是否可以进行资源的分配。

 

设计要求:

调用相关的Linux系统内核函数

要求在屏幕上输出各进程的创建信息,资源的分配信息,进行执行信息,进行动态申请资源信息等。..

 

课设准备:

1、为什么要进行进程信号量互斥申请?

在多道环境下,计算机系统中存在多个进程,这些进程并非相互隔绝,一方面,他们相互协作以达到运行作业所预期的目的,另一方面他们又相互竞争使用有限的资源,既协作又竞争,这两个要素都意味着进程之间需要某种形式的通信,这主要表现为同步和互斥两个方面。

同步指的是有写作关系的进程之间要不断地调整他们的相对速度,比如说AB进程,A产生数据,B计算结果,AB公用一个缓存区。缓存区为空时,B不能运行,等待A向缓存区传递数据后B才能运行,缓存区满时,A不能运行,等待B取走数据后,A才能运行。此时AB为直接制约(即同步)关系。

互斥多个进程之间要互斥地共享某一资源,也就是说,如果一个进程已经开始使用某个资源且未使用完毕,则别的进程不得使用,若另一个进程想使用则必须等待。

2、那么多个进程如何互斥地共享某一资源(为什么引入进程临界资源)?

假定某一游乐场,用一个计数器count表示在场人数,进入一人时,进程PIN实现计数+1,出去一人时,进程POUT实现计数器-1,由于入场与退场是随机的,因此进程PIN和POUT是并发的,程序如下:

PIN

R1:count;

R1:=R1+1;

count:=R1;

POUT

R2:=count;

R2:=R2-1;

count:=R2;

如果两个进程执行中,由于某种原因使进程PIN打断,且进程调度使他们呈下面次序:

PIN:      R1:count;

             R1:=R1+1;

POUT:  R2:=count;

             R2:=R2-1;

             count:=R2;

PIN:      count:=R1;

按这样的次序执行后,count的最终值不能保持为n,而变成n+1,如果进程被打断的情况如下:

PIN:      R1:count;

             R1:=R1+1;

POUT:  R2:=count;

             R2:=R2-1;

PIN:      count:=R1;

POUT:  count:=R2;

于是,两个进程执行完后,count的最终值为n-1,也就是说两个进程的执行次序对结果是有影响的,就这个例子来说,导致错误的原因有两个:一是共享了变离,二是同时使用了这个变量,也就是说,在一个进程开始使用且尚未结束使用的期间,另一个进程也开始使用了,这种错误通常也叫做“与时间有关的错误”;

为了避免这种错误,理论上有两种办法:一是取消变量、表格等的共享;二是允许共享,但要互斥地使用;前者当前还不可行,而如何互斥的使用这些资源就引入了临界资源和临界区的概念。(这里不进行更多解释)

3、那么,信号量如何实现互斥量申请呢?

一种方法是实施临界区互斥的锁操作法(自行百度),重要的是后面一种方法,P,V操作,需要引入信号量的概念。

信号量是1965年由荷兰人Dijkstra提出的一种卓有成效的进程间同步及互斥工具,有时也叫信号灯,本质上是一个计数器,用于多进程对共享数据对象的读取,它和管道有所不同,它不以传送数据为主要目的,它主要是用来保护共享资源(信号量也属于临界资源),使得资源在一个时刻只有一个进程独享。是一个记录行数据结构,定义如下:

struct Semaphore {    int value;    //信号量的值    int *ptr-of-semque;    //指向队列的指针}S;

信号量的一般结构以及PCB队列如图: 

 

创建或打开信号量以及PV操作:

4、所要求的利用linux内核函数又是什么,这些函数又怎么用?

参考链接:

目前还未找到完整的内核函数介绍的链接,本次课设以这两个链接为参考

 

 

转载地址:https://blog.csdn.net/hou_shiyu/article/details/103847264 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Mario小项目
下一篇:jad反编译

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年03月21日 23时12分07秒