detailed descriptions of the preferred embodiment are provided herein . it is to be understood , however , that the present invention may be embodied in various forms . therefore , specific details disclosed herein are not to be interpreted as limiting . [ 0028 ] fig1 illustrates data storage system configurations of the preferred embodiment . the pc data storage system 131 services a plurality of channel attached host processors 111 , 112 using channels 121 , 122 , and a plurality of network attached host processors 106 , 107 using network link 151 , and a plurality of network attached data storage systems 132 , 133 using network links 152 , 153 . pc storage system 132 services channel attached hosts 157 , 158 . hosts 157 and 158 access a data storage system 131 indirectly via network attached data storage system 132 , thereby offloading communications protocol overhead from remote hosts 157 , 158 . hosts 106 and 107 directly access storage system 131 via network link 151 thereby incurring communications protocol overhead on hosts 106 , 107 and therefore decreasing performance of applications running on said hosts . host 111 accesses remote disk 181 via local data storage system 131 , network link 153 , and remote data storage system 133 without incurring protocol overhead on host 111 . host 157 accesses disk 161 via data storage system 133 , network link 152 , and data storage system 131 without incurring protocol overhead on host 157 . host 106 directly accesses local disk 161 via network link 151 thereby incurring protocol overhead . the disks 191 , 192 that are attached to hosts 106 , 107 without a data storage system , cannot be accessed by outside hosts . the preferred embodiment of the present inventions uses well - established technologies such as scsi channels for i / o traffic and ethernet link for network traffic . in fig2 the alternate embodiment of the present invention uses fiber channel technology for both i / o traffic and network traffic . the fiber channel connects computers and hard disks into one logical network . in one variation of the alternate embodiment in fig2 the fiber optics link is organized as a fiber channel arbitrated loop ( fcal ). in another variation shown in fig2 a , the fiber optics link is organized as a switching network . in yet another variation in fig2 b , the fiber channel is organized in two fcal loops connected via switch . [ 0032 ] fig3 shows a software architecture and modules of a pc data storage system corresponding to the data storage system 131 in fig1 . data is received from the hosts 111 , 112 via i / o channels 121 , 122 in front - end software module 310 in fig3 . the front - end module 310 handles channel commands and places the results in cache memory 322 in the form of new data or modification to data already stored on the disk 161 . the cache manager software module 320 calls routines in the configuration manager 340 to ensure consistency of the cache memory in other network attached data storage systems . at some later point in time , the back - end software module 342 invokes a page flusher module to write modified data to disks 161 and 162 and free up cache memory . in fig3 front - end module 310 including i / o adapter driver has been modified to accept target scsi i / o requests from hosts 111 and 112 . said front - end module handles i / o requests in such a manner that hosts 111 and 112 are not aware of a data storage system . hosts 111 and 112 issue i / o requests as if the request is going to a standard disk . the presence of fast access cache memory permits front end channels and network links to operate completely independent of the back - end physical disk devices . because of this front - end / back - end separation , the data storage system 131 is liberated from the i / o channel and network timing dependencies . the data storage system is free to dedicate its processing resources to increase performance through more intelligent scheduling and data transfer network protocol . [ 0035 ] fig4 shows a flowchart of a data storage system in the process of reading or writing to data volumes stored on disk drives shown in fig3 . the flowchart uses a volume access table 450 ( see also fig5 ) and controlled by the configuration manager . local operations begin in step 401 where the corresponding front - end module 310 of fig3 allocates a channel and waits for i / o requests from the initiating hosts 111 or 112 . remote operations begin in step 402 . depending upon the status of the value in a volume access table 450 the requests are routed either as shown in fig4 a for write exclusive mode , fig4 b for read exclusive , fig4 c for write shared or fig4 d for read shared . concurrently with the processing of i / o operations , the independent page flusher daemon shown in fig4 f scans cache memory and writes buffers to disks . disk interrupt processing is shown in fig4 e . volume access table 450 ( see fig4 ) contains a mapping between hosts and volumes specifying an access mode value . if the access mode is set neither to shared nor exclusive , the configuration manager forwards i / o requests directly to disk . in addition to the access mode , the volume access table may contain other values that help the configuration manager and improve performance of the data storage system . in another embodiment of this application , shown in fig5 the volume access table includes a translation module for a given host to facilitate volume mapping . the translation module is a dynamically loadable library that can be changed , compiled and linked at run - time . a user of a data storage system can externally set the values and parameters in a volume access table . for each host and volume pair , a user can explicitly specify the access mode value . for some applications , where data on a remote volume is accessed infrequently , the user may want to specify other than shared or exclusive in order to disable cache for the remote volume . by disabling caching , the user eliminates cache coherency traffic entirely for the volume . in a data storage system , a user or a system administrator actively monitors and changes the behavior of a cache manager by changing values in a volume access table in order to improve performance of the data storage system . [ 0039 ] fig4 a shows a flowchart of the cache manager 320 ( see fig3 ) as it processes a write request in an exclusive mode . in step 411 of fig4 a , the cache manager checks whether the requested buffer is in cache or not . for a cache miss , in step 412 , the cache manager allocates a new buffer for storing data that will be written . for a cache hit , the cache manager branches directly to step 413 where data is copied into the newly allocated buffer . in step 414 , the cache manager calls a configuration manager routine that sends an invalidate request to the list of shared hosts for this particular volume . in step 415 , the cache manager checks the type of a request . for a channel type of a request , the cache manager returns to step 405 to release the channel . for a network type of a request , the cache manager proceeds to release network request in step 419 on the right side of fig4 a . on the right side of fig4 a , in step 416 , network interrupt identifies and receives a remote write request . in step 417 , the cache manager calls configuration manager routine to determine the validity of the request . bad requests are ignored in step 418 . correct requests proceed to step for 410 for write exclusive processing . step 415 returns the flow to step 419 , which releases network resources . [ 0041 ] fig4 b shows a flowchart of the cache manager as it processes a read request in an exclusive mode . in step 420 , the cache manager checks whether the requested buffer is in cache or not . for a cache miss , in step 421 , the cache manager allocates a buffer for storing data that will be read in . in step 422 , the cache manager updates the buffer status with read pending . in step 423 , the cache manager starts an operation to read from a hard disk driver and proceeds to release the channel in step 405 . for a cache hit , in step 424 , the cache manager transmits read data and proceeds to release the channel in step 405 . for an identified network request , in step 425 , the cache manager sends back read results in step 429 . on the right side of fig4 b , in step 426 , network interrupt identifies and receives a remote read request . in step 427 , the cache manager calls a configuration manager routine that checks the configuration file and ignores bad requests in step 428 . correct requests proceed to step 420 for read exclusive processing . step 425 returns the flow to step 429 that sends read results . [ 0043 ] fig4 c shows a flowchart of the cache manager as it processes a write request in a shared mode . in step 430 , the cache manager checks whether the requested buffer is in cache or not . for a cache miss , in step 431 , the cache manager allocates a new buffer for storing data that will be written . for a cache hit , the cache manager branches directly to step 432 where data is copied into the newly allocated buffer . in step 433 , the cache manager updates the buffer status with write pending and proceeds to step 434 to release the channel . in step 435 , the cache manager calls a configuration manager routine that sends a remote write request to the host that holds this particular volume in an exclusive mode . in follow up to step 435 , the cache manager returns to the beginning of fig4 . on the right side of fig4 c , the cache manager updates the buffer status with write done in step 444 . the flow begins with the network interrupt that calls configuration manager to validate the request in step 441 . bad requests are ignored in step 442 . a correct request proceeds to step 443 that checks whether the status of this particular buffer is write pending . if the status is pending , in step 444 , the cache manager updates the buffer status to write done . for any other buffer status , in step 445 , the cache manager updates the status to free . this buffer is released in accordance with the invalidate request that has come from a remote host that holds this volume in an exclusive mode as has been described in fig4 a . [ 0045 ] fig4 d shows a flowchart of the cache manager as it processes a read request in a shared mode . in step 450 , the cache manager checks whether the requested buffer is in cache or not . for a cache miss , in step 452 , the cache manager allocates a buffer for storing data that will be read into . for a cache hit , in step 451 , the cache manager transmits read data and proceeds to step 405 to release the channel . in the case of the cache miss , the cache manager allocates a new buffer in step 452 and updates its status to read pending in step 453 . in step 454 , the cache manager closes the channel with an optimizer that maintains a pool of open channels which are kept open only for the specified amount of time . in step 455 , the cache manager calls configuration manager routine that sends a remote read request to the host that holds this particular volume in an exclusive mode . the operations of the host holding volume in read exclusive mode have been shown in fig4 b . on the right side of fig4 d , in step 456 , a network interrupt identifies a remote read result . in step 457 , the cache manager performs an optimized channel open . depending upon the status of the optimizer that has been initiated in step 454 , the cache manager may immediately get access to the still open channel or , if the optimizer fails , the cache manager may need to reopen the channel . in step 458 , the cache manager transmits read data . in step 459 , the cache manager updates the buffer status to read done and proceeds to step 459 where it releases the channel . [ 0047 ] fig4 e shows a flowchart of the cache manager as it processes a hard disk interrupt request marking the completion of a read or write request . the read request has been started in step 423 in fig4 b . the write request has been started in step 475 in fig4 f . in step 460 , the cache manager checks the type of the hardware interrupt . for a write interrupt in step 461 , the cache manager updates the buffer status to write done and releases resources associated with the interrupt . for a read interrupt in step 462 , the cache manager updates the buffer status to read done . in step 463 , the cache manager checks request type of the read operation that has been started in fig4 b . for a channel request , the cache manager proceeds to open a channel in step 466 . in step 467 , the cache manager transmits read data and proceeds to release the channel in step 405 . for a network request in step 464 , the cache manager finds the remote read requests that initiated the request . in step 466 , the cache manager sends read results and ends interrupt processing . [ 0048 ] fig4 f shows a flowchart of a cache memory page flusher . the flusher is a separate daemon running as part of the cache manager . in step 471 , the flusher waits for the specified amount of time . after the delay in step 472 , the flusher begins to scan pages in cached memory . in step 473 , the flusher checks the page status . if the page list has been exhausted in branch no more pages , the flusher returns to step 471 where it waits . if the page status is other than the write pending , the flusher returns to step 472 to continue scanning for more pages . if the page status is write pending , the flusher proceeds to step 474 . in step 474 , the flusher checks the request type . for a channel type , the flusher starts a read operation in step 475 and returns to scan pages in step 472 . for a network type , the flusher checks for the network operations in progress and returns to step 472 for more pages . [ 0049 ] fig5 shows a data sharing operation between a plurality of heterogeneous host computers . in one embodiment the plurality of hosts includes but is not limited to a sun solaris workstation 111 , windows nt server 112 , hp unix 106 , and digital unix 107 each accessing a distinct virtual device respectively 510 , 520 , 530 and 540 . configuration manager 560 provides concurrency control for accessing virtual devices that are mapped to the same physical device 161 . the configuration manager uses a volume access table 450 that has been shown in fig4 . a virtual device is a method that comprises three operations : initialization , read and write . the initialization operation registers a virtual device in an operating system on a heterogeneous host . following the registration , the virtual device appears as if it is another physical device that can be brought on - line , offline or mounted on a file system . an application program running on the host cannot distinguish between a virtual device and a physical device . for a virtual device , the read operation begins with a read from a physical device followed by a call to a translation module . the translation module inputs a shared record in a original format used on a physical disk and outputs the record in a new format that is specified for and is compatible with a host computer . the write operation begins with a call to a translation module that inputs a record in a new format and outputs a record in a shared format . the translation module is a dynamically loadable library that can be changed , compiled and linked at run - time . the virtual device method described above allows a plurality of heterogeneous host computers to share one copy of data stored on a physical disk . in a data storage system using said virtual device method , a plurality of virtual devices is maintained in cache without requiring a copy of data on a physical disk . while the invention has been described in connection with a preferred embodiment , it is not intended to limit the scope of the invention to the particular form set forth .