学习啦>学习电脑>操作系统>操作系统基础知识>

操作系统临界区调用原则

佳洲分享

  操作系统临界区是一个访问共用资源的程序片段,下面由学习啦小编为大家整理了操作系统临界区调用原则的相关知识,希望对大家有帮助。

  一.临界区调用法则

  进程进入临界区的调度原则是:

  1、如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。

  2、任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。

  3、进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。

  4、如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。

  补充:二.临界区简介

  临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其他线程或是进程必须等待(例如:bounded waiting 等待法),有一些同步的机制必须在临界区段的进入点与离开点实现,以确保这些共用资源是被互斥获得使用,例如:semaphore。只能被单一线程访问的设备,例如:打印机。

  每个进程中访问临界资源的那段代码称为临界区(Critical Section)(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。

  多个进程中涉及到同一个临界资源的临界区称为相关临界区。.

  补充:三.临界区存在的几个问题

  在使用临界区时,一般不允许其运行时间过长,只要进入临界区的线程还没有离开,其他所有试图进入此临界区的线程都会被挂起而进入到等待状态,并会在一定程度上影响程序的运行性能。尤其需要注意的是不要将等待用户输入或是其他一些外界干预的操作包含到临界区。如果进入了临界区却一直没有释放,同样也会引起其他线程的长时间等待。换句话说,在执行了EnterCriticalSection()语句进入临界区后无论发生什么,必须确保与之匹配的LeaveCriticalSection()都能够被执行到。可以通过添加结构化异常处理代码来确保LeaveCriticalSection()语句的执行。虽然临界区同步速度很快,但却只能用来同步本进程内的线程,而不可用来同步多个进程中的线程。

  1、 临界区的退出,不会检测是否是已经进入的线程,也就是说,我可以在A线程中调用进入临界区函数,在B线程调用退出临界区的函数,同样是成功;

  2、 在测试临界区的时候,如果我没有调用进入临界区的函数,直接退出的话,系统没有进行判断,但是计数发现了改变,此时此临界区就再也用不了了,因为结构中的数据已经乱掉了。

    3592965