US5515538A - Apparatus and method for interrupt handling in a multi-threaded operating system kernel - Google Patents

Apparatus and method for interrupt handling in a multi-threaded operating system kernel Download PDF

Info

Publication number
US5515538A
US5515538A US08/219,428 US21942894A US5515538A US 5515538 A US5515538 A US 5515538A US 21942894 A US21942894 A US 21942894A US 5515538 A US5515538 A US 5515538A
Authority
US
United States
Prior art keywords
thread
interrupt
interrupt handler
cpu
interrupted
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
US08/219,428
Inventor
Steven R. Kleiman
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Priority to US08/219,428 priority Critical patent/US5515538A/en
Application granted granted Critical
Publication of US5515538A publication Critical patent/US5515538A/en
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Definitions

  • the present invention relates to the fields of computer operating systems, multi-processor hardware systems, and object oriented programming. Specifically, the present invention is a method and apparatus for handling interrupts in an operating system kernel which may accommodate multi-threading and real-time processing.
  • a computer system can be generally divided into four components: the hardware, the operating system, the applications programs, and the users.
  • the hardware the central processing unit (CPU), memory, and input/output (I/O) devices
  • the application programs databases, games, business programs, etc.
  • the operating system controls and coordinates the use of the hardware among the various application programs for the various users. In doing so, the primary goal of the operating system is to make the computer system convenient to use. A secondary goal is to use the hardware in an efficient manner.
  • a more recent trend is to distribute computation among several processors, called generally multi-processor systems.
  • the processors In a “tightly coupled” system, the processors share memory and a clock. In such systems, communication between processors takes place through shared memory.
  • each processor In a “loosely coupled” system, each processor has its own memory and clock and the processors communicate with each other through various communication channels such as high-speed buses or telephone lines. These latter systems are usually called “distributed systems”.
  • distributed systems For further description of operating systems in general see “Operating System Concepts" by A. Silberschatz, J. Peterson, and P. Glavin, Addison Wesley 1991.
  • UNIX® Operating System is currently used on thousands of computer systems throughout the world.
  • UNIX is a registered trademark of UNIX System Laboratories, Inc.
  • UNIX was designed to be a simple time-sharing system, with a hierarchical file system, which supported multiple "processes.”
  • a "process” is the execution of a program and consists of a pattern of bytes that the CPU interprets as machine instructions (text), data, and stack.
  • a "stack” is a set of hardware registers or a reserved amount of main memory that is used for arithmetic calculations or for keeping track of internal operations. Stacks usually work on a last-in-first-out basis; the last item, or address, placed (pushed) onto the stack is the first item removed (popped) from the stack).
  • the "process table” and "u area” are both data structures which describe the state of the process. Switching from user mode to kernel mode in the same process does not require a “context switch”, however when switching from process "A” to process "B” a context switch must be made.
  • a “context switch” requires the kernel to save all of the registers and values so that when a process is reinitiated it will resume from the spot where it was executing when an earlier context switch was made.
  • UNIX consists of two separable parts: the “kernel” and the “systems programs.”
  • Systems programs consist of system libraries, compilers, interpreters, shells and other such programs which provide useful functions to the user.
  • the kernel provides the file system, CPU scheduling, memory management, and other operating-system functions by responding to "system calls".
  • System calls are the means for the programmer to communicate with the kernel.
  • System calls are made by a "trap” to a specific location in the computer hardware (sometimes called an "interrupt” location or vector).
  • Specific parameters are passed to the kernel on the stack and the kernel returns with a code in specific registers indicating whether the action required by the system call was completed successfully or not.
  • Multiprocessor hardware availability allows applications to be restructured to make use of more than one processor (CPU) at a time. This requires additional control mechanisms to synchronize the different parts of an application which might be running simultaneously on two or more CPUs.
  • Such new programming capabilities are generally embodied in the new programming paradigm called "multi-threading.”
  • a "thread of control” or more simply a “thread” is a sequence of instructions being executed in a program.
  • a thread has a program counter (PC) and a stack to keep track of local variables and return addresses. Threads execute independently. Threads share the process instructions and most of its data, as well as share most of the operating system state of a process. Each thread may make arbitrary system calls.
  • Threads and the associated control and services of a multithreaded system may be implemented as objects.
  • Synchronization techniques which are implemented as objects include mutual exclusion (mutex) locks, semaphores, condition variables, and readers/writer locks.
  • mutex mutual exclusion
  • the simple, time-sharing based UNIX kernel is incapable of supporting tightly-coupled multiprocessing or real-time processing demands.
  • the original UNIX system protects the kernel data structures by two policies: the kernel cannot preempt a process and switch context to another process while executing in kernel mode, and it masks out interrupts when executing a critical region of code if an interrupt handler could corrupt kernel data structures.
  • the kernel cannot preempt a process and switch context to another process while executing in kernel mode, and it masks out interrupts when executing a critical region of code if an interrupt handler could corrupt kernel data structures.
  • the kernel could become corrupt in spite of the protective measures that suffice for uniprocessor systems.
  • New operating systems provide a redesigned kernel which can accommodate these requirements.
  • Some of these designs extend the multithreading technique to the kernel, and this in combination with new synchronization techniques, priority setting mechanisms, task scheduling and dispatching rules, allows for maintaining the data integrity of all necessary structures, and the concurrency of simultaneously executing threads.
  • the demands of real-time applications for predictable and bounded response to real-time stimuli require the incorporation of unique interrupt handling techniques which minimize the overall response time to an interrupt triggering event.
  • the unique design of the present invention provides interrupt handling procedures using kernel threads which satisfies these requirements.
  • the philosophy is to capture all asynchronous processing in the concept of a kernel thread. Interrupts, since they are a form of asynchronous processing, are handled as threads. While other systems break up the interrupt handling into a part that is a thread and a part that is a non-thread interrupt handler, the present invention executes the interrupt handling entirely as a thread. In order to do this efficiently, the invention delays expensive processing, such as context switching until it is absolutely necessary to do so. Moreover, additional processing efficiency is gained by the use of pre-prepared interrupt handler threads. By handling the entire interrupt as a thread, the remainder of the kernel can synchronize with these interrupt handler threads without locking interrupts out for an unbounded period of time. As a result, the periods that interrupts are locked out are few in number and bounded in time. In addition, synchronizing with interrupt handler threads does not require the raising and lowering of the CPU interrupt priority level, which also saves significant processing time.
  • priority inversion is possible (i.e., a lower priority activity blocking a higher priority activity).
  • priority inversion is prevented by having the blocked thread give its dispatching priority level to the thread causing the block to insure that the blocking thread runs at the same high level as the blocked thread and does not get stuck behind other lower dispatch priority activities.
  • the blocking thread is said to "inherit the priority" of the blocked thread.
  • the disclosed invention is a method and apparatus for handling interrupts and is useful in a data processing system where the kernel is preemptible, has real-time scheduling ability, and which supports multiprocessors symmetrically.
  • the invention more specifically provides a technique for servicing interrupts in a processor by means of kernel interrupt handler threads which do not require a complete context switch unless the interrupt handler thread is blocked, and which is not subjected to inordinate delays caused by the phenomenon of interrupt priority inversion.
  • the invention provides a technique for servicing the interrupt completely as a kernel interrupt handler thread without the need for a bounded device handler non-thread routine as part of the interrupt servicing.
  • these capabilities are accomplished by using a kernel interrupt handler thread to service an interrupt when it occurs.
  • the entire interrupt servicing function is performed by the interrupt handler thread.
  • control may be returned to the interrupted thread or to the dispatcher for initiation of a thread with a higher dispatching priority.
  • the interrupt handler thread uses only the minimum information from the interrupted thread with which to execute the interrupt service, and so long as the interrupt servicing is not blocked by a synchronizing activity, no full context switch is made.
  • interrupt handler thread If the interrupt handler thread is blocked before it can complete the service, only then is a complete context switch performed, saving the entire state of the interrupted thread.
  • the interrupt handler thread then fills in any remaining interrupted thread information, puts itself on a sleep queue to await the completion of the blocking condition, at which time the sleeping interrupt handler thread will be made runnable again and will be eventually dispatched to complete the servicing of the interrupt which it began earlier.
  • the interrupt handler thread transfers its dispatching priority level to the thread which caused the block, in order to guarantee that the blocking thread will have a high enough priority level to prevent priority inversion (for example, where a lower level priority thread continues to block higher priority threads).
  • interrupt handler threads may be prepared before they are needed and thus are available for use when an interrupt occurs.
  • FIG. 1 illustrates a general architecture of a tightly-coupled multi-processor computer system.
  • FIG. 2 illustrates the general architecture of a multi-threaded, multi-processor system.
  • FIG. 3 illustrates graphically how a typical interrupt is handled in the prior art.
  • FIG. 4a illustrates an example of nested interrupts in the prior art
  • FIG. 4b illustrates the same nested interrupts using individual thread stacks.
  • FIG. 5 shows the SunOS 5.0 Kernel Thread Synchronization Interfaces.
  • FIGS. 6, 7a, 7b, 8, 9 and 10 show a detailed flow chart of the interrupt handling procedure of the present invention.
  • the following disclosure describes solutions to problems which are encountered when attempting to implement interrupt handlers in tightly-coupled multiprocessor computer systems.
  • the implementation described is a portion of the SunOS® 5.0 Operating System to be released under the name Solaris® 2.0 by Sun Microsystems®, Inc. Solaris and Sun Microsystems are registered trademarks, and SunOS is a trademark of Sun Microsystems, Inc. Reference may be made to the above referenced Technical Articles describing other features of the SunOS 5.0 multithreading, multiprocessing Operating System. A general understanding of the UNIX Operating System as described in the referenced text by Bach, as well as a general understanding of multithreading explained in the reference by Powell et al, is assumed.
  • SunOS 5.0 is intended to run on uniprocessors and tightly-coupled shared memory multiprocessor systems with one or more processors.
  • the computer system is assumed to have one or more central processor units (CPUs) 10, 12, 14 sharing a memory 20 and clock 18.
  • the kernel 16 assumes all processors are equivalent.
  • Processors 10,12,14 execute kernel threads selected from the queue of runnable kernel threads 26. If a particular multiprocessor implementation places an asymmetric load on the processors (e.g., interrupts) the kernel 16 will nonetheless schedule threads to processors 10,12,14 as if they were equivalent. In general, all processors 10,12,14 see the same data in memory 20.
  • kernel 16 it is possible for a kernel 16 to run "symmetrically" on a multiprocessor yet not allow more than one processor 10, 12, 14 to execute kernel code 16. This is clearly not a strategy that scales well with increasing numbers of processors, and in the preferred embodiment of the present invention, all of the processors 10,12,14 in the system can execute the shared kernel code 16 simultaneously, and use the data structures in the shared memory 20 to communicate between the processors 10,12,14 as required.
  • the "cpu structure area” 25 contains a data structure for each processor 10,12,14. These per-processor structures contain per-processor data, such as: currently executing thread, idle thread, current dispatching priority, and interrupt handling information.
  • SunOS 5.0 is designed with a relatively "fine grained" locking strategy to take advantage of as many processors 10, 12, 14 as possible. Each kernel subsystem has a locking strategy designed to allow a high degree of concurrency for frequent operations. In general, access to data items 22 are protected by locks as opposed to locking access to entire routines. Infrequent operations are usually coarsely locked with simple mutual exclusion. Overall, SunOS 5.0 has several hundred distinct synchronization objects 24 statically, and can have many thousands of synchronization objects 24 dynamically. Kernel threads synchronize via a variety of synchronization objects or primitives, such as:
  • the mutex and writer locks support a dispatching priority inheritance protocol which prevents lower priority threads from blocking higher priority threads (priority inversions).
  • Kernel threads represent the fundamental entities that are scheduled and dispatched on any of the CPUs in the system.
  • a kernel thread is preferably very lightweight, having only a small data structure and a stack. When switching between kernel threads it is not necessary to change virtual memory address space information, so it is relatively inexpensive.
  • Kernel threads are fully preemptible and may be scheduled by any of the scheduling classes included with the system, including the real-time (fixed priority) class. Since all other execution entities are built using kernel threads, including, in the present invention, complete interrupt processing, they represent a fully preemptible, real-time "nucleus" within the kernel. "Preemption” is the action whereby a runnable thread with a higher dispatching priority may force a CPU to cease executing a thread with a lower dispatching priority in favor of executing the higher dispatching priority thread. In prior art UNIX operating systems the kernel allowed a process to preempt an already running process at only a very few selected times. In the preferred embodiment of the present invention, the kernel allows preemption at all but a very few short periods of time and the interrupt handling threads of the present invention are similarly preemptable.
  • Kernel threads synchronize using synchronization primitives that support protocols for preventing dispatching priority inversion, so a thread's priority is determined by which activities it is impeding by holding locks as well as by the service it is performing. Kernel threads are used to provide asynchronous kernel activity, such as asynchronous writes to disk, servicing STREAMS queues, and callouts.
  • a "STREAM” is a full-duplex connection between a process and a device driver, designed to provide flexibility and modularity for the I/O subsystem within a UNIX system.) This removes various diversions in the idle loop and trap code and replaces them with independently scheduled threads. Not only does this increase potential concurrency (these activities can be handled by other CPUs), but it also gives each asynchronous activity a priority so that it may be appropriately scheduled.
  • the multi-threaded programming model has two levels in the user-level software area 80: threads 40-47, and Light Weight Processes(LWPs) 50-55.
  • threads 40-47 threads 40-47
  • LWPs Light Weight Processes
  • programmers write programs using threads (which may be thought of as independent program execution entities).
  • a multi-threaded UNIX process can have several threads of control, which can run independently on different CPUs.
  • User threads are implemented by the library and are not known to the kernel.
  • the LWP is the execution part of a traditional UNIX process.
  • LWPs are implemented by the kernel. User threads are implemented using LWPs in the following way: User threads are actually represented by data structures in the address space of a program. An LWP chooses a user thread to run by locating the user thread state in the program's memory. Loading the registers and assuming the identity of the user thread, the LWP executes the user threads instructions. If the user thread cannot continue, or if other user threads should be run, the LWP saves the state of the user thread back in memory. The LWP can now select another user thread to run. Because a user thread is implemented by an LWP, the capabilities of a user thread are the same as an LWP.
  • a user thread When a user thread needs to access a kernel service by performing a system call, or to interact with user threads in other UNIX processes, it does so as an LWP.
  • the user thread needing the system call remains bound to the LWP executing it until the system call is completed. If a user thread needs to interact with other user threads in the same program, it can do so without involving the operating system. Switching from one user thread to another occurs without the kernel knowing it.
  • the UNIX "stdio" library routines fopen (), fread ()
  • the user thread interface is implemented using the LWP interface, and for many of the same reasons.
  • kernel threads 60-61, and 63-66 are associated with the LWPs 50-55. Kernel threads 60-66 represent the fundamental entities that are scheduled and dispatched on any of the CPUs 70,72,74, 76, 78 in the system. Like the LWP, a kernel thread may be very lightweight, having only a small data structure and a stack.
  • the first Process 30 is the traditional UNIX process with a single thread 40 attached to a single LWP 50.
  • the second Process 32 has threads 41 and 42 multiplexed on a single LWP 51 as in typical coroutine packages, such as SunOS 4.0 liblwp.
  • the third Process 34 has several threads 43,44,45 multiplexed on a lesser number of LWPs 52,53 and has a thread 46 permanently bound to LWP 54, and in addition, the process 34 has asked the system to bind one of its LWPs 55 to a CPU 78.
  • the bound and unbound threads 40-47 can still synchronize with each other both within each process 30,32,34 and between processes 30, 32,34 in the usual way by means of mutex locks, condition variables, semaphores, or readers/writer locks.
  • the kernel supports the execution of user LWPs by associating a kernel thread 60-61, 63-66 with each LWP 50-55.
  • kernel thread 62 for example. This type of kernel thread 62, with no LWP associated, would be used for handling interrupts, executing STREAMS code or providing Network File System (NFS) service for example.
  • NFS Network File System
  • Kernel threads 60-66 represent a thread of control inside the kernel 82. They are scheduled to execute on the processors 70, 72, 74, 76, 78 available to the kernel 82 within the shared kernel address space.
  • a kernel thread contains the following state:
  • the stack is used for thread local storage. Every thread logically has its own set of registers.
  • the state flag indicates whether a thread is running or blocking.
  • the priority is used for scheduling
  • the processor affinity mask is used to restrict the thread to running on a subset of the available processors.
  • Thread creation is as follows:
  • "thread -- create ()" creates a new kernel thread having a stack of the specified size, at the specified address, a procedure entry point, and an argument to be passed to the procedure. It will return the ID of the new thread. The new thread will be in the state specified, and will be considered part of the process pointed to by "pp". It will have dispatching priority "pri”. If the stack address is "Null", the stack will be dynamically allocated, and if the size is zero, the default size will be used. The argument to be passed to the newly created thread can be passed by value, in which case the "len” field should be zero, or by address, in which case the length field should be the size of the argument. This argument will be copied to a dynamically allocated area and the address of that area will be passed to the new thread's procedure entry point.
  • an "interrupt” is a signal that gets the attention of the CPU and is usually generated when input or output is required. For example, hardware interrupts are generated when a key is pressed or when the mouse is clicked. Software interrupts are generated by a program (or process or thread) requiring input or output or generally some service. When an interrupt occurs, control is transferred to the operating system, which determines what action is to be taken or generally what "interrupt service" is to be performed. The portions of the operating system which perform the specific interrupt service required is generally called the "interrupt handler".
  • the kernel is responsible for handling interrupts, whether they result from hardware (such as from the clock or from peripheral devices), from a programmed interrupt (execution of instructions that cause the hardware to send an interrupt to any processor in the system), or from exceptions such as page faults. These interrupts may occur on any CPU, so the kernel must handle these interrupts on any processor.
  • the CPU is executing a thread with a lower CPU interrupt priority level than the priority level of the interrupt, the CPU accepts the interrupt before decoding the next instruction and raises the CPU interrupt priority level, so that no other interrupts of that priority level or lower can happen while it handles the current interrupt.
  • the kernel can raise the interrupt priority level while accessing data structures also used by the interrupt handlers for that level or lower, to preserve the integrity of these data structures.
  • a kernel 92 generally handles an interrupt with the following steps:
  • the kernel 92 gets interrupt number 10 100 from the hardware, loads the context of the clock handler 102 and invokes the clock interrupt handler 104.
  • the interrupt handler begins executing to perform the service required by the clock interrupt.
  • the interrupt handler completes its work and returns 108.
  • the kernel 92 executes a machine-specific sequence of instructions that restores the register context and kernel stack of the process P 0 110, and returns control 112 to P 0 , which resumes execution from the point at which the interruption occurred.
  • FIG. 4a illustrates an example where a process or thread issues a system call 200, and the kernel has saved the context of the interrupted user level process 206 in the kernel stack 212, and receives a disk interrupt 202 while executing the system call.
  • the disk interrupt 202 causes the kernel to save the system call handler context 208 in the stack 212.
  • the kernel gives control to the disk interrupt handler and it is interrupted by the clock interrupt 204.
  • the kernel saves the context of the Disk interrupt handler 210 and gives control to the clock interrupt handler.
  • the kernel pops the previous context from the stack 212 and allows them to continue their process.
  • interrupts are handled by kernel threads.
  • FIG. 4b illustrates the same sequence of nested interrupts but showing that each interrupt handler thread has its own stack 226, 228, 230 on which the relative contexts are saved.
  • the kernel synchronizes with interrupt handler threads via normal thread synchronization objects. If an interrupt handler thread encounters a locked synchronization variable, the interrupt handler thread blocks and allows the critical section to clear. As a result, in the presently preferred embodiment, all interrupt handler threads are separately schedulable and each may sleep if blocked.
  • UNIX System V Release 4 SVR4
  • SunOS 5.0 upon which SunOS 5.0 is based, provides for several scheduling classes.
  • a scheduling class determines the relative dispatching priority of processes or threads within the class, and then converts that priority to a global dispatching priority. The dispatcher chooses the process with the highest global dispatching priority and runs it. With the addition of multithreading in SunOS 5.0 , the scheduling classes and dispatcher operate on threads instead of processes.
  • the scheduling classes currently supported are system, timesharing, and real-time (fixed-priority).
  • the dispatcher chooses the thread with the greatest global dispatching priority to run on a CPU. If more than one thread has the same dispatching priority, they are dispatched in round-robin order. If there is more than one CPU, each one uses the dispatcher to find the highest priority runnable thread that is not already being run on another CPU.
  • the kernel has been made preemptible to better support the real-time class and interrupt threads. Preemption is disabled only in a small number of bounded sections of code relating to the scheduler dispatcher. This means that a runnable thread runs as soon as is practical after its dispatching priority becomes high enough. For example, when thread A awakens thread B, if thread B has a better dispatching priority, the running thread A will put itself back on the run queue and allow the CPU to run thread B. On a multiprocessor, if thread A has better dispatching priority than thread B, but thread B has better priority than the current thread on another CPU, then that CPU will be directed to preempt its current thread and choose the best thread to run. In addition, user code run by an underlying kernel thread of sufficient dispatching priority (e.g. real-time threads) will execute, even though threads that were executing lower priority kernel or application code wait for execution resources.
  • an underlying kernel thread of sufficient dispatching priority e.g. real-time threads
  • the SunOS 5.0 kernel implements the same synchronization objects for internal use as are provided by the user level libraries for use in multithreaded application programs described in the aforementioned paper by Powell et al. These are mutual exclusion locks (mutexes), condition variables, semaphores, and multiple readers, single writer (readers/writer) locks.
  • the interfaces are shown in FIG. 5. (Note that kernel synchronization primitives must use a different type name than user synchronization primitives so that the types are not confused in applications that read internal data structures.)
  • These are all implemented in an object oriented fashion, in that the behavior of the synchronization object is specified when it is initialized.
  • synchronization primitives that have similar semantics (e.g., mutual exclusion) yet explicitly sleep or spin for blocking.
  • spins When a synchronization primitive "spins" for blocking, it loops continuously until a value in memory changes.
  • the spin primitives must hold interrupt priority high enough while the lock is held to prevent any interrupt handlers that may also use the synchronization object, from interrupting while the object is locked and deadlocking. The interrupt level must be raised before the lock is acquired and then lowered after the lock is released.
  • interrupt priority can be an expensive operation, especially on architectures that require external interrupt controllers (especially where mutexes are heavily used).
  • many subsystems are interdependent. In several cases (e.g., mapping in kernel memory or memory allocation) these requests can come from interrupt handlers and can involve many kernel subsystems. This in turn, means that the mutexes used in many kernel subsystems must protect themselves at a relatively high priority from the possibility that they may be required by an interrupt handler. This tends to keep interrupt priority high for relatively long periods and the cost of raising and lowering interrupt priority must be paid for every mutex acquisition and release.
  • interrupt handlers must live in a constrained environment that avoids any use of kernel functions that can potentially sleep, even for short periods.
  • the SunOS 5.0 kernel of the present invention treats most interrupts as asynchronously created and dispatched high priority threads. This enables these interrupt handler threads to sleep, if required, and to use the standard synchronization primitives.
  • the restructured kernel of the present invention uses a primitive spin lock protected by raised priority to implement this. This represents one of a few bounded sections of code where interrupts are locked out. Traditional kernel implementations also protect the dispatcher by locking out interrupts, usually all interrupts.
  • the restructured kernel of the present invention has a modifiable level (the "thread level") above which interrupts are no longer handled as threads and are treated more like non-portable "firmware" (e.g. simulating direct memory access (DMA) via programmed I/O).
  • DMA direct memory access
  • interrupts generally handle serial input and programmed I/O to the floppy drive and audio interfaces and are more timing critical.
  • the related interrupt handler threads can only synchronize using the spin variants of mutex locks and software interrupts. If the "thread level" is set to the maximum priority, then all interrupts are locked out during dispatching. For implementations where the "firmware" cannot tolerate even the relatively small dispatcher lockout time, the "thread level” can be lowered. Typically this is lowered to the same level as the interrupt level at which the scheduling clock runs.
  • interrupts are handled on the kernel stack of the interrupted process or on a separate interrupt stack.
  • the interrupt handler must complete execution and get off the stack before anything else is allowed to run on that processor.
  • the kernel synchronizes with interrupt handlers on a processor by blocking out interrupts while in critical sections.
  • interrupts behave like asynchronously created threads. Interrupts must be efficient, so a full thread creation for each interrupt is impractical. Instead, interrupt threads are preallocated, already partly initialized, with a number of these preallocated interrupt threads set aside for each CPU. When an interrupt occurs, the minimum amount of work is done to move onto the stack of an interrupt handler thread without doing a complete context switch, and to set it as the current thread. At this point the interrupt handler thread is not yet a full fledged thread (it cannot be descheduled) and the interrupted thread is pinned until the interrupt handler thread returns or blocks, and cannot proceed on another CPU. When the interrupt handler thread returns, the state of the interrupted thread is restored.
  • interrupt handler threads has a cost in terms of memory usage.
  • an interrupt handler thread is preallocated for each potentially active interrupt level below the thread level for each CPU.
  • An additional interrupt handler thread is preallocated for the clock (one per system). Since each thread requires a stack and a data structure, perhaps 8K bytes or so, the memory cost can be high.
  • Interrupts may nest.
  • An interrupt handler thread may itself be interrupted and be pinned by another interrupt handler thread with a higher interrupt priority.
  • an interrupt handler thread blocks on a synchronization variable (e.g., mutex or condition variable)
  • a synchronization variable e.g., mutex or condition variable
  • interrupt handler thread While an interrupt handler thread is in progress, the interrupt priority level it is handling, and all lower-priority interrupts must be locked-out. This is managed by the normal interrupt priority mechanism unless the interrupt handler thread blocks. If it blocks, these locked-out interrupts must remain disabled in case the interrupt handler thread is not reenterable at the point that it blocked or it is still doing high priority processing (i.e. should not be interrupted by lower priority work). While it is blocked the interrupt handler thread is bound to the CPU it started on as an implementation convenience and to guarantee that there will always be an interrupt handler thread available when an interrupt occurs. A flag is set in the CPU structure indicating that an interrupt at that level is blocked, and the minimum interrupt priority level is noted. Whenever the interrupt priority (spl) level changes, the CPU's base spl level is checked, and the actual interrupt priority level is never allowed to be below that spl value.
  • release -- interrupt() which allows an interrupt handler thread to lower the interrupt priority level and continue as a normal, high priority thread. This is done by passivating the pinned thread and then lowering the interrupt priority level.
  • the kernel stack of thread A (the interrupted thread) is found and the global registers are saved without doing a complete context switch. Window overflow is checked and saved if required. ("Window overflow" occurs if the current window counter points to an invalid window).
  • the common interrupt code 138 is executed which checks to see what kind of interrupt occurred. If it is a clock interrupt, this is handled by a special routine 142 described below.
  • interrupt numbered 11 through 15 140 for example, an interrupt from a serial communication port (#12), a "cross-call” from another CPU or from the floppy drive (#13), from the profiling timer (#14), or from a hardware error (#15)
  • these are handled in the traditional way because these are generally time-critical and can not be permitted to be blocked by the dispatcher.
  • the interrupt type is any other number 144 then the kernel gets the next available interrupt handler thread (Thread B) from the pool of pre-prepared interrupt handler threads for the CPU which was interrupted 146.
  • Thread B's thread state information is modified 148 by setting Thread B's field "t -- intr" to point to thread A (denoting the thread that was interrupted); by setting the kernel stack pointers to point to thread B's stack; by setting the interrupted CPU's "current thread” to B; and by setting the "current thread register % g7" to B.
  • register "% psr” is set to block all interrupts at or below the level of this interrupt, and the traps are re-enabled.
  • Thread B looks-up the handler for the specific type of interrupt that occurred and calls that handler. 152 This handler will begin executing and will either return without having been blocked, will block and be unblocked one or more times before returning, or will call "release -- interrupt ()" and will return thereafter 154. Thread B's "t -- intr” field is tested and if it is NULL the interrupt handler thread has blocked or called "release -- interrupt ()” 157. If thread B's field "T -- INTR -- THREAD” flag is not clear thread B did not call "release -- interrupt ()” and is still an interrupt handler thread (159 on FIG. 7b).
  • interrupt handler thread (thread B) will return without having been blocked 156.
  • interrupts 1-10 are disabled while the interrupted thread A's registers are restored (that is, A's stack pointer is restored; "current -- thread” is set to A; and register "% g7” is set to A) 164.
  • the kernel also puts the interrupt thread B back onto the pre-prepared interrupt handler thread pool for the interrupted CPU 162, and resets the register "% psr" to enable interrupts above the highest active interrupt thread.
  • the kernel then checks to see if there are any "asynchronous software traps" (AST's) waiting 168.
  • the kernel will process these without doing a context switch of thread A and when completed (or if no ASTs were waiting) the kernel will then check the "cpu -- kprunrun" field in the CPU structure to see if a runnable thread with dispatching priority level higher than thread A is waiting to run 170. If so, a context switch of thread A will be completed and thread A will be placed on the runnable queue, and control transferred to the dispatcher to initiate the highest priority thread 172. If there is no waiting thread with a dispatching priority higher than thread A, then control is transferred to resume thread A 174.
  • the kernel puts the blocked thread B on the sleep queue of the synchronizing object related to the thread that is causing the block; and gives the dispatching priority level of the blocked interrupt handler thread B to the thread causing the block 182. This is called “priority inheritance" and insures that the blocking thread will run as soon as possible. Then the kernel transfers control to the dispatcher who sees that its register "t -- intr" shows that thread A is pinned. As a result, the dispatcher calls "thread -- unpin" 184.
  • Thread B completes its handling of the interrupt and upon completion, and if no other blocks occur, returns (158 in FIG. 7b), and the common interrupt code puts the interrupt handler thread back onto the pre-prepared interrupt handler thread pool for that CPU and returns control to the dispatcher to switch to the highest priority runnable thread available. (176 in FIG. 7b).
  • the interrupt handler thread may wish to continue as a kernel thread without holding off further interrupts.
  • the function "release -- interrupt ()" may be called to allow the interrupt to be reenabled.
  • This routine must replace the pre-prepared interrupt handler thread in the per-CPU pool 199 and convert calling thread B to a non-interrupt thread.
  • the CPU's "cpu -- intr -- actv” flag is cleared of the interrupt level of thread B, 192, and thread B's "T -- INTR -- THREAD” flag is cleared, indicating to the common interrupt code that this thread is not an interrupt handler thread. 194.
  • the locking approach used almost exclusively in the kernel to ensure data consistency is data based locking. That is, the mutex and readerwriter locks each protect a set of shared data, as opposed to protecting routines (monitors). Every piece of shared data is protected by a synchronization object.
  • Some aspects of locking in the virtual memory, file system, STREAMS, and device drivers are described in the above referenced paper in Kleiman 1992!. An elaboration on device driver issues is pertinent, since the present invention using interrupt handler threads may be implemented in systems where the device-drivers have not been modified to use interrupt handler threads.
  • a “device driver” is a special subprogram to handle a specific I/O device. Some device drivers have not been modified to protect themselves against concurrency in a multithreaded environment. These drivers are called “MT-unsafe”; because they do not provide their own locking. In order to provide some interim support for MT-unsafe drivers, the preferred embodiment of the present invention provides wrappers that acquire a single global mutex, "unsafe -- driver”. These wrappers insure that only one such driver will be active at any one time. MT-unsafe drivers can also use the old sleep/wakeup mechanism. "Sleep ()" safely releases the "unsafe -- driver” mutex after the thread is asleep, and reacquires it before returning.
  • a driver may be entered, all of them have to get the "unsafe-driver" mutex if the driver isn't safe. For example, when an interrupt that is to be handled by an MT-unsafe driver occurs, the "unsafe -- driver" mutex is acquired before the interrupt handler calls the driver's interrupt handler. In addition, if an MT-unsafe driver uses timeout to request a callback at a later time, the callout structure is marked so that the "unsafe -- driver” mutex will be held during the callback. It is fairly easy to provide at least simple locking for a driver, so almost all drivers in the system have some of their own locking. These drivers are called “MT-Safe", regardless of how fine-grained their locking is. Some developers have used the term "MT-Hot" to indicate that a driver does fine-grained locking.
  • SunOS 5.0 implements those interfaces as defined so far, using locking primitives and ignoring any spin semantics. This allows compatibility for SVR4 multiprocessor drivers.
  • kernel threads were made to time-slice. Code was simply added to the clock interrupt handler to preempt whatever thread was interrupted. This allows even a uniprocessor to have almost arbitrary code interleavings. Increasing the clock interrupt rate made this even more valuable in finding windows where data was unprotected. By causing kernel threads to preempt each other as often as possible, locking problems in the system can be found using uniprocessor hardware before multiprocessor hardware is available. This feature is intended only as a debugging feature, since it does have some adverse performance impact, however slight.

Abstract

The disclosed invention is a method and apparatus for use in handling interrupts in a data processing system where the kernel is preemptible, has real-time scheduling ability, and which supports multithreading and tightly-coupled multiprocessors. The invention more specifically provides a technique for servicing interrupts in a processor by means of kernel interrupt handler threads which service the interrupt from start to finish. For efficiency, the interrupt handler threads do not require a complete context switch unless the interrupt handler thread is blocked. The kernel makes use of preprepared interrupt handler threads for additional efficiency, and these interrupt handler threads are not subjected to inordinate delays caused by the phenomenon of interrupt priority inversion if they do become blocked.

Description

This is a continuation of application Ser. No. 07/890,406, filed May 29, 1992, now abandoned.
BACKGROUND OF THE INVENTION
1. Field of the Invention
The present invention relates to the fields of computer operating systems, multi-processor hardware systems, and object oriented programming. Specifically, the present invention is a method and apparatus for handling interrupts in an operating system kernel which may accommodate multi-threading and real-time processing.
2. Background
A computer system can be generally divided into four components: the hardware, the operating system, the applications programs, and the users. The hardware (the central processing unit (CPU), memory, and input/output (I/O) devices) provides the basic computing resources. The application programs (database systems, games, business programs, etc.) define the ways in which these resources are used to solve the computing problems of the users. The operating system controls and coordinates the use of the hardware among the various application programs for the various users. In doing so, the primary goal of the operating system is to make the computer system convenient to use. A secondary goal is to use the hardware in an efficient manner.
In attempting to meet these goals, operating system designs have evolved through systems allowing multiprogramming, time-sharing (also called multi-tasking), distributed systems and real-time systems. With multiprogramming, several jobs are kept in memory at the same time and the CPU is switched back and forth between them to maximize the use of the CPU and to decrease the overall time required to complete all jobs. Time-sharing is an extension of multiprogramming where the CPU is switched between jobs so frequently that users may continue to interact with the jobs but the CPU again optimizes the use of its time to process another job while waiting on users to respond. Real-time operating systems are often used for dedicated control devices but more recently are being required in business systems to accommodate multimedia and other time dependent requirements. A real-time operating system has well-defined fixed-time constraints, during which the system must perform the required tasks or the system will fail.
A more recent trend is to distribute computation among several processors, called generally multi-processor systems. In a "tightly coupled" system, the processors share memory and a clock. In such systems, communication between processors takes place through shared memory. In a "loosely coupled" system, each processor has its own memory and clock and the processors communicate with each other through various communication channels such as high-speed buses or telephone lines. These latter systems are usually called "distributed systems". For further description of operating systems in general see "Operating System Concepts" by A. Silberschatz, J. Peterson, and P. Glavin, Addison Wesley 1991.
The UNIX® Operating System is currently used on thousands of computer systems throughout the world. UNIX is a registered trademark of UNIX System Laboratories, Inc. UNIX was designed to be a simple time-sharing system, with a hierarchical file system, which supported multiple "processes." A "process" is the execution of a program and consists of a pattern of bytes that the CPU interprets as machine instructions (text), data, and stack. (A "stack" is a set of hardware registers or a reserved amount of main memory that is used for arithmetic calculations or for keeping track of internal operations. Stacks usually work on a last-in-first-out basis; the last item, or address, placed (pushed) onto the stack is the first item removed (popped) from the stack). Several processes may be instances of a single program. Processes communicate with other processes and the kernel via "system calls." A process can execute in both "user" mode and "kernel" mode and so has a separate stack for each mode. The "context" of a process or its "state" is defined as:
its text,
values of global user variables and data structures,
values of registers,
values stored in its process table slot and "u area", and
the contents of its user and kernel stacks.
The "process table" and "u area" are both data structures which describe the state of the process. Switching from user mode to kernel mode in the same process does not require a "context switch", however when switching from process "A" to process "B" a context switch must be made. A "context switch" requires the kernel to save all of the registers and values so that when a process is reinitiated it will resume from the spot where it was executing when an earlier context switch was made.
UNIX consists of two separable parts: the "kernel" and the "systems programs." Systems programs consist of system libraries, compilers, interpreters, shells and other such programs which provide useful functions to the user. The kernel provides the file system, CPU scheduling, memory management, and other operating-system functions by responding to "system calls". Conceptually, the kernel sits between the hardware and the users. System calls are the means for the programmer to communicate with the kernel. System calls are made by a "trap" to a specific location in the computer hardware (sometimes called an "interrupt" location or vector). Specific parameters are passed to the kernel on the stack and the kernel returns with a code in specific registers indicating whether the action required by the system call was completed successfully or not. For more detailed information on the UNIX operating system see "The Design of the UNIX Operating System" by Maurice J. Bach, Prentice-Hall, 1986.
The popularity of UNIX based systems and the rapid growth of technology place greater demands on systems designers and hardware vendors to build faster systems to handle accelerated true color graphics applications, including combined audio, video, graphics and text information in a single display (generally called "multimedia" applications), advanced telecommunications applications including voice processing which requires rapid processing, and other kinds of applications combining real-time requirements with the normal time-sharing demands. Attempts to meet these demands to date have included the implementation of distributed computer networks, faster uniprocessor systems, faster and more densely integrated tightly-coupled multiprocessor architectures, and methods to enhance user application processing such as multi-threading user processes.
Multiprocessor hardware availability allows applications to be restructured to make use of more than one processor (CPU) at a time. This requires additional control mechanisms to synchronize the different parts of an application which might be running simultaneously on two or more CPUs. Such new programming capabilities are generally embodied in the new programming paradigm called "multi-threading." A "thread of control" or more simply a "thread" is a sequence of instructions being executed in a program. A thread has a program counter (PC) and a stack to keep track of local variables and return addresses. Threads execute independently. Threads share the process instructions and most of its data, as well as share most of the operating system state of a process. Each thread may make arbitrary system calls. Threads and the associated control and services of a multithreaded system (including synchronization services) may be implemented as objects. Synchronization techniques which are implemented as objects include mutual exclusion (mutex) locks, semaphores, condition variables, and readers/writer locks. For more information on multithreads as applied to application programs, see the paper titled "SunOS Multi-thread Architecture" by M. L. Powell, S. R. Kleiman, S. Barton, D. Shah, D. Stein, M. Weeks, Proceedings of the USENIX Conference-Winter '91--Dallas, Tex., pages 65-79. See also the aforementioned text by Silbershatz et al, at pages 96-97, and 597-629.
In the face of these new demands for multiprocessor support, control of concurrent processing, and support for real-time processing, the simple, time-sharing based UNIX kernel is incapable of supporting tightly-coupled multiprocessing or real-time processing demands. The original UNIX system protects the kernel data structures by two policies: the kernel cannot preempt a process and switch context to another process while executing in kernel mode, and it masks out interrupts when executing a critical region of code if an interrupt handler could corrupt kernel data structures. On a multiprocessor system, however, if two or more processes execute simultaneously in the kernel on separate processors, the kernel could become corrupt in spite of the protective measures that suffice for uniprocessor systems. New operating systems provide a redesigned kernel which can accommodate these requirements. Some of these designs extend the multithreading technique to the kernel, and this in combination with new synchronization techniques, priority setting mechanisms, task scheduling and dispatching rules, allows for maintaining the data integrity of all necessary structures, and the concurrency of simultaneously executing threads. Within such systems, the demands of real-time applications for predictable and bounded response to real-time stimuli, require the incorporation of unique interrupt handling techniques which minimize the overall response time to an interrupt triggering event. The unique design of the present invention provides interrupt handling procedures using kernel threads which satisfies these requirements.
In the present invention, the philosophy is to capture all asynchronous processing in the concept of a kernel thread. Interrupts, since they are a form of asynchronous processing, are handled as threads. While other systems break up the interrupt handling into a part that is a thread and a part that is a non-thread interrupt handler, the present invention executes the interrupt handling entirely as a thread. In order to do this efficiently, the invention delays expensive processing, such as context switching until it is absolutely necessary to do so. Moreover, additional processing efficiency is gained by the use of pre-prepared interrupt handler threads. By handling the entire interrupt as a thread, the remainder of the kernel can synchronize with these interrupt handler threads without locking interrupts out for an unbounded period of time. As a result, the periods that interrupts are locked out are few in number and bounded in time. In addition, synchronizing with interrupt handler threads does not require the raising and lowering of the CPU interrupt priority level, which also saves significant processing time.
As a result of using interrupt handler threads for the entire interrupt processing task, and as a result of the fact that these threads may be blocked by other threads, priority inversion is possible (i.e., a lower priority activity blocking a higher priority activity). However, in the present invention, such priority inversion is prevented by having the blocked thread give its dispatching priority level to the thread causing the block to insure that the blocking thread runs at the same high level as the blocked thread and does not get stuck behind other lower dispatch priority activities. The blocking thread is said to "inherit the priority" of the blocked thread. This approach provides the rapid and bounded response necessary to permit real-time processing in a multi-processing, multi-threaded environment.
Additional information concerning the implementation of the SunOS 5.0 Operating System may be found in the following articles: Kleiman 1992! S. Kleiman, J. Voll, J. Eykholt, A. Shivalingiah, D. Williams, M. Smith, S. Barton, and G. Skinner, Symmetric Multiprocessing in Solaris 2.0, COMPCON Spring 1992, p181, San Francisco, Calif.; Khanna 1992! Sandeep Khanna, Michael Sebree , John Zolnowsky, Realtime Scheduling in SunOS 5.0, USENIX, Winter 1992, San Francisco, Calif.
SUMMARY OF THE INVENTION
The disclosed invention is a method and apparatus for handling interrupts and is useful in a data processing system where the kernel is preemptible, has real-time scheduling ability, and which supports multiprocessors symmetrically. The invention more specifically provides a technique for servicing interrupts in a processor by means of kernel interrupt handler threads which do not require a complete context switch unless the interrupt handler thread is blocked, and which is not subjected to inordinate delays caused by the phenomenon of interrupt priority inversion. Moreover, the invention provides a technique for servicing the interrupt completely as a kernel interrupt handler thread without the need for a bounded device handler non-thread routine as part of the interrupt servicing.
According to the invention, these capabilities are accomplished by using a kernel interrupt handler thread to service an interrupt when it occurs. The entire interrupt servicing function is performed by the interrupt handler thread. Upon completion of servicing the interrupt, control may be returned to the interrupted thread or to the dispatcher for initiation of a thread with a higher dispatching priority.
In order to make the operation as efficient as possible, the interrupt handler thread uses only the minimum information from the interrupted thread with which to execute the interrupt service, and so long as the interrupt servicing is not blocked by a synchronizing activity, no full context switch is made.
If the interrupt handler thread is blocked before it can complete the service, only then is a complete context switch performed, saving the entire state of the interrupted thread. The interrupt handler thread then fills in any remaining interrupted thread information, puts itself on a sleep queue to await the completion of the blocking condition, at which time the sleeping interrupt handler thread will be made runnable again and will be eventually dispatched to complete the servicing of the interrupt which it began earlier.
In a particularly preferred embodiment of the invention, before putting itself on the sleep queue, the interrupt handler thread transfers its dispatching priority level to the thread which caused the block, in order to guarantee that the blocking thread will have a high enough priority level to prevent priority inversion (for example, where a lower level priority thread continues to block higher priority threads).
In order to accelerate the interrupt handling process, some interrupt handler threads may be prepared before they are needed and thus are available for use when an interrupt occurs.
DESCRIPTION OF THE DRAWINGS
The objects, features and advantages of the system of the present invention will be apparent from the following description in which:
FIG. 1 illustrates a general architecture of a tightly-coupled multi-processor computer system.
FIG. 2 illustrates the general architecture of a multi-threaded, multi-processor system.
FIG. 3 illustrates graphically how a typical interrupt is handled in the prior art.
FIG. 4a illustrates an example of nested interrupts in the prior art, and FIG. 4b illustrates the same nested interrupts using individual thread stacks.
FIG. 5 shows the SunOS 5.0 Kernel Thread Synchronization Interfaces.
FIGS. 6, 7a, 7b, 8, 9 and 10 show a detailed flow chart of the interrupt handling procedure of the present invention.
DESCRIPTION OF THE PREFERRED EMBODIMENT
The following disclosure describes solutions to problems which are encountered when attempting to implement interrupt handlers in tightly-coupled multiprocessor computer systems. The implementation described is a portion of the SunOS® 5.0 Operating System to be released under the name Solaris® 2.0 by Sun Microsystems®, Inc. Solaris and Sun Microsystems are registered trademarks, and SunOS is a trademark of Sun Microsystems, Inc. Reference may be made to the above referenced Technical Articles describing other features of the SunOS 5.0 multithreading, multiprocessing Operating System. A general understanding of the UNIX Operating System as described in the referenced text by Bach, as well as a general understanding of multithreading explained in the reference by Powell et al, is assumed. While this description of the present invention is made in terms of SunOS 5.0, it will be clear to those skilled in the art that the method and apparatus described herein may be implemented in various multi-threaded operating systems and in various configurations, or makes or models of tightly-coupled processors.
SunOS 5.0 is intended to run on uniprocessors and tightly-coupled shared memory multiprocessor systems with one or more processors. Referring now to FIG. 1, the computer system is assumed to have one or more central processor units (CPUs) 10, 12, 14 sharing a memory 20 and clock 18. The kernel 16 assumes all processors are equivalent. Processors 10,12,14 execute kernel threads selected from the queue of runnable kernel threads 26. If a particular multiprocessor implementation places an asymmetric load on the processors (e.g., interrupts) the kernel 16 will nonetheless schedule threads to processors 10,12,14 as if they were equivalent. In general, all processors 10,12,14 see the same data in memory 20. This model is relaxed, somewhat, in that memory operations issued by a processor 10, 12, 14 may be delayed or reordered when viewed by other processors. In this environment, shared access to memory is preferably protected by synchronization objects 24. (The data locking mechanisms are also sometimes called synchronization variables or synchronization primitives). The exception is that single, primitive data items may be read or updated atomically (e.g. all the bytes in a word change at the same time). (A "word" is a four byte piece of data.) The shared memory 20 is assumed to be symmetrical. Thus the kernel 16 currently does not ensure that processes scheduled on a particular processor 10 (for example), are placed in a particular piece of memory 20 that is faster to access from that processor 10. It is possible for a kernel 16 to run "symmetrically" on a multiprocessor yet not allow more than one processor 10, 12, 14 to execute kernel code 16. This is clearly not a strategy that scales well with increasing numbers of processors, and in the preferred embodiment of the present invention, all of the processors 10,12,14 in the system can execute the shared kernel code 16 simultaneously, and use the data structures in the shared memory 20 to communicate between the processors 10,12,14 as required.
The "cpu structure area" 25 contains a data structure for each processor 10,12,14. These per-processor structures contain per-processor data, such as: currently executing thread, idle thread, current dispatching priority, and interrupt handling information.
SunOS 5.0 is designed with a relatively "fine grained" locking strategy to take advantage of as many processors 10, 12, 14 as possible. Each kernel subsystem has a locking strategy designed to allow a high degree of concurrency for frequent operations. In general, access to data items 22 are protected by locks as opposed to locking access to entire routines. Infrequent operations are usually coarsely locked with simple mutual exclusion. Overall, SunOS 5.0 has several hundred distinct synchronization objects 24 statically, and can have many thousands of synchronization objects 24 dynamically. Kernel threads synchronize via a variety of synchronization objects or primitives, such as:
Mutual exclusion (mutex) locks,
Condition variables,
Counting semaphores,
Multiple readers, single writer (readers/writer) locks.
The mutex and writer locks support a dispatching priority inheritance protocol which prevents lower priority threads from blocking higher priority threads (priority inversions).
Kernel threads represent the fundamental entities that are scheduled and dispatched on any of the CPUs in the system. A kernel thread is preferably very lightweight, having only a small data structure and a stack. When switching between kernel threads it is not necessary to change virtual memory address space information, so it is relatively inexpensive.
Kernel threads are fully preemptible and may be scheduled by any of the scheduling classes included with the system, including the real-time (fixed priority) class. Since all other execution entities are built using kernel threads, including, in the present invention, complete interrupt processing, they represent a fully preemptible, real-time "nucleus" within the kernel. "Preemption" is the action whereby a runnable thread with a higher dispatching priority may force a CPU to cease executing a thread with a lower dispatching priority in favor of executing the higher dispatching priority thread. In prior art UNIX operating systems the kernel allowed a process to preempt an already running process at only a very few selected times. In the preferred embodiment of the present invention, the kernel allows preemption at all but a very few short periods of time and the interrupt handling threads of the present invention are similarly preemptable.
Kernel threads synchronize using synchronization primitives that support protocols for preventing dispatching priority inversion, so a thread's priority is determined by which activities it is impeding by holding locks as well as by the service it is performing. Kernel threads are used to provide asynchronous kernel activity, such as asynchronous writes to disk, servicing STREAMS queues, and callouts. (A "STREAM" is a full-duplex connection between a process and a device driver, designed to provide flexibility and modularity for the I/O subsystem within a UNIX system.) This removes various diversions in the idle loop and trap code and replaces them with independently scheduled threads. Not only does this increase potential concurrency (these activities can be handled by other CPUs), but it also gives each asynchronous activity a priority so that it may be appropriately scheduled.
Referring now to FIG. 2, the relationship of a traditional single-threaded process 30 and multithreaded processes 32,34 to the user-level software 80, kernel 82, and processor hardware 84 in a multi-threaded system is illustrated. The multi-threaded programming model has two levels in the user-level software area 80: threads 40-47, and Light Weight Processes(LWPs) 50-55. In the multi-threaded paradigm, programmers write programs using threads (which may be thought of as independent program execution entities). A multi-threaded UNIX process can have several threads of control, which can run independently on different CPUs. User threads are implemented by the library and are not known to the kernel. To the kernel, the LWP is the execution part of a traditional UNIX process. LWPs are implemented by the kernel. User threads are implemented using LWPs in the following way: User threads are actually represented by data structures in the address space of a program. An LWP chooses a user thread to run by locating the user thread state in the program's memory. Loading the registers and assuming the identity of the user thread, the LWP executes the user threads instructions. If the user thread cannot continue, or if other user threads should be run, the LWP saves the state of the user thread back in memory. The LWP can now select another user thread to run. Because a user thread is implemented by an LWP, the capabilities of a user thread are the same as an LWP. When a user thread needs to access a kernel service by performing a system call, or to interact with user threads in other UNIX processes, it does so as an LWP. The user thread needing the system call remains bound to the LWP executing it until the system call is completed. If a user thread needs to interact with other user threads in the same program, it can do so without involving the operating system. Switching from one user thread to another occurs without the kernel knowing it. Just as the UNIX "stdio" library routines (fopen (), fread ()) are implemented using the UNIX system calls (open, read), the user thread interface is implemented using the LWP interface, and for many of the same reasons.
Returning again to FIG. 2, kernel threads 60-61, and 63-66 are associated with the LWPs 50-55. Kernel threads 60-66 represent the fundamental entities that are scheduled and dispatched on any of the CPUs 70,72,74, 76, 78 in the system. Like the LWP, a kernel thread may be very lightweight, having only a small data structure and a stack. The first Process 30 is the traditional UNIX process with a single thread 40 attached to a single LWP 50. The second Process 32 has threads 41 and 42 multiplexed on a single LWP 51 as in typical coroutine packages, such as SunOS 4.0 liblwp. The third Process 34 has several threads 43,44,45 multiplexed on a lesser number of LWPs 52,53 and has a thread 46 permanently bound to LWP 54, and in addition, the process 34 has asked the system to bind one of its LWPs 55 to a CPU 78. The bound and unbound threads 40-47 can still synchronize with each other both within each process 30,32,34 and between processes 30, 32,34 in the usual way by means of mutex locks, condition variables, semaphores, or readers/writer locks. The kernel supports the execution of user LWPs by associating a kernel thread 60-61, 63-66 with each LWP 50-55. While all LWPs 50-55 have a kernel thread, not all kernel threads have an 5LWP. Note kernel thread 62 for example. This type of kernel thread 62, with no LWP associated, would be used for handling interrupts, executing STREAMS code or providing Network File System (NFS) service for example.
Kernel threads 60-66 represent a thread of control inside the kernel 82. They are scheduled to execute on the processors 70, 72, 74, 76, 78 available to the kernel 82 within the shared kernel address space. A kernel thread contains the following state:
a stack,
a set of registers,
a pointer to thread local storage,
a state flag,
a priority,
a processor affinity mask.
Typically, the stack is used for thread local storage. Every thread logically has its own set of registers. The state flag indicates whether a thread is running or blocking. The priority is used for scheduling The processor affinity mask is used to restrict the thread to running on a subset of the available processors.
Thread creation is as follows:
______________________________________
kthread.sub.-- id.sub.-- t
thread.sub.-- create (stk, stksize, proc, arg, len, pp, state, pri)
caddr.sub.-- t stk;
int stksize;
void (*proc) ( );
caddr.sub.-- t arg;
int len;
proc.sub.-- t *pp;
int state;
int pri;
______________________________________
"thread-- create ()" creates a new kernel thread having a stack of the specified size, at the specified address, a procedure entry point, and an argument to be passed to the procedure. It will return the ID of the new thread. The new thread will be in the state specified, and will be considered part of the process pointed to by "pp". It will have dispatching priority "pri". If the stack address is "Null", the stack will be dynamically allocated, and if the size is zero, the default size will be used. The argument to be passed to the newly created thread can be passed by value, in which case the "len" field should be zero, or by address, in which case the length field should be the size of the argument. This argument will be copied to a dynamically allocated area and the address of that area will be passed to the new thread's procedure entry point.
Thread exit is by
void thread-- exit ();
"thread-- exit ()" terminates the current thread.
Generally, an "interrupt" is a signal that gets the attention of the CPU and is usually generated when input or output is required. For example, hardware interrupts are generated when a key is pressed or when the mouse is clicked. Software interrupts are generated by a program (or process or thread) requiring input or output or generally some service. When an interrupt occurs, control is transferred to the operating system, which determines what action is to be taken or generally what "interrupt service" is to be performed. The portions of the operating system which perform the specific interrupt service required is generally called the "interrupt handler".
In the preferred embodiment of the present invention, the kernel is responsible for handling interrupts, whether they result from hardware (such as from the clock or from peripheral devices), from a programmed interrupt (execution of instructions that cause the hardware to send an interrupt to any processor in the system), or from exceptions such as page faults. These interrupts may occur on any CPU, so the kernel must handle these interrupts on any processor. In the general case, if the CPU is executing a thread with a lower CPU interrupt priority level than the priority level of the interrupt, the CPU accepts the interrupt before decoding the next instruction and raises the CPU interrupt priority level, so that no other interrupts of that priority level or lower can happen while it handles the current interrupt. The kernel can raise the interrupt priority level while accessing data structures also used by the interrupt handlers for that level or lower, to preserve the integrity of these data structures.
This general interrupt handling procedure in the prior art is now illustrated. Referring to FIG. 3, a kernel 92 generally handles an interrupt with the following steps:
1. It saves the current register context 98 of the executing process P 0 90 and creates (pushes) a new context layer onto the kernel stack of the user process, or onto a special stack for interrupts.
2. It determines the cause of the interrupt, identifying the type (such as clock or disk) and the unit number of the interrupt, if applicable (such as which disk drive caused the interrupt). When the system gets an interrupt, it usually gets a number which is associated with the address of the handler (service routine) for that type of interrupt. These numbers depend on the configuration of the system (i.e. what devices are attached). A typical configuration might be as follows:
______________________________________
Number  Device or Interrupt Type
______________________________________
 1      Software or inter-processor interrupts
 4      SCSI Channel interrupt (disk, tape, cdrom drives)
 6      ethernet interface interrupt
10      clock interrupt (every 10 ms)
12      serial communication ports
13      "cross-call" interrupts from other CPUs
        also floppy driver "pseudo-DMA" interrupt
14      profiling timer interrupt
        also audio "pseudo-DMA" interrupt
15      Hardware error interrupts (parity error in memory)
______________________________________
In this case if the clock interrupts the system 96, the kernel 92 gets interrupt number 10 100 from the hardware, loads the context of the clock handler 102 and invokes the clock interrupt handler 104.
3. Then the interrupt handler begins executing to perform the service required by the clock interrupt.
4. The interrupt handler completes its work and returns 108. The kernel 92 executes a machine-specific sequence of instructions that restores the register context and kernel stack of the process P 0 110, and returns control 112 to P0, which resumes execution from the point at which the interruption occurred.
If nested interrupts are allowed, interrupt handlers can become interrupted by higher level interrupts. FIG. 4a illustrates an example where a process or thread issues a system call 200, and the kernel has saved the context of the interrupted user level process 206 in the kernel stack 212, and receives a disk interrupt 202 while executing the system call. The disk interrupt 202 causes the kernel to save the system call handler context 208 in the stack 212. The kernel gives control to the disk interrupt handler and it is interrupted by the clock interrupt 204. As before, the kernel saves the context of the Disk interrupt handler 210 and gives control to the clock interrupt handler. As each handler finishes its work and returns, the kernel pops the previous context from the stack 212 and allows them to continue their process.
In the preferred embodiment of the present invention, interrupts are handled by kernel threads. FIG. 4b illustrates the same sequence of nested interrupts but showing that each interrupt handler thread has its own stack 226, 228, 230 on which the relative contexts are saved. The kernel synchronizes with interrupt handler threads via normal thread synchronization objects. If an interrupt handler thread encounters a locked synchronization variable, the interrupt handler thread blocks and allows the critical section to clear. As a result, in the presently preferred embodiment, all interrupt handler threads are separately schedulable and each may sleep if blocked.
UNIX System V Release 4 (SVR4), upon which SunOS 5.0 is based, provides for several scheduling classes. A scheduling class determines the relative dispatching priority of processes or threads within the class, and then converts that priority to a global dispatching priority. The dispatcher chooses the process with the highest global dispatching priority and runs it. With the addition of multithreading in SunOS 5.0 , the scheduling classes and dispatcher operate on threads instead of processes. The scheduling classes currently supported are system, timesharing, and real-time (fixed-priority).
The dispatcher chooses the thread with the greatest global dispatching priority to run on a CPU. If more than one thread has the same dispatching priority, they are dispatched in round-robin order. If there is more than one CPU, each one uses the dispatcher to find the highest priority runnable thread that is not already being run on another CPU.
The kernel has been made preemptible to better support the real-time class and interrupt threads. Preemption is disabled only in a small number of bounded sections of code relating to the scheduler dispatcher. This means that a runnable thread runs as soon as is practical after its dispatching priority becomes high enough. For example, when thread A awakens thread B, if thread B has a better dispatching priority, the running thread A will put itself back on the run queue and allow the CPU to run thread B. On a multiprocessor, if thread A has better dispatching priority than thread B, but thread B has better priority than the current thread on another CPU, then that CPU will be directed to preempt its current thread and choose the best thread to run. In addition, user code run by an underlying kernel thread of sufficient dispatching priority (e.g. real-time threads) will execute, even though threads that were executing lower priority kernel or application code wait for execution resources.
Synchronization Architecture.
The SunOS 5.0 kernel implements the same synchronization objects for internal use as are provided by the user level libraries for use in multithreaded application programs described in the aforementioned paper by Powell et al. These are mutual exclusion locks (mutexes), condition variables, semaphores, and multiple readers, single writer (readers/writer) locks. The interfaces are shown in FIG. 5. (Note that kernel synchronization primitives must use a different type name than user synchronization primitives so that the types are not confused in applications that read internal data structures.) These are all implemented in an object oriented fashion, in that the behavior of the synchronization object is specified when it is initialized.
Interrupts as Threads.
Many implementations of threads have a variety of synchronization primitives that have similar semantics (e.g., mutual exclusion) yet explicitly sleep or spin for blocking. When a synchronization primitive "spins" for blocking, it loops continuously until a value in memory changes. For mutexes, the spin primitives must hold interrupt priority high enough while the lock is held to prevent any interrupt handlers that may also use the synchronization object, from interrupting while the object is locked and deadlocking. The interrupt level must be raised before the lock is acquired and then lowered after the lock is released.
This has several drawbacks. First, the raising and lowering of interrupt priority can be an expensive operation, especially on architectures that require external interrupt controllers (especially where mutexes are heavily used). Secondly, in a modular kernel, such as SVR4, many subsystems are interdependent. In several cases (e.g., mapping in kernel memory or memory allocation) these requests can come from interrupt handlers and can involve many kernel subsystems. This in turn, means that the mutexes used in many kernel subsystems must protect themselves at a relatively high priority from the possibility that they may be required by an interrupt handler. This tends to keep interrupt priority high for relatively long periods and the cost of raising and lowering interrupt priority must be paid for every mutex acquisition and release. Lastly, interrupt handlers must live in a constrained environment that avoids any use of kernel functions that can potentially sleep, even for short periods.
To avoid these drawbacks, the SunOS 5.0 kernel of the present invention treats most interrupts as asynchronously created and dispatched high priority threads. This enables these interrupt handler threads to sleep, if required, and to use the standard synchronization primitives.
On most architectures, putting threads to sleep must be done in software and this must be protected from interrupts if interrupts are to sleep themselves or wakeup other threads. The restructured kernel of the present invention uses a primitive spin lock protected by raised priority to implement this. This represents one of a few bounded sections of code where interrupts are locked out. Traditional kernel implementations also protect the dispatcher by locking out interrupts, usually all interrupts. The restructured kernel of the present invention has a modifiable level (the "thread level") above which interrupts are no longer handled as threads and are treated more like non-portable "firmware" (e.g. simulating direct memory access (DMA) via programmed I/O). These interrupts generally handle serial input and programmed I/O to the floppy drive and audio interfaces and are more timing critical. The related interrupt handler threads can only synchronize using the spin variants of mutex locks and software interrupts. If the "thread level" is set to the maximum priority, then all interrupts are locked out during dispatching. For implementations where the "firmware" cannot tolerate even the relatively small dispatcher lockout time, the "thread level" can be lowered. Typically this is lowered to the same level as the interrupt level at which the scheduling clock runs.
Implementing Interrupts as Threads.
Previous versions of SunOS have treated interrupts in the traditional way. When an interrupt occurs the state of the interrupted process is saved and it is held captive (pinned) until the interrupt returns. Typically, interrupts are handled on the kernel stack of the interrupted process or on a separate interrupt stack. The interrupt handler must complete execution and get off the stack before anything else is allowed to run on that processor. In these systems the kernel synchronizes with interrupt handlers on a processor by blocking out interrupts while in critical sections.
In the present invention as implemented in SunOS 5.0, interrupts behave like asynchronously created threads. Interrupts must be efficient, so a full thread creation for each interrupt is impractical. Instead, interrupt threads are preallocated, already partly initialized, with a number of these preallocated interrupt threads set aside for each CPU. When an interrupt occurs, the minimum amount of work is done to move onto the stack of an interrupt handler thread without doing a complete context switch, and to set it as the current thread. At this point the interrupt handler thread is not yet a full fledged thread (it cannot be descheduled) and the interrupted thread is pinned until the interrupt handler thread returns or blocks, and cannot proceed on another CPU. When the interrupt handler thread returns, the state of the interrupted thread is restored.
This preallocation of interrupt handler threads has a cost in terms of memory usage. Currently an interrupt handler thread is preallocated for each potentially active interrupt level below the thread level for each CPU. There are nine interrupt levels on the SunOS 5.0 implementation that can potentially use threads. An additional interrupt handler thread is preallocated for the clock (one per system). Since each thread requires a stack and a data structure, perhaps 8K bytes or so, the memory cost can be high. However, it is unlikely that all interrupt levels are active at any one time, so it is possible to have a smaller pool of interrupt handler threads on each CPU and block all subsequent interrupts below the thread level when the pool is empty, essentially limiting how many interrupts may be simultaneously active.
Interrupts may nest. An interrupt handler thread may itself be interrupted and be pinned by another interrupt handler thread with a higher interrupt priority.
If an interrupt handler thread blocks on a synchronization variable (e.g., mutex or condition variable), it completes the saving of the context (passivates) of the pinned thread, making it runnable by any CPU. Then the interrupt handler thread fills in any remaining thread state information that is required and saves the interrupt handler threads context. Thus most of the overhead of creating a full thread is only done when the interrupt must block, due to contention.
While an interrupt handler thread is in progress, the interrupt priority level it is handling, and all lower-priority interrupts must be locked-out. This is managed by the normal interrupt priority mechanism unless the interrupt handler thread blocks. If it blocks, these locked-out interrupts must remain disabled in case the interrupt handler thread is not reenterable at the point that it blocked or it is still doing high priority processing (i.e. should not be interrupted by lower priority work). While it is blocked the interrupt handler thread is bound to the CPU it started on as an implementation convenience and to guarantee that there will always be an interrupt handler thread available when an interrupt occurs. A flag is set in the CPU structure indicating that an interrupt at that level is blocked, and the minimum interrupt priority level is noted. Whenever the interrupt priority (spl) level changes, the CPU's base spl level is checked, and the actual interrupt priority level is never allowed to be below that spl value.
There is also an interface, release-- interrupt(), which allows an interrupt handler thread to lower the interrupt priority level and continue as a normal, high priority thread. This is done by passivating the pinned thread and then lowering the interrupt priority level.
An alternative approach to this is to use bounded first-level interrupt handlers to capture device state and then wake up an interrupt thread that is waiting to do the remainder of the servicing. See David Barnett, Kernel Threads and their Performance Benefits, Real Time, Vol. 4. No. 1, Lynx Real Time Systems, Inc. Los Gatos, Calif., 1992!. This approach has the disadvantages of requiring device drivers to be restructured and of always requiring a full context switch to the second level thread. The approach of the present invention used in SunOS 5.0 allows full thread behavior without restructured drivers and without the cost of doing a full context switch in the usual case where the interrupt handler does not have to block.
The method of the present invention described above is now illustrated in more detail as implemented in SunOS 5.0 on the SPARC® architecture based computer systems of Sun Microsystems, Inc. (SPARC is a registered trademark of SPARC International Inc.). While the following exemplary description of the method and apparatus of the present invention is illustrated in terms of SunOS 5.0 and SPARC it will be understood that the invention may be practiced on other hardware architectures and in other operating systems. Referring to FIG. 6, it is assumed that a thread A is running 130 in one of the CPUs. When a hardware trap occurs 132, all traps are disabled, and the program counter is saved. The interrupt priority level is put into register "%14" 134, and the common trap entry is executed 136. The kernel stack of thread A (the interrupted thread) is found and the global registers are saved without doing a complete context switch. Window overflow is checked and saved if required. ("Window overflow" occurs if the current window counter points to an invalid window). Next the common interrupt code 138 is executed which checks to see what kind of interrupt occurred. If it is a clock interrupt, this is handled by a special routine 142 described below. If it is an interrupt numbered 11 through 15 140 (for example, an interrupt from a serial communication port (#12), a "cross-call" from another CPU or from the floppy drive (#13), from the profiling timer (#14), or from a hardware error (#15)), these are handled in the traditional way because these are generally time-critical and can not be permitted to be blocked by the dispatcher. If the interrupt type is any other number 144 then the kernel gets the next available interrupt handler thread (Thread B) from the pool of pre-prepared interrupt handler threads for the CPU which was interrupted 146. Thread B's thread state information is modified 148 by setting Thread B's field "t-- intr" to point to thread A (denoting the thread that was interrupted); by setting the kernel stack pointers to point to thread B's stack; by setting the interrupted CPU's "current thread" to B; and by setting the "current thread register % g7" to B. In addition, register "% psr" is set to block all interrupts at or below the level of this interrupt, and the traps are re-enabled. 150
Continuing the description of the preferred embodiment of the interrupt handling procedure of the present invention, refer now to FIG. 7a. Having made the initial register and pointer settings as described above to permit Thread B to handle the interrupt without yet having to make a complete context switch, Thread B looks-up the handler for the specific type of interrupt that occurred and calls that handler. 152 This handler will begin executing and will either return without having been blocked, will block and be unblocked one or more times before returning, or will call "release-- interrupt ()" and will return thereafter 154. Thread B's "t-- intr" field is tested and if it is NULL the interrupt handler thread has blocked or called "release-- interrupt ()" 157. If thread B's field "T-- INTR-- THREAD" flag is not clear thread B did not call "release-- interrupt ()" and is still an interrupt handler thread (159 on FIG. 7b).
Referring again to FIG. 7a, in most cases the interrupt handler thread (thread B) will return without having been blocked 156. At the return from the interrupt handler thread 162, interrupts 1-10 are disabled while the interrupted thread A's registers are restored (that is, A's stack pointer is restored; "current-- thread" is set to A; and register "% g7" is set to A) 164. The kernel also puts the interrupt thread B back onto the pre-prepared interrupt handler thread pool for the interrupted CPU 162, and resets the register "% psr" to enable interrupts above the highest active interrupt thread. 166 Referring now to FIG. 9, the kernel then checks to see if there are any "asynchronous software traps" (AST's) waiting 168. If so, the kernel will process these without doing a context switch of thread A and when completed (or if no ASTs were waiting) the kernel will then check the "cpu-- kprunrun" field in the CPU structure to see if a runnable thread with dispatching priority level higher than thread A is waiting to run 170. If so, a context switch of thread A will be completed and thread A will be placed on the runnable queue, and control transferred to the dispatcher to initiate the highest priority thread 172. If there is no waiting thread with a dispatching priority higher than thread A, then control is transferred to resume thread A 174.
If the interrupt handler thread (thread B) does block (i.e. become blocked) because of some synchronizing condition, the processing which occurs is shown in FIG. 8. Referring to FIG. 8, the kernel puts the blocked thread B on the sleep queue of the synchronizing object related to the thread that is causing the block; and gives the dispatching priority level of the blocked interrupt handler thread B to the thread causing the block 182. This is called "priority inheritance" and insures that the blocking thread will run as soon as possible. Then the kernel transfers control to the dispatcher who sees that its register "t-- intr" shows that thread A is pinned. As a result, the dispatcher calls "thread-- unpin" 184. "Thread-- unpin" completes the context switch of thread A (the "pinned" thread); "Nulls" the "t-- intr" field of thread B; marks the interrupt level of the blocked interrupt thread B in the "cpu-- intr-- active" field in the CPU's cpu structure, so that the interrupt priority level will be held by the interrupted CPU; and control is transferred to the dispatcher to initiate the highest priority thread. This is usually the blocking thread 186. At this point the blocked interrupt handler thread B awaits the end of the condition that caused it to block. When the synchronizing object controlling the sleep queue containing the sleeping thread B finally awakens thread B, the common interrupt code, which called the handler checks the "t-- intr" field and finds it equal to "Null" indicating thread B was blocked. 188 Thread B completes its handling of the interrupt and upon completion, and if no other blocks occur, returns (158 in FIG. 7b), and the common interrupt code puts the interrupt handler thread back onto the pre-prepared interrupt handler thread pool for that CPU and returns control to the dispatcher to switch to the highest priority runnable thread available. (176 in FIG. 7b).
Under some conditions, the interrupt handler thread may wish to continue as a kernel thread without holding off further interrupts. Referring now to FIG. 10, the function "release-- interrupt ()" may be called to allow the interrupt to be reenabled. This routine must replace the pre-prepared interrupt handler thread in the per-CPU pool 199 and convert calling thread B to a non-interrupt thread. The CPU's "cpu-- intr-- actv" flag is cleared of the interrupt level of thread B, 192, and thread B's "T-- INTR-- THREAD" flag is cleared, indicating to the common interrupt code that this thread is not an interrupt handler thread. 194. Since thread B is no longer an interrupt handler thread its dispatching priority is lowered and thread B is placed on the run queue to be subsequently activated by the dispatcher whenever appropriate. 196. "Release-- interrupt" then calls "Thread-- unpin" to unpin thread A to allow thread A to resume. See block 186 on FIG. 8 as described earlier. After unpinning thread A, "release-- interrupt ()" will eventually return to block 154 on FIG. 7a and follows path 157, 160 (on FIG. 7b), to blocks 178, and 180 where this non-interrupt thread which remains is marked as a "zombie" telling the kernel to eventually free this thread.
Clock Interrupt.
The clock interrupt (142 in FIG. 6), which occurs 100 times a second on current Sun SPARC implementations, is handled specially. There is only one clock interrupt thread in the system (not one per CPU), and the clock interrupt handler invokes the clock handler thread only if it is not already active. The clock handler thread could possibly be delayed for more than one clock tick by blocking on a mutex or by higher-level interrupts. When a clock tick occurs and the clock thread is already active, the interrupt is cleared and a counter is incremented. If the clock handler thread finds the counter non-zero before it returns, it will decrement the counter and repeat the clock processing. This occurs very rarely in practice. When it occurs, it is usually due to heavy activity at higher interrupt levels. It can also occur while debugging.
Kernel Locking Strategy
The locking approach used almost exclusively in the kernel to ensure data consistency is data based locking. That is, the mutex and readerwriter locks each protect a set of shared data, as opposed to protecting routines (monitors). Every piece of shared data is protected by a synchronization object. Some aspects of locking in the virtual memory, file system, STREAMS, and device drivers are described in the above referenced paper in Kleiman 1992!. An elaboration on device driver issues is pertinent, since the present invention using interrupt handler threads may be implemented in systems where the device-drivers have not been modified to use interrupt handler threads.
Non-MT Driver Support.
A "device driver" is a special subprogram to handle a specific I/O device. Some device drivers have not been modified to protect themselves against concurrency in a multithreaded environment. These drivers are called "MT-unsafe"; because they do not provide their own locking. In order to provide some interim support for MT-unsafe drivers, the preferred embodiment of the present invention provides wrappers that acquire a single global mutex, "unsafe-- driver". These wrappers insure that only one such driver will be active at any one time. MT-unsafe drivers can also use the old sleep/wakeup mechanism. "Sleep ()" safely releases the "unsafe-- driver" mutex after the thread is asleep, and reacquires it before returning. The "longimp()" feature of "sleep()" is maintained as well. When a thread is signalled in "sleep ()", if it specified a dispatch value greater than PZERO, a "longimp ()" takes the thread to a "setjmp ()" that was performed in the unsafe driver entry wrapper, which returns EINTR to the caller of the driver. "Sleep ()" checks to make sure it is called by an MT-unsafe driver, and panics if it isn't. It isn't safe to use "sleep ()" from a driver which does its own locking. There are several ways a driver may be entered, all of them have to get the "unsafe-driver" mutex if the driver isn't safe. For example, when an interrupt that is to be handled by an MT-unsafe driver occurs, the "unsafe-- driver" mutex is acquired before the interrupt handler calls the driver's interrupt handler. In addition, if an MT-unsafe driver uses timeout to request a callback at a later time, the callout structure is marked so that the "unsafe-- driver" mutex will be held during the callback. It is fairly easy to provide at least simple locking for a driver, so almost all drivers in the system have some of their own locking. These drivers are called "MT-Safe", regardless of how fine-grained their locking is. Some developers have used the term "MT-Hot" to indicate that a driver does fine-grained locking.
To the extent that UNIX International and USL Inc. have defined the SVR4 Multiprocessor Device Driver Interface and Driver Kernel Interface (DDI/DKI), SunOS 5.0 implements those interfaces as defined so far, using locking primitives and ignoring any spin semantics. This allows compatibility for SVR4 multiprocessor drivers.
Finally, since the kernel is fully preemptible in the present embodiment of the invention, kernel threads were made to time-slice. Code was simply added to the clock interrupt handler to preempt whatever thread was interrupted. This allows even a uniprocessor to have almost arbitrary code interleavings. Increasing the clock interrupt rate made this even more valuable in finding windows where data was unprotected. By causing kernel threads to preempt each other as often as possible, locking problems in the system can be found using uniprocessor hardware before multiprocessor hardware is available. This feature is intended only as a debugging feature, since it does have some adverse performance impact, however slight.
Additional detailed information concerning the invention may be found in the paper titled "Beyond Multiprocessing . . . Multithreading the System V Release 4 Kernel" by J. R. Eykholt, S. R. Kleiman, S. Barton, R. Faulkner, A. Shivalingiah, M. Smith, D. Stein, J. Voll, M. Weeks, and D. Williams, which is incorporated herein by reference and is attached hereto as Appendix A, and which is scheduled for its initial publication at USENIX, Summer '92, at San Antonio, Tex. on Jun. 8-12, 1992.

Claims (20)

What is claimed is:
1. In a computer system having a central processing unit (CPU), with at least one executing thread which has a context, a method of processing interrupts to said CPU, performed by a computer, comprising the steps of:
a) recognizing a first external interrupt of said CPU, said first external interrupt causing said at least one executing thread to become an interrupted thread;
b) transferring execution control from said interrupted thread to a machine instruction corresponding to said first external interrupt; and
c) activating a first interrupt handler thread to execute an interrupt service related to said first external interrupt, said interrupt service being completed without the use of a non-thread routine, said non-thread routine being one which is restricted to be runnable in a non-thread environment, said first interrupt handler thread synchronization primitives in lieu of locking-out other interrupts.
2. The method of claim 1 comprising the additional step of transferring execution control to a highest priority thread which is waiting to run, said transfer of execution control occurring upon completion of processing by said first interrupt handler thread.
3. The method of claim 1 further comprising the additional step of executing said first interrupt handler thread without saving the context of said interrupted thread.
4. The method according to claim 1 further comprising the steps of:
a) recognizing that a condition has occurred wherein a second thread blocks the further execution of said first interrupt handler thread;
b) performing by said blocked first interrupt handler thread the operations necessary to save a complete context of said interrupted thread;
c) putting to sleep said blocked first interrupt handler thread until said blocking condition is cleared; and
d) transferring execution control to a highest priority thread which is waiting to run.
5. The method according to claim 4 comprising the additional step of transferring by said blocked interrupt handler thread a dispatching priority level of said blocked interrupt handler thread to the second thread that is causing the block.
6. The method according to claim 1 wherein said first interrupt handler thread is a pre-prepared interrupt handler thread.
7. The method according to claim 1 wherein said computer system is a tightly-coupled multi-processor system having a plurality of CPUs.
8. A computer system having a CPU, with at least one executing thread which has a context, said at least one executing thread being processed by said CPU, said computer system comprising:
a) a computer containing a first interrupt recognition mechanism for recognizing a first external interrupt of said CPU, said first external interrupt causing said at least one executing thread to become an interrupted thread;
b) a first interrupt control mechanism, coupled to said first interrupt recognition mechanism for transferring execution control from the interrupted thread to a machine instruction corresponding to said first external interrupt; and
c) an interrupt processing mechanism, coupled to said first interrupt control mechanism for activating a first interrupt handler thread to execute an interrupt service related to said first interrupt, said interrupt service being completed without the use of a non-thread routine, said non-thread routine being one which is restricted to be runnable in a non-thread environment, said first interrupt handler thread using thread synchronization primitives in lieu of locking-out other interrupts.
9. The computer system as recited in claim 8 further comprising a second interrupt control mechanism, coupled to said interrupt processing mechanism for transferring execution control to a highest priority thread that is waiting to run.
10. The computer system as recited in claim 9 further comprising:
a) a second interrupt recognition mechanism portion of said CPU, for recognizing that a condition has occurred wherein a second thread blocks further execution of said first interrupt handler thread;
b) a first processor device, coupled to said second interrupt recognition mechanism, for performing by said blocked first interrupt handler thread, operations necessary to save a complete context of said interrupted thread;
c) a second processor device, coupled to said first processor device, for putting to sleep said blocked first interrupt handler thread until said blocking condition is cleared; and
d) a first transfer device, coupled to said second processor device, for transferring execution control to a highest priority thread that is waiting to run.
11. The computer system recited in claim 10 further comprising a second transfer device coupled to said second processor device, for transferring by said blocked first interrupt handler thread a dispatching priority level of said blocked first interrupt handler thread to the second thread that is causing said block.
12. The computer system as recited in claim 8 further comprising a processing mechanism, coupled to said interrupt processing mechanism, for executing said first interrupt handler thread without saving the context of said interrupted thread.
13. The computer system recited in claim 8 wherein said first interrupt handler thread is a pre-prepared interrupt handler thread.
14. The computer system recited in claim 8 wherein said computer system is a tightly-coupled multi-processor system having a plurality of CPUs.
15. In a computer system having a CPU, with at least one executing thread which has a context, a method performed of processing interrupts to said CPU, performed by a computer, comprising the steps of:
a) recognizing a first external interrupt of said CPU, said first external interrupt causing said at least one executing thread to become an interrupted thread;
b) transferring execution control from said interrupted thread to a machine instruction corresponding to said first external interrupt;
c) activating a first interrupt handler thread; and
d) executing said first interrupt handler thread to perform an interrupt service related to said first external interrupt without saving said context of said interrupted thread if said first interrupt handler thread is not itself preempted before completing said interrupt service, said first interrupt handler thread using thread synchronization primitives in lieu of locking-out other interrupts
whereby processing time is saved by not having to execute a context switch for every interrupt service and whereby other interrupts are not locked out for an unbounded period of time.
16. A computer system having a CPU, with at least one executing thread which has a context, said computer system comprising:
a) a computer containing a first interrupt recognizing mechanism for recognizing a first external interrupt of said CPU, said first external interrupt causing said at least one executing thread to become an interrupted thread;
b) a first interrupt control mechanism, coupled to said computer for transferring execution control from said interrupted thread to a machine instruction corresponding to said first interrupt;
c) an interrupt processing mechanism, coupled to said first interrupt control mechanism for activating a first interrupt handler thread; and
d) an interrupt handler thread mechanism, coupled to said interrupt processing mechanism for executing said first interrupt handler thread without saving said context of said interrupted thread if said first interrupt handier thread is not itself preempted before completing said interrupt service, said first interrupt handler thread using thread synchronization primitives in lieu of locking-out other interrupts whereby processing time is saved by not having to execute a context switch for every interrupt service and whereby other interrupts are not locked out for an unbounded period of time.
17. In a computer system having a CPU, with at least one executing thread which has a context, a method of processing interrupts to said CPU, performed by a computer, comprising the steps of:
a) recognizing a first external interrupt of said CPU, said first external interrupt causing said at least one executing thread to become an interrupted thread;
b) transferring execution control from said interrupted thread to a machine instruction executable by a computer, corresponding to said first external interrupt;
c) activating a first interrupt handler thread to execute an interrupt service related to said first external interrupt; and
d) upon completion of said interrupt service related to said first external interrupt, transferring execution control to a highest priority thread that is waiting to run, instead of transferring execution control back to said interrupted thread.
18. In a computer system having a CPU, with at least one executing thread which has a context, a method of processing interrupts to said CPU, performed by a computer, comprising the steps of:
a) recognizing a first external interrupt of said CPU, said first external interrupt causing said at least one executing thread to become an interrupted thread;
b) transferring execution control from said interrupted thread to a machine instruction corresponding to said first external interrupt;
c) activating a first interrupt handler thread to execute an interrupt service related to said first external interrupt; and
d) allowing said interrupt handler thread to use thread synchronization primitives in lieu of locking-out other interrupts thereby being adapted to be preempted by threads with higher dispatching priorities.
19. In a computer system having a central processing unit (CPU), with at least one executing thread which has a context, a method of processing interrupts to said CPU, performed by a computer, comprising the steps of:
a) recognizing a first external interrupt of said CPU, said first external interrupt causing said at least one executing thread to become an interrupted thread;
b) transferring execution control from said interrupted thread to a machine instruction corresponding to said first external interrupt;
c) activating a first interrupt handler thread to execute an interrupt service related to said first external interrupt, said first interrupt handler thread having its own program counter and context and adapted to use thread synchronization primitives in lieu of locking-out other interrupts, said first interrupt handler thread executing said interrupt service without saving said context of said interrupted thread thereby saving process or time;
d) recognizing that a condition has occurred wherein a second thread blocks the further execution of said first interrupt handler thread;
e) performing by said blocked first interrupt handler thread operations necessary to save said context of said interrupted thread and transferring a dispatching priority level of said blocked interrupt handier thread to the second thread that is causing the block;
f) putting to sleep said blocked first interrupt handler thread until said blocking condition is cleared; and
g) transferring execution control to a highest priority thread which is waiting to run instead of returning control to said interrupted thread.
20. In a computer system having a central processing unit(CPU), with at least one executing thread which has a context, a method of processing interrupts to said CPU, performed by a computer comprising the steps of:
a) recognizing a first external interrupt of said CPU, said first external interrupt causing said at least one executing thread to become an interrupted thread;
b) transferring execution control from said interrupted thread to a machine instruction corresponding to said first external interrupt; and
c) activating a first interrupt handler thread to execute an interrupt service related to said first external interrupt, wherein said first interrupt handler thread is a pre-prepared interrupt handler thread thereby saving processor time, said pre-prepared interrupt handler thread having a data structure and storage associated with a thread already set up but said pre-prepared interrupt handler thread being not runnable as a separate thread until said first external interrupt occurs which causes said activation of said first interrupt handler thread,
whereby said use of said pre-prepared interrupt handler thread saves processing time needed to set up a data structure and storage for an interrupt handler thread.
US08/219,428 1992-05-29 1994-03-29 Apparatus and method for interrupt handling in a multi-threaded operating system kernel Expired - Lifetime US5515538A (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US08/219,428 US5515538A (en) 1992-05-29 1994-03-29 Apparatus and method for interrupt handling in a multi-threaded operating system kernel

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US89040692A 1992-05-29 1992-05-29
US08/219,428 US5515538A (en) 1992-05-29 1994-03-29 Apparatus and method for interrupt handling in a multi-threaded operating system kernel

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
US89040692A Continuation 1992-05-29 1992-05-29

Publications (1)

Publication Number Publication Date
US5515538A true US5515538A (en) 1996-05-07

Family

ID=25396632

Family Applications (1)

Application Number Title Priority Date Filing Date
US08/219,428 Expired - Lifetime US5515538A (en) 1992-05-29 1994-03-29 Apparatus and method for interrupt handling in a multi-threaded operating system kernel

Country Status (1)

Country Link
US (1) US5515538A (en)

Cited By (236)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5630141A (en) * 1993-03-25 1997-05-13 Taligent, Inc. Hierarchical apparatus and method for processing device interrupts in a computer system
US5721920A (en) * 1994-08-05 1998-02-24 Telefonaktiebolaget Lm Ericsson Method and system for providing a state oriented and event driven environment
US5721922A (en) * 1994-10-13 1998-02-24 Intel Corporation Embedding a real-time multi-tasking kernel in a non-real-time operating system
US5758161A (en) * 1996-05-24 1998-05-26 International Business Machines Corporation Testing method for checking the completion of asynchronous distributed collective operations
US5758168A (en) * 1996-04-18 1998-05-26 International Business Machines Corporation Interrupt vectoring for optionally architected facilities in computer systems
US5784618A (en) * 1993-12-23 1998-07-21 Microsoft Corporation Method and system for managing ownership of a released synchronization mechanism
US5802364A (en) * 1996-04-15 1998-09-01 Sun Microsystems, Inc. Metadevice driver rename/exchange technique for a computer system incorporating a plurality of independent device drivers
US5825649A (en) * 1994-05-19 1998-10-20 Kabushiki Kaisha Toshiba Kernel substitution method in multi-processor system and multi-processor system having kernel substitution function
US5832484A (en) * 1996-07-02 1998-11-03 Sybase, Inc. Database system with methods for parallel lock management
US5852735A (en) * 1994-08-24 1998-12-22 Alcatel Sel Aktiengesellschaft Method and apparatus for exchanging a program over a network computer system that permits reactivation of the original program if an error occurs
US5870543A (en) * 1995-06-07 1999-02-09 Digital River, Inc. System for preventing unauthorized copying of active software
US5875341A (en) * 1995-09-25 1999-02-23 Siemens Aktiengesellshaft Method for managing interrupt signals in a real-time computer system
US5883954A (en) * 1995-06-07 1999-03-16 Digital River, Inc. Self-launching encrypted try before you buy software distribution system
US5883955A (en) * 1995-06-07 1999-03-16 Digital River, Inc. On-line try before you buy software distribution system
US5887060A (en) * 1995-06-07 1999-03-23 Digital River, Inc. Central database system for automatic software program sales
US5903647A (en) * 1995-06-07 1999-05-11 Digital River, Inc. Self-launching encrypted digital information distribution system
US5905897A (en) * 1997-03-20 1999-05-18 Industrial Technology Research Institute Method and apparatus for selecting a nonblocked interrupt request
US5907702A (en) * 1997-03-28 1999-05-25 International Business Machines Corporation Method and apparatus for decreasing thread switch latency in a multithread processor
US5907617A (en) * 1995-06-07 1999-05-25 Digital River, Inc. Try before you buy software distribution and marketing system
US5918057A (en) * 1997-03-20 1999-06-29 Industrial Technology Research Institute Method and apparatus for dispatching multiple interrupt requests simultaneously
US5923872A (en) * 1997-11-26 1999-07-13 Digital Equipment Corporation Apparatus for sampling instruction operand or result values in a processor pipeline
US5928322A (en) * 1996-11-20 1999-07-27 Silicon Graphics, Inc. Low-latency real-time dispatching in general purpose multiprocessor systems
US5937187A (en) * 1996-07-01 1999-08-10 Sun Microsystems, Inc. Method and apparatus for execution and preemption control of computer process entities
US5944816A (en) * 1996-05-17 1999-08-31 Advanced Micro Devices, Inc. Microprocessor configured to execute multiple threads including interrupt service routines
US5961585A (en) * 1997-01-07 1999-10-05 Apple Computer, Inc. Real time architecture for computer system
US5987495A (en) * 1997-11-07 1999-11-16 International Business Machines Corporation Method and apparatus for fully restoring a program context following an interrupt
US5991792A (en) * 1998-01-02 1999-11-23 International Business Machines Corporation Method, apparatus and computer program product for dynamically managing a thread pool of reusable threads in a computer system
US5991790A (en) * 1996-07-01 1999-11-23 Sun Microsystems, Inc. Generation and delivery of signals in a two-level, multithreaded system
WO1999061991A1 (en) * 1998-05-22 1999-12-02 Intel Corporation Method and apparatus for power mode transition in a multi-thread processor
US6012081A (en) * 1996-07-03 2000-01-04 Siemens Aktiengesellschaft Service and event synchronous/asynchronous manager
US6018759A (en) * 1997-12-22 2000-01-25 International Business Machines Corporation Thread switch tuning tool for optimal performance in a computer processor
US6021446A (en) * 1997-07-11 2000-02-01 Sun Microsystems, Inc. Network device driver performing initial packet processing within high priority hardware interrupt service routine and then finishing processing within low priority software interrupt service routine
US6023743A (en) * 1997-06-10 2000-02-08 International Business Machines Corporation System and method for arbitrating interrupts on a daisy chained architected bus
US6026427A (en) * 1997-11-21 2000-02-15 Nishihara; Kazunori Condition variable to synchronize high level communication between processing threads
US6061710A (en) * 1997-10-29 2000-05-09 International Business Machines Corporation Multithreaded processor incorporating a thread latch register for interrupt service new pending threads
US6076157A (en) * 1997-10-23 2000-06-13 International Business Machines Corporation Method and apparatus to force a thread switch in a multithreaded processor
US6105053A (en) * 1995-06-23 2000-08-15 Emc Corporation Operating system for a non-uniform memory access multiprocessor system
US6105051A (en) * 1997-10-23 2000-08-15 International Business Machines Corporation Apparatus and method to guarantee forward progress in execution of threads in a multithreaded processor
US6108744A (en) * 1998-04-16 2000-08-22 Sun Microsystems, Inc. Software interrupt mechanism
WO2000067109A1 (en) * 1999-05-05 2000-11-09 Sharewave, Inc. Method and apparatus for providing multiple sessions on a single user operating system
US6154832A (en) * 1998-12-04 2000-11-28 Advanced Micro Devices, Inc. Processor employing multiple register sets to eliminate interrupts
US6163840A (en) * 1997-11-26 2000-12-19 Compaq Computer Corporation Method and apparatus for sampling multiple potentially concurrent instructions in a processor pipeline
US6175814B1 (en) 1997-11-26 2001-01-16 Compaq Computer Corporation Apparatus for determining the instantaneous average number of instructions processed
US6175916B1 (en) * 1997-05-06 2001-01-16 Microsoft Corporation Common-thread inter-process function calls invoked by jumps to invalid addresses
US6178421B1 (en) 1998-06-05 2001-01-23 International Business Machines Corporation Method of performing parallel cleanup of segments of a lock structure
US6182109B1 (en) * 1996-03-08 2001-01-30 International Business Machines Corporation Dynamic execution unit management for high performance user level network server system
US6185562B1 (en) 1998-06-05 2001-02-06 International Business Machines Corporation Performing parallel cleanup of segments of a lock structure
US6195748B1 (en) 1997-11-26 2001-02-27 Compaq Computer Corporation Apparatus for sampling instruction execution information in a processor pipeline
US6212544B1 (en) 1997-10-23 2001-04-03 International Business Machines Corporation Altering thread priorities in a multithreaded processor
US6223204B1 (en) * 1996-12-18 2001-04-24 Sun Microsystems, Inc. User level adaptive thread blocking
US6233644B1 (en) * 1998-06-05 2001-05-15 International Business Machines Corporation System of performing parallel cleanup of segments of a lock structure located within a coupling facility
US6237059B1 (en) 1997-11-26 2001-05-22 Compaq Computer Corporation Method for estimating statistics of properties of memory system interactions among contexts in a computer system
US6237073B1 (en) 1997-11-26 2001-05-22 Compaq Computer Corporation Method for providing virtual memory to physical memory page mapping in a computer operating system that randomly samples state information
US6253225B1 (en) * 1996-08-28 2001-06-26 Hitachi, Ltd. Process executing method and resource accessing method in computer system
US6256775B1 (en) 1997-12-11 2001-07-03 International Business Machines Corporation Facilities for detailed software performance analysis in a multithreaded processor
US6260057B1 (en) * 1995-03-01 2001-07-10 Sun Microsystems, Inc. Apparatus and method for high performance implementation of system calls
US6295600B1 (en) 1996-07-01 2001-09-25 Sun Microsystems, Inc. Thread switch on blocked load or store using instruction thread field
US6332178B1 (en) * 1997-11-26 2001-12-18 Compaq Computer Corporation Method for estimating statistics of properties of memory system transactions
US20020002667A1 (en) * 1999-12-22 2002-01-03 Kelsey Nicholas J. System and method for instruction level multithreading in an embedded processor using zero-time context switching
US6349321B1 (en) * 1997-04-30 2002-02-19 Kabushiki Kaisha Toshiba Data processing system and scheduling method
US20020021807A1 (en) * 1994-04-01 2002-02-21 Mitsubishi Corporation Method for controlling database copyrights
US20020032822A1 (en) * 1998-11-16 2002-03-14 Insignia Solutions, Plc Method and system for handling device driver interrupts
US20020038416A1 (en) * 1999-12-22 2002-03-28 Fotland David A. System and method for reading and writing a thread state in a multithreaded central processing unit
US6366946B1 (en) * 1998-12-16 2002-04-02 Microsoft Corporation Critical code processing management
US6374367B1 (en) 1997-11-26 2002-04-16 Compaq Computer Corporation Apparatus and method for monitoring a computer system to guide optimization
US20020049834A1 (en) * 2000-08-24 2002-04-25 Ingo Molnar Embedded protocol objects
US20020052850A1 (en) * 1994-10-27 2002-05-02 Mitsubishi Corporation Digital content management system and apparatus
US20020052181A1 (en) * 2000-10-27 2002-05-02 Min-Chieh Tsai Key switch system for wireless communication apparatuses
US6418460B1 (en) * 1997-02-18 2002-07-09 Silicon Graphics, Inc. System and method for finding preempted threads in a multi-threaded application
US6442585B1 (en) 1997-11-26 2002-08-27 Compaq Computer Corporation Method for scheduling contexts based on statistics of memory system interactions in a computer system
US6442707B1 (en) 1999-10-29 2002-08-27 Advanced Micro Devices, Inc. Alternate fault handler
US20020138679A1 (en) * 2001-03-20 2002-09-26 Maarten Koning System and method for priority inheritance
US20020144004A1 (en) * 2001-03-29 2002-10-03 Gaur Daniel R. Driver having multiple deferred procedure calls for interrupt processing and method for interrupt processing
US6470346B2 (en) * 1998-10-07 2002-10-22 Millennium Pharmaceuticals, Inc. Remote computation framework
US20020161957A1 (en) * 2001-02-09 2002-10-31 Guillaume Comeau Methods and systems for handling interrupts
US20020178208A1 (en) * 2001-05-24 2002-11-28 International Business Machines Corporation Priority inversion in computer system supporting multiple processes
US20020184290A1 (en) * 2001-05-31 2002-12-05 International Business Machines Corporation Run queue optimization with hardware multithreading for affinity
US6539436B2 (en) * 1998-02-05 2003-03-25 Bull S.A. Management of interruptions in a computer platform
US6549930B1 (en) 1997-11-26 2003-04-15 Compaq Computer Corporation Method for scheduling threads in a multithreaded processor
US6549951B1 (en) * 1998-08-25 2003-04-15 Stmicroelectronics, Inc. Method and device for controlling communications with a serial bus
US6567839B1 (en) 1997-10-23 2003-05-20 International Business Machines Corporation Thread switch control in a multithreaded processor system
US20030110157A1 (en) * 2001-10-02 2003-06-12 Nobuhiro Maki Exclusive access control apparatus and method
US20030144963A1 (en) * 1994-09-30 2003-07-31 Mitsubishi Corporation Data copyright management system
US20030154234A1 (en) * 1999-09-16 2003-08-14 Aaron Raymond Larson Method for time partitioned application scheduling in a computer operating system
US20030177280A1 (en) * 2002-03-12 2003-09-18 Webster Steve R. Imbedded interrupt handler
US6631394B1 (en) * 1998-01-21 2003-10-07 Nokia Mobile Phones Limited Embedded system with interrupt handler for multiple operating systems
US6633897B1 (en) * 1995-06-30 2003-10-14 International Business Machines Corporation Method and system for scheduling threads within a multiprocessor data processing system using an affinity scheduler
US20030200273A1 (en) * 1999-08-31 2003-10-23 Intel Corporation, A Delaware Corporation Console redirection among linked computers
KR100403658B1 (en) * 1997-10-23 2003-10-30 인터내셔널 비지네스 머신즈 코포레이션 Method and apparatus for selecting thread switch events in a multithreaded processor
US20030212992A1 (en) * 1998-12-04 2003-11-13 Ronning Joel A. Apparatus and method for using application signatures for the identification of files
US6651163B1 (en) * 2000-03-08 2003-11-18 Advanced Micro Devices, Inc. Exception handling with reduced overhead in a multithreaded multiprocessing system
US6654781B1 (en) * 1998-12-11 2003-11-25 International Business Machines Corporation Enhanced thread processing
US6662204B2 (en) * 1998-06-19 2003-12-09 Kabushiki Kaisha Toshiba Thread control system and method in a computer system
KR100411113B1 (en) * 2001-08-31 2003-12-18 현대자동차주식회사 Method For Processoring of Multi Thread
US20040003137A1 (en) * 2002-06-26 2004-01-01 Callender Robin L. Process-mode independent driver model
US6675191B1 (en) * 1999-05-24 2004-01-06 Nec Corporation Method of starting execution of threads simultaneously at a plurality of processors and device therefor
US20040025160A1 (en) * 2002-08-05 2004-02-05 David Dice System and method for maintaining data synchronization
US6691118B1 (en) * 1997-10-31 2004-02-10 Oracle International Corporation Context management system for modular software architecture
US20040060049A1 (en) * 2002-09-19 2004-03-25 Ibm Corporation Method and apparatus for handling threads in a data processing system
US6714958B1 (en) * 1999-07-28 2004-03-30 International Business Machines Corporation Detecting and causing latent deadlocks in multi-threaded programs
US20040093605A1 (en) * 1998-11-13 2004-05-13 Alverson Gail A. Accessing a collection of data items in a multithreaded environment
US20040107374A1 (en) * 2002-11-29 2004-06-03 Barnes Cooper Apparatus and method for providing power management on multi-threaded processors
US20040123185A1 (en) * 2002-12-20 2004-06-24 Microsoft Corporation Tools and methods for discovering race condition errors
US20040128401A1 (en) * 2002-12-31 2004-07-01 Michael Fallon Scheduling processing threads
US6760909B1 (en) * 1996-04-29 2004-07-06 Microsoft Corporation Virtual memory system and methods
US20040139432A1 (en) * 2002-12-31 2004-07-15 International Business Machines Corporation Method and apparatus for managing thread execution in a multithread application
US20040153807A1 (en) * 2002-11-18 2004-08-05 Arm Limited Delivering data processing requests to a suspended operating system
US6779182B1 (en) * 1996-05-06 2004-08-17 Sun Microsystems, Inc. Real time thread dispatcher for multiprocessor applications
US20040215937A1 (en) * 2003-04-23 2004-10-28 International Business Machines Corporation Dynamically share interrupt handling logic among multiple threads
US20040216112A1 (en) * 2003-04-23 2004-10-28 International Business Machines Corporation System and method for thread prioritization during lock processing
US20040215939A1 (en) * 2003-04-24 2004-10-28 International Business Machines Corporation Dynamic switching of multithreaded processor between single threaded and simultaneous multithreaded modes
US6823512B1 (en) * 1999-10-20 2004-11-23 International Business Machines Corporation Apparatus and method for providing and processing prioritized messages in an ordered message clustered computing environment
US20050022186A1 (en) * 2003-07-24 2005-01-27 International Business Machines Corporation System and method for delayed priority boost
US20050033889A1 (en) * 2002-10-08 2005-02-10 Hass David T. Advanced processor with interrupt delivery mechanism for multi-threaded multi-CPU system on a chip
US20050034124A1 (en) * 2003-03-27 2005-02-10 House Eric Edward Mechanism for simultaneously operating multiple applications on a personal digital assistant implementing a palm operating system
US20050050305A1 (en) * 2003-08-28 2005-03-03 Kissell Kevin D. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US20050050395A1 (en) * 2003-08-28 2005-03-03 Kissell Kevin D. Mechanisms for assuring quality of service for programs executing on a multithreaded processor
US20050060710A1 (en) * 1999-04-05 2005-03-17 International Business Machines Corporation System, method and program for implementing priority inheritance in an operating system
US20050081020A1 (en) * 2003-10-08 2005-04-14 Stmicroelectronics S.A. Multicontext processor architecture
US20050097252A1 (en) * 2003-10-29 2005-05-05 Kelley Brian H. System for providing transitions between operating modes of a device
US20050108717A1 (en) * 2003-11-18 2005-05-19 Hong Steve J. Systems and methods for creating an application group in a multiprocessor system
WO2005050435A2 (en) * 2003-11-12 2005-06-02 Infineon Technologies Ag Interrupt and trap handling in an embedded multi-threaded processor to avoid priority inversion and maintain real-time operation
US20050120194A1 (en) * 2003-08-28 2005-06-02 Mips Technologies, Inc. Apparatus, method, and instruction for initiation of concurrent instruction streams in a multithreading microprocessor
US6907605B1 (en) 1998-05-18 2005-06-14 International Business Machines Corporation Method and apparatus for providing for notification of task termination
US20050149936A1 (en) * 2003-12-19 2005-07-07 Stmicroelectronics, Inc. Thread execution scheduler for multi-processing system and method
US20050149937A1 (en) * 2003-12-19 2005-07-07 Stmicroelectronics, Inc. Accelerator for multi-processing system and method
US20050154676A1 (en) * 1998-12-04 2005-07-14 Digital River, Inc. Electronic commerce system method for detecting fraud
US20050177667A1 (en) * 2004-02-11 2005-08-11 Arm Limited Interrupt priority control within a nested interrupt system
WO2005085994A2 (en) * 2004-02-24 2005-09-15 Koninklijke Philips Electronics N.V. Multi-tasking data processing system
US20050216633A1 (en) * 2004-03-26 2005-09-29 Cavallo Joseph S Techniques to manage critical region interrupts
US20050251639A1 (en) * 2003-08-28 2005-11-10 Mips Technologies, Inc. A Delaware Corporation Smart memory based synchronization controller for a multi-threaded multiprocessor SoC
US20050251613A1 (en) * 2003-08-28 2005-11-10 Mips Technologies, Inc., A Delaware Corporation Synchronized storage providing multiple synchronization semantics
US20050262023A1 (en) * 1994-04-01 2005-11-24 Intarsia Software Llc Method for controlling database copyrights
US20050262389A1 (en) * 2002-09-03 2005-11-24 Koninklijke Philips Electronics N.V. Stack type snapshot buffer handles nested interrupts
US6978330B1 (en) * 2002-04-04 2005-12-20 Applied Micro Circuits Corporation Shared resource access via declarations that contain a sequence number of a packet
US20050283556A1 (en) * 2004-06-18 2005-12-22 Parekh Harshadrai G Transfer of waiting interrupts
US20060045109A1 (en) * 2004-08-30 2006-03-02 International Business Machines Corporation Early interrupt notification in RDMA and in DMA operations
US7010612B1 (en) 2000-06-22 2006-03-07 Ubicom, Inc. Universal serializer/deserializer
US7017156B1 (en) 1998-08-28 2006-03-21 Oracle International Corporation System for computing an estimate execution time by totaling the time value base on an architecture or a software operating environment
US7047396B1 (en) 2000-06-22 2006-05-16 Ubicom, Inc. Fixed length memory to memory arithmetic and architecture for a communications embedded processor system
US20060161421A1 (en) * 2003-08-28 2006-07-20 Mips Technologies, Inc. Software emulation of directed exceptions in a multithreading processor
US20060161921A1 (en) * 2003-08-28 2006-07-20 Mips Technologies, Inc. Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor
US20060174169A1 (en) * 2005-01-28 2006-08-03 Sony Computer Entertainment Inc. IO direct memory access system and method
US20060179198A1 (en) * 2005-02-04 2006-08-10 Sony Computer Entertainment Inc. Micro interrupt handler
US20060190946A1 (en) * 2003-08-28 2006-08-24 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread context
US20060190945A1 (en) * 2003-08-28 2006-08-24 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread context
US20060195683A1 (en) * 2003-08-28 2006-08-31 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7103631B1 (en) * 1998-08-26 2006-09-05 Qnx Software Systems Symmetric multi-processor system
US20060200610A1 (en) * 2005-02-04 2006-09-07 Sony Computer Entertainment Inc. System and method of interrupt handling
US20060212853A1 (en) * 2005-03-18 2006-09-21 Marvell World Trade Ltd. Real-time control apparatus having a multi-thread processor
US20060212687A1 (en) * 2005-03-18 2006-09-21 Marvell World Trade Ltd. Dual thread processor
US20060224634A1 (en) * 2005-03-31 2006-10-05 Uwe Hahn Multiple log queues in a database management system
US20060235927A1 (en) * 2005-04-19 2006-10-19 Bhakta Dharmesh N System and method for synchronizing distributed data streams for automating real-time navigation through presentation slides
US20060271938A1 (en) * 2005-05-26 2006-11-30 Paul Gootherts Memory mapped lazy preemption control
US20060277552A1 (en) * 2005-06-01 2006-12-07 Newisys, Inc. Facilitating handling of exceptions in a program implementing a M-on-N threading model
US20060282836A1 (en) * 2005-06-09 2006-12-14 Barker Thomas N System and method for implementing distributed priority inheritance
US20060282674A1 (en) * 1995-09-29 2006-12-14 Intarsia Software Llc Data management system
US20070033143A1 (en) * 1995-10-27 2007-02-08 Intarsia Software Llc Digital content management system and apparatus
US20070067771A1 (en) * 2005-09-21 2007-03-22 Yoram Kulbak Real-time threading service for partitioned multiprocessor systems
US20070079145A1 (en) * 1994-10-27 2007-04-05 Intarsia Software Llc Data copyright management
US20070130567A1 (en) * 1999-08-25 2007-06-07 Peter Van Der Veen Symmetric multi-processor system
US20070130569A1 (en) * 2005-12-01 2007-06-07 International Business Machines Corporation Method, apparatus and program storage device for providing a no context switch attribute that allows a user mode thread to become a near interrupt disabled priority
US7308686B1 (en) 1999-12-22 2007-12-11 Ubicom Inc. Software input/output using hard real time threads
US20080028103A1 (en) * 2006-07-26 2008-01-31 Michael Steven Schlansker Memory-mapped buffers for network interface controllers
US7360213B1 (en) * 1994-01-26 2008-04-15 Emc Corporation Method for promotion and demotion between system calls and fast kernel calls
US20080114973A1 (en) * 2006-10-31 2008-05-15 Norton Scott J Dynamic hardware multithreading and partitioned hardware multithreading
US20080155137A1 (en) * 2006-12-22 2008-06-26 Hewlett-Packard Development Company, L.P. Processing an input/output request on a multiprocessor system
US7421693B1 (en) 2002-04-04 2008-09-02 Applied Micro Circuits Corporation Logic for synchronizing multiple tasks at multiple locations in an instruction stream
US20080229311A1 (en) * 2007-03-14 2008-09-18 Michael David May Interface processor
US20080256280A1 (en) * 2007-04-12 2008-10-16 Xiuling Ma Splitting One Hardware Interrupt To Multiple Handlers
US7451448B1 (en) 1998-08-28 2008-11-11 Oracle International Corporation Methods for selectively quiescing a computer system
US20080307419A1 (en) * 2007-06-06 2008-12-11 Microsoft Corporation Lazy kernel thread binding
US20080313656A1 (en) * 2007-06-18 2008-12-18 Microsoft Corporation User mode stack disassociation
US7472256B1 (en) 2005-04-12 2008-12-30 Sun Microsystems, Inc. Software value prediction using pendency records of predicted prefetch values
US20090007150A1 (en) * 2007-06-29 2009-01-01 Yadong Li Method and Apparatus for Improving the Efficiency of Interrupt Delivery at Runtime in a Network System
US20090037927A1 (en) * 2007-07-30 2009-02-05 Vasudevan Sangili Apparatus and method for direct switching of software threads
US20090106832A1 (en) * 2005-06-01 2009-04-23 Matsushita Electric Industrial Co., Ltd Computer system and program creating device
US7526767B1 (en) * 1998-08-28 2009-04-28 Oracle International Corporation Methods for automatic group switching according to a resource plan
US7532644B1 (en) * 2002-06-12 2009-05-12 Sun Microsystems, Inc. Method and system for associating multiple payload buffers with multidata message
US20090172424A1 (en) * 2007-12-31 2009-07-02 Qiong Cai Thread migration to improve power efficiency in a parallel processing environment
EP2093662A1 (en) 2008-02-25 2009-08-26 Fujitsu Siemens Computers GmbH Method for processing interrupt requests in a processor
US7617124B1 (en) 1998-12-04 2009-11-10 Digital River, Inc. Apparatus and method for secure downloading of files
US20090300643A1 (en) * 2008-05-27 2009-12-03 Gove Darryl J Using hardware support to reduce synchronization costs in multithreaded applications
US20090307403A1 (en) * 2008-06-05 2009-12-10 Dell Products, Lp System for executing system management interrupts and methods thereof
US7640450B1 (en) * 2001-03-30 2009-12-29 Anvin H Peter Method and apparatus for handling nested faults
US20090327555A1 (en) * 2008-06-26 2009-12-31 Microsoft Corporation Processor Interrupt Determination
US20090327556A1 (en) * 2008-06-27 2009-12-31 Microsoft Corporation Processor Interrupt Selection
US20100023559A1 (en) * 2008-07-28 2010-01-28 International Business Machines Corporation Optimizing grace period detection for preemptible read-copy update on uniprocessor systems
US20100042765A1 (en) * 2005-09-30 2010-02-18 Gautham Chinya Dynamically Migrating Channels
US20100077399A1 (en) * 2008-09-19 2010-03-25 Qualcomm Incorporated Methods and Systems for Allocating Interrupts In A Multithreaded Processor
EP2175368A1 (en) * 2008-10-13 2010-04-14 Alcatel Lucent Method for synchronizing access to a shared resource, corresponding device, storage means, and software program therefore
US20100100889A1 (en) * 2008-10-16 2010-04-22 International Business Machines Corporation Accelerating mutual exclusion locking function and condition signaling while maintaining priority wait queues
US20100138842A1 (en) * 2008-12-03 2010-06-03 Soren Balko Multithreading And Concurrency Control For A Rule-Based Transaction Engine
USRE41657E1 (en) 1994-10-27 2010-09-07 Makoto Saito Data management system
US20100251260A1 (en) * 2005-08-10 2010-09-30 Nokia Corporation Pre-emptible context switching in a computing device
US7822950B1 (en) 2003-01-22 2010-10-26 Ubicom, Inc. Thread cancellation and recirculation in a computer processor for avoiding pipeline stalls
USRE42163E1 (en) 1994-04-01 2011-02-22 Intarsia Software Llc Data management system
US20110072180A1 (en) * 2009-09-23 2011-03-24 Ju-Pyung Lee Interrupt on/off management apparatus and method for multi-core processor
US7940706B2 (en) 2001-10-01 2011-05-10 International Business Machines Corporation Controlling the state of duplexing of coupling facility structures
US8024810B2 (en) 1998-10-15 2011-09-20 Intarsia Software Llc Method and apparatus for protecting digital data by double re-encryption
US8151095B1 (en) * 2008-07-18 2012-04-03 Nvidia Corporation System and method for context migration across CPU threads
US20130007768A1 (en) * 2011-07-02 2013-01-03 Ramakrishna Saripalli Atomic operations on multi-socket platforms
US8364849B2 (en) 2004-08-30 2013-01-29 International Business Machines Corporation Snapshot interface operations
US8424013B1 (en) * 2006-09-29 2013-04-16 Emc Corporation Methods and systems for handling interrupts across software instances and context switching between instances having interrupt service routine registered to handle the interrupt
US20130103872A1 (en) * 2011-10-20 2013-04-25 Via Technologies, Inc. Computer apparatus and method for distributing interrupt tasks thereof
US20130152097A1 (en) * 2011-12-09 2013-06-13 Microsoft Corporation Resource Health Based Scheduling of Workload Tasks
US20130152096A1 (en) * 2011-12-07 2013-06-13 Chan-ju Park Apparatus and method for dynamically controlling preemption section in operating system
US20130160017A1 (en) * 2011-12-14 2013-06-20 Robert Scott Hartog Software Mechanisms for Managing Task Scheduling on an Accelerated Processing Device (APD)
US8479207B2 (en) 2011-02-25 2013-07-02 Qualcomm Incorporated Priority inheritance in multithreaded systems
US8612986B2 (en) 2004-08-12 2013-12-17 International Business Machines Corporation Computer program product for scheduling ready threads in a multiprocessor computer based on an interrupt mask flag value associated with a thread and a current processor priority register value
CN103744342A (en) * 2014-01-22 2014-04-23 大连理工计算机控制工程有限公司 PAC (programmable automatic controller) real-time control system based on dual-core processor
CN103744726A (en) * 2014-01-02 2014-04-23 西北工业大学 Two-stage scheduling method of real-time extension of Windows system
US20140123150A1 (en) * 2012-10-25 2014-05-01 Nvidia Corporation Hardware scheduling of ordered critical code sections
US8788732B2 (en) 2002-10-08 2014-07-22 Netlogic Microsystems, Inc. Messaging network for processing data using multiple processor cores
US8806491B2 (en) 2007-12-31 2014-08-12 Intel Corporation Thread migration to improve power efficiency in a parallel processing environment
US8850557B2 (en) 2012-02-29 2014-09-30 International Business Machines Corporation Processor and data processing method with non-hierarchical computer security enhancements for context states
US8977677B2 (en) 2010-12-01 2015-03-10 Microsoft Technology Licensing, Llc Throttling usage of resources
US20150205644A1 (en) * 2014-01-21 2015-07-23 Renesas Electronics Corporation Task Scheduler Mechanism, Operating System, and Multiprocessor System
US9122524B2 (en) 2013-01-08 2015-09-01 Microsoft Technology Licensing, Llc Identifying and throttling tasks based on task interactivity
US9141438B2 (en) 2011-06-30 2015-09-22 Net Navigation Systems, Llc Logic for synchronizing multiple tasks
US9154443B2 (en) 2002-10-08 2015-10-06 Broadcom Corporation Advanced processor with fast messaging network technology
US9268575B2 (en) 2011-06-30 2016-02-23 Advanced Micro Devices, Inc. Flush operations in a processor
US9305274B2 (en) 2012-01-16 2016-04-05 Microsoft Technology Licensing, Llc Traffic shaping based on request resource usage
US9348644B2 (en) * 2014-10-08 2016-05-24 International Business Machines Corporation Application-level dispatcher control of application-level pseudo threads and operating system threads
US9779043B2 (en) * 2015-11-16 2017-10-03 International Business Machines Corporation Techniques for handling queued interrupts in a data processing system
CN108123820A (en) * 2016-11-29 2018-06-05 北京神州泰岳软件股份有限公司 A kind of network equipment information acquisition method and device
CN110032115A (en) * 2019-04-25 2019-07-19 上海法诺光电技术有限公司 A kind of Internet of Things network control system and control method using near field connection real-time, interactive
US10430245B2 (en) * 2017-03-27 2019-10-01 Hong Kong Applied Science And Technology Research Institute Co., Ltd. Systems and methods for dynamic low latency optimization
CN110377286A (en) * 2018-04-13 2019-10-25 武汉斗鱼网络科技有限公司 A kind of method and system for the multithreading solving the problems, such as CPU optimization initiation
US10761846B2 (en) * 2016-04-28 2020-09-01 Oracle International Corporation Method for managing software threads dependent on condition variables
CN111831440A (en) * 2020-07-01 2020-10-27 Oppo广东移动通信有限公司 Memory recovery method and device, storage medium and electronic equipment
US10866833B2 (en) * 2018-07-09 2020-12-15 Kyland Technology Co., Ltd. Method and appratus for implementing microkernel architecture of industrial server
CN112470125A (en) * 2018-07-24 2021-03-09 三菱电机株式会社 Interrupt processing method, computer system and program product
US11288095B2 (en) * 2019-09-30 2022-03-29 Advanced Micro Devices, Inc. Enhanced atomics for workgroup synchronization
EP4174648A1 (en) * 2021-10-29 2023-05-03 BlackBerry Limited Thread scheduling
EP4174649A1 (en) * 2021-10-29 2023-05-03 BlackBerry Limited Interrupt handling

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4584644A (en) * 1981-03-16 1986-04-22 International Business Machines Corp. Method of controlling use of resources in a data processing system by at least two processes
US5179702A (en) * 1989-12-29 1993-01-12 Supercomputer Systems Limited Partnership System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling
US5182811A (en) * 1987-10-02 1993-01-26 Mitsubishi Denki Kabushiki Kaisha Exception, interrupt, and trap handling apparatus which fetches addressing and context data using a single instruction following an interrupt
US5247675A (en) * 1991-08-09 1993-09-21 International Business Machines Corporation Preemptive and non-preemptive scheduling and execution of program threads in a multitasking operating system
US5283904A (en) * 1990-12-21 1994-02-01 Intel Corporation Multi-processor programmable interrupt controller system

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4584644A (en) * 1981-03-16 1986-04-22 International Business Machines Corp. Method of controlling use of resources in a data processing system by at least two processes
US5182811A (en) * 1987-10-02 1993-01-26 Mitsubishi Denki Kabushiki Kaisha Exception, interrupt, and trap handling apparatus which fetches addressing and context data using a single instruction following an interrupt
US5179702A (en) * 1989-12-29 1993-01-12 Supercomputer Systems Limited Partnership System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling
US5283904A (en) * 1990-12-21 1994-02-01 Intel Corporation Multi-processor programmable interrupt controller system
US5247675A (en) * 1991-08-09 1993-09-21 International Business Machines Corporation Preemptive and non-preemptive scheduling and execution of program threads in a multitasking operating system

Non-Patent Citations (8)

* Cited by examiner, † Cited by third party
Title
"Operating System Concepts" 3rd Edition, A. Silberschatz et al., Addison-Wesley, Apr. 1991.
"Real Time", A Publication of Lynx Real-Time Systems, Inc., vol. 4, No. 1.
"Realtime Scheduling in SunOS 5.0", S. Khanna et al., Proceedings of the Winter '92 USENIX Conference.
"Scheduling Support for Concurrency and Parallelism in the Mach Operating System", D. Black, IEEE Computer.
Operating System Concepts 3rd Edition, A. Silberschatz et al., Addison Wesley, Apr. 1991. *
Real Time , A Publication of Lynx Real Time Systems, Inc., vol. 4, No. 1. *
Realtime Scheduling in SunOS 5.0 , S. Khanna et al., Proceedings of the Winter 92 USENIX Conference. *
Scheduling Support for Concurrency and Parallelism in the Mach Operating System , D. Black, IEEE Computer. *

Cited By (428)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5630141A (en) * 1993-03-25 1997-05-13 Taligent, Inc. Hierarchical apparatus and method for processing device interrupts in a computer system
US5784618A (en) * 1993-12-23 1998-07-21 Microsoft Corporation Method and system for managing ownership of a released synchronization mechanism
US7360213B1 (en) * 1994-01-26 2008-04-15 Emc Corporation Method for promotion and demotion between system calls and fast kernel calls
US7979354B2 (en) 1994-04-01 2011-07-12 Intarsia Software Llc Controlling database copyrights
US7730323B2 (en) 1994-04-01 2010-06-01 Makoto Saito Controlling database copyrights
US7447914B1 (en) 1994-04-01 2008-11-04 Intarsia Software Llc Method for controlling database copyrights
US20070110228A1 (en) * 1994-04-01 2007-05-17 Makoto Saito Controlling database copyrights
US20070061267A1 (en) * 1994-04-01 2007-03-15 Makoto Saito Controlling database copyrights
US20050262023A1 (en) * 1994-04-01 2005-11-24 Intarsia Software Llc Method for controlling database copyrights
US7730324B2 (en) 1994-04-01 2010-06-01 Makoto Saito Method for controlling database copyrights
US20020021807A1 (en) * 1994-04-01 2002-02-21 Mitsubishi Corporation Method for controlling database copyrights
USRE42163E1 (en) 1994-04-01 2011-02-22 Intarsia Software Llc Data management system
US8554684B2 (en) 1994-04-01 2013-10-08 Intarsia Software Llc Controlling database copyrights
US5825649A (en) * 1994-05-19 1998-10-20 Kabushiki Kaisha Toshiba Kernel substitution method in multi-processor system and multi-processor system having kernel substitution function
US5721920A (en) * 1994-08-05 1998-02-24 Telefonaktiebolaget Lm Ericsson Method and system for providing a state oriented and event driven environment
US5852735A (en) * 1994-08-24 1998-12-22 Alcatel Sel Aktiengesellschaft Method and apparatus for exchanging a program over a network computer system that permits reactivation of the original program if an error occurs
US20070038575A1 (en) * 1994-09-30 2007-02-15 Intarsia Software Llc Data copyright management system
US8352373B2 (en) 1994-09-30 2013-01-08 Intarsia Software Llc Data copyright management system
US7302415B1 (en) 1994-09-30 2007-11-27 Intarsia Llc Data copyright management system
US20030144963A1 (en) * 1994-09-30 2003-07-31 Mitsubishi Corporation Data copyright management system
US5721922A (en) * 1994-10-13 1998-02-24 Intel Corporation Embedding a real-time multi-tasking kernel in a non-real-time operating system
US7827109B2 (en) 1994-10-27 2010-11-02 Makoto Saito Digital content management system and apparatus
USRE41657E1 (en) 1994-10-27 2010-09-07 Makoto Saito Data management system
US20020052850A1 (en) * 1994-10-27 2002-05-02 Mitsubishi Corporation Digital content management system and apparatus
US20070079145A1 (en) * 1994-10-27 2007-04-05 Intarsia Software Llc Data copyright management
US20070088960A1 (en) * 1994-10-27 2007-04-19 Intarsia Software Llc Data copyright management
US7986785B2 (en) 1994-10-27 2011-07-26 Intarsia Software Llc Data management
USRE43599E1 (en) 1994-10-27 2012-08-21 Intarsia Software Llc Data management system
US8407782B2 (en) 1994-10-27 2013-03-26 Intarsia Software Llc Data copyright management
US8448254B2 (en) 1994-10-27 2013-05-21 Intarsia Software Llc Digital content management system and apparatus
US9245260B2 (en) 1994-10-27 2016-01-26 Xylon Llc Data copyright management
US6260057B1 (en) * 1995-03-01 2001-07-10 Sun Microsystems, Inc. Apparatus and method for high performance implementation of system calls
US5870543A (en) * 1995-06-07 1999-02-09 Digital River, Inc. System for preventing unauthorized copying of active software
US5903647A (en) * 1995-06-07 1999-05-11 Digital River, Inc. Self-launching encrypted digital information distribution system
US5883955A (en) * 1995-06-07 1999-03-16 Digital River, Inc. On-line try before you buy software distribution system
US5883954A (en) * 1995-06-07 1999-03-16 Digital River, Inc. Self-launching encrypted try before you buy software distribution system
US5887060A (en) * 1995-06-07 1999-03-23 Digital River, Inc. Central database system for automatic software program sales
US5907617A (en) * 1995-06-07 1999-05-25 Digital River, Inc. Try before you buy software distribution and marketing system
US6105053A (en) * 1995-06-23 2000-08-15 Emc Corporation Operating system for a non-uniform memory access multiprocessor system
US6633897B1 (en) * 1995-06-30 2003-10-14 International Business Machines Corporation Method and system for scheduling threads within a multiprocessor data processing system using an affinity scheduler
US5875341A (en) * 1995-09-25 1999-02-23 Siemens Aktiengesellshaft Method for managing interrupt signals in a real-time computer system
US8595502B2 (en) 1995-09-29 2013-11-26 Intarsia Software Llc Data management system
US20060282674A1 (en) * 1995-09-29 2006-12-14 Intarsia Software Llc Data management system
US7801817B2 (en) 1995-10-27 2010-09-21 Makoto Saito Digital content management system and apparatus
US20070033143A1 (en) * 1995-10-27 2007-02-08 Intarsia Software Llc Digital content management system and apparatus
US6182109B1 (en) * 1996-03-08 2001-01-30 International Business Machines Corporation Dynamic execution unit management for high performance user level network server system
US5802364A (en) * 1996-04-15 1998-09-01 Sun Microsystems, Inc. Metadevice driver rename/exchange technique for a computer system incorporating a plurality of independent device drivers
US5758168A (en) * 1996-04-18 1998-05-26 International Business Machines Corporation Interrupt vectoring for optionally architected facilities in computer systems
US6760909B1 (en) * 1996-04-29 2004-07-06 Microsoft Corporation Virtual memory system and methods
US6779182B1 (en) * 1996-05-06 2004-08-17 Sun Microsystems, Inc. Real time thread dispatcher for multiprocessor applications
US5944816A (en) * 1996-05-17 1999-08-31 Advanced Micro Devices, Inc. Microprocessor configured to execute multiple threads including interrupt service routines
US5758161A (en) * 1996-05-24 1998-05-26 International Business Machines Corporation Testing method for checking the completion of asynchronous distributed collective operations
US5937187A (en) * 1996-07-01 1999-08-10 Sun Microsystems, Inc. Method and apparatus for execution and preemption control of computer process entities
US6578137B2 (en) * 1996-07-01 2003-06-10 Sun Microsystems, Inc. Branch and return on blocked load or store
US6295600B1 (en) 1996-07-01 2001-09-25 Sun Microsystems, Inc. Thread switch on blocked load or store using instruction thread field
US5991790A (en) * 1996-07-01 1999-11-23 Sun Microsystems, Inc. Generation and delivery of signals in a two-level, multithreaded system
US5832484A (en) * 1996-07-02 1998-11-03 Sybase, Inc. Database system with methods for parallel lock management
US6012081A (en) * 1996-07-03 2000-01-04 Siemens Aktiengesellschaft Service and event synchronous/asynchronous manager
US6253225B1 (en) * 1996-08-28 2001-06-26 Hitachi, Ltd. Process executing method and resource accessing method in computer system
US5928322A (en) * 1996-11-20 1999-07-27 Silicon Graphics, Inc. Low-latency real-time dispatching in general purpose multiprocessor systems
US6223204B1 (en) * 1996-12-18 2001-04-24 Sun Microsystems, Inc. User level adaptive thread blocking
US5961585A (en) * 1997-01-07 1999-10-05 Apple Computer, Inc. Real time architecture for computer system
US6418460B1 (en) * 1997-02-18 2002-07-09 Silicon Graphics, Inc. System and method for finding preempted threads in a multi-threaded application
US5905897A (en) * 1997-03-20 1999-05-18 Industrial Technology Research Institute Method and apparatus for selecting a nonblocked interrupt request
US5918057A (en) * 1997-03-20 1999-06-29 Industrial Technology Research Institute Method and apparatus for dispatching multiple interrupt requests simultaneously
GB2324392B (en) * 1997-03-28 2001-09-05 Ibm Reducing thread switch latency by using multiple instruction queues
US5907702A (en) * 1997-03-28 1999-05-25 International Business Machines Corporation Method and apparatus for decreasing thread switch latency in a multithread processor
US6349321B1 (en) * 1997-04-30 2002-02-19 Kabushiki Kaisha Toshiba Data processing system and scheduling method
US6175916B1 (en) * 1997-05-06 2001-01-16 Microsoft Corporation Common-thread inter-process function calls invoked by jumps to invalid addresses
US6260100B1 (en) 1997-06-10 2001-07-10 International Business Machines Corporation System and method for arbitrating interrupts on a daisy-chained architected bus
US6023743A (en) * 1997-06-10 2000-02-08 International Business Machines Corporation System and method for arbitrating interrupts on a daisy chained architected bus
US6021446A (en) * 1997-07-11 2000-02-01 Sun Microsystems, Inc. Network device driver performing initial packet processing within high priority hardware interrupt service routine and then finishing processing within low priority software interrupt service routine
US6212544B1 (en) 1997-10-23 2001-04-03 International Business Machines Corporation Altering thread priorities in a multithreaded processor
US6105051A (en) * 1997-10-23 2000-08-15 International Business Machines Corporation Apparatus and method to guarantee forward progress in execution of threads in a multithreaded processor
KR100403658B1 (en) * 1997-10-23 2003-10-30 인터내셔널 비지네스 머신즈 코포레이션 Method and apparatus for selecting thread switch events in a multithreaded processor
US6567839B1 (en) 1997-10-23 2003-05-20 International Business Machines Corporation Thread switch control in a multithreaded processor system
US6076157A (en) * 1997-10-23 2000-06-13 International Business Machines Corporation Method and apparatus to force a thread switch in a multithreaded processor
US6697935B1 (en) 1997-10-23 2004-02-24 International Business Machines Corporation Method and apparatus for selecting thread switch events in a multithreaded processor
US6061710A (en) * 1997-10-29 2000-05-09 International Business Machines Corporation Multithreaded processor incorporating a thread latch register for interrupt service new pending threads
US6691118B1 (en) * 1997-10-31 2004-02-10 Oracle International Corporation Context management system for modular software architecture
US5987495A (en) * 1997-11-07 1999-11-16 International Business Machines Corporation Method and apparatus for fully restoring a program context following an interrupt
US6026427A (en) * 1997-11-21 2000-02-15 Nishihara; Kazunori Condition variable to synchronize high level communication between processing threads
US6195748B1 (en) 1997-11-26 2001-02-27 Compaq Computer Corporation Apparatus for sampling instruction execution information in a processor pipeline
US6237059B1 (en) 1997-11-26 2001-05-22 Compaq Computer Corporation Method for estimating statistics of properties of memory system interactions among contexts in a computer system
US5923872A (en) * 1997-11-26 1999-07-13 Digital Equipment Corporation Apparatus for sampling instruction operand or result values in a processor pipeline
US6332178B1 (en) * 1997-11-26 2001-12-18 Compaq Computer Corporation Method for estimating statistics of properties of memory system transactions
US6549930B1 (en) 1997-11-26 2003-04-15 Compaq Computer Corporation Method for scheduling threads in a multithreaded processor
US6163840A (en) * 1997-11-26 2000-12-19 Compaq Computer Corporation Method and apparatus for sampling multiple potentially concurrent instructions in a processor pipeline
US6374367B1 (en) 1997-11-26 2002-04-16 Compaq Computer Corporation Apparatus and method for monitoring a computer system to guide optimization
US6175814B1 (en) 1997-11-26 2001-01-16 Compaq Computer Corporation Apparatus for determining the instantaneous average number of instructions processed
US6442585B1 (en) 1997-11-26 2002-08-27 Compaq Computer Corporation Method for scheduling contexts based on statistics of memory system interactions in a computer system
US6237073B1 (en) 1997-11-26 2001-05-22 Compaq Computer Corporation Method for providing virtual memory to physical memory page mapping in a computer operating system that randomly samples state information
US6256775B1 (en) 1997-12-11 2001-07-03 International Business Machines Corporation Facilities for detailed software performance analysis in a multithreaded processor
US6018759A (en) * 1997-12-22 2000-01-25 International Business Machines Corporation Thread switch tuning tool for optimal performance in a computer processor
US5991792A (en) * 1998-01-02 1999-11-23 International Business Machines Corporation Method, apparatus and computer program product for dynamically managing a thread pool of reusable threads in a computer system
US6631394B1 (en) * 1998-01-21 2003-10-07 Nokia Mobile Phones Limited Embedded system with interrupt handler for multiple operating systems
US7062766B2 (en) 1998-01-21 2006-06-13 Nokia Corporation Embedded system with interrupt handler for multiple operating systems
US20040088710A1 (en) * 1998-01-21 2004-05-06 Risto Ronkka Embedded system with interrupt handler for multiple operating systems
US6539436B2 (en) * 1998-02-05 2003-03-25 Bull S.A. Management of interruptions in a computer platform
US6108744A (en) * 1998-04-16 2000-08-22 Sun Microsystems, Inc. Software interrupt mechanism
US6907605B1 (en) 1998-05-18 2005-06-14 International Business Machines Corporation Method and apparatus for providing for notification of task termination
US6775786B2 (en) * 1998-05-22 2004-08-10 Intel Corporation Method and apparatus for power mode transition in a multi-thread processor
US6308279B1 (en) * 1998-05-22 2001-10-23 Intel Corporation Method and apparatus for power mode transition in a multi-thread processor
WO1999061991A1 (en) * 1998-05-22 1999-12-02 Intel Corporation Method and apparatus for power mode transition in a multi-thread processor
US20040243868A1 (en) * 1998-05-22 2004-12-02 Toll Bret L. Method and apparatus for power mode transition in a multi-thread processor
US20030051174A1 (en) * 1998-05-22 2003-03-13 Toll Bret L. Method and apparatus for power mode transition in a multi-thread processor
US6981163B2 (en) 1998-05-22 2005-12-27 Intel Corporation Method and apparatus for power mode transition in a multi-thread processor
CN1331065C (en) * 1998-05-22 2007-08-08 英特尔公司 Method and apparatus for power mode transition in a multi-theread processor
US6185562B1 (en) 1998-06-05 2001-02-06 International Business Machines Corporation Performing parallel cleanup of segments of a lock structure
US6178421B1 (en) 1998-06-05 2001-01-23 International Business Machines Corporation Method of performing parallel cleanup of segments of a lock structure
US6233644B1 (en) * 1998-06-05 2001-05-15 International Business Machines Corporation System of performing parallel cleanup of segments of a lock structure located within a coupling facility
US6662204B2 (en) * 1998-06-19 2003-12-09 Kabushiki Kaisha Toshiba Thread control system and method in a computer system
US6549951B1 (en) * 1998-08-25 2003-04-15 Stmicroelectronics, Inc. Method and device for controlling communications with a serial bus
US7103631B1 (en) * 1998-08-26 2006-09-05 Qnx Software Systems Symmetric multi-processor system
US7526767B1 (en) * 1998-08-28 2009-04-28 Oracle International Corporation Methods for automatic group switching according to a resource plan
US7020878B1 (en) 1998-08-28 2006-03-28 Oracle International Corporation System for allocating resource using the weight that represents a limitation on number of allowance active sessions associated with each resource consumer group
US7451448B1 (en) 1998-08-28 2008-11-11 Oracle International Corporation Methods for selectively quiescing a computer system
US7017156B1 (en) 1998-08-28 2006-03-21 Oracle International Corporation System for computing an estimate execution time by totaling the time value base on an architecture or a software operating environment
US9860315B2 (en) 1998-09-10 2018-01-02 International Business Machines Corporation Controlling the state of duplexing of coupling facility structures
US9253046B2 (en) 1998-09-10 2016-02-02 International Business Machines Corporation Controlling the state of duplexing of coupling facility structures
US9565013B2 (en) 1998-09-10 2017-02-07 International Business Machines Corporation Controlling the state of duplexing of coupling facility structures
US6470346B2 (en) * 1998-10-07 2002-10-22 Millennium Pharmaceuticals, Inc. Remote computation framework
US8024810B2 (en) 1998-10-15 2011-09-20 Intarsia Software Llc Method and apparatus for protecting digital data by double re-encryption
US7904685B1 (en) * 1998-11-13 2011-03-08 Cray Inc. Synchronization techniques in a multithreaded environment
US20040093605A1 (en) * 1998-11-13 2004-05-13 Alverson Gail A. Accessing a collection of data items in a multithreaded environment
US7558910B2 (en) 1998-11-13 2009-07-07 Cray Inc. Detecting access to a memory location in a multithreaded environment
US7558889B2 (en) 1998-11-13 2009-07-07 Cray Inc. Accessing a collection of data items in a multithreaded environment
US20050021898A1 (en) * 1998-11-13 2005-01-27 Alverson Gail A. Detecting access to a memory location in a multithreaded environment
US7039738B2 (en) * 1998-11-16 2006-05-02 Esmertec Ag Method and system for handling device driver interrupts
US20020032822A1 (en) * 1998-11-16 2002-03-14 Insignia Solutions, Plc Method and system for handling device driver interrupts
US20100017417A1 (en) * 1998-12-04 2010-01-21 Digital River, Inc. Secure Downloading of a File from a Network System and Method
US20070198362A1 (en) * 1998-12-04 2007-08-23 Digital River, Inc. Electronic commerce system and method for detecting fraud
US7881972B2 (en) 1998-12-04 2011-02-01 Digital River, Inc. Electronic commerce system and method for detecting fraud
US7165051B2 (en) 1998-12-04 2007-01-16 Digital River, Inc. Electronic commerce system and method for detecting fraud
US20050154676A1 (en) * 1998-12-04 2005-07-14 Digital River, Inc. Electronic commerce system method for detecting fraud
US8271396B2 (en) 1998-12-04 2012-09-18 Digital River, Inc. Electronic commerce system and method for detecting fraud
US9817650B2 (en) 1998-12-04 2017-11-14 Digital River, Inc. Scheduling of a file download and search for updates
US20030212992A1 (en) * 1998-12-04 2003-11-13 Ronning Joel A. Apparatus and method for using application signatures for the identification of files
US7058597B1 (en) 1998-12-04 2006-06-06 Digital River, Inc. Apparatus and method for adaptive fraud screening for electronic commerce transactions
US8050980B2 (en) 1998-12-04 2011-11-01 Digital River, Inc. Secure downloading of a file from a network system and method
US6154832A (en) * 1998-12-04 2000-11-28 Advanced Micro Devices, Inc. Processor employing multiple register sets to eliminate interrupts
US7617124B1 (en) 1998-12-04 2009-11-10 Digital River, Inc. Apparatus and method for secure downloading of files
US20070198361A1 (en) * 1998-12-04 2007-08-23 Digital River, Inc. Electronic commerce system and method for detecting fraud
US6654781B1 (en) * 1998-12-11 2003-11-25 International Business Machines Corporation Enhanced thread processing
US6366946B1 (en) * 1998-12-16 2002-04-02 Microsoft Corporation Critical code processing management
US7752621B2 (en) * 1999-04-05 2010-07-06 International Business Machines Corporation System, method and program for implementing priority inheritance in an operating system
US6874144B1 (en) * 1999-04-05 2005-03-29 International Business Machines Corporation System, method, and program for implementing priority inheritance in an operating system
US20050060710A1 (en) * 1999-04-05 2005-03-17 International Business Machines Corporation System, method and program for implementing priority inheritance in an operating system
US6222529B1 (en) 1999-05-05 2001-04-24 Shareware, Inc. Method and apparatus for providing multiple sessions on a single user operating system
WO2000067109A1 (en) * 1999-05-05 2000-11-09 Sharewave, Inc. Method and apparatus for providing multiple sessions on a single user operating system
US6675191B1 (en) * 1999-05-24 2004-01-06 Nec Corporation Method of starting execution of threads simultaneously at a plurality of processors and device therefor
US20040162706A1 (en) * 1999-07-28 2004-08-19 International Business Machines Corporation Detecting and causing latent deadlocks in multi-threaded programs
US6714958B1 (en) * 1999-07-28 2004-03-30 International Business Machines Corporation Detecting and causing latent deadlocks in multi-threaded programs
US7219348B2 (en) 1999-07-28 2007-05-15 International Business Machines Corporation Detecting and causing latent deadlocks in multi-threaded programs
US8572626B2 (en) 1999-08-25 2013-10-29 Qnx Software Systems Limited Symmetric multi-processor system
US20070130567A1 (en) * 1999-08-25 2007-06-07 Peter Van Der Veen Symmetric multi-processor system
US7996843B2 (en) 1999-08-25 2011-08-09 Qnx Software Systems Gmbh & Co. Kg Symmetric multi-processor system
US7203767B2 (en) 1999-08-31 2007-04-10 Intel Corporation System processing data packets received from remote host to control system operation according to adjustable timer interrupts based on data flow rate
US20030200273A1 (en) * 1999-08-31 2003-10-23 Intel Corporation, A Delaware Corporation Console redirection among linked computers
US7349991B2 (en) 1999-08-31 2008-03-25 Intel Corporation Host computer using basic input and output system to process control command received from a remote computer according to timer interrupts
US6999995B2 (en) * 1999-08-31 2006-02-14 Intel Corporation Console redirection system for remotely controlling operation of devices on a host computer if data packet has been received during a time interval
US20060168442A1 (en) * 1999-08-31 2006-07-27 Rahul Khanna Console redirection among linked computers
US20060168311A1 (en) * 1999-08-31 2006-07-27 Rahul Khanna Console redirection among linked computers
US20080177854A1 (en) * 1999-08-31 2008-07-24 Intel Corporation Console redirection among linked computers
US6754690B2 (en) * 1999-09-16 2004-06-22 Honeywell, Inc. Method for time partitioned application scheduling in a computer operating system
US20030154234A1 (en) * 1999-09-16 2003-08-14 Aaron Raymond Larson Method for time partitioned application scheduling in a computer operating system
US6823512B1 (en) * 1999-10-20 2004-11-23 International Business Machines Corporation Apparatus and method for providing and processing prioritized messages in an ordered message clustered computing environment
US6442707B1 (en) 1999-10-29 2002-08-27 Advanced Micro Devices, Inc. Alternate fault handler
US7082519B2 (en) 1999-12-22 2006-07-25 Ubicom, Inc. System and method for instruction level multithreading scheduling in a embedded processor
EP1247195A4 (en) * 1999-12-22 2005-01-05 Ubicom Inc System and method for instruction level multithreading in an embedded processor using zero-time context switching
US7925869B2 (en) 1999-12-22 2011-04-12 Ubicom, Inc. Instruction-level multithreading according to a predetermined fixed schedule in an embedded processor using zero-time context switching
US7308686B1 (en) 1999-12-22 2007-12-11 Ubicom Inc. Software input/output using hard real time threads
US20030037228A1 (en) * 1999-12-22 2003-02-20 Kelsey Nicholas J. System and method for instruction level multithreading scheduling in a embedded processor
EP1247195A1 (en) * 1999-12-22 2002-10-09 Ubicom, Inc. System and method for instruction level multithreading in an embedded processor using zero-time context switching
US7120783B2 (en) 1999-12-22 2006-10-10 Ubicom, Inc. System and method for reading and writing a thread state in a multithreaded central processing unit
US20020038416A1 (en) * 1999-12-22 2002-03-28 Fotland David A. System and method for reading and writing a thread state in a multithreaded central processing unit
US20020002667A1 (en) * 1999-12-22 2002-01-03 Kelsey Nicholas J. System and method for instruction level multithreading in an embedded processor using zero-time context switching
US6651163B1 (en) * 2000-03-08 2003-11-18 Advanced Micro Devices, Inc. Exception handling with reduced overhead in a multithreaded multiprocessing system
US7546442B1 (en) 2000-06-22 2009-06-09 Ubicom, Inc. Fixed length memory to memory arithmetic and architecture for direct memory access using fixed length instructions
US7047396B1 (en) 2000-06-22 2006-05-16 Ubicom, Inc. Fixed length memory to memory arithmetic and architecture for a communications embedded processor system
US7010612B1 (en) 2000-06-22 2006-03-07 Ubicom, Inc. Universal serializer/deserializer
US6988142B2 (en) 2000-08-24 2006-01-17 Red Hat, Inc. Method and apparatus for handling communication requests at a server without context switching
US20020091868A1 (en) * 2000-08-24 2002-07-11 Ingo Molnar Method and apparatus for handling communication requests at a server without context switching
US8631092B2 (en) 2000-08-24 2014-01-14 Red Hat, Inc. Embedded protocol objects
US6886004B2 (en) 2000-08-24 2005-04-26 Red Hat, Inc. Method and apparatus for atomic file look-up
US7082424B2 (en) 2000-08-24 2006-07-25 Red Hat, Inc. Method and apparatus for atomic file look-up
US20020049834A1 (en) * 2000-08-24 2002-04-25 Ingo Molnar Embedded protocol objects
US20020052181A1 (en) * 2000-10-27 2002-05-02 Min-Chieh Tsai Key switch system for wireless communication apparatuses
US20020161957A1 (en) * 2001-02-09 2002-10-31 Guillaume Comeau Methods and systems for handling interrupts
US20020138679A1 (en) * 2001-03-20 2002-09-26 Maarten Koning System and method for priority inheritance
US6904483B2 (en) * 2001-03-20 2005-06-07 Wind River Systems, Inc. System and method for priority inheritance
US20020144004A1 (en) * 2001-03-29 2002-10-03 Gaur Daniel R. Driver having multiple deferred procedure calls for interrupt processing and method for interrupt processing
US7640450B1 (en) * 2001-03-30 2009-12-29 Anvin H Peter Method and apparatus for handling nested faults
US20020178208A1 (en) * 2001-05-24 2002-11-28 International Business Machines Corporation Priority inversion in computer system supporting multiple processes
US20020184290A1 (en) * 2001-05-31 2002-12-05 International Business Machines Corporation Run queue optimization with hardware multithreading for affinity
KR100411113B1 (en) * 2001-08-31 2003-12-18 현대자동차주식회사 Method For Processoring of Multi Thread
US10491675B2 (en) 2001-10-01 2019-11-26 International Business Machines Corporation Controlling the state of duplexing of coupling facility structures
US8341188B2 (en) 2001-10-01 2012-12-25 International Business Machines Corporation Controlling the state of duplexing of coupling facility structures
US7940706B2 (en) 2001-10-01 2011-05-10 International Business Machines Corporation Controlling the state of duplexing of coupling facility structures
US20030110157A1 (en) * 2001-10-02 2003-06-12 Nobuhiro Maki Exclusive access control apparatus and method
US7243229B2 (en) * 2001-10-02 2007-07-10 Hitachi, Ltd. Exclusive access control apparatus and method
US20030177280A1 (en) * 2002-03-12 2003-09-18 Webster Steve R. Imbedded interrupt handler
US8387061B2 (en) * 2002-04-04 2013-02-26 Alexander Joffe Logic for synchronizing multiple tasks at multiple locations in an instruction stream
US20080320485A1 (en) * 2002-04-04 2008-12-25 Applied Micro Circuits Corporation Logic for Synchronizing Multiple Tasks at Multiple Locations in an Instruction Stream
US7421693B1 (en) 2002-04-04 2008-09-02 Applied Micro Circuits Corporation Logic for synchronizing multiple tasks at multiple locations in an instruction stream
US6978330B1 (en) * 2002-04-04 2005-12-20 Applied Micro Circuits Corporation Shared resource access via declarations that contain a sequence number of a packet
US20110265094A1 (en) * 2002-04-04 2011-10-27 Applied Micro Circuits Corporation Logic for synchronizing multiple tasks at multiple locations in an instruction stream
US8001547B2 (en) 2002-04-04 2011-08-16 Applied Micro Circuits Corporation Logic for synchronizing multiple tasks at multiple locations in an instruction stream
US7532644B1 (en) * 2002-06-12 2009-05-12 Sun Microsystems, Inc. Method and system for associating multiple payload buffers with multidata message
US7024672B2 (en) * 2002-06-26 2006-04-04 Microsoft Corporation Process-mode independent driver model
US20040003137A1 (en) * 2002-06-26 2004-01-01 Callender Robin L. Process-mode independent driver model
US20040025160A1 (en) * 2002-08-05 2004-02-05 David Dice System and method for maintaining data synchronization
US7200846B2 (en) 2002-08-05 2007-04-03 Sun Microsystems, Inc. System and method for maintaining data synchronization
US20050262389A1 (en) * 2002-09-03 2005-11-24 Koninklijke Philips Electronics N.V. Stack type snapshot buffer handles nested interrupts
US20040060049A1 (en) * 2002-09-19 2004-03-25 Ibm Corporation Method and apparatus for handling threads in a data processing system
US7275247B2 (en) * 2002-09-19 2007-09-25 International Business Machines Corporation Method and apparatus for handling threads in a data processing system
US20050033889A1 (en) * 2002-10-08 2005-02-10 Hass David T. Advanced processor with interrupt delivery mechanism for multi-threaded multi-CPU system on a chip
US9154443B2 (en) 2002-10-08 2015-10-06 Broadcom Corporation Advanced processor with fast messaging network technology
US8788732B2 (en) 2002-10-08 2014-07-22 Netlogic Microsystems, Inc. Messaging network for processing data using multiple processor cores
US20040153807A1 (en) * 2002-11-18 2004-08-05 Arm Limited Delivering data processing requests to a suspended operating system
US7325083B2 (en) * 2002-11-18 2008-01-29 Arm Limited Delivering data processing requests to a suspended operating system
US20040107374A1 (en) * 2002-11-29 2004-06-03 Barnes Cooper Apparatus and method for providing power management on multi-threaded processors
US7152169B2 (en) * 2002-11-29 2006-12-19 Intel Corporation Method for providing power management on multi-threaded processor by using SMM mode to place a physical processor into lower power state
US7174554B2 (en) * 2002-12-20 2007-02-06 Microsoft Corporation Tools and methods for discovering race condition errors
US20040123185A1 (en) * 2002-12-20 2004-06-24 Microsoft Corporation Tools and methods for discovering race condition errors
US7216346B2 (en) * 2002-12-31 2007-05-08 International Business Machines Corporation Method and apparatus for managing thread execution in a multithread application
US7415540B2 (en) * 2002-12-31 2008-08-19 Intel Corporation Scheduling processing threads
US20040128401A1 (en) * 2002-12-31 2004-07-01 Michael Fallon Scheduling processing threads
US20040139432A1 (en) * 2002-12-31 2004-07-15 International Business Machines Corporation Method and apparatus for managing thread execution in a multithread application
US7822950B1 (en) 2003-01-22 2010-10-26 Ubicom, Inc. Thread cancellation and recirculation in a computer processor for avoiding pipeline stalls
US20050034124A1 (en) * 2003-03-27 2005-02-10 House Eric Edward Mechanism for simultaneously operating multiple applications on a personal digital assistant implementing a palm operating system
US7278141B2 (en) 2003-04-23 2007-10-02 International Business Machines Corporation System and method for adding priority change value corresponding with a lock to a thread during lock processing
US20040215937A1 (en) * 2003-04-23 2004-10-28 International Business Machines Corporation Dynamically share interrupt handling logic among multiple threads
US20040216112A1 (en) * 2003-04-23 2004-10-28 International Business Machines Corporation System and method for thread prioritization during lock processing
US20090144737A1 (en) * 2003-04-24 2009-06-04 International Business Machines Corporation Dynamic switching of multithreaded processor between single threaded and simultaneous multithreaded modes
US8458709B2 (en) 2003-04-24 2013-06-04 International Business Machines Corporation Dynamic switching of multithreaded processor between single threaded and simultaneous multithreaded modes
US20040215939A1 (en) * 2003-04-24 2004-10-28 International Business Machines Corporation Dynamic switching of multithreaded processor between single threaded and simultaneous multithreaded modes
US7496915B2 (en) * 2003-04-24 2009-02-24 International Business Machines Corporation Dynamic switching of multithreaded processor between single threaded and simultaneous multithreaded modes
US20050022186A1 (en) * 2003-07-24 2005-01-27 International Business Machines Corporation System and method for delayed priority boost
US7380247B2 (en) 2003-07-24 2008-05-27 International Business Machines Corporation System for delaying priority boost in a priority offset amount only after detecting of preemption event during access to critical section
US20070106989A1 (en) * 2003-08-28 2007-05-10 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7870553B2 (en) * 2003-08-28 2011-01-11 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US20050050305A1 (en) * 2003-08-28 2005-03-03 Kissell Kevin D. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US8266620B2 (en) 2003-08-28 2012-09-11 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7376954B2 (en) 2003-08-28 2008-05-20 Mips Technologies, Inc. Mechanisms for assuring quality of service for programs executing on a multithreaded processor
US7418585B2 (en) * 2003-08-28 2008-08-26 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US20050050395A1 (en) * 2003-08-28 2005-03-03 Kissell Kevin D. Mechanisms for assuring quality of service for programs executing on a multithreaded processor
US7424599B2 (en) 2003-08-28 2008-09-09 Mips Technologies, Inc. Apparatus, method, and instruction for software management of multiple computational contexts in a multithreaded microprocessor
US8145884B2 (en) 2003-08-28 2012-03-27 Mips Technologies, Inc. Apparatus, method and instruction for initiation of concurrent instruction streams in a multithreading microprocessor
US20060161421A1 (en) * 2003-08-28 2006-07-20 Mips Technologies, Inc. Software emulation of directed exceptions in a multithreading processor
US20060161921A1 (en) * 2003-08-28 2006-07-20 Mips Technologies, Inc. Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor
US20060190946A1 (en) * 2003-08-28 2006-08-24 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread context
US20060190945A1 (en) * 2003-08-28 2006-08-24 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread context
US20050251613A1 (en) * 2003-08-28 2005-11-10 Mips Technologies, Inc., A Delaware Corporation Synchronized storage providing multiple synchronization semantics
US20050120194A1 (en) * 2003-08-28 2005-06-02 Mips Technologies, Inc. Apparatus, method, and instruction for initiation of concurrent instruction streams in a multithreading microprocessor
US20060195683A1 (en) * 2003-08-28 2006-08-31 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US20110040956A1 (en) * 2003-08-28 2011-02-17 Mips Technologies, Inc. Symmetric Multiprocessor Operating System for Execution On Non-Independent Lightweight Thread Contexts
US7849297B2 (en) 2003-08-28 2010-12-07 Mips Technologies, Inc. Software emulation of directed exceptions in a multithreading processor
US7836450B2 (en) * 2003-08-28 2010-11-16 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US9032404B2 (en) 2003-08-28 2015-05-12 Mips Technologies, Inc. Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor
US20050251639A1 (en) * 2003-08-28 2005-11-10 Mips Technologies, Inc. A Delaware Corporation Smart memory based synchronization controller for a multi-threaded multiprocessor SoC
US7321965B2 (en) 2003-08-28 2008-01-22 Mips Technologies, Inc. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US20050240936A1 (en) * 2003-08-28 2005-10-27 Mips Technologies, Inc. Apparatus, method, and instruction for software management of multiple computational contexts in a multithreaded microprocessor
US20070186028A2 (en) * 2003-08-28 2007-08-09 Mips Technologies, Inc. Synchronized storage providing multiple synchronization semantics
US7730291B2 (en) * 2003-08-28 2010-06-01 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US20070106990A1 (en) * 2003-08-28 2007-05-10 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US20070106887A1 (en) * 2003-08-28 2007-05-10 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US20050125795A1 (en) * 2003-08-28 2005-06-09 Mips Technologies, Inc. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US20070106988A1 (en) * 2003-08-28 2007-05-10 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US20070044105A2 (en) * 2003-08-28 2007-02-22 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US20050125629A1 (en) * 2003-08-28 2005-06-09 Mips Technologies, Inc. Mechanisms for dynamic configuration of virtual processor resources
US7725697B2 (en) * 2003-08-28 2010-05-25 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7594089B2 (en) 2003-08-28 2009-09-22 Mips Technologies, Inc. Smart memory based synchronization controller for a multi-threaded multiprocessor SoC
US7610473B2 (en) 2003-08-28 2009-10-27 Mips Technologies, Inc. Apparatus, method, and instruction for initiation of concurrent instruction streams in a multithreading microprocessor
US7725689B2 (en) * 2003-08-28 2010-05-25 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7711931B2 (en) 2003-08-28 2010-05-04 Mips Technologies, Inc. Synchronized storage providing multiple synchronization semantics
US20080140998A1 (en) * 2003-08-28 2008-06-12 Mips Technologies, Inc. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US20070043935A2 (en) * 2003-08-28 2007-02-22 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7694304B2 (en) 2003-08-28 2010-04-06 Mips Technologies, Inc. Mechanisms for dynamic configuration of virtual processor resources
US7676660B2 (en) 2003-08-28 2010-03-09 Mips Technologies, Inc. System, method, and computer program product for conditionally suspending issuing instructions of a thread
US20070044106A2 (en) * 2003-08-28 2007-02-22 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7676664B2 (en) * 2003-08-28 2010-03-09 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7730544B2 (en) * 2003-10-08 2010-06-01 Stmicroelectronics Sa Privileged execution context restricting use of hardware resources by other execution contexts
US20050081020A1 (en) * 2003-10-08 2005-04-14 Stmicroelectronics S.A. Multicontext processor architecture
EP1678613A2 (en) * 2003-10-29 2006-07-12 QUALCOMM Incorporated System for providing transitions between operating modes of a device
EP1678613A4 (en) * 2003-10-29 2008-03-26 Qualcomm Inc System for providing transitions between operating modes of a device
US7076637B2 (en) * 2003-10-29 2006-07-11 Qualcomm Inc. System for providing transitions between operating modes of a device
US20050097252A1 (en) * 2003-10-29 2005-05-05 Kelley Brian H. System for providing transitions between operating modes of a device
WO2005050435A2 (en) * 2003-11-12 2005-06-02 Infineon Technologies Ag Interrupt and trap handling in an embedded multi-threaded processor to avoid priority inversion and maintain real-time operation
WO2005050435A3 (en) * 2003-11-12 2006-04-27 Infineon Technologies Ag Interrupt and trap handling in an embedded multi-threaded processor to avoid priority inversion and maintain real-time operation
US20050108717A1 (en) * 2003-11-18 2005-05-19 Hong Steve J. Systems and methods for creating an application group in a multiprocessor system
US20050149937A1 (en) * 2003-12-19 2005-07-07 Stmicroelectronics, Inc. Accelerator for multi-processing system and method
US8566828B2 (en) * 2003-12-19 2013-10-22 Stmicroelectronics, Inc. Accelerator for multi-processing system and method
US7802255B2 (en) 2003-12-19 2010-09-21 Stmicroelectronics, Inc. Thread execution scheduler for multi-processing system and method
US20050149936A1 (en) * 2003-12-19 2005-07-07 Stmicroelectronics, Inc. Thread execution scheduler for multi-processing system and method
US7206884B2 (en) * 2004-02-11 2007-04-17 Arm Limited Interrupt priority control within a nested interrupt system
US20050177667A1 (en) * 2004-02-11 2005-08-11 Arm Limited Interrupt priority control within a nested interrupt system
WO2005085994A3 (en) * 2004-02-24 2006-03-02 Koninkl Philips Electronics Nv Multi-tasking data processing system
WO2005085994A2 (en) * 2004-02-24 2005-09-15 Koninklijke Philips Electronics N.V. Multi-tasking data processing system
US20050216633A1 (en) * 2004-03-26 2005-09-29 Cavallo Joseph S Techniques to manage critical region interrupts
US7917910B2 (en) * 2004-03-26 2011-03-29 Intel Corporation Techniques to manage critical region interrupts
US20050283556A1 (en) * 2004-06-18 2005-12-22 Parekh Harshadrai G Transfer of waiting interrupts
US7493620B2 (en) 2004-06-18 2009-02-17 Hewlett-Packard Development Company, L.P. Transfer of waiting interrupts
US8612986B2 (en) 2004-08-12 2013-12-17 International Business Machines Corporation Computer program product for scheduling ready threads in a multiprocessor computer based on an interrupt mask flag value associated with a thread and a current processor priority register value
US20060045109A1 (en) * 2004-08-30 2006-03-02 International Business Machines Corporation Early interrupt notification in RDMA and in DMA operations
US8364849B2 (en) 2004-08-30 2013-01-29 International Business Machines Corporation Snapshot interface operations
US7386642B2 (en) 2005-01-28 2008-06-10 Sony Computer Entertainment Inc. IO direct memory access system and method
US20060174169A1 (en) * 2005-01-28 2006-08-03 Sony Computer Entertainment Inc. IO direct memory access system and method
US7680972B2 (en) 2005-02-04 2010-03-16 Sony Computer Entertainment Inc. Micro interrupt handler
US7350006B2 (en) 2005-02-04 2008-03-25 Sony Computer Entertainment Inc. System and method of interrupt handling
US20060179198A1 (en) * 2005-02-04 2006-08-10 Sony Computer Entertainment Inc. Micro interrupt handler
US20060200610A1 (en) * 2005-02-04 2006-09-07 Sony Computer Entertainment Inc. System and method of interrupt handling
US20060212687A1 (en) * 2005-03-18 2006-09-21 Marvell World Trade Ltd. Dual thread processor
US8195922B2 (en) * 2005-03-18 2012-06-05 Marvell World Trade, Ltd. System for dynamically allocating processing time to multiple threads
US20060212853A1 (en) * 2005-03-18 2006-09-21 Marvell World Trade Ltd. Real-time control apparatus having a multi-thread processor
US8468324B2 (en) 2005-03-18 2013-06-18 Marvell World Trade Ltd. Dual thread processor
US20060224634A1 (en) * 2005-03-31 2006-10-05 Uwe Hahn Multiple log queues in a database management system
US7480672B2 (en) * 2005-03-31 2009-01-20 Sap Ag Multiple log queues in a database management system
US7472256B1 (en) 2005-04-12 2008-12-30 Sun Microsystems, Inc. Software value prediction using pendency records of predicted prefetch values
US20060235927A1 (en) * 2005-04-19 2006-10-19 Bhakta Dharmesh N System and method for synchronizing distributed data streams for automating real-time navigation through presentation slides
US7765550B2 (en) * 2005-05-26 2010-07-27 Hewlett-Packard Development Company, L.P. System for controlling context switch of deferred requests using counter and flag setting of thread accessing shared resource or entering code region
US20060271938A1 (en) * 2005-05-26 2006-11-30 Paul Gootherts Memory mapped lazy preemption control
US7962746B2 (en) * 2005-06-01 2011-06-14 Panasonic Corporation Computer system and program creating device
US20090106832A1 (en) * 2005-06-01 2009-04-23 Matsushita Electric Industrial Co., Ltd Computer system and program creating device
US20060277552A1 (en) * 2005-06-01 2006-12-07 Newisys, Inc. Facilitating handling of exceptions in a program implementing a M-on-N threading model
US7877629B2 (en) * 2005-06-01 2011-01-25 Sanmina-Sci Facilitating handling of exceptions in a program implementing a M-on-N threading model
US20060282836A1 (en) * 2005-06-09 2006-12-14 Barker Thomas N System and method for implementing distributed priority inheritance
US7788668B2 (en) 2005-06-09 2010-08-31 Lockheed Martin Corporation System and method for implementing distributed priority inheritance
US20100251260A1 (en) * 2005-08-10 2010-09-30 Nokia Corporation Pre-emptible context switching in a computing device
US7827551B2 (en) 2005-09-21 2010-11-02 Intel Corporation Real-time threading service for partitioned multiprocessor systems
CN101268445B (en) * 2005-09-21 2012-12-05 英特尔公司 Method and device for providing real-time threading service for application program of multi-core environment
US20070067771A1 (en) * 2005-09-21 2007-03-22 Yoram Kulbak Real-time threading service for partitioned multiprocessor systems
US8296552B2 (en) 2005-09-30 2012-10-23 Intel Corporation Dynamically migrating channels
US8001364B2 (en) * 2005-09-30 2011-08-16 Intel Corporation Dynamically migrating channels
US20100042765A1 (en) * 2005-09-30 2010-02-18 Gautham Chinya Dynamically Migrating Channels
US7971205B2 (en) * 2005-12-01 2011-06-28 International Business Machines Corporation Handling of user mode thread using no context switch attribute to designate near interrupt disabled priority status
US20070130569A1 (en) * 2005-12-01 2007-06-07 International Business Machines Corporation Method, apparatus and program storage device for providing a no context switch attribute that allows a user mode thread to become a near interrupt disabled priority
US9137179B2 (en) * 2006-07-26 2015-09-15 Hewlett-Packard Development Company, L.P. Memory-mapped buffers for network interface controllers
US20080028103A1 (en) * 2006-07-26 2008-01-31 Michael Steven Schlansker Memory-mapped buffers for network interface controllers
US8424013B1 (en) * 2006-09-29 2013-04-16 Emc Corporation Methods and systems for handling interrupts across software instances and context switching between instances having interrupt service routine registered to handle the interrupt
US7698540B2 (en) * 2006-10-31 2010-04-13 Hewlett-Packard Development Company, L.P. Dynamic hardware multithreading and partitioned hardware multithreading
US20080114973A1 (en) * 2006-10-31 2008-05-15 Norton Scott J Dynamic hardware multithreading and partitioned hardware multithreading
US8402172B2 (en) * 2006-12-22 2013-03-19 Hewlett-Packard Development Company, L.P. Processing an input/output request on a multiprocessor system
US20080155137A1 (en) * 2006-12-22 2008-06-26 Hewlett-Packard Development Company, L.P. Processing an input/output request on a multiprocessor system
US20080229311A1 (en) * 2007-03-14 2008-09-18 Michael David May Interface processor
WO2008110799A1 (en) * 2007-03-14 2008-09-18 Xmos Ltd Interface processor
US8219789B2 (en) 2007-03-14 2012-07-10 XMOS Ltd. Interface processor
US20080256280A1 (en) * 2007-04-12 2008-10-16 Xiuling Ma Splitting One Hardware Interrupt To Multiple Handlers
US7752370B2 (en) * 2007-04-12 2010-07-06 International Business Machines Corporation Splitting one hardware interrupt to multiple handlers
US20080307419A1 (en) * 2007-06-06 2008-12-11 Microsoft Corporation Lazy kernel thread binding
US20080313656A1 (en) * 2007-06-18 2008-12-18 Microsoft Corporation User mode stack disassociation
US8296490B2 (en) * 2007-06-29 2012-10-23 Intel Corporation Method and apparatus for improving the efficiency of interrupt delivery at runtime in a network system
US20130173895A1 (en) * 2007-06-29 2013-07-04 Yadong Li Method and apparatus for improving the efficiency of interrupt delivery at runtime in a network system
US8838864B2 (en) * 2007-06-29 2014-09-16 Intel Corporation Method and apparatus for improving the efficiency of interrupt delivery at runtime in a network system
US20090007150A1 (en) * 2007-06-29 2009-01-01 Yadong Li Method and Apparatus for Improving the Efficiency of Interrupt Delivery at Runtime in a Network System
US20090037927A1 (en) * 2007-07-30 2009-02-05 Vasudevan Sangili Apparatus and method for direct switching of software threads
US8584138B2 (en) * 2007-07-30 2013-11-12 Hewlett-Packard Development Company, L.P. Direct switching of software threads by selectively bypassing run queue based on selection criteria
US20090172424A1 (en) * 2007-12-31 2009-07-02 Qiong Cai Thread migration to improve power efficiency in a parallel processing environment
US7930574B2 (en) * 2007-12-31 2011-04-19 Intel Corporation Thread migration to improve power efficiency in a parallel processing environment
US8806491B2 (en) 2007-12-31 2014-08-12 Intel Corporation Thread migration to improve power efficiency in a parallel processing environment
US20110197195A1 (en) * 2007-12-31 2011-08-11 Qiong Cai Thread migration to improve power efficiency in a parallel processing environment
US8166323B2 (en) 2007-12-31 2012-04-24 Intel Corporation Thread migration to improve power efficiency in a parallel processing environment
US20090217019A1 (en) * 2008-02-25 2009-08-27 Juergen Gross Method for Processing Interrupt Requests in a Processor
US8924697B2 (en) 2008-02-25 2014-12-30 Fujitsu Siemens Computers Gmbh Method for processing interrupt requests in a processor
EP2093662A1 (en) 2008-02-25 2009-08-26 Fujitsu Siemens Computers GmbH Method for processing interrupt requests in a processor
US20090300643A1 (en) * 2008-05-27 2009-12-03 Gove Darryl J Using hardware support to reduce synchronization costs in multithreaded applications
US8359459B2 (en) 2008-05-27 2013-01-22 Oracle America, Inc. Using hardware support to reduce synchronization costs in multithreaded applications
US7797473B2 (en) * 2008-06-05 2010-09-14 Dell Products, Lp System for executing system management interrupts and methods thereof
US20090307403A1 (en) * 2008-06-05 2009-12-10 Dell Products, Lp System for executing system management interrupts and methods thereof
US20090327555A1 (en) * 2008-06-26 2009-12-31 Microsoft Corporation Processor Interrupt Determination
US8024504B2 (en) 2008-06-26 2011-09-20 Microsoft Corporation Processor interrupt determination
US20090327556A1 (en) * 2008-06-27 2009-12-31 Microsoft Corporation Processor Interrupt Selection
US8151095B1 (en) * 2008-07-18 2012-04-03 Nvidia Corporation System and method for context migration across CPU threads
US7953708B2 (en) * 2008-07-28 2011-05-31 International Business Machines Corporation Optimizing grace period detection for preemptible read-copy update on uniprocessor systems
US20100023559A1 (en) * 2008-07-28 2010-01-28 International Business Machines Corporation Optimizing grace period detection for preemptible read-copy update on uniprocessor systems
US8656145B2 (en) * 2008-09-19 2014-02-18 Qualcomm Incorporated Methods and systems for allocating interrupts in a multithreaded processor
US20100077399A1 (en) * 2008-09-19 2010-03-25 Qualcomm Incorporated Methods and Systems for Allocating Interrupts In A Multithreaded Processor
EP2175368A1 (en) * 2008-10-13 2010-04-14 Alcatel Lucent Method for synchronizing access to a shared resource, corresponding device, storage means, and software program therefore
US20100100889A1 (en) * 2008-10-16 2010-04-22 International Business Machines Corporation Accelerating mutual exclusion locking function and condition signaling while maintaining priority wait queues
US20100138842A1 (en) * 2008-12-03 2010-06-03 Soren Balko Multithreading And Concurrency Control For A Rule-Based Transaction Engine
US10002161B2 (en) * 2008-12-03 2018-06-19 Sap Se Multithreading and concurrency control for a rule-based transaction engine
US20110072180A1 (en) * 2009-09-23 2011-03-24 Ju-Pyung Lee Interrupt on/off management apparatus and method for multi-core processor
US8892803B2 (en) * 2009-09-23 2014-11-18 Samsung Electronics Co., Ltd. Interrupt on/off management apparatus and method for multi-core processor
US9647957B2 (en) 2010-12-01 2017-05-09 Microsoft Technology Licensing, Llc Throttling usage of resources
US8977677B2 (en) 2010-12-01 2015-03-10 Microsoft Technology Licensing, Llc Throttling usage of resources
US8479207B2 (en) 2011-02-25 2013-07-02 Qualcomm Incorporated Priority inheritance in multithreaded systems
US9141438B2 (en) 2011-06-30 2015-09-22 Net Navigation Systems, Llc Logic for synchronizing multiple tasks
US9268575B2 (en) 2011-06-30 2016-02-23 Advanced Micro Devices, Inc. Flush operations in a processor
US20130007768A1 (en) * 2011-07-02 2013-01-03 Ramakrishna Saripalli Atomic operations on multi-socket platforms
US20130103872A1 (en) * 2011-10-20 2013-04-25 Via Technologies, Inc. Computer apparatus and method for distributing interrupt tasks thereof
US8996773B2 (en) * 2011-10-20 2015-03-31 Via Technologies, Inc. Computer apparatus and method for distributing interrupt tasks thereof
US20130152096A1 (en) * 2011-12-07 2013-06-13 Chan-ju Park Apparatus and method for dynamically controlling preemption section in operating system
US9424105B2 (en) * 2011-12-07 2016-08-23 Samsung Electronics Co., Ltd. Preempting tasks at a preemption point of a kernel service routine based on current execution mode
US20130152097A1 (en) * 2011-12-09 2013-06-13 Microsoft Corporation Resource Health Based Scheduling of Workload Tasks
US9645856B2 (en) 2011-12-09 2017-05-09 Microsoft Technology Licensing, Llc Resource health based scheduling of workload tasks
US9329901B2 (en) * 2011-12-09 2016-05-03 Microsoft Technology Licensing, Llc Resource health based scheduling of workload tasks
US20130160017A1 (en) * 2011-12-14 2013-06-20 Robert Scott Hartog Software Mechanisms for Managing Task Scheduling on an Accelerated Processing Device (APD)
US9122522B2 (en) * 2011-12-14 2015-09-01 Advanced Micro Devices, Inc. Software mechanisms for managing task scheduling on an accelerated processing device (APD)
US9305274B2 (en) 2012-01-16 2016-04-05 Microsoft Technology Licensing, Llc Traffic shaping based on request resource usage
US9825869B2 (en) 2012-01-16 2017-11-21 Microsoft Technology Licensing, Llc Traffic shaping based on request resource usage
US8850557B2 (en) 2012-02-29 2014-09-30 International Business Machines Corporation Processor and data processing method with non-hierarchical computer security enhancements for context states
US20140123150A1 (en) * 2012-10-25 2014-05-01 Nvidia Corporation Hardware scheduling of ordered critical code sections
US9158595B2 (en) * 2012-10-25 2015-10-13 Nvidia Corporation Hardware scheduling of ordered critical code sections
US9122524B2 (en) 2013-01-08 2015-09-01 Microsoft Technology Licensing, Llc Identifying and throttling tasks based on task interactivity
CN103744726B (en) * 2014-01-02 2017-01-04 西北工业大学 A kind of two-level scheduler method of Windows system real-time extension
CN103744726A (en) * 2014-01-02 2014-04-23 西北工业大学 Two-stage scheduling method of real-time extension of Windows system
US9513974B2 (en) * 2014-01-21 2016-12-06 Renesas Electronics Corporation Task scheduler mechanism, operating system, and multiprocessor system
US20150205644A1 (en) * 2014-01-21 2015-07-23 Renesas Electronics Corporation Task Scheduler Mechanism, Operating System, and Multiprocessor System
CN103744342B (en) * 2014-01-22 2016-09-14 大连理工计算机控制工程有限公司 A kind of PAC real-time control system based on dual core processor
CN103744342A (en) * 2014-01-22 2014-04-23 大连理工计算机控制工程有限公司 PAC (programmable automatic controller) real-time control system based on dual-core processor
US9898343B2 (en) 2014-10-08 2018-02-20 International Business Machines Corporation Application-level dispatcher control of application-level pseudo threads and operating system threads
US9348644B2 (en) * 2014-10-08 2016-05-24 International Business Machines Corporation Application-level dispatcher control of application-level pseudo threads and operating system threads
US10360070B2 (en) 2014-10-08 2019-07-23 International Business Machines Corporation Application-level dispatcher control of application-level pseudo threads and operating system threads
US9779043B2 (en) * 2015-11-16 2017-10-03 International Business Machines Corporation Techniques for handling queued interrupts in a data processing system
US10761846B2 (en) * 2016-04-28 2020-09-01 Oracle International Corporation Method for managing software threads dependent on condition variables
CN108123820B (en) * 2016-11-29 2021-04-30 北京神州泰岳软件股份有限公司 Network equipment information acquisition method and device
CN108123820A (en) * 2016-11-29 2018-06-05 北京神州泰岳软件股份有限公司 A kind of network equipment information acquisition method and device
US10430245B2 (en) * 2017-03-27 2019-10-01 Hong Kong Applied Science And Technology Research Institute Co., Ltd. Systems and methods for dynamic low latency optimization
CN110377286A (en) * 2018-04-13 2019-10-25 武汉斗鱼网络科技有限公司 A kind of method and system for the multithreading solving the problems, such as CPU optimization initiation
US10866833B2 (en) * 2018-07-09 2020-12-15 Kyland Technology Co., Ltd. Method and appratus for implementing microkernel architecture of industrial server
CN112470125A (en) * 2018-07-24 2021-03-09 三菱电机株式会社 Interrupt processing method, computer system and program product
CN112470125B (en) * 2018-07-24 2024-02-20 三菱电机株式会社 Interrupt processing method, computer system, and storage medium
CN110032115A (en) * 2019-04-25 2019-07-19 上海法诺光电技术有限公司 A kind of Internet of Things network control system and control method using near field connection real-time, interactive
CN110032115B (en) * 2019-04-25 2021-09-28 上海法诺光电技术有限公司 Internet of things control system and method utilizing near field connection for real-time interaction
US11288095B2 (en) * 2019-09-30 2022-03-29 Advanced Micro Devices, Inc. Enhanced atomics for workgroup synchronization
CN111831440A (en) * 2020-07-01 2020-10-27 Oppo广东移动通信有限公司 Memory recovery method and device, storage medium and electronic equipment
EP4174648A1 (en) * 2021-10-29 2023-05-03 BlackBerry Limited Thread scheduling
EP4174649A1 (en) * 2021-10-29 2023-05-03 BlackBerry Limited Interrupt handling

Similar Documents

Publication Publication Date Title
US5515538A (en) Apparatus and method for interrupt handling in a multi-threaded operating system kernel
Eykholt et al. Beyond Multiprocessing: Multithreading the SunOS Kernel.
Anderson et al. Scheduler activations: Effective kernel support for the user-level management of parallelism
Stein et al. Implementing Lightweight Threads.
Anderson et al. Scheduler activations: Effective kernel support for the user-level management of parallelism
Marsh et al. First-class user-level threads
US6687903B1 (en) Inhibiting starvation in a multitasking operating system
Edler et al. Process management for highly parallel UNIX systems
US5666523A (en) Method and system for distributing asynchronous input from a system input queue to reduce context switches
US7296271B1 (en) Replaceable scheduling algorithm in multitasking kernel
US20020046230A1 (en) Method for scheduling thread execution on a limited number of operating system threads
WO2006069484A1 (en) Methods and apparatuses to maintain multiple execution contexts
EP4174648A1 (en) Thread scheduling
Mueller Pthreads library interface
US6728962B1 (en) Context swapping in multitasking kernel
Armand et al. Multi-threaded processes in CHORUS/MIX
Mueller Implementing POSIX threads under UNIX: Description of work in progress
Takada et al. A novel approach to multiprogrammed multiprocessor synchronization for real-time kernels
EP1197857A2 (en) Method of controlling a computer
Cherepov et al. Hard Real-time with {RTX} on Windows {NT}
Sang et al. The Xthreads library: Design, implementation, and applications
EP4174649A1 (en) Interrupt handling
Rhoden Operating System Support for Parallel Processes
Humphrey et al. Predictable threads for dynamic, hard real-time environments
Evans et al. Kernel-scheduled entities for FreeBSD

Legal Events

Date Code Title Description
STCF Information on status: patent grant

Free format text: PATENTED CASE

CC Certificate of correction
FEPP Fee payment procedure

Free format text: PAYOR NUMBER ASSIGNED (ORIGINAL EVENT CODE: ASPN); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY

FPAY Fee payment

Year of fee payment: 4

FPAY Fee payment

Year of fee payment: 8

FPAY Fee payment

Year of fee payment: 12