System for allocating resources in a computer system6763454
Abstract
A system for allocating resources for use by devices of a computer. Device information for the devices of the computer is collected to uniquely identify the devices and to describe the device characteristics associated with the operation of those devices with the computer. A list of device configurations is constructed in response to the collection of device information. Each device is represented by at least one device configuration, which defines the resource element requirements for the corresponding device. Computer resources, which support the functions of the devices within the computer, are allocated based upon the device configurations and the availability of the desired resources. This allocation process prevents a potential conflicting use of computer resources by the installed devices.
Claims
We claim:
1. A method for allocating elements of a resource for use by devices of a computer, the method comprising the steps of:
(a) obtaining a list of device configurations based on logical configuration data obtained from the devices, said logical configuration data defining resource elements for the operation of a corresponding device and each device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the devices with the computer, the resource elements including nonreserved resource elements and reserved resource elements, the reserved resource elements representing a set of the resource elements that are held in reserve for possible use by selected devices, the nonreserved resource elements representing the remaining resource elements;
(b) determining whether one of the nonreserved resource elements is available to satisfy the resource element requirement for a first one of the device configurations and whether another one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available nonreserved resource element to the first device configuration and allocating other available nonreserved resource elements to each of the remaining device configurations; otherwise,
(c) determining whether one of the reserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available reserved resource element to the first device configuration and allocating available nonreserved resource elements to each of the remaining device configurations; otherwise,
(d) determining whether one of the nonreserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available nonreserved resource element to the first device configuration and allocating the available nonreserved resource elements or reserved resource elements to each of the remaining device configurations; otherwise,
(e) determining whether one of the reserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available reserved resource element to the first device configuration and the available nonreserved resource elements or reserved resource elements to each of the remaining device configurations; otherwise declaring a configuration failure.
2. The method of claim 1, wherein said step of obtaining the list of device configurations comprises:
for each of the devices, obtaining logical configuration data that defines the resource element requirements for the device;
preparing the list of device configurations in response to the logical configuration data; and
sorting the list of device configurations based on the complexity of the resource elements for each of the device configurations.
3. A method for allocating elements of a resource for use by devices of a computer, the method comprising the steps of:
obtaining a list of device configurations from the devices, each device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the devices with the computer, the resource elements including nonreserved resource elements and reserved resource elements, the reserved resource elements representing a set of the resource elements that are held in reserve for possible use by selected devices, the nonreserved resource elements representing the remaining resource elements, wherein the obtaining the list of device configurations from the devices comprises:
obtaining logical configuration data for each of the devices, the logical configuration data defining the resource element requirements for a corresponding one of the devices;
preparing the list of device configurations in response to the logical configurations data; and
sorting the list of device configurations based on the complexity of the resource elements for each of the device configurations comprising ordering the list of device configurations from the device configuration having the least resource element complexity to the device configuration having the most resource element complexity;
determining whether one of the nonreserved resource elements is available to satisfy the resource element requirement for a first one of the device configurations and whether another one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available nonreserved resource element to the first device configuration and allocating other available nonreserved resource elements to each of the remaining device configurations; otherwise,
determining whether one of the reserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available reserved resource element to the first device configuration and allocating available nonreserved resource elements to each of the remaining device configurations; otherwise,
determining whether one of the nonreserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available nonreserved resource element to the first device configuration and allocating the available nonreserved resource elements or reserved resource elements to each of the remaining device configurations; otherwise,
determining whether one of the reserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available reserved resource element to the first device configuration and the available nonreserved resource elements or reserved resource elements to each of the remaining device configurations; otherwise declaring a configuration failure.
4. The method of claim 1, wherein one of the nonreserved resource elements is available if the nonreserved resource element is not listed in an allocated resource list that specifies the resource elements allocated for use by the devices of the computer.
5. The method of claim 4, wherein one of the reserved resource elements is available if (1) the reserved resource element is listed in a reserved resource list that specifies the resource elements allocated for possible use by the devices of the computer, and (2) is not listed in the allocated resource list.
6. The method of claim 4, wherein one of the nonreserved resource elements is allocated by adding an entry representing the nonreserved resource element to the allocated resource list.
7. The method of claim 6, wherein one of the reserved resource elements is allocated by adding an entry representing the reserved resource element to the allocated resource list.
8. The method of claim 1 further comprising the steps of attempting to obtain an alternative list of device configurations, if possible, in the event of configuration failure, and repeating steps (b)-(e) in response to the alternative list of device configurations.
9. For a computer having at least one resource, a method for allocating elements of the resource for use by basic devices of the computer based on a list of device configurations, each device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the basic devices with the computer, the resource elements including nonreserved resource elements and reserved resource elements, the reserved resource elements representing a set of the resource elements that are held in reserve for possible use by selected devices, the nonreserved resource elements representing the remaining resource elements, the method comprising the steps of:
creating the list of device configurations based upon logical configuration data obtained from the devices, said logical configuration data defining resource requirements for the operation of a corresponding device;
determining whether one of the nonreserved resource elements is available to satisfy the resource element requirement for a first one of the device configurations and whether another one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available nonreserved resource element to the first device configuration and allocating other available nonreserved resource elements to each of the remaining device configurations; otherwise,
determining whether one of the reserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available reserved resource element to the first device configuration and allocating available nonreserved resource elements to each of the remaining device configurations; otherwise,
determining whether one of the nonreserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available nonreserved resource element to the first device configuration and allocating the available nonreserved resource elements or reserved resource elements to each of the remaining device configurations; otherwise,
determining whether one of the reserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available reserved resource element to the first device configuration and the available nonreserved resource elements or reserved resource elements to each of the remaining device configurations; otherwise declaring a configuration failure to indicate a failure to satisfy the resource element requirements defined in the list of device configurations.
10. For a computer having at least one resource, a method for allocating elements of the resource for use by devices of the computer based on a list of device configurations, each device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the devices with the computer, the resource elements including nonreserved resource elements and reserved resource elements, the reserved resource elements representing a set of the resource elements that are held in reserve for possible use by selected devices, the nonreserved resource elements representing the remaining resource elements, the method comprising the steps of:
determining whether one of the nonreserved resource elements is available to satisfy the resource element requirement for a first one of the device configurations and whether another one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available nonreserved resource element to the first device configuration and allocating other available nonreserved resource elements to each of the remaining device configurations; otherwise,
determining whether one of the reserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available reserved resource element to the first device configuration and allocating available nonreserved resource elements to teach of the remaining device configurations; otherwise,
determining whether one of the nonreserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available nonreserved resource element to the first device configuration and allocating the available nonreserved resource elements or reserved resource elements to each of the remaining device configurations; otherwise,
determined whether one of the reserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available reserved resource element to the first device configuration and the available nonreserved resource elements or reserved resource elements to each of the remaining device configurations; otherwise declaring a configuration failure to indicate a failure to satisfy the resource element requirements defined by the list of device configurations,
wherein obtaining the list of device configurations comprises:
obtaining logical configuration data for each of the devices, the logical configuration data defining the resource element requirements for a corresponding one of the devices;
preparing the list of device configurations in response to the logical configuration data; and
sorting the list of device configurations by ordering the list of device configurations from the device configuration having the least resource element complexity to the device configuration having the most resource element complexity.
11. The method of claim 9, wherein
one of the nonreserved resource elements is available if the nonreserved resource element is not listed in an allocated resource list that specifies the resource elements allocated for use by the devices of the computer; and
one of the reserved resource elements is available if (1) the reserved resource element is listed in a reserved resource list that specifies the resource elements allocated for possible use by the devices of the computer, and (2) is not listed in the allocated resource list.
12. The method of claim 11, wherein
one of the nonreserved resource elements is allocated by adding an entry representing the nonreserved resource element to the allocated resource list; and
one of the reserved resource elements is allocated by adding an entry representing the reserved resource element to the allocated resource list.
13. The method of claim 9 further comprising the steps of obtaining an alternative list of device configurations in the event of configuration failure, and repeating steps (a)-(d).
14. For a computer having at least one resource, a method for allocating elements of the resource for use by devices of the computer, the devices including boot devices that are activated during the power-up of the computer and basic devices that are activated after the power-up of the computer, the method comprising the steps of:
obtaining a list of boot device configurations based on logical configuration data obtained from the boot devices, said logical configuration data defining resource elements for the operation of a corresponding boot device, each boot device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the boot devices with the computer;
determining whether resource elements are available to satisfy the resource element requirements for each of the boot device configurations;
if so, then allocating the available resource elements to the boot device configurations, otherwise declaring configuration failure;
obtaining a list of basic device configurations based on logical configuration data obtained from the basic devices, each basic device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the basic devices with the computer;
preparing the list of basic device configurations in response to the logical configuration data;
sorting the list of basic device configurations based upon the complexity of the resource elements for each of the basic device configurations; and
determining whether resource elements are available to satisfy the resource element requirements for each of the basic device configurations;
if so, then allocating the available resource elements to the basic device configurations; otherwise declaring configuration failure.
15. For a computer having at least one resource, a method for allocating elements of the resource for use by devices of the computer, the devices including boot devices that are activated during the power-up of the computer and basic devices that are activated after the power-up of the computer, the method comprising the steps of:
obtaining a list of boot device configurations based on logical configuration data obtained from the boot devices, said logical configuration data defining resource elements for the operation of a corresponding boot device, each boot device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the boot devices with the computer;
determining whether resource elements are available to satisfy the resource element requirements for each of the boot device configurations;
if so, then allocating the available resource elements to the boot device configurations, otherwise declaring configuration failure;
obtaining a list of basic device configurations based on resource requirement information or resource dependency information obtained from the basic devices, each basic device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the basic devices with the computer; and
determining whether resource elements are available to satisfy the resource element requirements for each of the basic device configurations;
if so, then allocating the available resource elements to the basic device configurations; otherwise declaring configuration failure;
wherein the resource elements include nonreserved resource elements and reserved resource elements and one of the nonreserved resource elements is available to satisfy the resource element requirement for one of the boot device configurations if (1) the nonreserved resource element is not listed in an allocated resource list that specifies the resource elements allocated for use by the devices of the computer, or (2) the nonreserved resource element is listed in the allocated resource list and in a preallocated resource list that specifies selected resource elements preallocated for use by the boot devices of the computer.
16. The method of claim 15, wherein
one of the nonreserved resource elements is available to satisfy the resource element requirement for one of the basic device configurations if the nonreserved resource element is not listed in the allocated resource list, and
one of the reserved resource elements is available to satisfy the resource element requirements for one of the basic device configurations if (1) the reserved resource element is listed in a reserved resource list, the reserved resource list specifying the resource elements reserved for possible use by the basic devices of the computer, and (2) the reserved resource element is not listed as an entry in the allocated resource list.
17. In a computer having a plurality of resources, an apparatus for allocating elements of the resources for use by devices of the computer, comprising:
a central processing unit (CPU) for executing instructions to support the operations of the computer;
a memory connected to the CPU; and
a program module, stored in the memory, for generating a set of the instructions, the program module including:
a configuration manager that develops a list of device configurations based on logical configuration data obtained from the devices, said logical configuration data defining resource elements for the operation of a corresponding device and each device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the devices with the computer, the resource elements including nonreserved resource elements and reserved resource elements, wherein the reserved resource elements represent a set of the resource elements that are held in reserve for possible use by selected devices, and the nonreserved resource elements represent the remaining resource elements; and
an arbitrator for each of the resources, responsive to the list of device configurations, that determines whether the resource elements are available to satisfy the resource element requirements defined by the device configurations, wherein the arbitrator allocates the available resource elements in the event that the arbitrator determines that resource elements are available to satisfy the resource element requirements defined by the device configurations, and wherein the arbitrator sends to the configuration manager an error message representing configuration failure in the event that the arbitrator fails to determine that resource elements are available to satisfy the resource element requirements defined by the device configurations,
wherein the arbitrator determines whether one of the nonreserved resource elements is available to satisfy the resource element requirement for a first one of the device configurations and whether another one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then the arbitrator allocates the available nonreserved resource element to the first device configuration and allocating other available nonreserved resource elements to each of the remaining device configurations; otherwise,
the arbitrator determines whether one of the reserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then the arbitrator allocates the available reserved resource element to the first device configuration and allocating available nonreserved resource elements to each of the remaining device configurations; otherwise,
the arbitrator determines whether one of the nonreserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then the arbitrator allocates the available nonreserved resource element to the first device configuration and allocating the available nonreserved resource elements or reserved resource elements to each of the remaining device configurations; otherwise,
the arbitrator determines whether one of the reserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then the arbitrator allocates the available reserved resource element to the first device configuration and the available nonreserved resource elements or reserved resource elements to each of the remaining device configurations; otherwise,
the arbitrator sends the error message to the configuration manager to declare configuration failure.
18. A memory storage device readable by a computer, tangibly embodying a program module executable by the computer to allocate elements of a resource for use by devices of the computer, the program module comprising instructions which, when executed by the computer, perform the steps of:
obtaining a list of device configurations based on logical configuration data obtained from the devices, said logical configuration data defining resource elements for the operation of a corresponding device and each device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the devices with the computer, the resource elements including nonreserved resource elements and reserved resource elements, the reserved resource elements representing a set of the resource elements that are held in reserve for possible use by selected devices, the nonreserved resource elements representing the remaining resource elements;
examining whether the resource elements are available to satisfy the resource element requirements of the device configurations by:
(a) determining whether one of the nonreserved resource elements is available to satisfy the resource element requirement for a first one of the device configurations and whether another one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available nonreserved resource element to the first device configuration and allocating other available nonreserved resource elements to each of the remaining device configurations; otherwise,
(b) determining whether one of the reserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available reserved resource element to the first device configuration and allocating available nonreserved resource elements to each of the remaining device configurations; otherwise,
(c) determining whether one of the nonreserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available nonreserved resource element to the first device configuration and allocating the available nonreserved resource elements or reserved resource elements to each of the remaining device configurations; otherwise,
(d) determining whether one of the reserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available reserved resource element to the first device configuration and the available nonreserved resource elements or reserved resource elements to each of the remaining device configurations; otherwise declaring a configuration failure.
19. A memory storage device readable by a computer to allocate elements of a resource for use by devices of the computer, the program module comprising instructions which, when executed by the computer, perform the steps of:
obtaining a list of device configurations, each device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the devices with the computer, the resource elements including nonreserved resource elements and reserved resource elements, the reserved resource elements representing a set of the resource elements that are held in reserve for possible use by selected devices, the nonreserved resource elements representing the remaining resource elements, said step of obtaining the list of device configurations comprising:
obtaining logical configuration data for each of the devices, the logical configuration data defining the resource element requirements for a corresponding one of the devices;
preparing the list of device configurations in response to the logical configuration data; and
sorting the list of device configurations by ordering the list of device configurations from the device configuration having the least resource element complexity to the device configuration having the most resource element complexity;
examining whether the resource elements are available to satisfy the resource element requirements of the device configurations by:
determining whether one of the nonreserved resource elements is available to satisfy the resource element requirement for a first one of the device configurations and whether another one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available nonreserved resource element to the first device configuration and allocating other available nonreserved resource elements to each of the remaining device configurations; otherwise,
determining whether one of the reserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available reserved resource element to the first device configuration and allocating available nonreserved resource elements to each of the remaining device configurations; otherwise,
determining whether one of the nonreserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available nonreserved resource element to the first device configuration and allocating the available nonreserved resource elements or reserved resource elements to each of the remaining device configurations; otherwise,
determining whether one of the reserved resource elements is available to satisfy the resource element requirement for the first device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining device configurations;
if so, then allocating the available reserved resource element to the first device configuration and the available nonreserved resource elements or reserved resource elements to each of the remaining device configurations; otherwise declaring a configuration failure.
20. The method of claim 18, wherein one of the nonreserved resource elements is available to satisfy the resource element requirement for one of the boot device configurations if (1) the nonreserved resource element is not listed in an allocated resource list that specifies the resource elements allocated for use by the devices of the computer, or (2) the nonreserved resource element is listed in the allocated resource list and in a preallocated resource list that specifies selected resource elements preallocated for use by the boot devices of the computer.
21. The method of claim 20, wherein
one of the nonreserved resource elements is available to satisfy the resource element requirement for one of the basic device configurations if the nonreserved resource element is not listed in the allocated resource list, and
one of the reserved resource elements is available to satisfy the resource element requirements for one of the basic device configurations if (1) the reserved resource element is listed in a reserved resource list, the reserved resource list specifying the resource elements reserved for possible use by the basic devices of the computer, and (2) the reserved resource element is not listed as an entry in the allocated resource list.
22. A method for allocating elements of a resource for use by devices of a computer, the devices including boot devices that are activated during the power-up of the computer and basic devices that are activated after the power-up of the computer, the resource elements including nonreserved resource elements and reserved resource elements, the reserved resource elements representing a set of the resource elements that are held in reserve for possible use by selected basic devices, the nonreserved resource elements representing the remaining resource elements, the method comprising the steps of:
(a) obtaining a list of boot device configurations based on logical configuration data obtained from the boot devices, said logical configuration data defining resource elements for the operation of a corresponding boot device, each boot device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the boot devices with the computer;
(b) determining whether resource elements are available to satisfy the resource element requirements for the boot device configurations, the resource elements being available if (1) the resource elements are not listed in an allocated resource list or (2) the resource elements are listed in the allocated resource list and a preallocated resource list, the allocated resource list defining resource elements allocated for use by the devices, the preallocated resource list defining resource elements preallocated for use by the boot devices;
if so, then allocating the available resource elements to the boot device configurations, otherwise declaring configuration failure;
(c) obtaining a list of basic device configurations based on logical configuration data obtained from the basic devices, said logical configuration data defining resource elements for the operation of a corresponding basic device, each basic device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the basic devices with the computer;
(d) determining whether one of the nonreserved resource elements is available to satisfy the resource element requirements for a first one of the basic device configurations and whether another one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining basic device configurations, the nonreserved resource elements being available if the resource elements are not listed in the allocated resource list;
if so, then allocating the available nonreserved resource element to the first basic device configuration and allocating other available nonreserved resource elements to each of the remaining basic device configurations; otherwise,
(e) determining whether one of the reserved resource elements is available to satisfy the resource element requirement for the first basic device configuration and whether one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining basic device configurations, the reserved resource elements being available if (1) the resource elements are not listed in the allocated resource list and (2) the resource elements are listed in a reserved resource list defining resource elements reserved for possible use by the selected basic devices;
if so, then allocating the available reserved resource element to the first basic device configuration and allocating available nonreserved resource elements to each of the remaining basic device configurations; otherwise,
(f) determining whether one of the nonreserved resource elements is available to satisfy the resource element requirement for the first basic device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining basic device configurations;
if so, then allocating the available nonreserved resource element to the first basic device configuration and allocating the available nonreserved resource elements or reserved resource elements to each of the remaining basic device configurations; otherwise,
(g) determining whether one of the reserved resource elements is available to satisfy the resource element requirement for the first basic device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining basic device configurations;
if so, then allocating the available reserved resource element to the first basic device configuration and the available nonreserved resource elements or reserved resource elements to each of the remaining basic device configurations; otherwise declaring a configuration failure.
23. The method of claim 22, wherein said step of obtaining the list of basic device configurations comprises:
obtaining logical configuration data for each of the basic devices, the logical configuration data defining the resource element requirements for a corresponding one of the basic devices;
preparing the list of basic device configurations in response to the logical configuration data; and
sorting the list of basic device configurations based on the complexity of the resource elements for each of the basic device configurations.
24. A method for allocating elements of a resource for use by devices of a computer, the devices including boot devices that are activated during the boot of the computer and basic devices that are activated after the boot of the computer, the resource elements including nonreserved resource elements and reserved resource elements, the reserved resource elements representing a set of the resource elements that are held in reserve for possible use by selected basic devices, the nonreserved resource elements representing the remaining resource elements, the method comprising the steps of:
obtaining a list of boot device configurations, each boot device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the boot devices with the computer;
determining whether the resource elements are available to satisfy the resource element requirement for the boot device configurations, the resource elements being available if (1) the resource elements are not listed in an allocated resource list or (2) the resource elements are listed in the allocated resource list and a preallocated resource list, the allocated resource list defining resource elements allocated for use by the devices, the preallocated resource list defining resource elements preallocated for use by the boot devices;
if so, allocating the available resource elements to the boot device configurations, otherwise declaring configuration failure;
obtaining a list of basic device configurations, each device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the basic devices with the computer, wherein obtaining the list of basic device configurations comprises:
obtaining logical configuration data for each of the basic devices, the logical configuration data defining the resource element requirements for a corresponding one of the basic devices;
preparing the list of basic device configurations in response to the logical configurations data; and
sorting the list of basic device configurations based on the complexity of the resource elements for each of the device configurations, said sorting step comprising ordering the list of basic device configurations from the basic device configuration having the least resource element complexity to the basic device configuration having the most resource element complexity;
determining whether one of the nonreserved resource elements is available to satisfy the resource element requirement for a first one of the basic device configurations and whether another one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining basic device configurations, the nonreserved resource elements being available if the resource elements are not listed in the allocated resource list;
if so, then allocating the available nonreserved resource element to the first device configuration and allocating other available nonreserved resource elements to each of the remaining basic device configurations; otherwise,
determining whether one of the reserved resource elements is available to satisfy the resource element requirement for the first basic device configuration and whether one of the nonreserved resource elements is available to satisfy the resource element requirement for each of the remaining basic device configurations, the reserved resource elements being available if (1) the resource elements are not listed in the allocated resource list and (2) the resource elements are listed in a reserved resource list defining resource elements reserved for possible use by selected basic devices;
if so, then allocating the available reserved resource element to the first basic device configuration and allocating available nonreserved resource elements to each of the remaining basic device configurations; otherwise,
determining whether one of the nonreserved resource elements is available to satisfy the resource element requirement for the first basic device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining basic device configurations;
if so, then allocating the available nonreserved resource element to the first basic device configuration and allocating the available nonreserved resource elements or reserved resource elements to each of the remaining basic device configurations; otherwise,
determining whether one of the reserved resource elements is available to satisfy the resource element requirement for the first basic device configuration and whether either one of the nonreserved resource elements or the reserved resource elements is available to satisfy the resource element requirement for each of the remaining basic device configurations;
if so, then allocating the available reserved resource element to the first basic device configuration and the available nonreserved resource elements or reserved resource elements to each of the remaining basic device configurations; otherwise declaring a configuration failure.
25. The method of claim 22 further comprising the steps of attempting to obtain an alternative list of basic device configurations, if possible, in the event of configuration failure in step (g), and repeating steps (d)-(g) in response to the alternative list of basic device configurations.
26. For a computer having at least one resource, a method for allocating elements of a resource for use by devices of the computer, the devices including boot devices that are activated during the power-up of the computer and basic devices that are activated after the power-up of the computer, the method comprising the steps of:
obtaining a list of boot device configurations based on logical configuration data obtained from the boot devices, said logical configuration data defining resource elements for the operation of a corresponding boot device, each boot device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the boot devices with the computer;
determining whether resource elements are available to satisfy the resource element requirements for each of the boot device configurations by checking a reserved resource list, an allocated resource list, and a preallocated resource list;
if so, then allocating the available resource elements to the boot device configurations, otherwise declaring configuration failure;
obtaining a list of basic device configurations based on logical configuration data obtained from the basic devices, each basic device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the basic devices with the computer;
sorting the list of basic device configurations based upon the complexity of the resource element requirements for each of the basic device configurations;
determining whether resource elements are available to satisfy the resource element requirements for each of the basic device configurations by checking the reserved resource list and the allocated resource list; and
if so, then allocating the available resource elements to the basic device configurations; otherwise declaring configuration failure.
27. A method for allocating elements of a resource for use by devices of a computer using a list of device configurations, each device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the devices with the computer, the resource elements including nonreserved resource elements and reserved resource elements, the reserved resource elements representing a set of the resource elements that are held in reserve for possible use by selected devices, the nonreserved resource elements representing the remaining resource elements, wherein a first one of the nonreserved resource elements is available to satisfy the resource element requirement for the first device configuration, the method comprising the steps of:
creating the list of device configurations based upon logical configuration data obtained from the devices, said logical configuration data defining resource elements for the operation of a corresponding device;
allocating the first nonreserved resource element to the first device configuration;
determining whether a second one of the nonreserved resource elements is available to satisfy the resource element requirement for a second one of the device configurations;
if the second nonreserved resource element is available, then allocating the second nonreserved resource element to the second device configuration, otherwise;
deallocating the first nonreserved resource element;
determining whether a first one of the reserved resource elements is available to satisfy the resource element requirement for the first device configuration;
if the first one of the reserved resource elements is available, then allocating the first reserved resource element to the first device configuration;
determining whether the first nonreserved resource elements is available to satisfy the resource element requirement for the second device configuration; and
if the first nonreserved resource elements is available, then allocating the first nonreserved resource element to the second device configuration.
28. A method for allocating elements of a resource for use by devices of a computer, the method comprising the steps of:
(a) obtaining a list of device configurations based on logical configuration data obtained from the devices, said logical configuration data defining resource elements for the operation of a corresponding device and each device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the devices with the computer, the resource elements including nonreserved resource elements and reserved resource elements, the reserved resource elements representing a set of the resource elements that are held in reserve for possible use by selected devices, the nonreserved resource elements representing the remaining resource elements;
(b) determining whether a first one of the nonreserved resource elements is available to satisfy the resource element requirement for a first one of the device configurations;
if the first nonreserved resource element is available, then allocating the first nonreserved resource element to the first device configuration, otherwise;
(c) determining whether a second one of the nonreserved resource elements is available to satisfy the resource element requirement for the first device configuration;
if the second nonreserved resource element is available, then allocating the second nonreserved resource element to the first device configuration, otherwise;
(d) determining whether a first one of the reserved resource elements is available to satisfy the resource element requirement for a first one of the device configurations;
if the first reserved resource element is available, then allocating the first reserved resource element to the first device configuration.
29. For a computer having at least one resource, a method for allocating elements of the resource for use by devices of the computer based on a list of device configurations obtained from the devices, said device configurations based on resource requirement information or resource dependency information, the resource requirement information defining resource elements for the operation of a corresponding device and each device configuration defining a requirement for one of the resource elements to support the operation of a corresponding one of the devices with the computer, the resource elements including nonreserved resource elements and reserved resource elements, the reserved resource elements representing a set of the resource elements that are held in reserve for possible use by selected devices, the nonreserved resource elements representing the remaining resource elements, the method comprising the steps of:
(a) determining whether a first resource candidate is listed on a reserved resource list or an allocated resource list;
(b) if the first resource candidate is not listed on the reserved resource list or the allocated resource list, then
(i) allocating the first resource candidate to the first device configuration; and
(ii) for each of the remaining device configurations, determining whether a next resource candidate is listed on the reserved resource list or the allocated resource list and if the next resource element is not listed on the reserved resource list or the allocated resource list, then allocating the next resource element to the remaining device configuration, otherwise;
(c) if the first resource candidate is listed on the reserved resource list but not the allocated resource list, then
(i) allocating the first resource candidate to the first device configuration; and
(ii) for each of the remaining device configurations, determining whether a next resource candidate is listed on the reserved resource list or the allocated resource list and if the next resource element is not listed on the reserved resource list or the allocated resource list, then allocating the next resource element to the remaining device configuration, otherwise;
(d) unallocating the first resource candidate to the first device configuration;
(e) if the first resource candidate is not listed on the reserved resource list or the allocated resource list, then
(i) allocating the first resource candidate to the first device configuration; and
(ii) for each of the remaining device configurations, determining whether a next resource candidate is listed on the reserved resource list or the allocated resource list and if the next resource element is not listed on the allocated resource list, then allocating the next resource element to the remaining device configuration.
Description
TECHNICAL FIELD
The present invention relates to data processing systems and, more particularly described, relates to allocating resources for use by devices of a computer system.
BACKGROUND OF THE INVENTION
The process of installing a peripheral device or an add-on type adapter board for use with a personal computer can be a relatively frustrating experience for the typical computer user. Nevertheless, a computer typically will not operate with a newly installed component until the user has completed a proper allocation of resources. Computer resources are allocated during a configuration process to permit the conflict-free use of the limited resources. To configure the computer, the user often must complete a relatively complex series of technical tasks. Thus, the difficulties faced by many users during the configuration process are emphasized by the absence of an automated process for resolving resource conflicts.
For many personal computers, neither the operating system nor the application programs running on the computer can determine which hardware components are connected to the computer. Likewise, the various hardware components connected to the computer often fail to detect the occurrence of a conflict between different hardware devices that attempt to share the same resource. Accordingly, a user typically must resolve a resource conflict by first identifying the problem and thereafter experimenting with hardware and software configurations in an attempt to correct the resource conflict.
When attempting to tackle hardware and software integration issues, the user is exposed to technical concepts that can be somewhat confusing for those without technical training, such as computer architecture issues, including hardware interrupts, direct memory access (DMA) channels, memory addresses, and input/output (I/O) ports. Likewise, many common configuration tasks require the user to be familiar with the finer details of the computer's operating system, including system configuration files, such as AUTOEXEC.BAT, CONFIG.SYS, and .INI files. In view of these technical concepts, some users find the configuration process so intimidating that they refuse to consider upgrading a component of their personal computer or connecting a new peripheral device to add a new capability to their computer.
Unlike today, early personal computers required minimum coordination between the computer hardware and software components. Users were presented with few difficult configuration issues after the initial installation of the computer. A limited number of peripheral devices were commercially available for supplementing the processing functions of the personal computer. In addition, early personal computers were primarily used for dedicated tasks, such as word processing or calculating financial information with a spreadsheet program, at a fixed desktop location.
In contrast, present computers are often portable systems that can be regularly connected to different peripheral devices and external systems. There exists many more computer peripheral devices that require the use of resources during computer operation than the limited quantity of available resources. Furthermore, a user can harness the powerful computing operations of a present personal computer to complete numerous tasks outside the traditional realm of word processing and financial calculations, such as graphics, audio, and video. For example, numerous peripheral devices and add-on systems are now commercially available to enable the user to customize the functions and operating characteristics of a personal computer. Docking-type computers enable a user to operate a mobile computer at either a base station or in remote locations. Thus, the rapid acceptance of portable computing and the multi-faceted uses of the personal computer emphasize the need for supplying a "user friendly" system that configures new hardware or software devices for use with the computer.
The Industry Standard Architecture (ISA) standard is a widely used bus architecture for personal computers. The ISA expansion bus, which is commonly associated with the IBM Personal Computer AT and other compatible computers, provides a 16-bit bus that supports the connection of adapter boards within the computer. The ISA bus structure requires allocation of resources, such as hardware interrupts, DMA channels, memory addresses, and I/O ports, among multiple ISA-compatible adapter boards connected to the ISA expansion bus. However, the ISA standard does not define a hardware or software mechanism for allocating those resources for use by the installed adapter boards. Consequently, configuration of the ISA adapter boards is typically completed by connecting jumper blocks or changing switch settings on the boards to change the decode maps for memory and I/O ports and to direct the DMA channels and interrupt signals to various pins along the expansion bus. Furthermore, system configuration program files of the operating system may need to be updated to reflect any modifications to the resource allocation.
Alternative expansion bus standards, such as the Micro Channel Architecture (MCA) and the Extended Industry Standard Architecture (EISA) standards, have limited hardware and software mechanisms to identify resources requested by a peripheral device and to resolve resource conflicts. However, these mechanisms are not implemented by the computer's operating system and are not compatible with the large installed base of personal computers based on the ISA standard. Furthermore, computers implementing the MCA and EISA standards are generally more expensive than ISA-compatible computers and lack the variety of add-on adapter boards and peripheral devices available for use with ISA-compatible computers.
To address the issue of configuration management, the computer industry is at present offering full-featured computers having preconfigured hardware and preinstalled software, thereby eliminating the need for a user to conduct the installation and configuration tasks for the purchased computer. However, this is a somewhat limited solution because vendors typically market a computer having a standard configuration of hardware and software components. Thus, this approach defeats the flexibility offered by the ISA bus expansion structure because users cannot obtain a computer capable of performing a customized function through this standardized configuration approach.
To overcome the frustration of users with present complicated configuration processes, it would be desirable to provide a system for "automatically" configuring a peripheral device or adapter board for a computer. A system is needed to enable a user to simply connect a device to the computer, turn on the computer, and have the device properly work with the computer. This system would determine the optimal configuration for its resources and enables application programs to fully utilize the available resources.
In recognition of the problems of prior configuration processes, the present invention provides a system that permits easy installation and configuration of devices which are capable of identifying themselves and declaring their services and resource requirements to the computer. The device identification and resource requirement information enable the system to determine and establish a working configuration for all devices connected to the computer. Accordingly, the present invention efficiently allocates system resources between the devices of the computer without substantial user intervention.
SUMMARY OF THE INVENTION
Problems associated with the manual installation and configuration of adapter boards and peripheral devices for computers are solved by the principles of the present invention. The present invention provides a system for allocating resources to support conflict-free operation by the components of a computer. The present invention addresses the needs of computer users by supplying a computer-implemented process for allocating resources for use by devices of a computer and for supporting dynamic configuration changes of the computer.
A system constructed in accordance with the present invention allocates resources for use by devices of a computer. The computer includes various resources, including interrupts, direct memory access (DMA) channels, memory addresses, and input/output (I/O) ports, at least one system bus, and devices. System busses are components that supply physical connections to devices. Each of the devices is connected to one of the system busses of the computer.
The system busses can be compatible with a variety of bus architectures, including the Industry Standard Architecture (ISA), Micro Channel Architecture (MCA) and Extended Industry Standard Architecture (EISA) bus standards, as well as Personal Computer Memory Card International Association (PCMCIA), Small Computer Systems Interface (SCSI), Personal Computer Interface (PCI), Enhanced Capabilities Parallel (ECP), Vesa Local Bus (VL), Integrated Drive Electronics (IDE), and other bus standards. Devices supply the functions of system-level components, such as fixed and floppy disk controllers, display, keyboard, and mouse controllers, and serial and parallel controllers, and implement the functions offered by numerous add-on type adapter boards and peripheral devices.
Briefly described, device information is collected for each of the devices of the computer. This device information acquisition process permits the unique identification of the devices and the description of device characteristics associated with the operation of devices with the computer. A device driver, which enables communications between a corresponding device and the computer, is thereafter identified for each of the devices in response to the device information. The resources, which support the functions of the devices within the computer, are allocated based upon the device information. This allocation process prevents any potential conflicting use of resource elements by the devices. In response to resource allocation, the devices are configured and device drivers are loaded to support the operation of these devices.
More particularly described, devices of a computer are configured based upon the collection of information about the devices and their connections to the system busses of the computer. To collect the device information, a particular device is detected on the system bus of interest and thereafter assigned a device identification code that identifies the particular device as being connected to the selected system bus. At least a portion of the device identification code, specifically the identification code, uniquely identifies the detected device. Logical configuration data, which supplies configuration requirements for operating the particular device with the computer, is also obtained for the detected device. This collection process is repeated until device information is eventually collected for each of the devices for all system busses of the computer.
The device information is stored within computer memory, such as volatile memory, to support the present configuration operation. At least a portion of the system memory is allocated for the storage of device information within a tree-like structure of device nodes. Each device connected to the computer is represented by a device node that stores associated device information. Furthermore, if an identified device represents a newly installed device for the computer, then this device information also can be stored in nonvolatile computer memory, such as a fixed disk, to supply an archival source of such information for future configuration tasks. A computer database known as a registry is typically used to store this archival device information.
The collection of device information supplies data that supports the identification of device drivers for the identified devices. A device driver can be obtained from one of several alternative sources of the computer, including selected files of the operating system installed on the computer, the device itself, a computer database maintained by the computer, or from the user via a disk containing the device driver. In general, the device driver for a device is often obtained by accessing a selected program file stored on either a fixed disk or another type of mass memory storage device of the computer.
The resources of the computer system represent a finite set of resource elements. Certain devices require access to specific resource element for proper operation with the computer. For example, a typical device configuration requirement for a modem defines specific interrupt elements, such as IRQ2 and IRQ3, for proper operation of the modem with a computer. Accordingly, the logical configuration data for certain devices may specify specific resource elements and, for others, the logical configuration data may define general resource requirements. Resource elements are considered to be "reserved" if they are maintained for use only by certain predetermined devices, such as selected devices that are activated only after a computer boot. In contrast, resource elements are considered to be "nonreserved" if they are maintained for use by any device.
An arbitration process allocates resource elements for use by devices of the computer in a manner that satisfies the configuration requirements of each device and avoids a potential conflicting use of the resource elements. The configuration requirements for the devices are defined by the logical configuration data collected from the devices of the computer. Although the arbitration process is implemented as an iterative routine, the process can be generally viewed as a mechanism of allocating resource elements based upon the availability of those resource elements. A resource element is available to satisfy the requirement for a nonreserved resource element of a device configuration if that resource element is neither reserved for use by another device nor assigned for use by another device. Likewise, a resource element is available for satisfying the requirement of a reserved resource element of a device configuration if that element is reserved for possible use by the device. It will be appreciated that the reserved resource elements represent a prioritized set of the resource elements that are held in reserve for possible use by selected devices, whereas the nonreserved resource elements representing the remaining resource elements.
For the selected resource, the arbitration method then completes one or more arbitration tasks based on the availability of resource elements and the resource element requirements defined by a list of device configurations. The logical configuration data supports the definition of a device configuration associated with each device. In turn, the device configurations define requirements for the resource elements necessary support the operation of corresponding devices with the computer. First, an arbitration task is conducted to determine whether one of the nonreserved resource elements is available to satisfy the resource element requirement for a selected device configuration and whether other nonreserved resource elements are available to satisfy the resource element requirements for the remaining device configurations. A nonreserved resource element is available if the nonreserved resource element is not listed in an allocated resource list that specifies the resource elements allocated for use by the devices of the computer. If available, then this nonreserved resource element is allocated to the selected device configuration, and other available nonreserved resource elements are allocated to the remaining device configurations. Each nonreserved resource element is allocated by adding an entry representing the nonreserved resource element to a temporary storage list during the arbitration process. These entries are then transferred to the allocated resource list in response to a successful allocation of resource elements.
Otherwise, a second arbitration task is completed to determine whether one of the reserved resource elements is available to satisfy the resource element requirement for the selected device configuration and whether nonreserved resource elements are available to satisfy the resource element requirement for the remaining device configurations. A reserved resource element is available if (1) the reserved resource element is listed in a reserved resource list that specifies the resource elements allocated for possible use by the devices of the computer, and (2) is not listed in the allocated resource list. If available, then the reserved resource element is allocated to the selected device configuration and available nonreserved resource elements are allocated to the remaining device configurations. A reserved resource element is allocated by adding an entry representing the reserved resource element to a temporary storage list during the arbitration process. These entries are then transferred to the allocated resource list in response to a successful allocation of resource elements.
Otherwise, another arbitration task is completed to determine whether a nonreserved resource element is available to satisfy the resource element requirement for the selected device configuration and whether either nonreserved resource elements or reserved resource elements are available to satisfy the resource element requirements for the remaining device configurations. If so, then the available nonreserved resource element is allocated to the selected device configuration, and the available nonreserved resource elements or reserved resource elements are allocated to each of the remaining device configurations.
Otherwise, a final arbitration task is completed to determine whether one of the reserved resource elements is available to satisfy the resource element requirement for the selected device configuration and whether either nonreserved resource elements or reserved resource elements are available to satisfy the resource element requirements for the remaining device configurations. If so, then the available reserved resource element is allocated to the selected device configuration, and the available nonreserved resource elements or reserved resource elements are allocated to the remaining device configurations. Otherwise, a configuration failure is declared because resource elements are not available to satisfy the resource element requirements defined by the device configurations.
The list of device configurations can be sorted prior to the start of the arbitration tasks to facilitate the resource arbitration process. To build the list of device configurations, logical configuration data is obtained for each of the devices. The list of device configurations is then prepared in response to the logical configuration data. The list of device configurations is sorted based on the complexity of the resource elements for each of the device configurations. The list of device configurations is typically ordered from the device configuration having the least resource element complexity to the device configuration having the most resource element complexity.
The resource arbitration process is supported by arbitrators that operate to determine the assignment of resource elements to the devices of the computer. An arbitrator can be assigned to each resource of the computer and is responsive to the resource element requirements of the device configurations to support the conflict-free allocation of resource elements. The arbitrator for a selected resource is programmed to recognize the characteristics of its resource. For example, the arbitrator for an interrupt resource of a conventional personal computer can recognize that this particular resource includes a certain number of interrupt elements.
An arbitrator, responsive to a list of device configurations, determines whether the resource elements are available to satisfy the resource element requirements defined by the device configurations. In turn, the arbitrator allocates the available resource elements in the event that resource elements are available to satisfy the resource element requirements defined by the device configurations. In contrast, the arbitrator generates an error message representing configuration failure in the event that the arbitrator fails to determine that resource elements are available to satisfy the resource element requirements.
In furtherance of these principles, it is an object of the present invention to provide a system for allocating resources for use by devices of a computer.
It is a further object of the present invention to provide a system that determines a conflict-free allocation of resources for use by the devices of the computer.
It is a further object of the present invention to provide a system that compares the resource requirements for devices with the available resources in the computer to determine a conflict-free allocation of resources for use by the devices.
That the present invention accomplishes these objects and offers the above-described advantages will be apparent to those skilled in the art from the following description, the appended claims, and the accompanying drawings.
BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 is an overall block diagram of a computer in which the preferred embodiment of the present invention is operative.
FIG. 2 is a flow chart diagram that illustrates the steps of a method for configuring the devices of a computer.
FIGS. 3A-C are flow chart diagrams that illustrate the preferred steps of a method for configuring the devices of a computer in accordance with the preferred embodiment of the present invention.
FIG. 4 is a block diagram that illustrates the components of the operating system of the present invention.
FIGS. 5A and 5B are diagrams that illustrate one of the components of the operating system shown in FIG. 4, specifically a hardware tree comprising device nodes for storing device-related information for the present configuration of the computer.
FIG. 6 is a diagram that illustrates one of the components of the operating system shown in FIG. 4, specifically a registry for storing archival device-related information for the computer.
FIG. 7 is a logical flow diagram that generally illustrates the arbitration tasks of the present invention.
FIG. 8 is a logical flow diagram that illustrates the steps of a method for allocating resources to the devices of a computer in accordance with the present invention.
FIG. 9 is a logical flow diagram that illustrates the steps of a method for developing an ordered list of device configurations in accordance with the present invention.
FIGS. 10A-10E are logical flow diagrams that illustrate the steps of a method for arbitrating computer resources for allocation to devices of the computer in accordance with the preferred embodiment of the present invention.
DETAILED DESCRIPTION
To overcome the frustration of users with the present complicated and technical configuration processes for personal computers, the present invention provides a system for configuring a peripheral device or an add-on type adapter board for use with a base or mobile computer. In general, the present invention enables a user to connect a new device to the computer, power the computer, and have the device properly work with the computer without substantial user intervention. To provide this capability, the present invention determines a successful allocation of resources and enables the devices and the application programs to fully utilize the available resources. This can be accomplished for numerous computer bus architectures and types of devices.
The detailed description which follows is presented largely in terms of methods, processes and symbolic representations of operations of data bits manipulated by a processing unit and maintained within data structures supplied by one or more memory storage devices. Such data structures impose a physical organization upon the collection of data bits stored within computer memory and represent specific electrical or magnetic elements. These descriptions and symbolic representations are the means used by those skilled in the art of computer programming and computer construction to most effectively convey teachings and discoveries to others skilled in the art.
For the purposes of this discussion, a "process" or "method" is generally conceived to be a sequence of computer-executed steps leading to a desired result. These steps generally require physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical, magnetic, or optical signals capable of being stored, transferred, combined, compared, or otherwise manipulated. It is conventional for those skilled in the art to refer to these signals as bits, values, elements, symbols, characters, terms, numbers, records, files or the like. It should be kept in mind, however, that these and similar terms should be associated with appropriate physical quantities for computer operations, and that these terms are merely conventional labels applied to these physical quantities that exist within the computer.
It should also be understood that manipulations within the computer are often referred to in terms such as adding, comparing, moving, etc. which are often associated with manual operations performed by a human operator. The operations described herein are machine operations typically performed in conjunction with a human operator or user that interacts with the computer. The machines used for performing the operation of the present invention, as will be understood, include general purpose digital computers or other similar computing devices.
Furthermore, it should be kept in mind that there is a distinction between the methods, steps, or operations completed by a computer, and the method of computation itself. The present invention relates to methods, processes, steps, or operations for a computer and the processing of electrical or other physical signals to generate desired physical signals and to display results and interactions.
In addition, it should be understood that the programs, algorithms, processes, methods, etc. described herein are not related or limited to any particular computer or apparatus. Rather, various types of general purpose machines may be used with programs constructed in accordance with the teachings described herein. Similarly, it may prove advantageous to construct specialized apparatus to perform the method steps described herein by way of dedicated computer systems with hard-wired logic or programs stored in nonvolatile memory, such as read only memory.
Automated Configuration System
FIG. 1 shows a block diagram of the preferred operating environment, a computer 8, for the preferred embodiment of the present invention. The present invention is based upon computer-implemented processes that can be embodied in one or more program modules for a data processing system, such as the computer 8, to carry out the methods and functions described herein. This computer-implemented process operates upon electrical or other physical signals to generate the desired physical results.
Referring now to FIG. 1, the computer 8 runs an operating system 10 that operates with a central processing unit (CPU) 12, resources 14, system busses 18, devices 20, and a computer control system 21. The resources 14 include memory addresses for a memory 22, interrupts 24, direct memory access (DMA) channels 26, and input/output (I/O) ports 28. The system busses 18 typically include a local bus 13, an integrated bus 15, such as a system-level expansion bus, and at least one interface bus 17. The computer 8 represents a typical configuration for a conventional personal computer and it will be understood that the present invention is not limited to operations with the disclosed configuration for the computer 8. Indeed, the computer 8 is intended to be representative of a broad category of data processing devices.
The operating system 10 comprises a set of program modules that control the internal functions of the computer 8, thereby allowing the computer 8 to run application software (not shown). For the preferred embodiment, the operating system 10 is a graphic-based operating system having a graphical user interface (GUI), such as the "WINDOWS" operating system available from the assignee for this application, Microsoft Corporation, Redmond, Wash. The operating system 10 is preferably installed on a mass memory storage device, such as a fixed disk or a CD-ROM, of the computer 8. During computer operations, the operating system 10 is also allocated a portion of the memory 22 to support operations with other components of the computer 8.
The CPU 12 is typically implemented as a microprocessor, such as the models 80386, 80486 or "PENTIUM" processor that are available from Intel Corporation, Santa Clara, Calif. The CPU 12 operates in combination with program modules, such as the operating system 10 and application programs, to control the operations of the computer 8. One or more of the system busses 18 support communications of control, address, and data signals between the CPU 12 and the remaining components of the computer 8. In addition, the system busses 18 support the distribution of electrical power to connected components.
The resources 14 represent the finite quantity of resources of a conventional personal computer, such as the computer 8. The memory 22 is typically implemented by dynamic or volatile memory modules, such as random access memory (RAM), and static or nonvolatile memory modules, such as read only memory (ROM) units. The memory 22 preferably includes a conventional memory, which is the first 1024 kilobytes of dynamic memory in a personal computer, and an extended memory that extends above the 1024 kilobytes range. The interrupts 24, also referred to as the interrupt request lines, are signal paths within the computer 8 that carry signals informing the recipient that the sender is ready to transmit or to receive data. The DMA channels 26 enable the devices 20 or a computer program running on the computer 8 to access the memory 22 without involvement by the CPU 12, thereby supporting relatively fast data transfers. The I/O ports 28 represent ports used for internal communications with the CPU 12.
The computer database 16 provides a central location for storage of archival information that supports the configuration of the devices 20. Specifically, the computer database 16 stores general system hardware and software parameters, as will be described in more detail below with respect to FIG. 8. The computer database 16 is preferably implemented by nonvolatile memory, such as a fixed disk, or CD-ROM, or another type of mass storage memory device.
The system busses 18 can be implemented as various bus architectures, such as the Industry Standard Architecture (ISA), Micro Channel Architecture (MCA), and Extended Industry Standard Architecture (EISA) standards, as well as Personal Computer Memory Card International Association (PCMCIA), Small Computer Systems Interface (SCSI), Personal Computer Interface (PCI), Enhanced Capabilities Parallel (ECP), Vesa Local Bus (VL), Integrated Drive Electronics (IDE), and other bus standards. The system busses 18 also can include local or personal computer (PC) busses, serial busses, and parallel busses. The system busses 18 typically supply the signal paths for the exchange of data, control signals, and addressing information among the components of the computer 8 and peripheral components, including the devices 20. It will be understood that the present invention is not limited to operation with the above-described busses, and that these busses are merely listed as representative of existing bus architectures.
The system busses 18 can include the local bus 13, the integrated bus 15, and a pair of interface busses 17 and 17'. The integrated bus 15 is preferably an integrated or "fixed" expansion-type bus that enables the direct connection of peripheral devices or adapter boards to the "motherboard" of the computer 8. In contrast, the interface busses 17 and 17' are typically supplied by vendors as separate accessory or optional components that can be attached to the computer 8 via the local bus 13 or the integrated bus 15. Nevertheless, both the interface busses 17 and 17' permit the connection of additional devices to the computer 8. For the representative computing environment shown in FIG. 1, the integrated bus 15 is implemented as an ISA bus and is connected to the local bus 13 on the system board of the computer 8. In addition, the interface busses 17 and 17' are respectively implemented as a SCSI bus and a PCMCIA bus. In particular, the SCSI bus is connected to the local bus 13 and the PCMCIA bus is connected to the integrated bus 15.
The devices 20, which are connected to the system busses 18, represent the logical functions of components that can be connected to a personal computer. The devices 20 include components typically located on or connected to a motherboard or system board of a personal computer, including system-level devices, such as I/O controllers (fixed and flexible disk controllers), keyboard controller, serial and parallel controllers, system timer, display controller, programmable interrupt controller (PIC), and DMA controller. The devices 20 further include the functional devices for peripheral adapter boards and interface boards. Thus, for the representative computing environment shown in FIG. 1, the devices 20 include system-level devices (not shown), a modem card, and a network card.
A device 20 also can be implemented as a system bus 18 that is connected to another system bus. For example, in the computer 8, the PCMCIA bus is connected to the ISA bus and is capable of supplying a connection to the computer 8 for other devices. Thus, the PCMCIA bus represents both a system bus 18 and a device 20 within the computer 8. Likewise, both the ISA bus and the SCSI bus may be viewed as a system bus 18 and a device 20. Following the earlier analogy to "parent" and "child" components, it will be appreciated that a system bus 18 may be both a "parent" and a "child" within the preferred operating environment of the computer 8.
Although each of the devices 20 are shown in FIG. 1 as separate physical components, it will be understood that a computer component can contain more than one function and, accordingly, that a component can contain more than one of the devices 20. Thus, it will be useful to consider the device 20 as a "logical" device rather than as a physical device. It will be understood that the devices 20 supply the building blocks that are required to harness the computing power offered by the CPU 12 and the resources 14.
With the exception of system-level devices, which are typically supplied as part of the system board of the computer 8, a device 20 can be connected to a memory storage device 29, such as a ROM or a register, for storing information about the associated device 20. The memory storage device 29 is useful for storing device-related information that supports the configuration of the devices within the computer 8. This device information typically includes one or more strings of characters for uniquely identifying a corresponding device and resource usage data. For devices on adapter boards, the memory storage device 29 is preferably mounted on the board itself.
The inventors believe that the actual implementation of the memory storage device 29 can be any type of circuit or component that allows the device information to be accessed to support configuration operations. Typical data storage components include ROMs, registers, and other conventional memory components. Furthermore, the device-related information also can be "stored" by constructing circuitry that represents a "hard-wired" version of such information. Device information can be stored in a device-dependent fashion. Accordingly, it will be understood that the memory storage device 29 is not limited to the above-described implementations.
The computer control system 21 conducts initialization and test functions, as well as device configuration functions, when the computer 8 is first powered or "booted." Upon booting the computer 8, one or more start-up programs begin to run to implement necessary initialization and test functions. These start-up programs may be implemented as stand-alone programs or are integrated to function within the framework of the operating system 10.
The start-up programs typically include a basic input/output system (BIOS) program and a power-on self-test (POST) program. The BIOS program supplies device-level control or support services for the primary input/output devices of the computer during the boot "initialization" process. Furthermore, after boot, the BIOS program accepts requests from program modules, such as application programs or the operating system, and performs input/output services as requested by those modules. The POST program conducts a sequence of tests for certain system-level devices and resources, including memory, to verify the proper operation of the computer components that are required to be active upon completion of the boot process. The programs associated with the computer control system 21 are preferably stored in ROM located within the computer 8, typically on the computer motherboard. The functions and operations of conventional BIOS and POST programs are well known and will not be further described herein. As described in more detail below, the computer control system 21 preferably includes a modified BIOS program that is further capable of (1) configuring the boot-level devices of the computer 8 and, if required, (2) detecting the insertion or removal of the computer 8 from a docking station or an expansion system.
When viewed collectively, the CPU 12, the resources 14, a fixed disk including the computer database 16, the system busses 18, and the devices 20 represent the hardware components for a typical personal computer as embodied by the computer 8. The devices 20, which are connected to system busses 18, perform their respective functions by operating with the resources 14. Proper operation of the devices 20 generally requires the conflict-free allocation of the finite supply of resource elements of a conventional computer. In view of the relative technical complexity of the typical personal computer, it will be appreciated that there is a need for a system for allocating resources for use by devices of a computer without substantial support by the user. The inventors' solution for this problem is a configuration system that determines the resource requirements of the devices and attempts to allocate available resources to satisfy these requirements. This configuration system is supported by the computer-implemented processes of the operating system 10.
FIG. 2 generally shows the steps for a method for configuring the devices 20 for operation with the computer 8. Turning now to FIGS. 1 and 2, the computer-implemented process is started and device information is collected at step 37 for each of the devices 20. For each device 20, the device information includes identity data for uniquely identifying the corresponding device and resource allocation data for defining the resource requirements of the particular device. This device information is preferably associated with or otherwise linked with information for the corresponding system bus 18. The resulting product of this data collection process can be viewed as an "inventory" of the identities and resource requirements for devices 20 connected to the system bus 18.
For the devices that are designed to take advantage of the present inventive concept, at least a portion of the device information can be acquired by accessing the memory storage devices 29. However, certain system-level components and existing "legacy" boards containing devices 20 may not include a memory storage device 29 for storing such device-level information. In this event, the device-level information is preferably acquired from other sources, such as the BIOS program of the computer control system 21 or configuration files of the operating system 10. For the legacy devices, certain device-level information can also be acquired by examining the signature-like responses output by these devices in response to command signals supplied to the I/O ports 28.
A device driver is identified at step 38 for each of the devices 20 in response to the device information. At step 39, the resources 14, which are used by the devices 20 during computing operations, are allocated based upon the device information. As described in more detail below with respect to FIGS. 7-10, resource allocation is preferably an iterative routine that attempts to identify and resolve potential resource conflicts prior to an actual conflicting use of the resources 14 by the devices 20 during operation of the computer 8. In response to this allocation of the resources 14, the device driver for each of the devices is loaded at step 40 and the devices 20 are subsequently activated for operation with the computer 8, thereby terminating this configuration process.
Device information is preferably acquired for each of the devices 20, including all devices 20 supported by peripheral devices, add-on type adapter boards, system-level devices, and certain system busses. However, in the event that one of the devices 20 itself is implemented as a system bus, it may be necessary to complete the configuration tasks for the identified devices 20 connected to the system bus 18 prior to detecting any devices on the newly identified system bus. These tasks include identifying device drivers, allocating resources, and loading identified device drivers for the remaining devices 20 on the first system bus prior to identifying any of the devices connected to this newly identified second system bus.
For the computer 8, the steps shown in FIG. 2 are preferably conducted for the devices 20 on the integrated bus 15 and thereafter repeated to permit the identification of the additional devices connected to the interface bus 17'. This enables the devices 20 connected to the "parent" component represented by the ISA bus to be configured prior to the devices 20 on the "child" component of the PCMCIA bus. It will be understood that this type of configuration sequence is defined by the connection of second system bus (the PCMCIA bus) to a first system bus (the ISA bus).
In this manner, the devices 20 of the computer 8 are identified and associated with each of the system busses 18. In addition, the resources 14 are efficiently allocated based upon the device information, and the device drivers are assigned and loaded to enable the operations of the devices 20 with the computer 8. It will be understood that the proper configuration of the computer 8 is necessary for the devices 20 to use the resources 14 of the computer 8 and to communicate with the program modules running on the computer 8. Accordingly, the computer 8 is typically configured prior to using the devices 20 for the desired computing functions.
Although it is desirable to configure all of the devices 20 during the power-up or boot processes, particularly prior to completing the test and initialization routines of the computer control system 21, many resource conflicts cannot be fully resolved without complete knowledge of all resource requirements for the devices 20. Nevertheless, the preferred system supports the configuration process during the computer start-up sequence for a limited set of the devices 20, specifically those boot-level devices that are required to be active during the boot process. Thus, this pre-boot configuration process is completed for the "fixed" system-level devices on the computer's system board, which is also described as a motherboard. Likewise, the pre-boot configuration process is completed for the set of devices 20 that are connected to integrated expansion board, specifically the integrated bus 15, and are required for boot-level operations. The remaining devices 20, which also may require resource allocation, are preferably configured only after the computer 8 has completed the boot process.
FIGS. 3A-C, collectively described as FIG. 3, are flow chart diagrams illustrating the preferred steps of a method for configuring the devices of a computer. Referring now to FIGS. 3A-C, which are collectively described herein as FIG. 3, and to FIG. 1, the configuration process is initiated in step 41 by powering-up the computer 8.
In step 42, certain devices known as system-level devices are configured in response to powering the computer 8. These system-level devices, which are configured based upon power-on default configuration settings, typically include I/O interfaces, the keyboard controller, the serial and parallel interfaces, the display controller, the system timer, the PIC, and the DMA controller. It will be appreciated that many of these components are mounted on the motherboard of a conventional personal computer. The system-level devices are preferably configured based upon default configuration parameters stored in the computer control system 21 or a memory device that can be accessed by the computer control system 21. The default configuration parameters for the system-level devices in the computer 8 are defined by the resource requirements and resource dependencies for such devices.
The preferred configuration process is based upon the collection of device-specific information from each of the devices 20 of the computer 8 to support the allocation of the resources 14 to those connected devices. Thus, still referring to FIGS. 1 and 3, the preferred configuration process continues for the devices 20 that are connected to the system-level expansion bus of the computer 8, specifically the integrated bus 15. In step 44, the integrated bus 15 is selected and an enumerator (not shown) is loaded for this ISA bus. In subsequent steps, each of the devices 20 connected to the ISA bus of the computer 8 is examined to obtain device information.
In step 46, one of the devices 20 on the selected ISA bus is detected to enable the communication of device information from the detected device 20. For the ISA bus, the detected device is isolated from the remaining devices on the bus to permit interference-free communications with that device. Nevertheless, it will be appreciated that other types of system busses do not require isolation of the detected device to enable communications with that device. The preferred system for detecting the interface boards associated with the devices 20, isolating a particular interface board, and collecting device information is described in a related application, U.S. patent application Ser. No. 08/023,689, filed Feb. 25, 1993, entitled "System and Method for Computer Interface Board Identification," which is assigned to the assignee for this application and hereby incorporated by reference. The system described in the referenced application automatically determines which interface boards are connected to a computer bus and automatically assigns parameter selections to ensure proper operation of the boards within the computer.
At step 48, the detected device 20 is assigned a device identification code that preferably identifies the particular device as a certain device type connected to a selected bus, in this case, the integrated bus 15. The device identification code comprises an identification code and a system bus code. The identification code comprises a data string which uniquely defines the corresponding device. The identification code can include characters defined by the well known American Standard Code for Information Interchange (ASCII) or a combination of ASCII and non-ASCII data bytes. Similarly, the system bus code, which also can be implemented as a string of ASCII characters or a combination or ASCII and non-ASCII data, uniquely identifies a corresponding system bus. The identification code is typically supplied by the device 20, whereas the system bus code is associated with the system bus 18 and is generated externally to the device 20, i.e., typically by an enumerator associated with that bus. For example, a modem is preferably assigned an identification code that is different from the identification code for a printer, and different architecture expansion busses, such as ISA and MCA busses, are preassigned different system bus codes. Thus, the identification code defines the detected device and the system bus code defines the selected system bus that supplies the connection for the detected device. Examples of device identification codes, also described as device identifiers, include: "Root.backslash.*PNP0000.backslash.0", "ISAPNP.backslash.ADP1522_DEV0000.backslash.E8123123", and "BIOS.backslash.*PNP0100.backslash.0".
For the preferred embodiment, the identification code is used to identify the class or the type of the device 20. The vendor of the peripheral device associated with the device 20 typically defines the unique identification code for that device. Nevertheless, it will be appreciated that the identification code does not need to contain any information about the class or the type of the device 20. Indeed, the only requirement for the device identification code is that the data string formed by this combination of the system bus code and the identification code should be consistently used each time the computer 8 boots to uniquely identify the particular device 20 on the selected bus 18. The device identification code can include an instance number to distinguish the multiples instance of like devices within the computer 8.
The collection of device information continues at step 50. Specifically, logical configuration data is obtained for the detected device 20. The logical configuration data is preferably logically linked to the device identification code for the particular device 20. This device information is preferably stored in nonvolatile memory that is allocated for such use by the operating system 10. In addition, if the particular device 20 represents a newly installed device for the computer 8, then the device information is also stored within the computer database 16 to maintain an archival record of all of the devices 20 that have been installed for operation with the computer 8.
The logical configuration data defines the set of resources 14 necessary for operation of the particular device 20 with the computer 8. Specifically, the logical configuration data preferably comprises both resource requirement information and resource dependency information, which in combination define certain resource elements that are necessary for operation of the particular device 20. It will be appreciated that computer resources, such as the resources 14, include multiple resource options or elements, such as allocated memory ranges and a predefined set of interrupts, DMA channels, and I/O ports. The resource requirement information preferably defines a range of elements for each of the resources 14 required for the operation of the associated device. In contrast, the resource dependency information defines a particular combination of resource elements which are necessary for the operation of the particular device 20. For example, the resource dependency information for a modem may define a specific combination of an interrupt and an I/O port for the operation of that device.
Upon completing the collection of device information from the detected device 20, an inquiry is conducted at step 52 to determine whether device information has been obtained from all of the devices 20 on selected bus, in this case, the integrated bus 15. If the answer is negative, the "NO" branch is followed to the step 46 to continue the collection of device information from the remaining devices 20 on the integrated bus 15. In contrast, the "YES" branch is followed to the step 54 if device information has been acquired from all such devices 20. At this point, the device identity data and resource usage information have been obtained for each device 20 that either is a system-level device or is directly connected to the integrated bus 15.
In step 54, an inquiry is conducted to identify the subset of the devices 20 that must be active upon completion of the boot process. For the devices 20 that do not require a default-type configuration during the power-up sequence, the "NO" branch is followed to the step 56 and those devices preferably remain inactive during the power-up sequences. In contrast, the "YES" branch is followed from the step 54 to the step 58 for the devices 20 that must be activated during the boot process. Based upon this inventory of the identified devices 20 requiring activation during the boot process, a boot-level device driver for each of those devices is obtained in step 58 to enable communications between the boot-level devices and the computer 8. These boot-level devices typically include the system-level devices 20 on the system board of the computer 8 and certain adapter boards connected to the integrated bus 15, such as a display controller or a mass memory storage device controller, i.e., a fixed disk controller.
In step 60, an inquiry is conducted to determine if the resources 14 required by the set of identified devices 20 requiring enablement for the boot process are conflict-free. If so, the "YES" branch is followed to step 64. The resources required by these devices 20 are allocated during the step 64, and the required device drivers are subsequently loaded to permit boot-level operations. Alternatively, if the response to the inquiry in step 60 is negative, then the "NO" branch is followed to step 62, and the user is preferably supplied an error message based upon the detection of a resource conflict during the boot process. In response, the user may be required to power down the computer and to manually reconfigure the computer 8. However, it is not anticipated that a resource conflict for boot-level devices will be a common occurrence because the configurations for many of the boot-level devices mounted on the system board are typically pre-defined to be conflict-free by the computer vendor.
The above-described configuration steps 42-64 are preferably supported by software routines for the modified BIOS program of the computer control system 21. The modified BIOS program supports the identification of each of the boot-level devices, including system-level devices and the boot-level devices on the integrated bus 15, and stores device-related information within computer memory to support the configuration tasks for those devices. With the exception of the system-level devices, the configuration support supplied by the modified BIOS program concludes after the POST process is completed. Specifically, after POST, the control of the configuration process for all remaining devices 20 is preferably maintained by the operating system 10 rather than by the computer control system 21.
Upon completion of this portion of the configuration process, the conventional POST and BOOT routines are then conducted for the computer 8 during the steps 66 and 68, respectively. As a result of loading the operating system 10, selected configuration files of the operating system 10, such as CONFIG.SYS and the AUTOEXEC.BAT files, are processed by the computer 8. The CONFIG.SYS file is a system configuration file that contains parameters which determine how the computer will operate. The AUTOEXEC.BAT file supports user customization of computer operations, particularly the handling of application programs. The operations of both CONFIG.SYS and AUTOEXEC.BAT files for conventional operating systems are well known and will not be described herein.
Although FIG. 3 shows a specific sequence for the POST and BOOT routines, it will be understood that the configuration process can be adapted to operate with a different sequence of those routines. For example, at least a portion of the task operations of the POST routine can be completed after power-up and prior to the configuration of system-level devices in step 42.
Unlike the system board devices and the boot-level devices connected to the integrated bus 15, which are respectively configured during steps 42 and 64, the remaining devices 20 connected to the integrated bus 15 are configured only after the boot operations for the computer 8 have been completed. However, the configuration operations for the nonboot-level devices on the integrated bus 15 are supported by the collection of device information that occurred prior to the BOOT process of step 68. In particular, this configuration process is supported by the current inventory of both the system board devices and the set of devices 20 connected to the integrated bus 15.
At step 70, the device drivers for this set of nonboot-level devices are identified in response to the device information collected during the preboot operation. The device drivers are typically identified by accessing corresponding device-related information that is stored in the computer database 16 or by accessing a predefined file of the operating system 10.
The device information collected during the preboot operation further supports the allocation and the assignment of the resources 14 required by the nonboot-level devices on the integrated bus 15. In step 72, the resource requirements and dependencies for each of the nonboot-level devices 20 on the integrated system bus 15 are compared to the available resources 14. This comparison permits a determination of whether a potential resource conflict exists. In an iterative fashion, potential resource conflicts are arbitrated and resolved prior to resource allocation. In step 74, the resources 14 are allocated to the nonboot-level devices 20 based upon the arbitration results of the step 72 and those devices are configured in step 76. In view of the allocated resources, the identified device drivers are loaded in step 78 and the devices are enabled for operation with the computer 8. This arbitration process is described in more detail below with respect to FIGS. 7-10.
For the system board devices and the set of devices directly connected to the integrated bus 15, device information has now been collected and stored in volatile computer memory and, as required for newly installed devices, in the nonvolatile memory of the computer database 16. The device information for the devices 20 on the integrated bus 15 may identify one or more of the devices as another system bus 18 capable of supporting other connected devices 20. Device information has not yet been collected for the "children" devices of each system bus 18 connected to the integrated bus 15. Nevertheless, for the preferred embodiment, the tasks of identifying device drivers, arbitrating and allocating the resources 14, and loading the identified device drivers for the set of nonboot-level devices 20 on the integrated bus 15 enable the subsequent collection of device information from these children devices. Thus, at step 80, an inquiry is conducted to determine whether any of the devices 20 on the selected bus are operable as system busses. If not, the "NO" branch is followed to step 82, and the automated configuration operation for the computer 8 is completed. In contrast, if another system bus is connected to the computer 8, then the "YES" branch is followed to step 84 to continue the data collection process.
Referring still to FIGS. 1 and 3, in step 84, another one of the system busses 18 is selected to support the configuration of the set of the devices 20 connected to that selected bus. For the illustrative example of FIG. 1, the interface bus 17' is selected, and the enumerator for that bus is loaded. One of the devices 20 on the interface bus 17' is subsequently detected in step 86. At step 88, the detected device 20 is assigned a device identification code comprising the identification code for the detected device and the system bus code for the interface bus 17'. Likewise, logical configuration data is obtained for the detected device 20 during the step 90 to define the resources 14 necessary for operation of the device.
Upon completing collection of device information from the detected device 20, an inquiry is conducted at step 92 to determine whether device information has been obtained from all of the devices connected to the interface bus 17'. If the answer is negative, the "NO" branch is followed to the step 86 to continue the collection of device information from those remaining devices 20. In contrast, the "YES" branch is followed to the step 70 to enable the sequence of identifying device drivers, arbitrating and allocating the resources 14, and loading the identified device drivers for the detected devices 20 of the interface bus 17'. This process will be repeated until all of the system busses 18 within the computer 8 are detected.
It will be understood that the device information collection process has now been completed for the existing devices 20 of the computer 8. Specifically, the device identification code and the logical configuration information have been collected from each of the devices 20. This device information is preferably stored in the computer memory 22 to support any additional configuration operations that are necessitated by another asynchronous event affecting the operating state of the computer 8.
It will be appreciated that prior art personal computers generally do not include a modified BIOS program to implement the specific sequence defined by the steps 42 through steps 64 for the configuration process shown in FIG. 3. Accordingly, for computers with a conventional BIOS program, the system board devices are configured by the BIOS program and the initialization processes performed by the POST and BOOT routines are conducted in a known manner in response to powering the computer. After the completion of the boot sequences, an embodiment of the present invention supports the automated configuration of the remaining devices connected to this computer.
Specifically, upon booting the prior art computer, this postboot configuration process starts at step 84 by selecting one of the system busses 18. However, unlike the previously-described configuration operation, the integrated bus 15 is selected only after the completion of the BOOT routine. In this manner, the sequence of tasks starting at step 84 of FIG. 3 are completed to identify and characterize the existing devices 20 of the computer 8, to identify the associated device drivers, to allocate the resources 14, and to load the device drivers.
Automated Configuration System Components
FIG. 4 is a block diagram that illustrates the components and their structural communications links for the preferred embodiment of the operating system 10. Referring to FIGS. 1 and 4, the operating system 10 comprises numerous software programs or modules, including enumerators 150, a hardware tree 152, a registry 153, arbitrators 154, device drivers 156, a configuration manager 158, a device manager 159, a device configuration database 160, and device and class installers 161a and b. The enumerators 150, the registry 153, the arbitrators 154, and the device drivers 156 are associated with the configuration manager 158. The device manager 159 works in conjunction with the configuration manager 158 to install devices 20 and is associated with the device and class installers 161a and b. It will be understood that the operating system 10 also preferably interacts with a modified BIOS program of the computer control system 21, i.e., a BIOS program modified to support operations of the present invention and various hardware components of the computer 8, including the system busses 18 and the devices 20, to support the configuration system.
These components are generally described within sections headed by their respective identifying legends and are best shown in FIGS. 4-6.
Enumerators
The enumerators 150 "enumerate" or operate to report the identities of detected devices 20 on the system busses 18 in response to certain events that affect the operating state of the computer 8. These events include changes to the state of power supplied to the computer 8, including the states Power-on, Standby, Suspend, or Resume. The events also include the insertion of a device onto or the removal of a device from a system bus, or the insertion into or the removal of a computer from a docking station or an expansion chassis. It will be appreciated that this connection (or removal) of a device 20 to the computer 8 can be completed by a physical connection or as a logical connection via a wireless communication link or a network. In addition, for certain devices 20, the enumerators 150 also can transmit assigned resource elements from the configuration manager 158 for use by the devices 20 in response to an allocation of the resources 14.
Each enumerator 150 is assigned to a component of the computer 8 that is capable of having children, namely, those components that provide a connection for yet another hardware component. It will be understood that computer busses, such as the system busses 18, represent a common mechanism for connecting adapter boards and peripheral devices to a personal computer. For a typical personal computer, the enumerators 150 can be assigned to computer busses, the modified BIOS program that supports the configuration of boot-level devices, and certain ports, such as serial and parallel ports.
For each system bus 18, the associated enumerator 150 is programmed to recognize the operating characteristics of its assigned computer bus and to support the configuration of the devices 20 connected to that computer bus. Specifically, these enumerators obtain device-related information from the devices 20 and subsequently store such information within a central memory location of the hardware tree 152. As outlined above, this collection of device information is initiated in response to the events affecting the enumerator's assigned system bus 18, such as the insertion or removal of a device or a change in the power state of the computer 8. It will be understood that this collection of device information from the devices 20 in the computer 8 is described as an enumeration process.
Likewise, for the computer control program 21, an enumerator 150 can be programmed to recognize the system-level devices of the computer 8 and to support the configuration of those system-level devices. The enumerator 150, assigned to the modified BIOS program, accesses the default-type configuration parameters for the system-level devices from the modified BIOS program. This operation is conducted in response to events affecting the computer's operating state, including the power-on event, and stores this information within the hardware tree 152. Furthermore, the enumerator 150 for the modified BIOS program can be programmed to detect the insertion of the computer into or the removal of the computer from a docking station and outputs an indication of these events to the configuration manager 158.
A unique, system bus code is associated with each of the enumerators 150. For example, the ISA bus enumerator has a particular system bus code that is different from the system bus code assigned to the MCA bus enumerator. An enumerator 150 creates a device identification code for each device 20 connected to the assigned system bus 18 by appending its system bus code to the identification code for the device 20. The device identification code also can include an instance number that is assigned by the enumerator 150 to distinguish identical devices 20 connected to the same system bus 18.
An instance number can be obtained by the enumerator 150 from the device 20 itself, if available, or can be assigned to the device 20. By way of example, for the ISA bus, the ISA bus enumerator assigns an instance number to a logical device based upon a serial number that is stored in the memory storage device 29 associated with that device. If no serial number is available for the device 20, then the enumerator 150 is required to use some other unique attribute to generate an uniquely addressable instance number. For the PCMCIA bus, an alternative scheme for assigning an instance number is based upon the use of the slot number for the bus socket connected to the device 20.
The enumerator 150 also obtains logical configuration data for each of the devices 20 of the computer 8. Logical configuration data is preferably linked to other corresponding device information to maintain a logical link with the represented device 20. For a typical device, the device identification code and the logical configuration data, which are collectively referred to as device information, are preferably stored within a device node associated with that device. Each device node is preferably maintained in the tree-like memory structure of the hardware tree 152, as described below.
As a result of the resource assignment process, the enumerators 150 can receive data packets containing assigned resource elements for the devices 20. In response to receiving an assignment of the resources 14 for a particular device, the enumerator 150 accesses the appropriate device node to store the resource assignment. In this manner, the assigned resource information is maintained in a central memory location that is accessible by the device and, as required, by the device driver corresponding to that device.
The enumerators 150 provide an abstraction layer that effectively separates the controller portion of the operating system 10, the configuration manager 158, from the underlying bus structures of the computer 8. By placing the system bus-level information within the driver-like enumerators 150, the operating system 10 can be adapted to operate with a variety of present and future computer bus architectures. Thus, unlike conventional operating systems, the configuration manager 158 can communicate with a variety of system busses without any knowledge of the characteristics of those system busses because such information is supplied by the abstraction layer of the enumerators 150.
For the preferred embodiment, the operating system 10 can include a variety of specific enumerators 150, including the root enumerator, BIOS enumerator, ISA bus enumerator, PCI bus enumerator, PCMCIA bus enumerator, EISA bus enumerator, COM enumerator, and LPT enumerator. The configuration manager 158 includes the root enumerator, which does not operate to detect devices on a system bus, but rather relies on the registry 153 to determine whether a device 20 exists within the computer 8. If there is an entry in the registry 153, the root enumerator assumes that it exists and the appropriate drivers are loaded. This is the method by which legacy devices are supported because it is sometimes difficult to determine with complete accuracy and safety that a prior art ISA bus-compatible adapter card is installed.
The BIOS enumerator is responsible for identifying the devices 20 on the motherboard of the computer 8. The ISA bus enumerator detects Plug and Play-compatible devices connected to the ISA bus in the computer 8. The PCI bus enumerator uses the PCI BIOS and the PCI device configuration space to detect and co |