Abstract:
A method and apparatus for upgrading a uniprocessor system to a multiprocessing system simply by the insertion of a second microprocessor integrated circuit. The computer system is provided with an upgrade socket for receiving the second processing unit, as well as a private communications bus between the upgrade socket and the existing processor for handling interprocessor communications, bus arbitration and cache coherency, etc. The addition of the second processor is transparent to the system which maintains its memory management unit and caching system and other arrangements as though it were still a uniprocessing system. Therefore, an inexpensive method and apparatus are provided for greatly enhancing the speed of a uniprocessing system to that of a multiprocessing system without the cost traditionally associated with multiprocessing systems.

Description:
BACKGROUND OF THE INVENTION 
     1. Field of the Invention 
     The present invention relates to computer systems and more particularly to enhancing the performance of computer systems by introducing additional processor elements. 
     2. Prior Art 
     Computer technology has been developing for the past several decades. Much of the development in the computer field has focused on optimizing computer systems in which a single processor, the central processing unit (CPU), does primarily all of the work. These optimizations have been greatly increased with the advent of integrated circuit technology. The increased power has yielded hand-held and desktop computers today that are as powerful as mainframe, room-sized computers of not more than a decade ago. In principle, the computer architecture of these new smaller computers is similar to that of the old mainframes in which a single processing unit performs all of the computer&#39;s processing operations. 
     One drawback of the single processor computer system is that the single processor effectively creates a bottleneck in the system thus limiting the overall speed and power of the computer. Several decades ago, a number of computer developers began developing computer systems using multiple processors. Multiprocessing systems have traditionally been more complicated to build and design as well as more expensive than the more common single processor systems. This has often been acceptable where the increased performance available from a multiprocessing system outweighs the great additional cost and hardware required to support multiprocessing. Even today in the world of very large scale integration (VLSI), multiprocessing computer systems are far more expensive and complex than single processor systems of traditional design. 
     Another disadvantage to traditional single processor systems is that as technology advances so quickly, they soon become, if not obsolete, sub-standard. One solution that computer developers have embarked upon is to provide an upgrade socket alongside the socket in which the integrated circuit for the central processor is plugged in. Up until now the upgrade socket has allowed for two enhancements to the computer in which it is implemented. One is to allow the addition of a specialized coprocessor integrated circuit for carrying out specialized functions on behalf of the central processing unit. Examples of such upgrades are math coprocessors and graphics processors. The other enhancement provided by an upgrade socket is to allow the substitution of a more advanced CPU integrated circuit. When a CPU chip is developed that is more powerful than the one implemented on the computer board, the enhanced processor may be plugged into the expansion socket. The computer then, upon initialization, disables the existing processor slot and treats the upgrade processor slot with the upgraded processor as the primary processor for the single processing system. 
     Because of the high cost of developing multiprocessing systems, this has been the limit to expandability for single processing systems. However, if it were possible to merely plug in a second processor into an upgrade socket and then have the computer system utilize both processors as a multiprocessing system, an inexpensive way to enhance a single processing system would exist. Such a system would have great cost advantages and simplicity over existing multiprocessing system, and is therefore, an object of the present invention. 
     For further description of traditional single processing and multiprocessing systems, see J. L. Hennessey and D. A. Patterson, Computer Architecture, A Ouantitative Approach, Morgan, Kaufman Publishers, Inc., 1990. 
     BRIEF SUMMARY OF THE INVENTION 
     It is an object of the present invention to enhance the speed and operation of computer systems. 
     It is also an object of the present invention to provide a means of upgrading a single processing computer system to be a multiprocessing system without the requirement that additional hardware be added other than a second microprocessor. 
     It is further an object of the present invention to provide the above objects as a low cost method of upgrading traditional uniprocessing systems. 
     These and other objects of the present invention are provided by supplying a traditional uniprocessing system with an upgrade socket for receiving a second processor integrated circuit. The upgrade socket is coupled to the primary central processing unit socket via a private communications bus which provides a means of communication between the two processors. The two processors are provided with controllers for using the private bus between them for arbitrating which owns the system&#39;s memory bus as well as for maintaining cache coherency and for processing system interrupts. The present invention is provided such that the addition of a second processor is transparent to the rest of the system. The computer remains unaware that it has become a multiprocessing system and therefore no additional hardware is required. All multiprocessing aspects are handled between the two processors across the private bus. The present invention therefore provides a method of upgrading a uniprocessing system to being a multiprocessing system with only the addition of a second processor and no additional hardware, thereby providing an inexpensive method for making a uniprocessing system multiprocessing. 
     The computer system implementing the multiprocessing architecture of the present invention will utilize symmetric multiprocessing memory in that the memory and external caching of the computer system will be shared commonly between the two processors and the processors themselves handle such things as allocating tasks between themselves and bus arbitration, etc. The present invention therefore allows greatly enhanced speed for a traditional uniprocessing system at a low cost of not much more than the cost of a second processor. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     FIG. 1 shows a traditional microcomputer architecture in which a CPU and memory subsystem communicate through a memory bus. Optional cache memories are indicated. 
     FIG. 2 shows a block layout of a computer system incorporating the present invention. 
     FIG. 3 shows an expanded view of two processors and the private bus lines between them in accordance with a preferred embodiment of the present invention. 
     FIGS. 4 and 5 are more detailed views of two processors and signal lines utilized in accordance with the present invention. 
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
     A method and apparatus for enhancing the processing power of microcomputers is described in a system which provides for upgrading a uniprocessor system to be a multiprocessing one. In the following detailed description, numerous specific details are set forth such as specific computer components, etc., in order to provide a thorough understanding of the present invention. It will be apparent, however, to one skilled in the art that the present invention may be practiced without such specific details. In other instances, well-known components, structures and techniques have not been shown in detail to avoid unnecessarily obscuring the subject matter of the present invention. 
     Referring now to FIG. 1, a portion of a traditional microcomputer architecture is illustrated. In FIG. 1, the processing power for the computer is identified as central processing unit (CPU) 10. A memory subsystem 20 is coupled to a memory bus 15. When the processing portion of the architecture requires data from the memory subsystem or needs to write data to the memory subsystem, the necessary control signals and information are propagated along the memory bus 15. In addition to the CPU 10 and the memory subsystem 20 residing on the memory bus 15, other components of the computer must utilize the memory bus for various operations. Only one computer component is generally capable of utilizing the memory bus at a given time so it is important to minimize the memory bus utilization needs of the various components. 
     FIG. 1 also shows an optional serial cache memory 11 and an optional parallel cache memory 12. Cache memory is usually a smaller block of very fast memory in contrast with the relatively slow memory that is utilized as main memory in the memory subsystem. The external caches 11 and 12 shown in FIG. 1 are often referred to as Level II caches whereas a Level I cache is a cache memory incorporated directly within a CPU. It is essential that the data in a Level I and Level II cache be consistent with and correspond to the data maintained in the main memory. This is referred to as maintaining cache coherency. 
     When two or more cache memories are used they may have stored in them data from the same block of main memory. The coherency of the data being stored in these caches must be maintained. The coherency problem is to make sure a processor has a most recent copy of an object. Every cache that has a copy of the data from a block of physical memory also has a copy of information about the block of memory. The caches, being coupled either directly or indirectly to the shared memory bus must monitor or &#34;snoop&#34; on the bus to determine whether or not the cache has a copy of a requested memory block. On a read miss, all cache memories check to see if a copy of the requested block is in the cache and may take the appropriate action. The appropriate action will depend upon the type of system implemented. Some systems will implement cache-to-cache transfers in which the cache having the requested block will supply the data directly to the cache that missed. The preferred embodiment of the present invention will not utilize cache-to-cache transfers, but instead the detecting cache will signal the requesting cache to back off. Then, the cache having the requested block will write that block to main memory. The cache that backed off will then reissue its request. On a write, each cache determines if a copy is in the cache and then may act, either to invalidate its copy or to change the copy to the new value depending on implementation. In multiprocessing systems, it is not only necessary to maintain cache coherency between Level I and Level II caches, but also between the various Level I caches within respective processors. It is important to note here that the present invention to be described further herein is suitable for use in systems implementing cache-to-cache transfers though the preferred embodiment described does not implement such a feature. 
     Referring now to FIG. 2, a block diagram of the microcomputer architecture in accordance with the present invention is illustrated. In addition to the traditional microcomputer components from FIG. 1, FIG. 2 illustrates an upgrade socket 30. The upgrade socket 30 is implemented such that it can host not only the various coprocessors described above, but an additional CPU, as well. In order for the present invention to provide for upgrading of a computer system from being a uniprocessor system to being a multiprocessing system it is necessary that a communications path be provided for signal propagation between the first CPU 10 and the processor inserted in upgrade socket 30. Thus, there is also provided a private communications bus 40 through which an arbitration protocol is implemented allowing the two CPUs to operate in tandem. 
     FIG. 3 illustrates in more detail the signal line coupling of an original CPU 10 and an upgrade CPU 31 in accordance with the preferred embodiment of the present invention. In order for the present invention to be practiced, both the resident CPU 10 and upgrade CPU 31 need be equipped with hardware and/or firmware for utilizing the private bus 40 to operate as a dual-processor system. In FIG. 3 the private communications bus 40 is illustrated in its constituent portions, bus lines 41, cache lines 42, and interrupt processing lines 43. FIG. 3 also illustrates an optional communications line 45 designated u/o# which purpose will be described further herein. While some of the above communications lines have been referred to in the plural, that is only in accordance with the preferred embodiment and not a limitation. Alternative embodiments may be conceived for each of these sets of lines where each comprises a single signal line. For each of the lines that will be present each integrated circuit processor will have a corresponding pin for receiving and conveying signals. Thus, in the preferred embodiment of the present invention, 7 pins on each processor will be provided for dual-processing operation. 
     Both of the processing units 10 and 31 of FIG. 3 must also be equipped with circuitry for utilizing the private bus for operating in tandem on a common memory bus. Thus, the two processors are each equipped with bus controllers 32, cache controllers 33 and interrupt controllers 34. The various controllers will be described in terms of the functions which they are to perform. Once these functions are described, those skilled in the art will be able to implement the present invention without undue experimentation. 
     When the computer system of the present invention is operating as a dual-processor system only one of the two processors will have control access to the memory bus at a given time. This processor is considered the current master on the bus, the other is the previous master. When the previous master requires access to the bus it will signal through its bus controller 32 over private bus lines 41 to the bus controller 32 of the current master. After completing its current transaction the current master on the bus will relinquish the bus to the previous master via a bus grant signal over the private bus lines 41. The status of current master and previous master is then swapped between the two processors. The processors may swap bus access, when for example, the previous master requires reading data from the main memory into its internal Level I cache or when it must perform some I/O operations, etc. 
     The status of which processor is the current master on the bus may be exhibited externally by means of the optional u/o# signal to be described further herein. For implementation, it is only necessary that each processor be able to determine whether its bus status is that of previous master, and if so, it must request access to the bus from the current master before issuing a request on the memory bus. At initialization, it may be appropriate to designate the original processor, the one not in upgrade socket 30, as the current master on the bus. 
     At this point, it is worth noting that in operating a computer system in accordance with the present invention, the fact that the system is dual-processing instead of uni-processing may be hidden from the rest of the system. All incidents of bus ownership and Level I cache coherency are maintained &#34;transparent&#34; to the cache/memory subsystem by use of the private communications bus 40. It is true that the system operating in dual-processing mode will exhibit increased traffic on the memory bus, etc., however, the dual-processing nature is &#34;transparent&#34; in the sense that no other hardware in the system need be modified in order to accommodate the use of a second processor. Particularly, the memory subsystem 20 and its controllers are the same as those found in the traditional uni-processing system. 
     There are some instances when it may in fact be desirable for the system to be aware of the fact that more than one processor is running and to know which one has the status of current master. For example, advanced power saving features for various peripherals may need to know which processor is the current master. This is facilitated by the optional u/o# signal line 45. In the preferred embodiment implementing the signal line 45, when the original processor 10 is the current master, the u/o# signal line will be driven to a low value, a logical &#34;0&#34;. When an upgrade processor in the upgrade socket 30 is the current master, the CPU 10 will stop driving the u/o# signal line 20 and it will be pulled to VCC, a logical &#34;1&#34;. In this way where it is desirable for the system to determine if one processor or the other is the current master, the information is provided. 
     As described it is essential that cache coherency be maintained, therefore both processors will snoop the memory bus for read or write requests. One advantageous incident of the private communications bus 40 is that if the previous master detects a read request on the memory bus from the current master processor for a memory location that has already been stored in the Level I cache of the previous master, the previous master may act. In the preferred embodiment, the previous master will signal the current master over the private bus 40 that it has the data. The current master processor will switch ownership of the bus to the previous master which will write the current value of the data to the memory subsystem then relinquish control of the bus back to the processor which had been the current master which will then reissue its read request. In this way stale data in the memory system will not be read by one processor when the other processor has a more current version. Alternatively, as was indicated above, if the system is one which implements cache-to-cache transfers, then the previous master&#39;s Level I cache may directly supply the requested data to the current master. 
     One final necessity in operating a uniprocessing system as a dual-processing system is the proper handling of system interrupts. In the preferred embodiment each of the processors will incorporate interrupt controllers 34 coupled through the private communications bus 40 via interrupt lines 43. The private interrupt control line 43 is coupled externally to a compatible system interrupt controller. Interrupts may be directed to a specific processor or dispatched to a processor based on priority. Inter-processor interrupts may also be facilitated by the local interrupt controllers 34. In an alternative embodiment, the interrupt controllers may be provided externally rather than incorporated into the original processor and upgrade processor. 
     FIG. 4 shows in more detail the signal lines utilized for the private bus arbitration scheme described above. First, when a processor is the current master, it will assert a bus request signal on BREQ line 50 which is coupled to both processors and to the system bus. The handling of bus requests for the dual-processing system is the same as for conventional single processor systems because the existence of the second processor is transparent to the rest of the system. 
     When the processor that is the previous master needs to become the current master processor on the bus, it sets an active signal on PBREQ# line 51 indicating the request on the private bus 40. When the current master is through transacting on the bus and is in a position to work from its Level I cache, it will send an active signal on PBGNT# line 52, granting the bus to the previous master with itself then becoming the previous master. This process is repeated each time the processor that is the previous master requires access to the memory bus. In some circumstances there may be some delay before the previous master is granted the bus. There are some operations, referred to as atomic transactions, that the current master may be executing which require it to retain access to the bus until the operation is completed. An example of such an operation is a read-modify-write transaction in which the current master will read a value and then change it. It must be allowed to complete these consecutive operations before the previous master can have access to the bus to prevent the previous master from reading intermediate data. During such operations, the current master may hold the LOCK# signal active indicating a lock cycle. 
     Referring now to FIG. 5, a more detailed description of the maintenance of private cache coherency is presented. First, a traditional uniprocessor system will snoop the memory bus when it has a Level I cache to make sure other components reading the memory subsystem receive current data. When snooping EADS line 65 is held active. In dual-processing operation both processors must snoop when an address is put on the bus. Each will compare the snooped address with the data resident in their respective Level I caches. If a processor has the data corresponding to the snooped address but the data is unmodified, the processor will send an active signal on HIT# line 61 indicating the integrity of the data in the memory subsystem. If a processor has modified the data in its Level I cache, then a hit modify signal will be activated on HITM# line 62. HIT# line 61 and HITM# 62 are coupled to both processors as well as to the system bus. When a hit to modified line occurs, the processor having the modified data in its Level I cache will supply the modified data, first requesting the bus if the processor is currently the previous master. 
     If a snoop address detected by the previous master was put on the bus by the current master, the previous master will check its Level I cache. A cache hit to unmodified data in this case will cause an active signal to be propagated on PHIT# line 63. If the data in the Level I cache of the previous master has been modified then PHITM# line 64 will go active. PHIT# line 63 and PHITM# line 64 are the private bus cache coherency lines of the private communications bus 40. When the current master (first processor) detects that PHITM# line 64 has gone active, it will grant the bus to the previous master (second processor) which will provide the data to the memory subsystem. The first processor will then again become current master and will reissue the requested address on the bus. In this way, private cache coherency is maintained while the presence of a second processor is still transparent to the rest of the system. 
     One other feature incorporated in the present invention is the ability to detect the presence of a second CPU in upgrade socket 30 by the first CPU 10. The method in accordance with the present invention is that upon system boot-up, the CPU 10 is artificially privileged as the current master on the bus. The CPU 10 will determine the type of processor in upgrade socket 30 to determine if it is a second CPU, some other kind of processor, or if no processor present at all. If there is a second CPU in upgrade socket 30 then the bus sharing and cache coherency protocols described above may be initiated. Those skilled in the art may envision various signal exchanges for identifying processors. 
     Although the present invention has been described in terms of various embodiments, it will be appreciated by those skilled in the art that various modifications and alterations might be made without departing from the spirit and scope of the present invention. The invention should, therefore, be measured in terms of the claims which follow.