although the system of the present invention applies to multi - tasking computer systems in general , the system will be described in the environment of the unix operating system in order to simplify the discussion . a representation of a computer system configuration is illustrated in fig2 . in the system , the floating point process ( fpu ) 15 is connected to the central processing unit ( cpu ) 10 through a co - processor interface 20 . both the cpu and fpu are time - shared by the processes that may be operating on the system and the operating system supports the context switching of the fpu as well as the cpu thereby enabling the processors to be time - shared . the remaining devices 30 , 35 , 40 ( the user defined devices ) are connected through a memory management unit ( mmu ) 25 . the technique utilized to access these device 30 , 35 , 40 connected though the mmu 25 is referred to as memory mapped i / o . each device has its own address space and processes may access the devices using the particular address space associated with each device . the devices are mapped into the process address space of each process that will access the device . the devices are mapped in such a manner that one device is mapped per segment of the address space . a segment is a contiguous range of pages having a page fault handler associated with it . the page fault handler is configured to control the device mapped to the segment . the system of the present invention utilizes the page fault mechanism of the mmu to determine when a context switch of individual user devices is to be performed . referring to fig3 devices 170 and 175 are connected to the system through the mmu and are mapped into the address space of each of the process1 , 150 , process2 , 155 , and process3 , 160 . the devices 170 and 175 are respectively mapped into two segments 180 , 185 of the address space of the first process 150 . similarly , the context of device 170 and 175 with respect to the second and third processes are respectively mapped into segments 190 , 195 and 200 , 205 of the address space of process2 and process3 . in a virtual memory address system , each page of memory has a &# 34 ; valid bit &# 34 ; associated with it . the valid bit is typically utilized to indicate that a page is currently residing in real or physical memory . this valid bit is utilized in this invention to control the context switching of the user defined devices connected through the mmu . if a valid bit is not set and a process attempts to access the device , a page fault occurs . when a page fault occurs , the kernel will determine through the page fault mechanism of the mmu and the process table that the page fault occurred at a page that is mapped to a particular device . the page fault handler of the segment in which the page fault occurred then indicates to the kernel the steps to be taken in response to the page fault . upon the completion of those steps , the valid bits of the pages to which the device is mapped are set , permitting access to the device by the process , and the instruction on which the page fault occurred is reexecuted or continued to restart the execution of the process . if the system utilizes device queues which receive commands from the processes and sends the commands to the device , device queues , rather than the device themselves , are mapped into each process address space that accesses the device such that one device queue is mapped into the segment and the valid bits corresponding to the device queues with respect to particular processes are set and reset to invoke the page fault mechanism and control the devices . in the first embodiment of the present invention , the valid bits of the pages the devices are mapped to are initially not set . thus , when a process first attempts to access a device a page fault occurs . the mmu determines that the page fault occurred at a page which is mapped to a device , and the page fault handler of the corresponding segment is invoked . the page fault handler causes a context switch to be performed , the kernel causing the context information to be restored into the device for the process attempting to access the device . this page fault further indicates to the kernel that a context switch is to be performed wherein the context of the device is read from the device and stored in the save area of the process ( in the unix operating system this is referred to as the u - area of the process ) each time the present process is deactivated and is restored to the device each time the process is activated . the corresponding valid bits are then set so no further page faults occur when the process attempts to subsequently access the device . process execution is then continued by reexecuting the instruction on which the page fault occurred . in a second embodiment of the present invention to control context switching of devices , the valid bits are initially not set for the pages to which the devices are mapped . thus , when a process first attempts to access a device , a page fault occurs . the mmu , through the process table , determines that the page fault occurred at a page which is mapped to a device ; and the page fault handler of the corresponding segment is invoked . at this time a context switch is performed , the kernel causing the context information with respect to the process attempting to access the device to be restored into the device . the page fault handler further indicates to the kernel that a context switch is to be performed in which the context of the device is saved when the process is deactivated ( that is , when another process gains access to the cpu ). the valid bits corresponding to the mapping of the device within the address space of the process are then set , and process execution is continued . thus , when the process is subsequently deactivated , a context switch is performed ; and the corresponding valid bits are reset . similarly , the next time a process attempts to access the device in a subsequent cpu cycle , a page fault will occur , a context switch will be performed in which the context will be restored on the device and the valid bits will be set . a context switch will occur wherein the device context is saved and the valid bits will be reset when the process is again deactivated . if the process does not attempt to access the device during the cpu cycle it is active , no page fault will occur and no context switch will be performed . this embodiment decreases the amount of context switching to be performed , limiting context switching only to those processes during which the process actually accesses the device . in another embodiment of the present invention to control context switching of devices , the valid bits of the pages to which the devices are mapped are initially not set . thus when a process attempts to access a device , a page fault occurs . it is then determined which process &# 39 ; s context is stored on the device . preferably the kernel determines which device context is on the device . if the device context on the device is that of the process which is attempting to access the device , no context switch is performed , the corresponding valid bits are set and process execution is resumed with the device context stored on the device . if the device context is not in the context of the process attempting to access the device , a context switch is performed wherein the device context with respect to the process attempting to access the device is restored on the device . the corresponding valid bits are then set and process execution is resumed . when the next process switch occurs and the process which had been accessing the device loses control of the cpu ( i . e ., the process is &# 34 ; deactivated &# 34 ;), a context switch is performed in which the context of the device is saved and the corresponding valid bits are set . this embodiment is a preferable optimization because a context switch is performed only when the context on the device is not the context of the device with respect to the process trying to access the device . in another embodiment of the present invention to control context switching of devices connected to the system through the mmu , the valid bits corresponding to device mappings initially are not set for each process . when a process attempts to access a device , a page fault occurs which triggers a context switch wherein the device context with respect to that process is read into the device . when the process is deactivated , no context switch occurs and the valid bits remain set for that process . when another process attempts to access the device a page fault will occur . then , a context switch is performed wherein the context contained in the device is written into the process &# 39 ; s ( that is the process which accessed the device last ) save area for storage and the context information with respect to the process attempting to access the device is read into the device . the valid bits corresponding to the device mapping in the first process are reset and the valid bits corresponding to the device mapping in the process , the context of which is currently in the device , are set . utilizing this process , the amount of context switching with respect to user defined devices connected through the mmu is further minimized . in another embodiment of the present invention , illustrated in fig4 a , the page fault mechanism of the mmu and the page fault handler in each segment are used to insure that only complete commands , i . e . not partial commands , are sent to devices connected to the system through the mmu . device 315 is connected to the system through the mmu . the device queue 300 is mapped into each of process1 250 , process2 260 and process3 &# 39 ; s 270 address space . the device queue 300 with respect to process1 is mapped into segment 275 contained within process1 &# 39 ; s address space 250 . similarly , device queue 300 is mapped into segment 280 of process2 &# 39 ; s address space 260 and segment 290 of process3 &# 39 ; s address space 270 . the device queue 300 is connected to assembly buffer 305 which stores a partial command until it is complete . when the command is complete it is transferred to the command buffer 310 to be input to the device 315 . a memory 320 is used to store the contents of assembly buffer 305 when a process switches control of the cpu from one process to another occurs . if process1 is the active process , the valid bits corresponding to the mapping of device queue 300 are set , that is , the valid bits of segment 275 are set , and the valid bits corresponding to the mapping of the device queue in process2 and process3 &# 39 ; s address space , that is segments 280 and 290 , are not set . when a process switch occurs , for example , control of the cpu is changed from process1 to process2 attempts to access the device through device queue 300 , a page fault occurs and the page fault mechanism using the page fault handler associated with segment 280 is invoked . the page fault mechanism stores the contents of assembly buffer 305 in device memory 320 restores from device memory the contents of assembly buffer 305 with respect to process2 , resets the valid bits corresponding to the mapping , segment 275 , of device queue 300 in process1 , and sets the valid bits segment 280 the segment to which device queue is mapped with respect to process2 whereby process2 execution is continued and the assembly of the command which is partially stored in the assembly buffer is continued . there are two extensions to this technique . first , the device may store partial commands on the device itself . in such a case , the role of the page handler is to communicate to the device when the context switch occurs , instruct the device as to which process context it should use to save the current partial command , and instruct the device as to which process context to use to install the partial command for the process about to become active . second , the device may store partial commands on the device itself , but the page handler may still be responsible for the situation where the number of candidate processes exceeds the capacity of the device to save context . the page handler may , in such a case , manage the contexts on the device , storing the least recently used context with its partial command to the save area . to ensure that only complete commands are executed by the device , the page fault mechanism does not require the device memory to store the partial command . this is illustrated in fig4 b . the device 315 is connected to the system through the mmu . the assembly buffer 305 is mapped into each process1 250 , process2 260 , and process3 &# 39 ; s address space 270 . the assembly buffer 305 with respect to process1 is mapped into segment 275 contained within process1 &# 39 ; s address space 250 . similarly , assembly buffer 300 is mapped into segment 280 of process2 &# 39 ; s address space 260 , and segment 290 of process3 &# 39 ; s address space 270 . the assembly buffer 305 is connected to the device queue 300 , which connects to the command buffer 310 . the command buffer 310 transfer complete commands to the device 315 . if process1 is the active process , the valid bits corresponding to the mapping of assembly buffer 305 are set , that is , the valid bits of segment 275 are set , and the valid bits corresponding to the mapping of the assembly buffer in process2 and process3 &# 39 ; s address space are not set . when a process switch occurs , for example , when control of the cpu is changed from process1 to process2 and process2 attempts to access the device through assembly buffer 305 , a page fault occurs and the page fault mechanism using the page fault handler associated with segment 280 is invoked . the page fault mechanism stores the contents of the assembly buffer 350 in the save area 320 for the process , restores the contents of assembly buffer 305 with respect to process2 from its save area , resets the valid bits corresponding to the mapping , segment 275 , of assembly buffer 305 in process1 , and sets the valid bits segment 280 , the segment to which the assembly buffer is mapped with respect to process2 , whereby process2 execution is continued and the assembly of the command which is partially stored in the assembly buffer is continued . as can be visualized by reading the foregoing description , this embodiment may be varied to change the time when the contents of the assembly buffer are saved and when the contents are restored such as with embodiments earlier described with respect to context switching of the devices . in addition , this embodiment may be combined with the previous embodiments such that when the device context is stored the contents of the assembly buffer are stored and when the device context is restored , the contents of the assembly buffer are restored . the page fault mechanism of the mmu may also be utilized to control the process flow to the devices connected to the system through the mmu . flow control problems arise when the device queue is filled to capacity and overflows , losing those commands that were not stored in the queue . in the present embodiment , the valid bits corresponding to the mapping of the device queue with respect to the active process ( the process which currently has control of the cpu ) are set thereby permitting access to the queue to enqueue commands without the occurrence of a page fault . when the queue reaches a certain capacity , for example 90 % full , a signal is sent , which indicates that the buffer is full . upon receipt of the notice the buffer is full , the operating system resets the valid bits corresponding to the mapping of the device queue . therefore , the next time the queue is accessed , a page fault occurs and the page fault mechanism of the mmu causes the process which was attempting to access the queue to go to sleep . when the queue reaches a certain level that designates that the queue is no longer full ( e . g . 10 % full ), a signal is sent to the operating system which causes the corresponding valid bits to be set indicating that access to the queue is permitted and any processes which were put to sleep because the device queue was full are awakened . preferably , the signals that the queue is full and the queue is no longer full are sent using the interrupt mechanism of the cpu . for example , when the queue is full an interrupt is generated . the interrupt handler determines that the interrupt was generated because the device queue is full and forwards a signal to the page fault handler of the segment to which the device queue is mapped . the page fault handler then resets the valid bits . similarly , when the queue is no longer full , an interrupt is generated and examined by the interrupt handler which passes a signal to the page fault handler to set the valid bits of the segment , thereby permitting access to the device queue . fig5 a illustrates a first variation of the use of the memory management module for implementing synchronization . in this example it is assumed that there are processes which access resources on the device , each of which is private to the process . a specific example might be a client process called process1 which owns a device queue called resource1 , and window software called process2 which owns a color table called resource2 . the client process instructs the window process to write the color table . the window process is to complete this transaction before the client process is to access the device . in the example shown in fig5 a , process1 maps resource1 through page 1 . 1 , and process2 maps resource1 to page 2 . 1 . in this first example of synchronization , the window process calls system software , called the device driver , to communicate its interest in accessing the device . the device driver is system software specific to a device . the example illustrates the use of the device driver to signal or transfer control to the page handler without incurring a page fault to control access to the device . the following table with the description following will illustrate the operation of the variation shown in fig5 a . __________________________________________________________________________ permis - time process page resource ownership sions valid__________________________________________________________________________t1 process 1 page 1 . 1 resource 1 private read / write 1t1 process 2 page 2 . 1 resource 1 private read / write 1t3 process 1 page 1 . 1 resource 1 private read / write 0t3 process 2 page 2 . 1 resource 1 private read / write 1t5 process 1 page 1 . 1 resource 1 private read / write 1t5 process 2 page 2 . 1 resource 1 private read / write 1__________________________________________________________________________ as may be seen , at time t1 , process1 which owns resource1 requests that process2 which owns resource2 modify resource2 . in this operation , process2 is to complete this transaction on resource2 before process1 is to access resource1 . at time t2 , process2 calls the device driver to request exclusive access to the device . the device driver in turn conveys this request and transfer control to the page handler . at time t3 , the page handler implements the request for exclusive access . the page handler either ( a ) invalidates all the pages for all processes which access the device except for the window process itself ( thus the page 1 . 1 for resource 1 becomes invalid ); or ( b ) invalidates just the pages of those processes which access the device and require this specific resource . these are examples where window software must modify device state which affects just one process . at time t4 , the process2 resumes and completes the transaction . the transaction is atomic because no process , except process2 , can access the device . to signal that the transaction is complete , process2 again calls the device driver to release exclusive access to the device . the device driver conveys this request to the page handler . at time t5 the page handler releases exclusive access . the page handler validates page1 . 1 for resource1 . the client process , process1 becomes active and resumes access to the device . fig5 b illustrates another use of the memory management module for implementing synchronization . in the situation illustrated in fig5 b , the page address for a device resource functions as a semaphore by causing a page fault and invoking the page fault mechanism . in this example it is assumed that there are processes which access resources , each of which is private to the process , on the device . the example again assumes there is a client process called process1 which owns a device queue called resource1 , and window software called process2 which owns a color table called resource2 . the client process instructs the window process to write the color table . the window process is to complete this transaction before the client process is to access the device . in the example shown in fig5 b , it is assumed that process1 maps resource1 through page1 . 1 , that process2 maps resource1 through page2 . 1 , and that process2 maps resource2 through page2 . 2 . it should be noted that the page handler is able to determine which process causes the page fault . similarly , if one process must execute before a second process , the first process is assigned a higher priority and the valid bits corresponding to the mapping of a device with respect to the second process are reset such that if the second process attempts to access the device before the first process , a page fault occurs and the page fault mechanism will cause the process to go to sleep until the valid bits are set . once the first process has completed access to the device , the valid bits corresponding to the mapping of the device with respect to the second process are reset and the process is awaken thereby permitting the second process to access the device . the following table with the description following will illustrate the operation of the variation shown in fig5 b . __________________________________________________________________________ permis - time process page resource ownership sions valid__________________________________________________________________________t1 process 1 page 1 . 1 resource 1 private read / write 1t1 process 2 page 2 . 1 resource 1 read 0t1 process 2 page 2 . 2 resource 2 private read / write 0t3 process 1 page 1 . 1 resource 1 private read / write 0t3 process 2 page 2 . 1 resource 1 read 0t3 process 2 page 2 . 2 resource 2 private read / write 1t5 process 1 page 1 . 1 resource 1 private read / write 1t5 process 2 page 2 . 1 resource 1 read 0t5 process 2 page 2 . 2 resource 2 private read / write 0__________________________________________________________________________ as may be seen , at time t1 , process1 which owns resource1 requests that process2 which owns resource2 modify resource2 . in this operation , process2 is to complete this transaction on resource2 before process1 is to access resource1 . at time t2 , process2 attempts to access resource2 . in the present example the system software initializes the page table for resource2 as invalid , and a page fault occurs . at time t3 , the page handler interprets the page fault for this resource to imply the window software wants exclusive access to the device . the page handler either ( a ) invalidates all the pages for all processes which access the device except for the window process itself ( thus the page1 . 1 for resource1 becomes invalid ); or ( b ) invalidates just the pages of those processes which access the device and require this specific resource . these are examples where window surface must modify the device state which affects just one process . finally at t3 , the page handler validates the page2 . 2 resource2 . at time t4 , the process2 resumes and completes the transaction . the transaction is atomic because no process , except process2 , can access the device . to signal that the transaction is complete , process2 attempts to read resource1 . since the system software initializes the page table for this resource , page2 . 1 , as invalid , the attempt causes the page fault . at time t5 , the page handler recognizes that , because the request to access resource1 originates from process2 rather than process1 , it should interpret the page fault to mean that it is to release exclusive access . the page handler then invalidates page2 . 2 for resource2 and validates page1 . 1 for resource1 . the client process , process1 becomes active and resumes access to the device . fig6 illustrates a third example which again uses the page table to deny access until the transaction is complete . in this example , it is assumed that the hardware signals the system software using a semaphore . the device interrupts the system software when the window software writes a semaphore on the device . the table and the explanation given below illustrate the operation of the example shown in fig6 . __________________________________________________________________________ permis - time process page resource ownership sions valid__________________________________________________________________________t1 process 1 page 1 . 1 resource 1 private read / write 1t1 process 2 page 2 . 1 resource 1 private read / write 1t3 process 1 page 1 . 1 resource 1 private read / write 0t3 process 2 page 2 . 1 resource 1 private read / write 1t5 process 1 page 1 . 1 resource 1 private read / write 1t5 process 2 page 2 . 1 resource 1 private read / write 1__________________________________________________________________________ as is illustrated by the table , at time t1 , process1 which owns resource1 requests that process2 which owns resource2 modify resource2 . process2 is to complete this transaction on resource2 before process1 is to access resource1 . at time t2 process2 write the semaphore on the device . the device , through the handler , interrupts the system software and transfers control to the page handler . at time t3 , the page handler reads the semaphore value , for example , a value of 0 or 1 to determine what response is necessary . the semaphore state indicates that the window software wishes exclusive access to the device . the page handler either ( a ) invalidates all the pages for all the processes which access the device ( thus the page1 . 1 for resource1 becomes invalid ); or ( b ) invalidates just the pages for those processes which access the device but explicitly relate to this resource ( so that page1 . 1 for resource1 becomes invalid ). at time t4 , the process2 resumes and completes the transaction . the transaction is atomic because no process except process2 can access the device . to signal that the transaction is complete , process2 again writes the semaphore on the device . the device interrupts the system software and control is transferred to the page handler . at time t5 , the page handler reads the semaphore to detect what response is appropriate . the semaphore indicates that the transaction is complete , and the page handler validates page1 . 1 for resource1 . the client process , process1 , becomes active and resumes access to the device . fig7 illustrates a fourth example of the page fault mechanism implementing synchronization . it is assumed that the resources on the device are public resources . once a process acquires a resource , the process must complete execution relative to this resource before a second process can access the resource ; otherwise the second process could interfere with the first . specifically , it is assumed in fig7 that both process1 and process2 use resource1 wherein process1 maps resource1 through page 1 . 1 while process2 maps resource1 through page 2 . 1 . in this example the semaphore is mapped through the page table for each process wherein process1 acquires the semaphore through page 1 . 2 and releases the semaphore through addressing page 1 . 3 , while process 2 acquires the semaphore through page 2 . 2 and releases the semaphore through page 2 . 3 . thus , each process must acquire the semaphore to reserve this resource and later release the semaphore to free the resource . the following table and the explanation will illustrate the operation of the variation shown in fig7 . __________________________________________________________________________ permis - time process page resource ownership sions valid__________________________________________________________________________t1 process 1 page 1 . 1 resource 1 public read / write 1t1 process 1 page 1 . 2 semaphore public read / write 1t1 process 1 page 1 . 3 semaphore public read / write 0t1 process 2 page 2 . 1 resource 1 public read / write 1t1 process 2 page 2 . 2 semaphore public read / write 0t1 process 2 page 2 . 3 semaphore public read / write 1t2 process 1 page 1 . 1 resource 1 public read / write 1t2 process 1 page 1 . 2 semaphore public read / write 1t2 process 1 page 1 . 3 semaphore public read / write 0t2 process 2 page 2 . 1 resource 1 public read / write 1t2 process 2 page 2 . 2 semaphore public read / write 0t2 process 2 page 2 . 3 semaphore public read / write 1t3 process 1 page 1 . 1 resource 1 public read / write 1t3 process 1 page 1 . 2 semaphore public read / write 0t3 process 1 page 1 . 3 semaphore public read / write 1t3 process 2 page 2 . 1 resource 1 public read / write 1t3 process 2 page 2 . 2 semaphore public read / write 1t3 process 2 page 2 . 3 semaphore public read / write 0t4 process 1 page 1 . 1 resource 1 public read / write 1t4 process 1 page 1 . 2 semaphore public read / write 0t4 process 1 page 1 . 3 semaphore public read / write 1t4 process 2 page 2 . 1 resource 1 public read / write 1t4 process 2 page 2 . 2 semaphore public read / write 1t4 process 2 page 2 . 3 semaphore public read / write 0t5 process 1 page 1 . 1 resource 1 public read / write 1t5 process 1 page 1 . 2 semaphore public read / write 1t5 process 1 page 1 . 3 semaphore public read / write 0t5 process 2 page 2 . 1 resource 1 public read / write 0t5 process 2 page 2 . 2 semaphore public read / write 0t5 process 2 page 2 . 3 semaphore public read / write 0t6 process 1 page 1 . 1 resource 1 public read / write 1t6 process 1 page 1 . 2 semaphore public read / write 1t6 process 1 page 1 . 3 semaphore public read / write 0t6 process 2 page 2 . 1 resource 1 public read / write 1t6 process 2 page 2 . 2 semaphore public read / write 0t6 process 2 page 2 . 3 semaphore public read / write 1__________________________________________________________________________ as illustrated by the table above , at time t1 , process1 which shares resource1 requests that process2 , to modify resource1 . process2 must complete this transaction on resource1 before process1 is to access resource1 . at time t2 , process2 attempts to access the semaphore , but since the system software initializes the semaphore page 2 . 2 as invalid , a page fault occurs . at time t3 , the page handler allocates resource1 to process2 . the page handler validates the page2 . 2 and invalidates page 2 . 3 for the window process , and validates page 1 . 3 and invalidates the page1 . 2 for the client process . at time t4 , the process2 resumes and completes the transaction . the transaction is atomic because process1 is to attempt to access the semaphore before it is to access the device . to signal that the transaction is complete , process2 attempts to read the semaphore through page2 . 3 . since the system software has initialized the page as invalid , the attempt causes the page fault . at time t5 , the page handler interprets the attempt to access the semaphore through page 2 . 3 , to mean the transaction is complete . the page handler validates page2 . 2 for process2 , validates page1 . 2 and invalidates page2 . 3 for process1 . at time t6 process1 becomes active and attempts to acquire the semaphore . since the page is valid , the process remains access to the device . the invention has been described in conjunction with the preferred embodiments . numerous alternatives , modifications , variations and uses will be apparent to those skilled in the art in light of the foregoing description . particularly it is evident that one or more of the embodiments described may be utilized by itself or in conjunction with one another to achieve the system described .