Practical Real-Time Computing System for Biomedical ... - Springer Link

1 downloads 7684 Views 557KB Size Report
based on the free RT-LINUX operating system, which we have developed for adaptive .... runs two processes: (i) a real-time process (top priority, guaranteed timing) .... LINUX process) that allows the user to monitor and com- municate with the ...
Annals of Biomedical Engineering, Vol. 27, pp. 180–186, 1999 Printed in the USA. All rights reserved.

0090-6964/99/27~2!/180/7/$15.00 Copyright © 1999 Biomedical Engineering Society

Practical Real-Time Computing System for Biomedical Experiment Interface DAVID J. CHRISTINI, KENNETH M. STEIN, STEVEN M. MARKOWITZ, and BRUCE B. LERMAN Division of Cardiology, Department of Medicine, Cornell University Medical College, New York, NY (Received 9 July 1998; accepted 17 December 1998)

Abstract—Many biomedical experiments require a precisely timed real-time ~RT! computer interface. Because commonly used desktop operating systems are inherently non-real-time, real-time laboratory computer systems are often based on outdated DOS software or expensive proprietary real-time operating systems. Here we discuss a real-time computing system, based on the free RT-LINUX operating system, which we have developed for adaptive pacing control in a clinical cardiac electrophysiology laboratory. This powerful, flexible, and inexpensive system demonstrates that RT-LINUX is well suited for realtime biomedical experiment interface. © 1999 Biomedical Engineering Society. @S0090-6964~99!02102-5#

general-purpose OS’s are inherently unpredictable, making real-time processing unreliable ~even for relatively slow and computationally simple tasks!. Commonly used general-purpose operating systems such as Microsoft WINDOWS 95/98/NT, MACINTOSH OS, and UNIX are multitasking, meaning that they allow the computer to run more than one process simultaneously. The operating system permits multitasking by time sharing, i.e., distributing ~in series! system resources among all active tasks. For example, at a given time the OS may instruct the central processing unit ~CPU! to work on task A. Before task A is completed, the OS may tell the CPU to work on task B. If there are more active tasks, the OS may instruct the CPU to work on each of them before returning to task A. As tasks are completed or new tasks are initiated, the operating system allocates resources accordingly. This approach optimizes average system performance by ensuring that no single task monopolizes the system resources. A direct result of time sharing is that real-time accuracy cannot be guaranteed, because the time between when the system stops working on a task and when it will return to that task is unpredictable. For example, when a user moves the mouse cursor across the screen and activates a new process, the OS must attend to this unforeseen sequence of events and therefore may be unable to return to a given real-time task before the task’s allotted time has elapsed. In some cases, a program can attempt to meet realtime deadlines by using software interrupts, which force an OS to return to ~or leave from! a given task at a designated time. However, because interrupt resolution is typically coarse ~e.g., 100 Hz on Intel-architecture LINUX!, the utility of this approach is limited to relatively slow real-time tasks ~i.e., those with task rates slower than the interrupt rate!. While low-level modifications, such as increasing interrupt frequency or altering task priority rules, can be made to some operating systems to improve real-time accuracy, such changes compromise the overall general-purpose performance for which the OS was designed. For DAQ applications, proprietary software such as LABVIEW ~National Instruments Corporation, Austin, TX

Keywords—Real-time computing, Control.

INTRODUCTION Hard real-time tasks, i.e., periodic tasks for which timing must be guaranteed, are ubiquitous in biomedical research. A soft real-time task is one for which timing requirements can be statistically defined; i.e., a given rate must usually be maintained. ~In this paper, real-time will be used to refer to hard real-time.! As an example of a real-time system, consider a feedback control system where the amplitude of an electrical stimulus is to be recomputed repeatedly as a function of the most recent analog input ~AI! sample acquired from a biological preparation. If an internal data acquisition ~DAQ! board collects data at a sampling rate of 1 kHz, the computer must retrieve each AI scan from the DAQ board, process that scan to determine the stimulus amplitude, and send the appropriate signal to the stimulator, all in less than 1 ms. It might appear that failure to maintain the task rate would be a predictable ~and possibly preventable! function of hardware speed, sampling rate, and/or algorithmic complexity. However, if the computer is controlled by a general-purpose operating system ~OS!, it is more likely that real-time accuracy will be hindered by the OS itself; Address correspondence to David J. Christini, PhD, Division of Cardiology, Starr 463, Cornell University Medical College, 520 E. 70th St., New York, NY 10021. Electronic mail: [email protected]. cornell.edu

