‘壹’ 操作系统中进入临界区的条件是什么
进程进入临界区要满足一定的条件,以保证临界资源的安全使用,系统的正常运行,即对临界区的管理就遵循以下三个原则:(1)当有若干进程要求进入它们的临界区时,应在有限时间内使一进程进入临界区。换句话说,它们不应该相互等待而致使谁都不能进入。(2)每次最多有一个进程处于临界区内。(3)进程在临界区内逗留应在有限时间范围内。
‘贰’ 编程模拟多进程共享临界资源
4、进程间通信可以采用信号、消息传递、管道或网络通信方式。 操作系统课程设计 编程模拟多进程共享 临界资源课程设计. 路过!求经验
‘叁’ 操作系统-进程管理习题
1、每个进程都包刮(进程控制块)、(程序段)和(数据段)3个组成部分。
2、一个程序运行在不同的数据集上就构成了不同的(进程),分别得到不同的结果。
3、进程在执行过程中不同时刻的3中基本状态是(运行状态)、 (就绪状态)和(等待状态)。
4、进程是一个(独立存在)的实体,它有自己的生命周期。它因(创建 )而产生,因(调度 )而运行,因(等待某件事 )而被阻塞(进入等待态),因( 得不到资源)而被撤销。
5、进程在执行过程中状态不断(变化 ),但在某一时刻,进程当且仅当处于3种基本状态之一。
6、进程在运行中申请资源得不到满意,则它从(运行 )态变成(阻塞 )态。
7、处于等待态的进程,其他外围设备工作结束,则它变成(就绪 )态。
8、进程从运行态变成就绪态,主要原因是(时间片到 )和(出现优先级更高的进程进行中断 )。
9、有多个进程等待分配CPU时,系统按一定的(优先级 ),从处于就绪态的进程中选择( 第一)个进程,让他占有CPU,并使它状态变成(运行 )态。
10、进程刚被创建是它的状态是 新建?
11、操作系统依据 (系统内核)对进程进行控制和管理
12、进程有两种基本队列 和
13、时间片是指允许进程一次占用处理器的 。时间片轮转调度算法常用于 (分时)操作系统中。
14、我们把进程中与(临界资源进行操作)有关的程序段称为临界区。
15、任一个进入临界区的进程必须在 有限时间内进入 临界区。
16、PV操作由p操作即申请资源 和v操作即释放一个资源 组成,是对信号量? 进行操作。
17、P操作将信号量的值减1 ,若结果小于0,则该进程置为(阻塞) 状态,V操作将信号量的值加 ,若结果 大于0,则释放一个等待信号量的进程。
18、当并发进程存在竞争关系时必须 地使用资源,当并发进程存在协作关系时必须必须 ,分别称为 和
19、利用信号量实现进程 ,应为临界区设置一个信号量Mutex,初值为1 ,表示该资源尚未使用,临界区应置于 和 原语之间。
20、进程的同步是指并发进程之间的一种协同合作 关系,一个进程的执行依赖另一个进程的 某些操作
,当一个进程没有得到它时应 ,直到被 。
21、形成死锁的起因是 多个进程抢占资源和资源不能被分配各进程都进入等待 。
22、死锁的四个必要条件是 1互斥条件2请求和保持条件3不剥夺条件4循环等待条件 。
23、检测到死锁后可采用 、 或 等办法来解除死锁(破坏4个条件的任意一个即可,可通过不同算法实现)
有的不会填,有的没有把握。。。
‘肆’ 有关利用记录型信号量解决生产者消费者的问题
有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有n个缓冲区的缓冲池,生产者进程将其所生产的产品放入一个缓冲区中;消费者进程可从一个缓冲区中取走产品去消费。尽管所有的生产者进程和消费者进程都是以异步方式运行的,但它们之间必须保持同步,既不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已装满产品且尚未被取走的缓冲区投放产品。
参考代码:
int in = 0, out = 0;//in: 输入指针, out: 输出指针;
item buffer[n];//n个缓冲区组成的数组;
semaphore mutex = 1, full = 0, empty = n;
//mutex: 互斥信号量, 生产者进程和消费者进程都只能互斥访问缓冲区;
//full: 资源信号量, 满缓冲区的数量;
//empty: 资源信号量, 空缓冲区的数量;//信号量不允许直接参与运算, 故都要定义;
//生产者程序;
void Procer() {
do {
生产者生产一个产品nextp;
wait(empty);//申请一个空缓冲区;
wait(mutex);//申请临界资源;
buffer[in] = nextp;//将产品添加到缓冲区;
in = (in + 1) % n;//类似于循环队列;
signal(mutex);//释放临界资源;
signal(full);//释放一个满缓冲区;
} while (TRUE);
}
//消费者程序;
void Procer() {
do {
wait(full);//申请一个满缓冲区;
wait(mutex);//申请临界资源;
nextc = buffer[out];//将产品从缓冲区取出;
out = (out + 1) % n;//类似于循环队列;
signal(mutex);//释放临界资源;
signal(empty);//释放一个空缓冲区;
消费者将一个产品nextc消费;
} while (TRUE);
}
注意:
生产者与消费者进程对资源信号量的申请与释放情况刚好相反(生产者是申请空,释放满;消费者是申请满,释放空)。
应先执行对资源信号量的申请,然后再对互斥信号量进行申请操作,否则会因起死锁(如果先申请互斥信号量再申请资源信号量,则可能发生一个进程申请互斥信号量成功,得到临界资源,再申请资源信号量失败,导致该进程带着临界资源进入阻塞状态,造成死锁)。
‘伍’ C# 多线程临界资源
多线程访问共有的资源在C#中提供了一个lock方法来处理这种问题啊。具体的实现请参考一下msdn文档好了。
追问
lock只提供方法的锁定,没有变量的锁定
既然如此 那就把 a++ 写到一个方法里面 writeline(a) 也写到一个方法里面就OK 了
实际上临界资源 看具体操作了 如果2个线程分别是读跟写 那到没什么必要 但是要是读了以后 判断再操作 就很有必要了
因此把针对变量的操作 放到方法里面去 再用lock实现吧
‘陆’ 什么叫做“临界资源”什么叫“临界区”对临界区的使用应符合哪些规则
临界资源是指每次仅允许一个进程访问的资源。
临界区是指每个进程中访问临界资源的那段代码。
临界区的使用规则①空闲让进②忙则等待③有限等待④让权等待。
‘柒’ 什么是临界区和临界资源对临界区管理的基本原则是什么
1、临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。
当有线程进入临界区段时,其他线程或是进程必须等待,有一些同步的机制必须在临界区段的进入点与离开点实现,以确保这些共用资源是被互斥获得使用。只能被单一线程访问的设备,例如:打印机。
2、临界资源:多道程序系统中存在许多进程,它们共享各种资源,然而有很多资源一次只能供一个进程使用。一次仅允许一个进程使用的资源称为临界资源。许多物理设备都属于临界资源,如输入机、打印机、磁带机等。
3、进程进入临界区的调度原则是:
(1)如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。
(2)进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。
(3)任何时候,处于临界区内的进程不可多于一个。
(4)如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。
(7)申请临界资源的操作是什么扩展阅读
1、临界区存在的问题
临界区的退出,不会检测是否是已经进入的线程,也就是说,可以在A线程中调用进入临界区函数,在B线程调用退出临界区的函数,同样是成功。
临界区内的数据一次只能同时被一个进程使用,当一个进程使用临界区内的数据时,其他需要使用临界区数据的进程进入等待状态。
2、各进程采取互斥的方式,实现共享的资源称作临界资源。
属于临界资源的硬件有打印机、磁带机等,软件有消息缓冲队列、变量、数组、缓冲区等。 诸进程间应采取互斥方式,实现对这种资源的共享。