对或涉及用于计算装置的操作系统的改进的制作方法

文档序号:6655845阅读:2239来源:国知局
专利名称:对或涉及用于计算装置的操作系统的改进的制作方法
技术领域
本发明涉及用于计算装置的操作系统,更具体地,涉及一种为计算装置的操作系统内核提供互斥机制的方法,该方法在可靠性和性能方面具有显著优点。
本文中所使用的术语计算装置应广义理解为覆盖任何形式的电器,其包括数据记录装置(诸如各种形式的数码相机和摄像机)、任何类型或形式的计算机(包括手持和个人计算机)、以及任何形式的通信装置(包括移动电话、智能电话、集通信、图像记录和/或重放、以及计算功能于一体的通信装置、以及其他形式的无线和有线信息装置)。
大部分计算装置都被编程,以在操作系统(Operating System,缩写为OS)的控制下工作。操作系统通过向计算装置的中央处理单元输入一系列代码形式的指令来控制计算装置。这些指令可以看作是由操作系统调度的一系列准独立基本执行单元。这些基本执行单元分别是所谓的线程以及将在计算装置中执行的、总是包括一个或多个线程的进程。一般的操作系统将调度很多不同的线程,以控制将要通过计算装置执行的各种任务。
操作系统可以看作是由多个部件构成,并且这些部件中的一些部件与其他的部件相比,对硬件资源具有的优先访问权。具有更高优先访问权的部件被称为优先部件。一个或多个这些优先部件构成通常所称的操作系统的内核。
OS内核通常提供核心服务,操作系统本身的所有其他部分和运行在平台上的所有应用程序必须依靠这些核心服务工作。关于由什么构成这些核心服务的观点随着时间而改变,且其对操作系统的总体设计的相应影响构成了本发明的背景。
然而,通常认为存在两种基本的OS设计方法,通常将它们称为‘单内核’法和‘微内核’法。
单内核是大代码块,其包括整个操作系统中可以最高优先级运行的较大部分。这通常包括与计算硬件的所有接口。现有的单内核将实体模块化(substantial modularity)引入到了内核设计中,并通过正式接口层和运行期可加载的内核模块解决了通常与这种设计相关的可移植性、可升级性、以及存储使用率的问题。然而,非常大代码块的以高优先级运行实体功能性(通常所说的内核模式)这一关键特性被保留在所有基于单内核的主要的商用操作系统(包括来自微软的WindowsTM以及多数版本的Linux)中。
相反,微内核法与单内核法显著不同。所提供的操作服务被最少化,通常减少到确保进程和地址空间、以及调度、同步、及进程间通信的完整性即可。所有其他的操作系统服务(通常包括存储管理)都被设置为可加载的模块。但是,与单内核法的主要不同在于,这些其他的服务没有加载到内核存储空间中然后以内核模式运行,而是以服务例程来进行,其被加载到它们各自的存储空间中并以较低优先级运行,即所谓的用户模式。