180

Real-Time Computing

78730! can circumvent multitasking OS timing shortcomings by using a clock signal ~from a circuit on the DAQ board or an external function generator! to trigger regular DAQ board acquisition. The acquired data accumulates in an on-board circular buffer until the OS allots computation time to retrieve and process it. Buffering prevents data loss as long as the computer can retrieve the data before the buffer is filled. While this approach is suitable for DAQ, it is insufficient for real-time processing because individual AI scans are not retrieved and processed immediately after they are acquired. REAL-TIME PROCESSING OPTIONS Although general-purpose multitasking OSs are unsuitable for precise real-time processing, there are a number of potential alternative approaches: ~1! DOS: Many DAQ and control applications still use DOS. DOS can guarantee real time because it is not multitasking—it only runs one task at a time. Thus, DOS permits the CPU to focus all of its attention on a single real-time task. However, DOS is outdated, inflexible, and lacks the modern software and features that users expect from an operating system. ~2! RTOSs: Another solution to real-time processing is to use a high-end proprietary real-time operating system ~RTOS! such as VXWORKS ~Wind River Systems, Alameda, CA 94501!, QNX ~QNX Software Systems Ltd., Kanata, Ontario, Canada!, or REAL/IX ~MODCOMP, Fort Lauderdale, FL 33309!. Such systems are appealing because they are designed specifically for real-time processing. However, costs of RTOSs are often high, especially considering that RTOSs typically lack the generalpurpose functionality that would make them useful for typical non-real-time applications. (3) Windows NT: WINDOWS NT incorporates some important RTOS characteristics. However, Timmerman and Monfret22 found that WINDOWS NT is incapable of accurate real-time processing. They tested WINDOWS NT and found that while its average cycle time for a periodic real-time task was 35 m s, the slowest cycle time was 670 m s. This variability demonstrates that WINDOWS NT is not predictable and therefore cannot guarantee real-time accuracy. To enable WINDOWS NT real-time processing, several vendors have developed real-time WINDOWS NT add-ons. One example ~from LP Elektronik GmbH, Weingarten, Germany! uses additional hardware to enable fast interrupts. This system provides the benefit of predictable interrupts, but has the drawback of requiring an additional hardware purchase.23 Another example ~the INTIME system from RadiSys Corporation, Hillsboro, OR 97124! integrates WINDOWS NT and a proprietary RTOS together on the same system. This system can guarantee real time, but software applications are not portable between the two OSs and standard NT device driver software cannot be used by the RTOS.23 Thus, separate

181

RTOS device driver software must be written for each device. ~4! RT-Linux: LINUX14 is a relatively new Unix-like operating system originally developed for Intel processors, and now available for several other platforms including the POWERPC and DIGITAL ALPHA. An important new addition to LINUX is the Real-Time LINUX ~RT1,2,9,12,20,24 LINUX! project. RT-LINUX is a minimal OS that runs two processes: ~i! a real-time process ~top priority, guaranteed timing!, and ~ii! the standard LINUX OS ~low priority, absolutely interruptible by the real-time process!. RT-LINUX is able to guarantee the timing of the real-time process, while concurrently serving as a standard multitasking LINUX workstation. For example, one can run a word-processing application and transmit/ receive data to/from a networked computer while RTLINUX is controlling an experiment. Thus, this solution is highly functional. Furthermore, because LINUX is a development of the open-source software community, RTLINUX is free. USING RT-LINUX FOR EXPERIMENT INTERFACE During the first few years following its 1991 inception, LINUX existed mainly as a hobby for hackers. Fortunately, due to the open availability of its source code and the enthusiasm of thousands of volunteer developers worldwide, LINUX has matured into a powerful and application-rich operating system that is beginning to challenge the desktop dominance of commercial operating systems.15 Many scientists have found that LINUX is a powerful OS for modeling and data analysis. Now, with the addition of the RT-LINUX project, LINUX is a low-cost real-time alternative to high-end RTOSs. RT-LINUX is comprised of a small real-time kernel which runs: ~i! a C or C11 guaranteed-timing real-time process ~RT process! at top priority, and ~ii! the standard LINUX kernel as a fully preemptable low priority task. High-speed ~low interrupt latency! and predictable timing are achieved by limiting the RT process to functions that are essential to real time. To utilize the high functionality of the full range of LINUX resources, a non-realtime process ~NRT process! can be run concurrently from within the standard LINUX kernel to accomplish tasks that are not vital to real time ~e.g., data storage, data display, graphical user interface, network access!. Importantly, RT-LINUX uses standard LINUX device driver software. The RT process and the NRT process communicate through commonly accessible ~i.e., read-from and written-to by both the RT process and the NRT process! shared memory and/or FIFO ~first-in, first-out! queues. In short, RT-LINUX offers a fast, predictable, low-latency real-time environment, while simultaneously providing access to the rich variety of services and applications of standard LINUX.

182

CHRISTINI et al.

AN RT-LINUX CARDIAC PACING CONTROL SYSTEM In clinical cardiac electrophysiology laboratories, electrical stimulation is used to diagnose the mechanism of a patient’s cardiac arrhythmia. Stimuli are delivered by intracardiac catheter electrodes that are inserted into the femoral vein of the leg and are advanced through blood vessels to the heart. Typically, the procedure is monitored by proprietary computer software and controlled via a relatively primitive manually operated stimulator. While such stimulators are adequate for typical clinical pacing protocols ~which utilize simple stimulation patterns!, innovative adaptive pacing protocols are difficult or impossible. In our laboratory, we are investigating chaos-controltype pacing algorithms4-6,10 for arrhythmia suppression. These algorithms require real-time ~i.e., on a beat-to-beat basis! modification of pacing parameters. Neither standard cardiac electrophysiology pacing hardware/software systems, nor typical instrument control systems such as LABVIEW, offer the real-time functionality required for such pacing algorithms. We have developed a RT-LINUXbased system to control a cardiac arrhythmia known as atrioventricular ~AV! nodal conduction alternans ~AVNCA!, which is a beat-to-beat alternation in the time required for the cardiac impulse to conduct through the AV node. The AV node is the normal electrical connection between the atria and the ventricles in the mammalian heart. Rabbit heart experiments10,21 have shown that if the time between consecutive AV–nodal excitations is abnormally short, AV–nodal conduction time fatigues ~lengthens! and then bifurcates into AVNCA. AVNCA has been observed in humans during orthodromic reciprocating tachycardia ~ORT!,8,18,19 an arrhythmia characterized by a reentrant circuit in which a cardiac impulse passes anterogradely through the atria, AV node, and His–Purkinje system, and then reactivates the atria via an abnormal accessory conduction pathway. To induce AVNCA, ORT can be replicated ~as depicted in Fig. 1! by electrical stimulation of the atrium at a fixed interval VA ~VA is the time between ventricular excitation and the next atrial stimulation! after each ventricular depolarization. Simulations3,4 and rabbit-heart experiments10 have demonstrated that chaos-control-type perturbations made to the VA interval can suppress AVNCA. To determine if such a technique can be applied clinically, we have developed a real-time control system capable of beat-to-beat feedback modification of the VA pacing interval. Our RT-LINUX-based system ~block diagram, Fig. 2! is comprised of a C11 RT process ~run at top priority by the RT kernel! and a C11 graphical user interface ~GUI! NRT process ~run as a low-priority standard

FIGURE 1. A schematic showing normal conduction from the sinoatrial „SA… node, through the right and left atria „RA, LA…, the atrioventricular „AV… node, and the right and left ventricles „RV, LV…. An abnormal retrograde pathway between the right ventricle and atrium is depicted which produces an orthodromic reentrant tachycardia „ORT…. In the absence of such a pathway, ORT can be replicated „as depicted by the loop containing the computer… by stimulating the right atrium „at time A… a fixed time interval VA following detection of ventricular activation „at time V…. LINUX process! that allows the user to monitor and communicate with the RT process. The software ~which is freely available in source-code form11! was developed to run on a computer ~266 MHz Intel Pentium-II processor with 64 MB of SDRAM! running REDHAT16 LINUX 5.0 ~kernel version 2.0.32! and RT-LINUX version 0.5a. Data acquisition is performed by an internal National Instruments AT-MIO-16E-10 board. As shown in Fig. 2, our RT process cycles through a main process loop at a rate of 2 kHz. At the beginning of each loop cycle, after incrementing the main loop index ~RTindex! the RT process acquires one scan from DAQ channel AD0 and one scan from DAQ channel AD1 . Channel AD0 is connected to an ECG signal; channel AD1 is tied directly to analog output channel DA0 so that the output signal can be monitored graphically. So the data can be accessed by the non-real-time GUI process, the RT process places the AD0 and AD1 scans on top of FIFO0 and FIFO1 , respectively. The RT process then determines if the AD0 scan corresponds to the R-wave voltage deflection of ventricular activation. If ventricular activation is detected, the RT process calculates stimIndex ~stimIndex5RTindex1VA!, which is the future loop index corresponding to when the next stimulus should be delivered to the atrium. The VA interval used in the stimIndex calculation is obtained from shared memory ~specifically VAGUI , which is manipulated from within the NRT-process by a GUI scrollbar!