图1示出了上述两种结构范例之间的主要不同。
尽管早期的基于微内核的操作系统往往是用于学术的(例如,Carnegie-Mellon University开发的Mach内核),但是自二十世纪九十年代中期以来,微内核结构的最小化以及相应的可预测性已经使其成为实时以及嵌入式操作系统的标准。Wind River、QNX、OSE以及Mentor Graphics在其实时操作系统(Real-Time OS,缩写为RTOS)中都使用微内核结构的元件。最近,Mach内核本身已经被集成到基于苹果公司的Mac OS X基础上的开源(open-source)Darwin XNU内核中,并且Mach还是Hurd内核的基础,其中,Gnu项目已将Hurd内核开发来代替标准单Unix/Linux内核。
微内核结构不仅具有确定性特性,还在灵活性、扩展性、安全性、和可靠性方面优于单内核。
然而,也存在着缺点。由于微内核必需调解(mediate)用户模式进程之间的所有通信,因此具有非常频繁的上下文切换,在单内核中,这些用户模式进程将共享同一地址空间且能够相互直接访问应用程序接口(API)。基于主机系统的硬件和存储器结构,相较于单内核,这会导致较差的性能。
可以将用于开发微内核结构的技术扩展至微内核本身的最低层。实际上这样的技术已经实现,并成为所谓超微内核结构的基础。存在争议的是,超微内核不代表OS设计方法的新的起点,因为这不过是高度最小化的微内核。实际上,很多关于最小化微内核的学术文献都非常适用于微内核设计。例如,参见1995年12月的Proceedings of 15th ACM Symposium on Operating System Principle上的由Jochen Liedtke所著的文章“Onμ-Kernel Construction”的第2部分。
然而,微内核变得越简单,其作为操作系统的整体部分的作用就越小。因为这使得运行各种分立的操作系统个性(其都可以通过超微内核实现)变为可能。在微内核发展的早期意识到了这种发展的可能性。例如,参见1992年4月的Proceedings of the USENIXWorkshop on Micro-Kernels and Other Kernel Archtectures,USENIXAssociation,由Bomberger等人所著的“The KeyKOS NanokernelArchitecture”,该文描述了一种超微内核,其需要具有在单一硬件系统上运行多个操作系统实例的能力。
这种可能性不仅仅是理论上的;Jochen Liedtke的L4微内核版本能够运行Linux以及其他的任务。例如,微内核(即所谓的Fiasco,并与L4微内核兼容)已表明能运行L4Linux,L4Linux是Linux内核对L4接口的端口,其完全以用户模式执行,该微内核具有在x86和ARM平台上运行的实时能力、具有在微内核顶层上运行的DOpE实时开窗口环境、具有在窗口之一中运行L4Linux的实例。
然而,现有技术存在缺陷。微内核支持整个操作系统的事实使得强健且有效的设计尤为重要。特别地,微内核在调度进程和任务中的作用对于整个操作系统的功能非常重要;决不允许失效。特别是在涉及到实时操作系统(RTOS)的情况下,这种调度不是无关紧要的。RTOS必须能够严格保证对特定事件的响应时间。一种能够使RTOS做出这样保证的关键机制是优先级机制,该优先级机制按照实时重要性顺序将具体任务排序,并将最重要的任务安排在不太重要的任务之前。
关于多任务操作系统中的优先级机制的一个公知问题是优先反转现象,其中,优先反转是指低优先级任务占用了关于高优先级任务所需资源(所谓的互斥对象或互斥体)的锁。除非采取步骤以提前获知这种情形,否则任务调度算法将一直试图在低优先级任务之前运行高优先级任务,结果造成资源锁总不会被释放,从而使较高优先级的任务被阻塞。
解决优先反转问题的方法是优先级继承,这意味着始终将具有资源锁的任务的优先级提升至等于或高于等待上述资源的最高优先级的优先级。然而,实现传统的优先级继承方法计算开支很大,因此促使操作系统的设计者在鲁棒性和性能之间进行折衷。
在至少一种众所周知的情况下,如在1997 Mars Pathfinder会议上,基于对性能的考虑,做出了不使用优先级继承的决定。TomDurkin在Robot Science & Technology Issue 1,1998的“What theMedia Couldn’t Tell You About MarsPathfinder”中写道“为防止通信冲突,VxWorks以互斥软件锁同步访问总线。然而,当在等待低优先级气象数据线程运行的同时,高优先级线程被阻塞时,中断偶尔被发送到总线,从而使得在瞬间时间间隔期间,中等优先级的通信任务被调度...长时间运行,具有高于低优先级气象任务的优先级的中等优先级通信任务,将阻止该气象任务运行...该方案是优先反转的典型案例。在开始优化VxWorks的性能之前,Wind River特意关闭了优先级继承选项(In order to preventcommunications conflicts,VxWorks synchronized access to the buswith mutual exclusion software locks.However,very infrequently,aninterrupt was sent to the bus that caused a medium-prioritycommunications task to be scheduled during the split-second intervalwhen a high-priority thread was blocked while waiting for alow-priority meteorological data thread to run...the long-running,medium-priority communications task-having a higher priority thanthe low-priority meteorological task-would prevent the meteorologicaltask from running...this scenario is a classic case of priority inversion.Wind River had deliberately turned off the priority inheritance optionbefore launch to optimize the performance of VxWorks)”。
很多现有的微内核结构的缺陷在于,它们以分立的和计算开支很大的优先级继承机制为特征。因此,人们一直期望将它们关闭以提高操作系统的性能。因为不必强制在鲁棒性和性能之间进行折衷,所以对于现有的结构来说,优选没有任何性能损失地提供自动优先级继承的结构。这在使用超微内核来承载一个或多个操作系统的情况下非常实际,这是由于超微内核中的任何不可靠性都直接转化为了整个操作系统中的不可靠性。
因此,本发明的目的在于提供一种能够没有任何性能损失地体现自动优先级继承的改进型计算装置。
根据本发明的第一方面,提供了一种计算装置,包括调度器,其结合了用于将具有不同优先级的执行的线程的运行排序的算法;以及线程表,这些线程根据优先级顺序被调度来在该装置上运行;该装置还包括至少一个锁定机构,用于阻塞除去占用该锁定机构的线程之外的所有线程对装置资源的访问;以及其中,被阻塞运行的被调度线程使占用锁定机构的线程运行。
根据本发明的第二方面,提供了一种操作计算装置的方法,该方法包括以下步骤提供调度器,该调度器包括用于将具有不同优先级的执行的线程的运行排序的算法,并包括线程表,这些线程根据优先级顺序被调度来在该装置上运行;提供至少一个锁定机构,用于阻塞除去占用锁定机构的线程之外的所有线程对装置资源的访问;以及设置被阻塞运行的被调度线程,以使占用锁定机构的线程运行。
根据本发明的第三个方面,提供了一种用于计算装置的操作系统,该操作系统包括调度器,其结合了用于将具有不同优先级的执行的线程的运行排序的算法,并且包括用于提供线程表的装置,这些线程以优先级排序被调度以在该装置上运行;至少一个锁定机构,用于阻塞除去占用锁定机构的线程之外的所有线程对装置资源的访问;以及用于设置被阻塞运行的被调度线程,以使占用锁定机制的线程运行的装置。
下面将仅参照示出单内核和微内核结构的附图,通过进一步的实例来描述本发明的实施例。
本发明将详细参考可以从Symbian Limited of London,England得到的Symbian OSTM操作系统来进行说明。然而,应该理解,本发明的原理用于其他类型操作系统中也有同等的优点。
Symbian OS操作系统包括提供硬实时支持的预占多线程超微内核型层(pre-emptive multi-threaded nanokernel style layer)。可以在该微内核中找到单机制(single mechanism)的实现,其被称为快速互斥体(fast mutex)。其结合了对资源提供互斥锁的内核线程方法的优点与对占用互斥体的任务的自动优先权继承方法的优点。内核的多线程的特点使其适用于单一处理器或对称多处理系统(SMP)中,且快速互斥体可以用于上述两种结构的任意一种中。
为了提供对本发明的充分理解,无需详细描述Symbian OS操作系统。因此,下面的描述限制在该操作系统与本发明相关的部分。Symbian OS内核是一种介于图1中示出的单内核和微内核之间的混合型内核,因此结合了这两种内核的某些优点。用于为用户方服务器实现消息传递架构的内核的概念来源于微内核结构;其网络和通话堆栈(telephony stack)、以及文件系统都是用户方服务器。另一方面,作为可加载的内核模块的装置驱动器的实现来源于单内核结构。
超微内核本身对管理存储很不了解(largely agnostic)。与许多其他的微内核和超微内核结构一样,其将该任务委托给外部模块。这称之为存储模式。内核提供钩子,以允许存储模式基于重新调度而进行地址空间转换。
在Symbian OS操作系统中已经实现了多种存储模式。其中的两种特别值得注意●移动存储模式,使用单页面目录,该目录中的项目在每个内部进程上下文转换上来回移动。其可以是相对较长的操作,因此在启用抢先的情况下,在该模块中运行超微内核的存储钩子函数,从而防止进程转换对线程等待时间产生不利影响。
●在多存储模式中,每个进程都有自己的页面目录,且上下文转换改变页面目录基址寄存器。在这种模式中,地址空间改变得很快,这是因为它们只涉及页面目录的改变。因此,在禁止抢先的情况下,运行超微内核的存储钩子函数,以提高效率和简化代码。
超微内核是多线程的,且其主要功能之一是在多个线程之间共享可获得的中央处理器单元(CPU)资源。
超微内核线程类似于建立在多数其他RTOS上的线程,它们的本质特征在于它们每一个都有自己的堆栈,且同时具有0和63之间(包括0和63)的整数优先级。线程可以处于多种不同状态;所有处于READY状态的线程都是可以执行的,且被链接到所谓的就绪表(ready list)中。通常基于优先级来调度线程,且操作系统中的调度器保证了就绪表中的最高优先级线程将会运行。
就绪表总是在内核被锁定的情况下被访问,因此为了保持低线程等待时间,需要限制(bound)就绪表中的所有操作并要求所有的操作要尽可能快。对于每个可能的线程优先级,这可以通过使用64个分离队列来实现,用于解释对64个线程优先级的限制。将就绪表中的每个线程放置在对应于其优先级的队列中。还保持64位掩码,以指示哪个队列为非空;当且仅当用于优先级n的队列是非空时,才设置掩码中的位n。
要在就绪表中插入一项,需要将其添加到对应于其优先级的队列的尾部(不必搜索),并设置位掩码中的相应位。要删除一项,首先打开从其队列发出的链接,然后,如果队列是空(null),则复位位掩码中的各个位。为了找出最高优先级的项,在位掩码中找出最高有效位的1(这可以在某些CPU上通过二进制查找或通过单指令实现),然后在相应的队列上找出第一项。
该实现因此产生用于项的插入和删除以及用于找到最高优先项的受限制的(且短的)执行时间。为了节省存储,将单指针用于每个队列。如果队列为空,该单指针为NULL,否则其指向队列上的第一项。队列上的项设置为双链环。
超微内核维护用于指示是否可以请求线程转换的标志(iResheduleNeededFlag)。一旦将优先级高于或等于表中的任何其他线程的最高优先级的线程添加到就绪表,就设置该标志,或在相同的情况下,当处于相同优先级的第一线程使用了其时间片(每个线程均有特定的时间片)时,就设置该标志。还可以在当前线程的时间片终止时,通过超微内核定时器嘀哒信号中断来设置该标志。当接下来解锁内核时,检查该标志,以确定是否需要重新调度。当实际发生重新调度时,清除该标志。
每个线程都有特定的时间片(iTimeslice)和时间计数(iTime)。每当线程阻塞或轮换到相同优先级的线程队列的尾部时,iTime域就设置为等于iTimeslice。如果iTimeslice为正,则低等级的嘀哒信号中断减少当前线程的iTime,且如果其变为零,则触发重新调度。因此,如果iTimeslice为正,则线程将在让步于处于相同优先级的下一个线程之前,对iTimeslice运行低等级定时器计数。如果iTimeslice为负,并且如果线程阻塞,则该线程仅让步于处于同等优先级的其他线程。
每一个线程都具有临界段计数(iCsCount),且每当线程插入一个内核代码的临界段时iCsCount就会递增,而此时,该临界段计数可以不挂起或退出。一个试图挂起或退出另一个线程的线程必须首先检查目标线程的临界段计数。如果计数为零,则该线程可以立即挂起或退出。如果计数不为零,则设置另一个标志(iCsFunction)以指示当线程离开临界段时,其是否该挂起或退出。当线程舍弃内核代码的临界段时,它的iCsCount递减,且如果其变为零,则检查iCsFunction,且必要时线程将其自己挂起或退出。被调用来挂起或退出其他线程的线程在任何阶段都不会被阻塞-其只是继续执行。
快速互斥法被作为允许超微内核间的互斥的基本方法。它们具有下列特性●没有争用锁的情况时,非常快。
●RAM足迹(footprint)较小。
●如果线程已经占用了任何快速互斥体(互斥体是不可嵌套的),则线程可以不等待快速互斥体。
●在占用快速互斥体时,线程可以既不退出也不等待在超微内核外部的层中实现的对象。
在本发明中,上述的线程临界段系统被扩展,以保证在占用快速互斥体时线程不会被终止;占用快速互斥体的线程被认为处在临界段中,因此线程的外部挂起和终止被推迟,直到该线程释放了快速互斥体。例外的是,这样产生了在占用快速互斥体时线程试图退出自己的情况;由于在临界段中时线程试图退出,所以这将使内核出错。
占用快速互斥体还防止了线程被与同优先级的线程分隔时间;这样做是要减少在短临界段中的线程之间转换时不必要的时间花费。快速互斥体主要用来有效保护代码的短临界段。
快速互斥体包括指向占用线程的指针(iHoldingThread,如果互斥体是空其为NULL)以及指示是出现了互斥体争用还是由于互斥体被占用而操作被延迟的标志(iWaiting),例如占用线程的挂起、终止、或循环。另外,每个超微内核线程都具有指向当前被线程占用的快速互斥体的指针(iHeldFastMutex,如果没有被占用则为NULL),其中,由于快速互斥体不能嵌套,所以最多存在一个。每个超微内核线程还具有指向快速互斥体的指针,其中,在该快速互斥体上,超微内核线程目前被阻塞(iWaitFastMutex,如果没有则为NULL)。
用于等待快速互斥体的算法可以是Lock the kernelIF(iHoldingThread!=NULL)iWaiting=TRUECurrent thread->iWaitFastMutex=thisYield to iHoldingThreadLock the kernelReenable interruptsCurrent thread->iWaitFastMutex=NULLENDIF
Current thread->iHeldFastMutex=thisiHoldingThread=Current threadUnlock the kernel在没有争用的情况下,这不过是减少至两个变量分配。关于非SMP(对称处理,symmetrical processing)系统,当检查iHoldingThread时,仅通过禁用中断而不是锁定内核,就可以优化和已经进一步优化该方法。
本发明提供了一种自动优先级继承。这意味着在快速互斥体上被阻塞的线程没有被从就绪表中删除。这与其他的操作系统和调度算法总是从就绪表中删除这样的线程并将它们排列在阻塞表中,是明显不同的。(在Symbian OS超微内核中存在这样的阻塞状态,但是其只用于被阻塞在超微内核上的OS层中所实现的等待对象上的线程。)被阻塞在快速互斥体上的线程不从就绪表中删除,而是执行Yield to iHoldingThread操作。这样完成从当前线程到互斥体占用线程的直接上下文转换。不从就绪表中删除任何线程,也不执行任何长期运行的存储管理单元(memory management unit,缩写为MMU)页表操作;即,为了减少由阻塞在快速互斥体上的线程所引起的系统开销,当与移动存储模式一起使用时,不调用所提供的超微内核钩子,以允许(慢)处理上下文转换。然而,由于这样非常快,所以该操作实际上在多存储模式上执行地址空间改变。
这意味着在当前线程占用快速互斥体时,未确保用户的地址空间是一致的。仅有的一个例外是,当被占用的快速互斥体是用于移动存储模式中以保证存储钩子函数不会变为被嵌套时的系统锁时。应该注意,YieldTo随着禁用中断和内核解锁而返回,就像如下所述的调度器本身一样。还应该注意,调度算法保证YieldTo将不会返回,直到互斥体已经被释放。
不从就绪表中删除线程,而是立即让步于互斥体占用线程,来有效地提供优先级继承。这是因为被阻塞在快速互斥体上的线程仍留在就绪表中,因此如果具有至少与最高优先级的被阻塞线程相等的优先级的另一线程变为就绪,则只可以触发重新调度。因此,占用线程有效地将其优先级提升至最高优先级的被阻塞线程的优先级。
用于释放快速互斥体的典型算法是Lock the kerneliHoldingThread=NULLCurrent thread->iHeldFastMutex=NULLIF iWaitingiWaiting=FALSESet TheScheduler.iRescheduleNeededFlag to cause rescheduleIF CurrentThread->iCsFuntion && CurrentThread->iCsCount==0Do critical section exit processing for current threadENDIFENDIFUnlock the kernel在没有争用的情况下,这不过是减少至两个变量分配。此外,在检查iWaiting标志的同时,可以通过禁用中断而不是锁定内核,对非SMP(对称处理)系统进行优化且已经进行了进一步优化。在当前线程占用互斥体时,如果另一个线程已经试图获取该互斥体,则iWaiting标志将已经被设置。如果线程的时间片已经到期(与其他相等优先级的线程的循环被延迟,直到快速互斥体被释放)或如果试图挂起或杀死该线程,iWaiting标志也将已经被设置。后一种情况以与在线程临界段(即iCsCount非零)中执行线程的情况类似的方法来处理。当快速互斥体被释放时,处理被延迟的操作,因此,互斥体中对iCsCount和iCsFunction的检查会释放代码。
超微内核包括调度器,假设内核没有被锁定,如果没有由中断服务例程(ISR)排队的待决(pending)操作或待决重新调度,则调度器在ISR的末端被调用。它还可以在只要内核解除锁定以及关于待决的操作和重新调度应用的相同条件下被调用。
调度器首先检查以观察是否存在由ISR排队的待决的操作;然后选择准备运行的最高优先级的线程。如上所述,基于循环法,调度相同优先级的线程。超微内核调度器通过下列步骤具体处理所选择的线程占用快速互斥体的情况●如果被占用的互斥体是系统锁,则调度器可以仅直接转换到线程,而不需要进一步地检查,这是因为自从线程上次运行以后,地址空间就没有改变。另外,所选择的线程不会被阻塞在快速互斥体上(因为其占用一个互斥体而且互斥体不嵌套)。
●如果所选择的线程占用的是快速互斥体而不是系统锁,则调度器仍可以转换至它,且由于在是由快速互斥体而不是系统锁所保护的临界段期间不能保证用户模式地址空间的有效,因此不需要钩出(hook out)来执行地址空间改变。然而,如果将通常地请求地址空间改变,则设置互斥体iWaiting标志,以保证在快速互斥体被释放时并不实际改变地址空间。另外,如果线程具有KThreadAttlmplicitSystemLock属性且系统锁当前被占用,也设置iWaiting标志。这是为保证在系统锁被占用时,线程不脱离互斥体所保护的临界段。
超微内核调度器通过以下步骤具体处理所选择的线程被实际阻塞在快速互斥体上的情况●将被阻塞在快速互斥体上的所有线程保持在就绪表中,因此可以在重新调度期间选择这些线程。与转换到线程并使其运行以及立刻转换到占用的线程而浪费时间不同,在调度器中检查这种情况,然后调度器直接转到互斥体占用的线程,因此节省了上下文转换。该检查也保证用在NFastMutex等待操作中的YieldTo函数不能够返回,直到互斥体已经释放。值得注意的是,需要检查iWaitFastMutex和iWaitFastMutex->iHoldingThread,这是因为当占用线程释放互斥体时,iHoldingThread将被设置为NULL,但iWaitFastMutex仍将指向该互斥体。因为前面段落所中阐述的理由,所以如果执行转换到互斥体占用线程,则不需要做任何地址空间的改变。也不需要设置这里的快速互斥iWaiting标志,这是因为在所选择的线程被阻塞在其上时,它就一定已经被设置了。
本发明旨在提供以下的优于已知操作系统内核的显著优点●通过在单一机制中合并互斥法和优先级继承法,排除掉优先级继承由于任何原因被关闭的可能性。
●由于在单一机构中合并优先级继承和互斥功能,快速互斥体(就像其名字暗示的)没有表现出任何性能损失,所以不再需要由于性能原因而关闭优先级继承。
●在微内核等级提供该快速可靠的双重用途的机制意味着任何建立于其上的OS自动获得避免死锁的好处。
●快速互斥既适合于单一处理器又适合于SMP系统。
尽管已经参照实施例具体说明了本发明,但是应该理解,在不脱离权利要求书限定的本发明的范围的条件下,可以对本发明做各种改变。
权利要求
1.一种计算装置,包括调度器,其结合了用于将具有不同优先级的执行的线程的运行排序的算法;并且包括线程表,所述线程根据优先级排序被调度在所述装置上运行;所述装置还包括至少一个锁定机构,用于阻塞除去占用所述锁定机构的线程之外的所有线程对所述装置的资源的访问;以及其中,被阻塞运行的被调度线程促使占用所述锁定机构的所述线程运行。
2.根据权利要求1所述的计算装置,其中,将状态分配给线程,所述表包括所有具有共同状态的线程。
3.根据权利要求2所述的计算装置,其中,不允许被阻塞的线程改变其状态。
4.根据权利要求1至3中任意一项所述的计算装置,其中,根据所述表所包括的所述线程的优先级来细分所述表。
5.根据前述权利要求中任意一项所述的计算装置,其中,线程被设置为包含指向任何上面阻塞所述线程的锁定机构的指针。
6.根据前述权利要求中任意一项所述的计算装置,包括多个不可嵌套的锁定机构。
7.根据前述权利要求中任意一项所述的计算装置,其中,所述调度器被设置为在中断服务例程的末尾被调用,其中,使所述中断服务例程在所述计算装置上运行。
8.根据前述权利要求中任意一项所述的计算装置,其中,所述锁定机构包括互斥体,所述互斥体包括指针,其中,如果所述互斥体空闲,则所述指针为空,否则指向占用所述互斥体的所述线程,并包括指示所述互斥体是否被争用的标志。
9.根据权利要求8所述的计算装置,其中,所述算法被设置为,将存储管理委托给可替换存储模型,所述可替换存储模型基于所述计算装置的结构而构造。
10.根据权利要求9所述的计算装置,其中,所述存储模型被设置为以可预占或不可预占模式运行。
11.根据权利要求10所述的计算装置,其中,互斥体被设置用来保护所述模块不以所述可预占模式运行。
12.根据前述权利要求中任意一项所述的计算装置,其中,所述调度器被包括在所述计算装置的操作系统的内核中。
13.根据权利要求12所述的计算装置,其中,所述内核包括微内核或超微内核,所述线程对应地是微内核或超微内核线程。
14.根据权利要求12或13所述的计算装置,其中,所述调度器被设置为在每次解锁所述内核时被调用。
15.根据前述权利要求中任意一项所述的计算装置包括移动计算装置。
16.根据权利要求15所述的计算装置包括智能电话。
17.一种操作计算装置的方法,所述方法包括以下步骤提供调度器,所述调度器结合了用于将具有不同优先级的执行线程的运行排序的算法,并包括线程表,所述线程以优先级排序被调度在所述装置上运行;提供至少一个锁定机构,用于阻塞除去占用所述锁定机构的线程之外的所有线程对所述装置的资源的访问;以及设置被阻塞运行的被调度线程,以促使占用所述锁定机构的所述线程运行。
18.一种用于计算装置的操作系统,所述操作系统包括调度器,其结合了用于将具有不同优先级的线程的运行排序的算法,并且包括用于提供线程表的装置,所述线程以优先级排序被调度在所述装置上运行;至少一个锁定机构,用于阻塞除去占用所述锁定机构的线程之外的所有线程对所述装置的资源的访问;以及用于设置由于要求的所述资源被锁定而被阻塞运行的被调度线程,以使占用所述锁定机制的所述线程运行的装置。
19.根据权利要求18所述的操作系统,其中,将状态分配给线程,且所述表包括所有具有共同的状态的线程。
20.根据权利要求19所述的操作系统被设置为不允许被阻塞的线程改变其状态。
21.根据权利要求18至20中任意一项所述的操作系统被设置为,根据其包括的所述线程的所述优先级来细分所述表。
22.根据权利要求18至21中任意一项所述的操作系统,其中,所述线程被设置为包含指向任何上面阻塞所述线程的锁定机构的指针。
23.根据权利要求18至22中任意一项所述的操作系统,包括多个不可嵌套的锁定机构。
24.根据权利要求18至23中任意一项所述的操作系统,其中,所述调度器被设置为在中断服务例程的末尾被调用,其中,使所述中断服务例程在所述计算装置上运行。
25.根据权利要求18至24中任意一项所述的操作系统,其中,所述锁定机构包括互斥体,所述互斥体包括指针,其中,如果所述互斥体空闲,则所述指针时为空,否则指向占用所述互斥体的所述线程,并包括指示所述互斥体是否被争用的标志。
26.根据权利要求25所述的操作系统,其中,所述算法被设置为,将存储管理委托给可替换存储模型,所述可替换存模型基于所述计算装置的结构而构造。
27.根据权利要求26所述的操作系统,其中,所述存储模型被设置为以可预占或不可预占模式运行。
28.根据权利要求27所述的计算系统,其中,互斥体被设置用来保护所述模块不以所述可预占模式运行。
29.根据权利要求18至28中任意一项所述的操作系统,其中,所述调度器被包括在所述内核中。
30.根据权利要求29所述的操作系统,其中,所述内核包括微内核或超微内核,所述线程对应地是微内核或超微内核线程。
31.根据权利要求29或30所述的操作系统,其中,所述调度器被设置为在每次解锁所述内核时被调用。
全文摘要
一种用于计算装置的操作系统,包括调度器,其结合了用于将具有不同优先级的执行的线程的运行排序的算法。该操作系统还被设置以提供线程表,线程根据优先级排序被调度以在该装置上运行。还提供了至少一个锁定机构,用于阻塞除去占用该锁定机构的线程之外的所有线程对装置资源的访问。其中,该操作系统设置由于所请求的资源被锁定而被阻塞运行的被调度线程,以使占用锁定机构的线程运行。
文档编号G06F9/48GK1973266SQ200580016061
公开日2007年5月30日 申请日期2005年4月1日 优先权日2004年4月2日
发明者丹尼斯·梅 申请人:西姆毕恩软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1