Real-Time Computing

183

FIGURE 2. A block diagram showing a simplified „i.e., many subcomponents and intermediary steps are omitted… version of the cardiac pacing control system. The RT process is comprised of a main task loop which runs with a period of 0.5 ms „2.0 kHz…. The NRT process consists of asynchronous tasks that are initiated when signaled by corresponding FIFO or GUI activity. The unterminated shared memory arrows represent that most stages of the RT process and the NRT process utilize shared memory; however, to simplify the diagram, only a couple of connections are depicted explicitly. RT-LINUX-based

unless control has been activated as indicated by a shared-memory flag variable ~which is manipulated from within the NRT process by a GUI toggle button!. If control has been activated, then the chaos-control-type algorithm5 computes the perturbation DVA ~such that VA5VAGUI1DVA! required for suppression of AVNCA. The last job within the periodic task loop is to determine if the most recently computed VA interval has elapsed ~i.e., RTindex5stimIndex!. If so, DAQ channel

DA0 sends out an analog voltage trigger pulse that signals a cardiac electrophysiology stimulator ~Bloom stimulator DTU215, Fischer Imaging Corp., Denver, CO! to stimulate the atrium. ~As an alternative to triggering, the RT process could deliver stimuli of arbitrary amplitude and duration directly to a stimulating electrode.! The main process loop is then reinitiated exactly 0.5 ms ~corresponding to 2.0 kHz! after the previous initiation of the loop.

184 CHRISTINI et al. FIGURE 3. A screen dump of the NRT-process GUI. The large top graph displays the data from FIFO0 „ECG signal; red trace, left y axis… and FIFO1 „stimulus trigger signal; white trace, right y axis…. Each stimulus trigger pulse occurs at a time VA ms after the ECG signal crosses „in the positive direction… the green horizontal line at approximately 0.13 V „left y axis…. The AV intervals „in this example, AVNCA did not occur…, VA intervals, and g „a chaos-control parameter… are displayed in the bottom left, center, and right graphs, respectively. RT-process or NRT-process variables are controlled with the various user-controllable widgets appearing above each display.

Real-Time Computing

The NRT process, run concurrently as a standard process, is an object-oriented C11 program developed using the Qt17 and Qwt17 GUI libraries. The object-oriented nature of C11, Qt, and Qwt enable easy development of application-tailored arrangements of displays and user-controllable widgets. The NRT process, which is absolutely preemptable by the RT process, plots data and serves as an asynchronous user interface via Qt’s signal/slot mechanism.17 Signals are emitted by the RT process whenever data are added to a FIFO, or by the GUI whenever interface widgets such as scrollbars or toggle buttons are changed. If a signal indicates that the RT process has added new data to the FIFOs, then the NRT process buffers all of the data that has been added to the FIFOs since the last such collection. When the buffer is full, its contents are transferred to a graphical data display. Depending on buffer size, buffered graphing can be used to reduce the NRTprocess computational load without degrading the graphical continuity typical of single-point graphing. If a signal indicates that the user has changed an interface widget value, then the appropriate local or sharedmemory variable is changed accordingly. In this manner, the user is able to communicate with the RT process via NRT-process shared memory access. Figure 3, a screen dump of the GUI NRT process, shows the four graphical displays and numerous user-controllable widgets. The graphs are used to plot important RT-process variables, while the widgets are used to communicate via shared memory with the RT process ~such as with the Spike Polarity toggle button! or to control features of the NRT process itself. An example of the latter is the Plotting Pause toggle button, which freezes the GUI’s top graphical display without affecting the RT process. LINUX

DISCUSSION The system described in this paper is a new type of real-time experiment control system that utilizes the innovative RT-LINUX kernel. RT-LINUX-based systems have the following important advantages over other experiment interface systems: ~1!

RT-LINUX can guarantee real time. In contrast, general-purpose operating systems such as WINDOWS 95/98/NT ~and therefore any laboratory software packages, such as LABVIEW, run on them! are inherently incapable of guaranteed real time. ~2! RT-LINUX permits multitasking and allows the user to utilize the rich assortment of features of standard LINUX. In contrast, DOS is incapable of multitasking and lacks the modern software and features that users expect from an operating system. ~3! RT-LINUX and standard LINUX are free. In contrast, proprietary real-time systems are often prohibitively expensive.

185

Because the system described here is designed for a specific cardiac control application, it may not be suitable for many noncardiac experiments. However, developers with modest C or C11 programming skills can follow the general design principles used for our cardiac control system to develop a general-purpose or application-specific RT-LINUX experiment interface system. The first step in developing such a system is selecting the proper hardware. Because LINUX is a highly efficient operating system, RT-LINUX does not require high-end hardware. In fact, RT-LINUX can perform simple tasks on systems as basic as a low-end Intel-486, 33 MHz, 8 MB RAM computer. On faster computers, RT-LINUX is capable of very fast task rates, such as the 130 kHz task rate achieved for non-GUI, nondata storage tasks on a 233 MHz Intel Pentium-II computer.12 However, because RT-LINUX’S maximum task rate decreases as task complexity increases, it is important to determine if a particular hardware configuration is capable of performing a given real-time task. Task rate is not simply a function of task complexity and processor speed; DAQ board, motherboard, system buses, hard-drive ~affecting data storage rate!, video card ~affecting GUI refresh rate!, and other factors such as RT-process code efficiency all affect RT-LINUX performance. Thus, it is difficult to predict a priori how fast a given task will run on a particular hardware configuration. Fortunately, however, the RT12 LINUX website and mailing list archive have detailed information to guide developers on such task-related hardware/software issues. Additionally, the RT-LINUX website maintains links to sites that describe a wide range of RT-LINUX-based projects; such sites can be helpful when trying to determine the suitability of RT-LINUX for the speed and computational requirements of a particular application. Importantly, each of the 21 most common biomedical signals ~such as action potentials, electroretinograms, electroneurograms, electroencephalograms, electrocardiograms, etc.! are characterized fully by frequency components less than 10 kHz.7 In fact, all but electrocorticograms ~up to 5 kHz! and electromyographic signals ~up to 10 kHz! are characterized fully by components below 3 kHz. Thus, because RT-LINUX is capable of functioning at rates much greater than 10 kHz, RT-LINUX-based systems should be capable of interfacing with most biomedical experiments. The second step in developing such a system is writing the C or C11 source code. As an alternative to starting from scratch, the source code for our cardiac pacing control system,11 for a general-purpose multichannel data acquisition system which we have developed,11 or for several other RT-LINUX-based systems12 can be downloaded for free and modified to suit a particular application. Importantly, RT-LINUX is

186

CHRISTINI et al.

supported by an enthusiastic group of expert developers and users who help solve RT-LINUX development problems via an e-mail distribution list;12 documentation is also available. Thus, RT-LINUX is continuing the LINUX tradition of technical support excellence—LINUX was awarded InfoWorld’s 1997 ‘‘Best Technical Support Award,’’13 dispelling the common misconception that one must pay for software to receive quality technical support. Our system, with its multichannel analog input, device triggering analog output, multiple graph windows, and user-controlled GUI widgets, demonstrates that RTLINUX is a highly functional solution for real-time experiment interface. Importantly, those who use RT-LINUX benefit from the wide variety of powerful free LINUX software ~for programming, analysis, plotting, wordprocessing, networking, web serving, etc.! that can be used for other research applications. In short, RT-LINUX and LINUX offer a highly functional, flexible, and inexpensive solution for real-time biomedical experiment interface. ACKNOWLEDGMENTS This work was supported in part by a grant from the National Institutes of Health ~R01 HL56139!. The authors are indebted to the members of the RT-LINUX and Qt development communities for assistance with the development of the RT-LINUX cardiac stimulation control software. NOMENCLATURE AI AV CPU DAQ ECG FIFO GUI NRT ORT OS RT RTOS VA

analog input atrioventricular central processing unit data acquisition electrocardiogram first-in, first-out graphical user interface non-real-time orthodromic reciprocating tachycardia operating system real-time real-time operating system ventricular–atrial

REFERENCES 1

Barabanov, M. A Linux-Based Real-Time Operating System. New Mexico Institute of Mining and Technology, Department of Computer Science Thesis, 1997. 2 Barabanov, M., and V. Yodaiken. Introducing real-time Linux. Linux J. 34:19–23, 1997 ~http://www.ssc.com/lj/ issue34/0232.html!. 3 Brandt, M. E., H.-T. Shih, and G. Chen. Linear time-delay

feedback control of a pathological rhythm in a cardiac conduction model. Phys. Rev. E 56:R1334–R1337, 1997. 4 Christini, D. J., and J. J. Collins. Using chaos control and tracking to suppress a pathological nonchaotic rhythm in a cardiac model. Phys. Rev. E 53:R49–R52, 1996. 5 Christini, D. J., and J. J. Collins. Real-time, adaptive, modelindependent control of low-dimensional chaotic and nonchaotic dynamical systems. IEEE Trans. Circuits Syst., I: Fundam. Theory Appl. 44:1027–1030, 1997. 6 Christini, D. J., V. In, M. L. Spano, W. L. Ditto, and J. J. Collins. Real-time experimental control of a system in its chaotic and nonchaotic regimes. Phys. Rev. E 56:R3749– R3752, 1997. 7 Cohen, A. Biomedical signals: Origin and dynamic characteristics; frequency-domain analysis. In: The Biomedical Engineering Handbook, edited by J. D. Bronzino. Boca Raton, FL: CRC, 1995, pp. 805–827. 8 Curry, P. V. L., and D. M. Krikler. Significance of cycle length alternation during drug treatment of supraventricular tachycardia. Br. Heart J. 38:882, 1976. 9 Epplin, J. Linux as an embedded operating system. Embedded Syst. Programm. 10:96–104, 1997 ~http:// www.embedded.com/97/fe39710.htm!. 10 Hall, K., D. J. Christini, M. Tremblay, J. J. Collins, L. Glass, and J. Billette. Dynamic control of cardiac alternans. Phys. Rev. Lett. 78:4518–4521, 1997. 11 http://cardiodyn.med.cornell.edu/;dchristi/rtlinux/index.html 12 http://rtlinux.cs.nmt.edu/;rtlinux 13 http://www.infoworld.com/cgi-bin/displayTC.pl?/ 97poy.supp.htm 14 http://www.linux.org 15 http://www.linux.org/news/index.html has links to several mainstream press articles. 16 http://www.redhat.com 17 http://www.troll.no, Troll Tech AS, Oslo, Norway. 18 Krikler, D., and E. Rowland. Management of supraventricular tachycardia with drugs and artificial pacing. In: Cardiac Arrhythmias: Electrophysiology, Diagnosis, and Management, edited by O. Narula. Baltimore, MD: Williams and Wilkins, 1979, pp. 382–396. 19 Rinkenberger, R. L., E. N. Prystowsky, J. J. Heger, P. J. Troup, W. M. Jackman, and D. P. Zipes. Effects of intravenous and chronic oral Verapamil administration in patients with supraventricular tachyarrhythmias. Circulation 62:996– 1010, 1980. 20 Ripoll, I. Real-time Linux ~RT-Linux!. LinuxFocus May, 1998 ~http://www.linuxfocus.org/English/May1998/ article4.html!. 21 Sun, J., F. Amellal, L. Glass, and J. Billette. Alternans and period-doubling bifurcations in atrioventricular nodal conduction. J. Theor. Biol. 173:79–91, 1995. 22 Timmerman, M., and J.-C. Monfret. Windows NT as realtime OS? Real-Time Mag. 2Q:6–13, 1997 ~http:// www.realtime-info.be/encyc/magazine/97q2/winntasrtos.htm!. 23 Timmerman, M., and J.-C. Monfret. Windows NT realtime extensions: An overview. Real-Time Mag. 2Q:14–24, 1997 ~http://www.realtime-info.be/encyc/magazine/97q2/ winntext.htm!. 24 Yodaiken, V. The RT-Linux approach to hard real-time ~A short position paper! ~http://rtlinux.cs.nmt.edu/;rtlinux/ papers/whitepaper/short.html! ~unpublished!.

Suggest Documents