DE69523399T2 - Leistungssteuerprozessor für Rechnersystem mit Halt/Wiederaufnahmefunktion-Fähigkeit - Google Patents

Leistungssteuerprozessor für Rechnersystem mit Halt/Wiederaufnahmefunktion-Fähigkeit

Info

Publication number
DE69523399T2
DE69523399T2 DE69523399T DE69523399T DE69523399T2 DE 69523399 T2 DE69523399 T2 DE 69523399T2 DE 69523399 T DE69523399 T DE 69523399T DE 69523399 T DE69523399 T DE 69523399T DE 69523399 T2 DE69523399 T2 DE 69523399T2
Authority
DE
Germany
Prior art keywords
routine
power
power supply
cpu
state
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE69523399T
Other languages
English (en)
Other versions
DE69523399D1 (de
Inventor
Paul H. Benson Iv
Dwayne T. Crump
Steven T. Pancoast
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Application granted granted Critical
Publication of DE69523399D1 publication Critical patent/DE69523399D1/de
Publication of DE69523399T2 publication Critical patent/DE69523399T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Power Sources (AREA)
  • Retry When Errors Occur (AREA)

Description

    Bereich der Erfindung
  • Die vorliegende Erfindung bezieht sich im allgemeinen auf eine Rechnersystemarchitektur und insbesondere auf ein Rechnersystem mit einer System-Halt/Wiederaufnahme-Fähigkeit und einem Leistungssteuerprozessor, der die Übergänge zwischen den verschiedenen Leistungssteuerungsstatus unterstützt.
  • Hintergrund der Erfindung
  • Personalcomputersysteme sind im Stand der Technik bekannt. Personalcomputersysteme im allgemeinen und IBM Personalcomputer im besonderen haben eine weitverbreitete Nutzung erreicht und versorgen viele Bereiche der heutigen modernen Gesellschaft mit Rechnerleistung. Personalcomputer können normalerweise als Mikrocomputer definiert werden, die entweder auf dem Tisch bzw. auf dem Boden aufgestellt werden können oder tragbar sind. Sie bestehen aus einer Systemeinheit mit einer Zentraleinheit (CPU) und zugehörigem flüchtigem und nichtflüchtigem Speicher, wobei alle RAM und BIOS ROM, einen Systemmonitor, eine Tastatur, ein oder mehrere Diskettenlaufwerke, ein Festplattenlaufwerk (auch unter dem Namen "Magnetplattenlaufwerk" bekannt), ein Zeigegerät - die sogenannte "Maus" und einen optionalen Drucker haben. Eines der Unterscheidungsmerkmale dieser Systeme ist die Verwendung eines Motherboards oder einer Systemgrundplatine, um diese Komponenten elektrisch miteinander zu verbinden. Diese Systeme sind primär dafür ausgelegt, einen einzelnen Benutzer mit unabhängiger Rechnerleistung zu versorgen, und sie sind preiswert, so daß sie für Privatpersonen oder kleine Geschäfte erschwinglich sind. Beispiele von solchen Personalcomputersystemen sind die IBM PERSONAL COMPUTER AT und IBM PERSONAL SYSTEM/1 (IBM PS/1).
  • Personalcomputersysteme werden normalerweise zur Ausführung von Software benutzt, um damit verschiedene Arbeiten wie Textverarbeitung, Tabellenerstellung, Speicherung und Relationen von Daten in Datenbanken, Anzeige von Grafiken, Konzeption von elektrischen oder mechanischen Systemen mittels Systementwurfssoftware (system-design software) usw. durchzuführen.
  • EP 0, 635, 778, EP 0, 635, 788, EP 0, 636, 964 und EP 0, 636, 978 beschreiben ein Rechnersystem mit vier Leistungssteuerungsstatus: einem normalen Betriebsstatus, einem Standby-Status, einem Haltestatus und einem Aus-Status. Mit einem Schalter wird zwischen dem Aus-Status, dem normalen Betriebsstatus und dem Haltestatus umgeschaltet.
  • Der normale Betriebsstatus des Rechnersystems nach der vorliegenden Erfindung ist praktisch identisch mit dem normalen Status eines normalen Tischcomputers. Benutzer können Anwendungen nutzen und den Rechner grundsätzlich wie jeden anderen behandeln. Wie der Benutzer erkennen kann, unterscheidet sich der Rechner lediglich durch den Leistungssteuertreiber, der im Hintergrund läuft (im BIOS und im Betriebssystem). Der Teil des Leistungssteuertreibers im Betriebssystem (OS) ist das Advanced Power Management (APM), die verbesserte Programmierschnittstelle, die von Intel und Microsoft geschrieben wurde und heute in den meisten Betriebssystemen vorhanden ist, die für die Intel- Prozessorfamilie 80 · 86 geschrieben wurden. Der Teil des Leistungssteuertreibers in BIOS (APM BIOS) kommuniziert mit dem APM OS Treiber. Der APM OS Treiber und die APM BIOS Routinen steuern gemeinsam den Computerübergang in die bzw. aus den anderen drei Status.
  • Im zweiten Status, dem Standby-Status, wird weniger Strom als im normalen Betriebsstatus verbraucht, wobei jedoch nach wie vor Anwendungen ausgeführt werden können, wie sie üblicherweise ausgeführt werden. Im allgemeinen bleibt die Leistung im Standby-Status erhalten, indem die Geräte in ihre jeweiligen Kleinleistungsmodi gesetzt werden. Die Leistung bleibt beispielsweise im Standby-Status erhalten, indem sowohl die Umdrehungen der Festplatte innerhalb der Magnetplatte als auch die Generierung des Bildsignals eingestellt werden.
  • Der dritte Status ist der Haltestatus. Im Haltestatus verbraucht das Rechnersystem extrem wenig Energie. Der auf Haltestatus gesetzte Rechner zieht sehr wenig Strom aus der Netzsteckdose, Der einzige Strom, der verbraucht wird, ist die kleine Menge Strom, um die Schaltlogik, die die Schaltung von einer Batterie im Rechnersystem überwacht (wenn das System nicht mit Wechselstrom versorgt wird), eingeschaltet zu lassen oder eine kleine, von der Stromversorgung in einer Hilfsstromleitung erzeugte Menge Strom (wenn das System mit wechselstrom versorgt wird).
  • Dieser geringe Stromverbrauch wird erreicht, indem der Status des Rechnersystems im Festplattenspeicher (Magnetplatte) gespeichert wird, bevor die Stromversorgung ausgeschaltet wird. Um in den Haltestatus zu schalten, unterbricht das Rechnersystem einen Ausführungscode und überträgt die Steuerung des Computers an den Leistungssteuertreiber. Der Leistungssteuertreiber ermittelt den Status des Rechnersystems und speichert den Status des Rechnersystems im Festplattenspeicher. Der Status der CPU-Register, des CPU- Cache, des Systemspeichers, des System-Cache, der Bildregister, des Bildspeichers und der anderen Geräteregister werden alle auf der Festplatte gespeichert. Der Status des kompletten Systems wird so gespeichert, daß er wiederhergestellt werden kann, ohne daß die Codeanwendungen durch die Unterbrechung nachteilig beeinträchtigt werden. Der Rechner schreibt dann die Daten, aus denen hervorgeht, daß sich das System im Haltestatus befindet, in den nichtflüchtigen CMOS-Speicher. Der Rechner veranlaßt schließlich die Stromversorgung, die Stromerzeugung abzuschalten. Der komplette Status des Computers wird im Festplattenspeicher sicher gespeichert. Die Systemleistung ist nun abgeschaltet ("off"), und der Rechner wird nun mit einer kleinen Menge geregeltem Strom von der Stromversorgung gespeist, damit die Schaltlogik, die die Schaltung überwacht, versorgt ist.
  • Der vierte und letzte Status ist der Off-Status. In diesem Status wird das Rechnersystem nicht mehr mit geregeltem Strom von der Stromversorgung versorgt, ohne daß der Status des Rechnersystems auf der Festplatte gespeichert wurde. Der Off- Status ist praktisch identisch mit dem Status von normalen Tischcomputern, die auf die übliche Art und Weise ausgeschaltet werden.
  • Für das Umschalten von Status zu Status sorgt der Leistungssteuertreiber, wobei das Umschalten normalerweise auf Schließvorgängen von einem einzelnen Schalter, einem Flag und zwei Timern basiert: dem Inaktivitäts-Standby-Timer und dem Inaktivitäts-Halte-Timer. Das System hat einen einzelnen Netzschalter. Mit diesem Schalter kann das Rechnersystem eingeschaltet werden, der Status des Systems gehalten werden, der Status des Systems wiederhergestellt und das System ausgeschaltet werden.
  • Es wäre wünschenswert, wenn sich das Rechnersystem zu einem bestimmten Zeitpunkt einschalten könnte. Das Wiederaufnahme- Alarmmerkmal ist bei der Automatisierung zahlreicher Aufgaben wie beispielsweise der Systemwartung (Backups von Magnetplatten durchführen, Defragmentieren von Magnetplattenlaufwerken), der Erfassung von Systeminformationen (Herunterladen von Aktienkursen, Nachrichten, Wetterbericht, Kontoauszügen usw.) und dem Senden von E-Mails nützlich, wenn die Telefongebühren am niedrigsten sind.
  • Dieses "Wakeon-Alarm"-Merkmal ist sehr einfach aufgebaut: Das System schaltet sich an einem bestimmten Datum zu einer bestimmten Uhrzeit ein. Mehrere Notebook- und Laptop-Computer aus dem Stand der Technik waren mit diesem Merkmal eine Zeitlang ausgerüstet. Sie benutzen normalerweise eine teure, spezialisierte Ausführung der Realzeituhr (real time clock) (RTC), die in jedem IBM-Computer und IBM-kompatiblem Computer seit dem IBM AT Computer eingebaut wurde. Die RTC hat einen 24-Stunden-Alarm, der programmiert werden kann, um eine Unterbrechung (IRQ8) zu generieren, wenn die eingestellten Stunden, Minuten und Sekunden mit den tatsächlichen Stunden und Minuten übereinstimmen. Die tragbaren Geräte lassen die meisten Einheiten im Haltestatus eingeschaltet, und somit ist ein Teil der Schnittstelle zur RTC spannungsführend und kann, wenn der Alarm ausgelöst wird, eine Wiederaufnahme aufrufen.
  • Es gibt mindestens zwei Probleme, wenn die RTC für das Wakeon-Alarm-Merkmal benutzt wird. Erstens erstreckt sich der RTC- Alarm nur über einen Zeitraum von 24 Stunden. Wenn ein Ereignis geplant werden soll, das über die 24 Stunden hinausreicht, muß das System wenigstens einmal alle 24 Stunden wecken, und ein höherer Planer muß entscheiden, ob dies der richtige Tag ist. Zweitens kann, wenn ein tragbares Gerät den Haltestatus unterstützt, der Alarm normalerweise das System nicht aus diesem Status zurückholen, da es nicht eingeschaltet ist. Selbst wenn die RTC möglicherweise von einer separaten Batterie mit Strom versorgt wird, benötigt die Schnittstellenlogik, die die Weckunterbrechung (IRQ8) triggert, normalerweise Systemleistung. Deshalb kann auf sie nicht zugegriffen werden, um die Wiederaufnahme aufzurufen und den Status des Computers wiederherzustellen.
  • Das System über ein externes Signal, zum Beispiel über einen Telefonanruf, zu wecken, ist eine andere Aufgabe, die bei tragbaren Geräten üblich ist. Wenn ein tragbarer Computer normalerweise konfiguriert ist, um bei einem Rufzeichen von einem internen Modem die Wiederaufnahme auszulösen, ist das Modem ein teures Modem mit einem Kleinleistungsmodus. Das Modem wird in den Kleinleistungsmodus gesetzt, von wo aus es immer noch in der Lage ist, ein Rufzeichen zu hören und das System aufzuwecken. Dafür ist wiederum Strom erforderlich, der im Haltestatus normalerweise vorhanden ist, aber normalerweise nicht vorhanden ist, wenn das System im Haltestatus ist.
  • In der US Patentschrift GB 2 235 797 ist eine Leistungssteuerung für einen tragbaren Computer beschrieben, in dem Schalter, die von der Leistungssteuerung gesteuert werden, die Verteilung der Strom- und Taktsignale an die verschiedenen Einrichtungen innerhalb des Computers steuern. Die Leistungssteuerung enthält eine Softwareroutine, um die verschiedenen Einrichtungen ständig zu überwachen, und um Strom- bzw. Taktsignale, wenn bestimmte Einrichtungen weder benötigt werden noch aktuell in Gebrauch sind, von einer bestimmten Einrichtung abzunehmen.
  • Zusammenfassung der Erfindung
  • Gemäß der vorliegenden Erfindung wird ein Rechnersystem mit:
  • (a) einer Zentraleinheit, die in der Lage ist, Codes auszuführen;
  • (b) einem Leistungssteuerprozessor in Schaltkreiskommunikation mit der CPU;
  • (c) externen Signalempfangsmitteln in Schaltkreiskommunikation mit dem Leistungssteuerprozessor;
  • (d) einem konfigurierten Timer in Schaltkreiskommunikation mit dem Leistungssteuerprozessor, der nach einem zuvor festgelegten Zeitraum abgelaufen ist;
  • (e) einer Stromversorgung in Schaltkreiskommunikation mit der CPU und dem Leistungssteuerprozessor mit Schaltlogik, um das Rechnersystem selektiv mit Systemleistung von einer externen Quelle zu versorgen, wobei das Rechnersystem, das auf den Leistungssteuerprozessor reagiert, dadurch gekennzeichnet ist, daß es einen ersten Stromversorgungsstatus und einen zweiten Stromversorgungsstatus hat und des weiteren dadurch gekennzeichnet ist, daß es Schaltlogik enthält, um den Leistungssteuerprozessor mit Hilfsstrom zu versorgen;
  • wobei der erste Stromversorgungsstatus durch die Stromversorgung gekennzeichnet ist, die das Rechnersystem mit Systemleistung versorgt und durch den Hilfsstrom, der den Leistungsteuerprozessor von der externen Quelle versorgt; und
  • wobei der zweite Stromversorgungsstatus durch die Stromversorgung gekennzeichnet ist, die das Rechnersystem nicht mit Systemleistung versorgt sondern den Leistungsteuerprozessor von dieser externen Quelle mit Hilfsstrom versorgt; und
  • (f) einen Schalter in Schaltkreiskommunikation mit dem Leistungssteuerprozessor;
  • wobei der Leistungssteuerprozessor des weiteren dadurch gekennzeichnet ist, daß er die Stromversorgung veranlaßt, vom zweiten Stromversorgungsstatus in den ersten Stromversorgungsstatus, der auf einen Schließvorgang dieses Schalters reagiert, überzugehen, wobei ein Signal über die externen Signalempfangsmittel oder durch den Ablauf des Timers erkannt wird.
  • Gemäß der vorliegenden Erfindung wird ein Leistungssteuerprozessor zu dem System hinzugefügt, um die vorerwähnten Merkmale ohne spezielle Chips, die in normalen Systemen eingesetzt sind, bereitzustellen und ohne daß durch diese Ergänzung das System wesentlich teurer wird. In bevorzugten Ausführungsbeispielen des vorliegenden Systems enthält das hinzugefügte Leistungssteuerteilsystem Hard- und Firmware sowie System-BIOS.
  • Das Leistungssteuersystem wird mittels einer Hilfsspannung von der Spannungsquelle gespeist, die so lange zur Verfügung steht, wie die Stromversorgung an den Wechselstrom angeschlossen ist. Das Leistungssteuerteilsystem benötigt normalerweise weniger als 20 MA von 5 VDC für den Betrieb, und der Leistungssteuerprozessor steuert die Erzeugung des geregelten Stroms von der Spannungsquelle an den Rest des Systems. Das Leistungssteuerteilsystem enthält eine Schnittstelle zum System, wobei das System den Leistungssteuerprozessor programmieren und abfragen kann.
  • Der Leistungssteuerprozessor überwacht den Systemnetzschalter, um festzustellen, wenn der Benutzer das System ein- oder ausschaltet. Der Leistungssteuerprozessor implementiert auch ein Minutes-to-Wake-Alarm, mit dem das System veranlaßt werden kann, entweder vom Off-Status oder vom Haltestatus in den normalen Betriebsstatus überzugehen. In den bevorzugten Ausführungsbeispielen kann dies ein Zeitpunkt sein, der bis 32 Jahre in die Zukunft reicht.
  • Der Leistungssteuerprozessor kann auch Signale von einem internen Modem bzw. einem externen Modem überwachen und als Reaktion auf ein Rufzeichen einen Übergang entweder vom Off- Status oder vom Haltestatus in den normalen Betriebsstatus veranlassen. Mit dem Resume-on-Ring-Merkmal (Wiederaufnahme bei Rufzeichen) kann das System zur Wiederaufnahme veranlaßt werden, um einen eingehenden Anruf, Daten oder Faxübertragungen zu empfangen.
  • Nachdem der Leistungssteuerprozessor einen Übergang in den normalen Betriebsstatus entweder vom Off-Status oder vom Haltestatus veranlaßt hat, kann der Leistungssteuerprozessor dem System den Grund für den Übergang mitteilen. Das System kann demzufolge verschiedene Funktionen ausführen, was von dem Grund für den Übergang in den normalen Betriebsstatus abhängig ist.
  • In den bevorzugten Ausführungsbeispielen wird ein einfacher Microcontroller für die Implementierung der Wake-up-Merkmale benutzt, und somit können alle Systemeinrichtungen ausgeschaltet werden, was zu einer erheblichen Energieeinsparung führt. Außerdem sind keine besonderen Chips in den RTC- oder Modem-Teilbereichen des Rechnersystems erforderlich. Ein Heartbeat-Signal wird von dem Leistungssteuerprozessor vorzugsweise etwa alle 100 Millisekunden bereitgestellt. Dieser aktive niedrige Impuls wird von dem Host-CPU über das Statusregister überwacht, um festzustellen, ob der Prozessor funktioniert. Der Host kann ein "Heartbeat" überprüfen, bevor er Schreibbefehle ausgibt, um das Hängen des EA-Busses zu vermeiden.
  • In bevorzugten Ausführungsbeispielen wird der Prozessor jedesmal automatisch zurückgesetzt, wenn die Hilfsstromleitungen von niedrig in hoch übergehen, wie das nach einem Blackout oder Spannungsabfall geschieht. Insbesondere wird ein Glitch einen neuen Schaltkreis triggern, der einen 100 ms Reset-Impuls generiert.
  • Da der Leistungssteuerprozessor immer von der Hilfsstromversorgung versorgt wird, ist er in der Lage, Glitches zu versorgen. Deshalb ist wie bei einem Backupsystem die Schalterbetätigungslogik vorzugsweise so konfiguriert, daß das System beim Drücken des Netzschalters eingeschaltet und einige Sekunden gehalten wird, während das System den Leistungssteuerprozessor zurücksetzt und der Leistungssteuerprozessor die Stromversorgung einschaltet.
  • Diese und andere Vorteile der vorliegenden Erfindung werden anhand der detaillierten Beschreibung der Erfindung verdeutlicht.
  • Kurzbeschreibung der Zeichnungen
  • In den beiliegenden Zeichnungen, die hierin enthälten sind und einen Teil dieser Spezifikation bilden, sind Ausführungsbeispiele der Erfindung abgebildet, die - zusammen mit einer allgemeinen Beschreibung von der obengenannten Erfindung und der folgenden detaillierten Beschreibung - als Beispiel dienen, um die Grundlagen dieser Erfindung zu erläutern.
  • Fig. 1 zeigt eine perspektivische Ansicht eines Personalcomputers gemäß dieser Erfindung;
  • Fig. 2 zeigt ein Explosionsbild von bestimmten Elementen des Personalcomputers aus Fig. 1, zu denen ein Rahmen, eine Abdeckung, ein elektromechanischer Direktzugriffsspeicher und eine Grundplatine gehören, und in der bestimmte Verhältnisse der einzelnen Elemente untereinander dargestellt sind;
  • Die Fig. 3A und 3 B zeigen ein Blockdiagramm von bestimmten Komponenten des Personalcomputers aus den Fig. 1 und 2;
  • Fig. 4 zeigt ein Statusdiagramm des Rechnersystems gemäß der vorliegenden Erfindung, in dem die vier Systemstatus: Normal-, Standby-, Halte- und Off- Status dargestellt sind;
  • Fig. 5 zeigt ein Blockdiagramm von den relevanten Teilen der Stromversorgung;
  • Die Fig. 6A1-6A3 zeigen ein elektrisches Schaltdiagramm der Leistungssteuerlogik gemäß dem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung mit den verschiedenen Schnittstellen zu anderen Figuren;
  • Fig. 6B zeigt ein elektrisches Schaltdiagramm vom Anschluß der Leistungssteuerlogik an das interne Modem;
  • Fig. 6C ist ein Wellenformdiagramm, das die verschiedenen Signale im Reset-Kreis für die Leistungssteuerlogik zeigt;
  • Fig. 6D zeigt ein elektrisches Schaltdiagramm von einem zweiten Ausführungsbeispiel des Fehlererkennungs- und Fehlerkorrekturkreises der Stromversorgung;
  • Fig. 7 zeigt ein Statusdiagramm von einem der Schalterstatus, der vom Leistungssteuerprozessor des bevorzugten Ausführungsbeispiels gemäß der vorliegenden Erfindung gehalten wird;
  • Fig. 8 ist ein Flußdiagramm, das die Power-Up-Routine des bevorzugten Ausführungsbeispiels der vorliegenden Erfindung im allgemeinen zeigt;
  • Die Fig. 9A1 und 9A2 sind Flußdiagramme, die Einzelheiten von der Supervisor-Routine zeigen, die von dem APM- Geratetreiber im Betriebssystem etwa jede Sekunde aufgerufen wird;
  • Fig. 9B ist ein Flußdiagramm, das die Einzelheiten der APM Working-On-Last-Request-Routine zeigt;
  • Fig. 9C ist ein Flußdiagramm, das die Einzelheiten der APM RejeCt-Last-Request-Routine zeigt;
  • Die Fig. 10A bis 10K sind Flußdiagramme, die Einzelheiten der Suspend-Routine gemäß den bevorzugten Ausführungsbeispielen der vorliegenden Erfindung zeigen;
  • Die Fig. 11A bis 11D sind Flußdiagramme, die Einzelheiten von der Boot-Up-Routine gemäß den bevorzugten Ausführungsbeispielen der vorliegenden Erfindung zeigen;
  • Die Fig. 12A bis 12E sind Flußdiagramme, die Einzelheiten von der Resume-Routine gemäß den bevorzugten Ausführungsbeispielen der vorliegenden Erfindung zeigen;
  • Die Fig. 13A bis 13D sind Flußdiagramme, die Einzelheiten von der Save-CPU-State-Routine gemäß den bevorzugten Ausführungsbeispielen der vorliegenden Erfindung zeigen;
  • Die Fig. 14A bis 14D sind Flußdiagramme, die Einzelheiten der Restore-CPU-State-Routine gemäß den bevorzugten Ausführungsbeispielen der vorliegenden Erfindung zeigen;
  • Die Fig. 15A bis 15D sind Flußdiagramme, die Einzelheiten von der Save-8959-State-Routine gemäß den bevorzugten Ausführungsbeispielen der vorliegenden Erfindung zeigen;
  • Die Fig. 16A bis 16D sind Flußdiagramme, die die Einzelheiten der Dynamic-Save-File-Allocation- Routine gemäß den bevorzugten Ausführungsbeispielen der vorliegenden Erfindung zeigen;
  • Fig. 17 ist ein Flußdiagramm, das Einzelheiten von der Exit- Standby-Routine gemäß den bevorzugten Ausführungsbeispielen der vorliegenden Erfindung zeigt;
  • Fig. 18 ist ein Flußdiagramm, das Einzelheiten von der Enter-Standby-Routine gemäß den bevorzugten Ausführungsbeispielen der vorliegenden Erfindung zeigt; und
  • Die Fig. 19A bis 19D sind Flußdiagramme, die Einzelheiten von den Leistungssteuerprozessorroutinen gemäß den bevorzugten Ausführungsbeispielen der vorliegenden Erfindung zeigen.
  • Detaillierte Beschreibung des bevorzugten Ausführungsbeispiels
  • Obgleich die vorliegende Erfindung nachstehend ausführlicher mit Bezug auf die beiliegenden Zeichnungen, in denen ein bevorzugtes Ausführungsbeispiel der vorliegenden Erfindung abgebildet ist, beschrieben wird, sollte es am Anfang der folgenden Beschreibung klar sein, daß Personen mit Kenntnissen in den entsprechenden Techniken die hier beschriebene Erfindung verändern können, während die günstigen Ergebnisse dieser Erfindung noch erreicht werden. Demgemäß ist die folgende Beschreibung als eine weite, lehrende Beschreibung zu verstehen, die für Personen mit Kenntnissen in den entsprechenden Techniken bestimmt ist und nicht auf die vorliegende Erfindung begrenzt ist. Die vorliegende Erfindung behandelt das komplette Design eines Rechnersystems, einschließlich - aber nicht auf Computerarchitekturdesign begrenzt - digitalem Design, BIOS-Design, 80486 Codedesign mit geschütztem Modus, Anwendungscodedesign, Betriebssystemcode- Design und Advanced Power Management mit verbesserter Programmierschnittstellennutzung. Diese Anwendung wurde für diejenigen geschrieben, die mit allen Aspekten des Rechnersystemdesigns vertraut sind.
  • Es wird nun insbesondere auf die beiliegenden Zeichnungen Bezug genommen, in denen ein Mikrocomputersystem, in dem die vorliegende Erfindung ausgeführt wird, abgebildet ist, und das im allgemeinen mit 10 (Fig. 1) bezeichnet ist. Wie oben erwähnt, kann der Rechner 10 einen zugehörigen Bildschirm 11, eine Tastatur 12, eine Maus 12 und einen Drucker oder Plotter 14 haben. Der Rechner 10 hat ein Gehäuse 15, das aus einer dekorativen äußeren Abdeckung 16 (Fig. 2) und einer inneren geschirmten Abdeckung 18 besteht und zusammen mit einem Rahmen 19 eine geschlossene Einheit bildet, in der die elektrisch angetriebenen Datenverarbeitungs- und Datenspeicherkomponenten zur Verarbeitung und Speicherung von digitalen Daten untergebracht sind. Einige dieser Komponenten sind auf einer Mehrschicht-Grundplatine 20 oder einem Motherboard montiert, die bzw. das im Rahmen 19 untergebracht ist und ein Mittel bereitstellt, um die Komponenten des Computers 10 einschließlich derjenigen, die oben aufgeführt sind sowie die sonstigen zugehörigen Elemente wie Diskettenlaufwerke, verschiedene Arten von Direktzugriffsspeichern, Zubehöradapterkarten oder -platinen u. ä. aufzunehmen. Wie nachstehend noch ausgeführt werden wird, bietet die Grundplatine 20 Möglichkeiten, um Ein-/Ausgangssignale zu und von Betriebskomponenten des Mikrocomputers durchzulassen.
  • Das Rechnersystem hat eine Stromversorgung 17, einen Netzschalter 21, hier nachstehend auch Schalter 21 genannt, und eine Power-/Feedback-LED 23. Anders als der Netzschalter in einem typischen System wird mit dem Netzschalter 21 nicht die AC-Einspeisung zur und von der Stromversorgung 17 geschaltet, wie nachstehend erklärt werden wird. Der Rahmen 19 hat einen Sockel 22, eine Frontabdeckung 24 und eine Rückwand. 25 (Fig. 2). Die Frontabdeckung 24 enthält wenigstens einen offenen Steckplatz (und in der abgebildeten Form vier Steckplätze), um eine Datenspeichereinheit aufzunehmen wie beispielsweise ein Plattenlaufwerk für Magnet- oder Bildplatten, eine Magnetband-Sicherungseinheit o. ä. Wie die Abbildung zeigt, werden ein Paar oberer Steckplätze 26, 28 und ein Paar unterer Steckplätze 29, 30 bereitgestellt. Einer der oberen Steckplätze 26 ist ausgelegt, um periphere Laufwerke einer ersten Größe (beispielsweise 3¹/&sub2;-Zoll-Laufwerke) aufzunehmen, während der andere 28 ausgelegt ist, um Laufwerke in einer von zwei Größen (3¹/&sub2; Zoll und 5¹/&sub4; Zoll) aufzunehmen, und die unteren Steckplätze sind ausgelegt, um Einheiten in nur einer Größe (3¹/&sub2; Zoll) aufzunehmen. Ein Diskettenlaufwerk 27 in Fig. 1 ist eine herausnehmbare Direktzugriffsspeichereinheit, in das eine Diskette gesteckt wird, um darauf Daten einzulesen, zu speichern und von dieser auszulesen, wie dies im allgemeinen bekannt ist. Ein Magnetplattenlaufwerk 31 ist eine feste Direktzugriffsspeichereinheit, in der Daten gespeichert und aus der Daten ausgelesen werden, wie dies allgemein bekannt ist.
  • Bevor auf den obengenannten Aufbau der vorliegenden Erfindung Bezug genommen wird, verdient eine Zusammenfassung vom allgemeinen Betrieb des Personalcomputersystems 10 eine nähere Überprüfung. Es wird nun auf die Fig. 3A und 3B Bezug genommen, in denen ein Blockdiagramm von einem Personalcomputersystem abgebildet ist, das die verschiedenen Komponenten des Rechnersystems wie zum Beispiel das System 10 gemäß der vorliegenden Erfindung sowie Komponenten zeigt, die auf der Grundplatine 20 montiert sind und das die Verbindung der Grundplatine in den E/A-Steckplätzen und der übrigen Hardware des Personalcomputersystems zeigt. Mit der Grundplatine ist der Systemprozessor 40 verbunden, hier auch CPU 40 genannt, der aus einem Mikroprozessor besteht, der über eine Speichersteuereinheit 46 mit einem schnellen lokalen CPU- Bus 42 verbunden ist, wobei die Speichersteuereinheit außerdem mit einem flüchtigen Direktzugriffsspeicher (RAM) 53 verbünden ist. Die Speichersteuereinheit 46 besteht aus einem Speichersteuergerät 48 einem Adreß-Multiplexer 50 und einem Datenpuffer 52. Die Speichersteuereinheit 45 ist außerdem mit einem Direktzugriffsspeicher 53 verbunden, wie dies durch die vier RAM-Module 54 dargestellt ist. Das Speichersteuergerät 48 enthält die Logik, um Adressen im und aus dem Mikroprozessor 40 in bestimmten Bereichen des RAM 53 abzubilden. Diese Logik wird benutzt, um den zuvor von BIOS belegten RAM zu regenerieren. Das SpeicherSteuergerät 48 generiert außerdem ein ROM-Select-Signal (ROMSEL), das benutzt wird, um den ROM 88 entweder zu aktivieren oder zu deaktivieren. Obgleich jeder geeignete Mikroprozessor als Systemprozessor 40 benutzt werden kann, ist ein passender Mikroprozessor der 80486, der von INTEL verkauft wird. Der Intel 80486 hat einen internen Cache. Deshalb hat jede CPU 40, die ein Intel 80486 ist, einen CPU- Cache 41.
  • Obgleich die vorliegende Erfindung im folgendem mit besonderem Bezug auf das Systemblockdiagramm in den Fig. 3A und SB beschrieben ist, sollte es am Anfang der folgenden Beschreibung klar sein, daß Vorrichtung und Verfahren gemäß der vorliegenden Erfindung mit anderen Hardware- Konfigurationen der Grundplatine benutzt werden können. Der Systemprozessor 40 könnte ein Intel 80286 oder ein Mikroprozessor 80386 sein. Wenn hier auf einen 80286 oder 80386 oder 80486 Bezug genommen wird, so bedeutet dies ein Mikroprozessor wie er von Intel geliefert wird. In jüngster Zeit haben jedoch andere Hersteller Mikroprozessoren entwickelt, die den Befehlssatz der Intel X86 Architektur ausführen können und die Verwendung der angegebenen Ausdrücke dient dazu, einen Mikroprozessor in Erwägung zu ziehen, der diesen Befehlssatz ausführen kann. Wie der Fachmann, der sich mit den anwendbaren Techniken auskennt, weiß, wurden in den ersten Personalcomputern normalerweise der bekannte Intel 8088 oder 8086 Mikroprozessor als Systemprozessor einsetzt. Diese Prozessoren haben die Fähigkeit, einen 1MB-Speicher zu adressieren. In den neueren Personalcomputern werden normalerweise die schnellen Intel 80286, 80386 und 80486 Mikroprozessoren eingesetzt, die in einem virtuellen oder realen Modus arbeiten können, um den langsameren 8086 Mikroprozessor oder einen geschützten Modus, dessen Adressierbereich bei einigen Modellen von 1MB bis 4GB reicht.
  • Das Realmodusmerkmal der 80286, 80386 und 80486 Prozessoren bietet Hardware-Kompatibilität mit Software, die für 8086 und 8088 Mikroprozessor geschrieben wurde. Die Prozessoren der beschriebenen Intel-Familie werden häufig mit einer dreistelligen Referenznummer bezeichnet, wie beispielsweise "486" (die letzten drei Ziffern der Typenbezeichnung).
  • Es wird nun wieder Bezug auf die Fig. 3A und 3B genommen. Der lokale CPU-Bus 42 (enthält Daten-, Adreß- und Steuerkomponenten, die nicht abgebildet sind) verbindet den Mikroprozessor 40, einen mathematischen Coprozessor 44 (falls dieser nicht Teil der CPU 40 ist), ein Bildsteuersystem 56, ein System-Cachespeicher 60 und eine Cache-Steuereinheit 62. Mit dem Bildsteuersystem 56 ist ein Monitor (oder eine Datensichtstation (video display terminal)) 11 und ein Bildspeicher 58 verbunden. Mit dem lokalen CPU-Bus 42 ist ebenfalls ein Puffer 64 verbunden. Der Puffer 64 ist seinerseits mit einem langsameren (im Vergleich mit dem lokalen CPU-Bus 42) Systembus 66 verbunden, der ebenfalls Adreß-, Daten- und Steuerkomponenten enthält. Der Systembus 66 erstreckt sich zwischen dem Puffer 64 und einem weiteren Puffer 68. Der Systembus 66 ist außerdem mit einer Bussteuer- und Bus-Timing-Einheit 70 und einer DMA-Einheit 71 verbunden. Die DMA-Einheit 71 enthält einen zentralen Busverwalter 82 und ein DMA-Steuersystem 72. Ein zusätzlicher Puffer 74 stellt eine Schnittstelle zwischen dem Systembus 66 und dem optionalen Bus, zum Beispiel dem Industry-Standard- Architecture-Bus (ISA) 76, bereit. Mit dem Bus 76 ist eine Vielzahl von E/A-Steckplätzen 78 zur Aufnahme von ISA- Adapterkarten (ohne Abbildung) verbunden. Die ISA- Adapterkarten stecken in den E/A-Steckplätzen 78 und können zusätzliche E/A-Geräte oder Speicher für das System 10 bereitstellen.
  • Ein Ausgleichssteuerbus (arbitration control bus) 80 verbindet das DMA-Steuersystem 72 und den zentralen Busverwalter 82 mit den E/A-Steckplätzen 78, einem Diskettenadapter 84 und einem Festplattensteuerwerk (fixed disk controller) mit Integrated Drive Eleotronics (IDE) 86.
  • Obgleich das Mikrocomputersystem 10 mit einem 4MB-Basis-RAM- Modul 53 abgebildet ist, kann ein Zusatzspeicher - wie in den Fig. 3A und 3B dargestellt - mittels optionaler Speichermodule 54 mit höherer Dichte angeschlossen werden. Die vorliegende Erfindung ist nur zum Zweck der Abbildung mit Bezug auf das 4MB-Basisspeichermodul beschrieben.
  • Ein Latch-Puffer 68 sitzt zwischen Systembus 66 und planarem E/A-Bus 90. Der planare E/A-Bus 90 enthält jeweils Adreß-, Daten- und Steuerkomponenten. Entlang des planaren E/A-Busses 90 ist eine Vielzahl von E/A-Adaptern und sonstigen Komponenten angeschlossen wie beispielsweise der Diskettenadapter 84, das IDE-Festplattensteuerwerk 86, ein Unterbrechungssteuergerät 92, ein R5-232-Adapter 94, ein nichtflüchtiger CMOS-RAM 96, hier auch NVRAM genannt, eine CMOS-Realzeituhr (RTC) 98, ein paralleler Adpater, eine Vielzahl von Timer 102, der Festspeicher (ROM) 88, der 8042 104 und die Leistungssteuerlogik 106. Der 8042, der mit 104 gekennzeichnet ist, ist der Slave-Mikroprozessor, der mit der Tastatur 12 und der Maus 13 verbunden ist. Die Leistungssteuerlogik 106 steht mit der Stromversorgung 17, dem Netzschalter 21, der Power/Feedback-LED 23 und einem internen Modem 900 bzw. einem externen Modem 902 in Schaltkreiskommunikation. Das externe Modem ist normalerweise mit einem Transformator 904 verbunden, der an eine typische Wandsteckdose, wie sie dem Fachmann bekannt ist, angeschlossen ist. Die Modems 900, 902 sind an eine typische Telefonsteckdose angeschlossen. Die Leistungssteuerlogik 106 ist in Fig. 6A und Fig. 6B abgebildet und ist ausführlicher in den Fig. 6A, 6B, 6C und 7, die den Text begleiten, beschrieben. Der Festspeicher 88 enthält das BIOS, das als Verbindung zwischen den E/A-Einheiten und dem Betriebssystem des Mikroprozessors 40 dient. Das im ROM 88 gespeicherte BIOS kann in den RAM 53 kopiert werden, um die Ausführungszeit des BIOS zu verringern. Der ROM 88 spricht außerdem (über das ROMSEL-Signal) auf das SpeicherSteuergerät 48 an. Wenn der ROM 88 vom SpeicherSteuergerät 48 aktiviert wird, wird das BIOS nicht vom ROM ausgeführt. Wenn der ROM 88 vom SpeicherSteuergerät 48 deaktiviert wird, reagiert der ROM nicht auf die Adreßanfragen vom Mikroprozessor 40 (d.h. BIOS wird außerhalb des RAM ausgeführt)
  • Die Realzeituhr 98 wird für Tageszeitberechnungen benutzt, und der NVRAM 96 wird zur Speicherung von Systemkonfigurationsdaten benutzt. Das heißt, der NVRAM 96 enthält Werte, die die gegenwartige Systemkonfiguration beschreiben. Der NVRAM 96 enthält beispielsweise Angaben zur Kapazität einer Festplatte oder Diskette, zur Anzeigeart, zur Speichermenge, zur Uhrzeit, zum Datum usw. Diese Daten werden außerdem jedesmal, wenn ein spezielles Konfigurationsprogramm, wie beispielsweise SET-Konfiguration, ausgeführt wird, im NVRAM gespeichert. Der Zweck des SET-Konfigurationsprogramms ist es, Werte, die die Systemkonfiguration kennzeichnen, im NVRAM zu speichern.
  • Fast alle der obengenannten Einheiten enthälten flüchtige Register. Um ein unnötiges Durcheinander in den Zeichnungen zu vermeiden, werden die zu einer bestimmten Einheit gehörenden Register im Text der zugehörigen Einheit hinten angestellt. So werden beispielsweise die CPU-Register als Register der CPU 40 und die Bildsteuersystemregister als Register des Bildsteuersystems 56 bezeichnet.
  • Wie oben erwähnt, hat der Rechner ein Gehäuse, das im allgemeinen mit 15 bezeichnet wird, das zusammen mit dem Rahmen 19 eine geschlossene, geschirmte Einheit bildet, in der die obengenannten Komponenten des Mikrocomputers untergebracht sind. Das Gehäuse 15 besteht vorzugsweise aus einer dekorativen äußeren Abdeckung 16, die aus einem Stück geformt wurde und aus einem formbaren synthetischen Material und einem Metalleinsatz 18 besteht, damit die Konfiguration der dekorativen Abdeckung erfüllt wird. Die Abdeckung kann jedoch auf eine andere bekannte Art und Weise hergestellt werden, und die Nutzung dieser Erfindung ist nicht auf Gehäuse des beschriebenen Typs begrenzt.
  • Betriebsstatus
  • Es wird nun auf Fig. 4 Bezug genommen, in der ein Statusdiagramm von einem Rechnersystem gemäß der vorliegenden Erfindung abgebildet ist. Das Rechnersystem 10 der vorliegenden Erfindung hat vier Status: einen normalen Betriebsstatus 150, einen Standby-Status 152, einen · Haltestatus 154 und einen Off-Status 156. Die Übergänge zwischen den Status, die in Fig. 4 abgebildet sind, dienen als bevorzugtes Ausführungsbeispiel, sind aber nicht darauf begrenzt. Demzufolge können alternativ zusätzliche Vorgänge benutzt werden, um die Statusübergänge zu veranlassen. Der normale Betriebsstatus 150 des Rechnersystems 10 nach der vorliegenden Erfindung ist praktisch identisch mit dem normalen Status eines normalen Tischcomputers. Benutzer können Anwendungen nutzen und den Rechner grundsätzlich wie jeden anderen behandeln. Wie der Benutzer erkennen kann, unterscheidet er sich lediglich durch den Leistungssteuertreiber im Betriebssystem (der "APM OS Treiber"), der im Hintergrund läuft und die verschiedenen APM BIOS Routinen. Die APM BIOS Routinen werden im folgenden erörtert und enthälten die Suspend-Routine, die Resume- Routine, die Boot-Up-Routine, die Supervisor-Routine, die Save-CPU-State-Routine und die Restore-CPU-State-Routine. Eine APM BIOS Routine, die in keiner der Figuren abgebildet ist, ist die APM BIOS Routing-Routine. Die APM BIOS Routing-Routine nimmt grundsätzlich Befehle vom APM OS Treiber an und ruft die entsprechende APM BIOS Routine auf. Wenn beispielsweise der APM OS Treiber den Haltebefehl ausgibt, ruft die APM BIOS Routing-Routine die Suspend-Routine auf. Als weiteres Beispiel ist zu nennen: Jedesmal, wenn der APM OS Treiber den Get- Event-Befehl ausgibt, ruft die APM BIOS Routing-Routine die Supervisor-Routine auf. Diese Routinen residieren im BIOS und werden übertragen, wenn das BIOS übertragen wird. Der Leistungssteuertreiber im OS und die APM BIOS Routinen steuern die Rechnerübergänge zwischen den vier Status. Wird auf das Wort "APM" Bezug genommen, so ist im allgemeinen der APM OS Treiber gemeint, obwohl der Kontext möglicherweise etwas anderes meint.
  • Im zweiten Status, dem Standby-Status 152, wird weniger Strom als im normalen Betriebsstatus 150 verbraucht, wobei jedoch nach wie vor Anwendungen ausgeführt werden können, wie sie üblicherweise ausgeführt werden. Im allgemeinen bleibt die Leistung im Standby-Status 152 erhalten, indem die Geräte in ihre jeweiligen Kleinleistungsmodi gesetzt werden. Im bevorzugten Ausführungsbeispiel bleibt die Leistung im Standby-Status 152 erhalten, indem die Umdrehungen der Festplatte (ohne Abbildung) innerhalb des Magnetplattenlaufwerks 31 sowie die Generierung des Bildsignals eingestellt werden und die CPU in einen Kleinleistungsmodus gesetzt wird, was im folgenden noch ausführlicher erklärt werden wird. Der vorbeschriebene Ablauf gilt nicht als Beschränkung, und andere Verfahren können zur Senkung des Stromverbrauchs eingesetzt werden wie beispielsweise das Herunterfahren oder Abschalten der CPU-Uhr.
  • In dem bevorzugten Ausführungsbeispiel wird der Strom auf drei unterschiedliche Arten eingespart. Erstens: Im normalen Betriebsstatus 150 dreht sich die Festplatte im Magnetplattenlaufwerk 31 dauernd mit beispielsweise 3600, 4500 oder 5400 Umdrehungen pro Minute (min&supmin;¹). Im Standby-Status 152 gibt das IDE-Festplattensteuerwerk 86 den Befehl, um das Magnetplattenlaufwerk 31 zu veranlassen, in einen Kleinleistungsmodus überzugehen (die Festplatte im Magnetplattenlaufwerk 31 hört auf, sich zu drehen), wobei der Strom, den der Motor (ohne Abbildung) im Magnetplattenlaufwerk 31 normalerweise verbraucht, eingespart wird, wahrend sich die Festplatte dreht.
  • Zweitens: Im normalen Betriebsstatus 150 generiert das Bildsteuersystem 56 des Rechnersystems ständig ein Bildsignal (HSYNC, VSYNC, R, G, B usw. wie dies im Stand der Technik bekannt ist), das dem auf der Datensichtstation 11 angezeigte Bild entspricht. Im Standby-Status 152 unterbricht das Bildsteuersystem 56 die Generierung des Bildsignals und spart so den Strom ein, der normalerweise von dem Bildsteuersystem 56 verbraucht wird. HSYNC, VSYNC, R, G und B werden alle mit etwa 0,00 VDC getriggert. Wird ein VESA-konformer (Video Electronics Standards Association) Monitor benutzt, können weitere Energieeinsparungen erzielt werden, weil VESA-konforme Monitore sich selbst ausschalten, wenn HSYNC und VSYNC bei ca. 0,00 VDC liegen.
  • Drittens: Im normalen Betriebsstatus 150 führt die CPU 40 standig Befehle aus und verbraucht somit Strom. Im Standby- Status 152 gibt BIOS einen HALT-Befehl als Reaktion auf den APM-CPU-Idle-Call aus. Durch die Ausführung eines HALT-Befehls wird der Stromverbrauch der CPU deutlich reduziert, bis die nächste Hardware-Unterbrechung auftritt. Im tatsächlichen Ruhezustand kann die CPU länger als 90% der Zeit verbleiben.
  • Es ist zu beachten, daß einige Systeme "Bildschirmschoner" haben, die dafür sorgen, daß der Bildschirm 11 dunkel wird, um Phosphoreinbrennungen auf der Oberfläche der Datensichtstation zu verhindern. In den meisten dieser Systeme generiert das Bildsteuersystem 56 immer noch ein Bildsignal; es generiert lediglich ein Bildsignal, das einem dunklen Bildschirm oder einem dynamischen Display entspricht. Somit verbraucht ein Rechnersystem, das einen Bildschirmschoner ausführt, den für die Generierung des Bildsignals erforderlichen Strom.
  • Der dritte Status ist der Haltestatus 154. Im Haltestatus 154 verbraucht das Rechnersystem eine extrem kleine Menge Strom Der Rechner im Haltestatus verbraucht weniger als 100 MW Strom im bevorzugten Ausführungsbeispiel. Der einzige Strom, der verbraucht wird, liegt bei ca. 5 W, die ihre Ursache in den Unzulänglichkeiten in der Stromversorgung 17 und in der kleinen Menge haben, die die Leistungssteuerlogik 106 abzieht.
  • Dieser geringe Stromverbrauch wird erreicht, indem der Status des Rechnersystems im Magnetplattenlaufwerk (Festplatte) 31 gespeichert wird, bevor die Stromversorgung ausgeschaltet wird. Um in den Haltestatus 154 überzugehen, unterbricht die CPU einige Anwendung und überträgt die Programmausführungssteuerung der CPU an den Leistungssteuertreiber. Der Leistungssteuertreiber stellt den Status des Rechnersystems 10 fest, und speichert den kompletten Status des Rechnersystems auf dem Magnetplattenlaufwerk 31. Die Status der Register der CPU 40, des CPU-Cache 41, des System-RAM 53, des System-Cache 60, der Register des Bildsteuersystems 56, des Bildspeichers 56 und der verbleibenden flüchtigen Register werden alle im Magnetplattenlaufwerk 31 gespeichert. Der komplette Status des Systems 10 wird so gespeichert, daß er ohne signifikante Nutzbarkeitseinschränkungen wiederhergestellt werden kann. Das heißt, daß der Benutzer nicht auf das System warten muß, um das Betriebssystem zu laden, die graphische Benutzeroberfläche zu laden und die Anwendungsprogramme zu laden, wie er dies normalerweise tun wurde.
  • Der Rechner speichert dann die Daten, aus denen hervorgeht, daß das System im Haltestatus ist, im nichtflüchtigen CMOS- Speicher 96. Schließlich gibt die CPU 40 an den Microcontroller U2 den Befehl aus, mit dem er die Stromversorgung 17 veranlaßt, die Versorgung mit geregeltem Strom über die ±5 VDC und ±12 VDC Leitungen einzustellen. Das Rechnersystem 10 wird nun heruntergefahren, wobei der komplette Status des Computers sicher im Magnetplattenlaufwerk 31 gespeichert ist.
  • Der Begriff "Status" wird in der vorliegenden Unterlage auf zwei ähnliche, aber möglicherweise verwirrende Arten benutzt. Einheiten können "in" einem bestimmten Status sein. Die vier Systemstatus - normaler Betriebsstatus 150, Standby-Status 152, Haltestatus 154 und Off-Status 156 - beziehen sich auf den allgemeinen Status des Rechnersystems 10 gemäß der vorliegenden Erfindung. Diese "Status" beschreiben das Rechnersystem 10 auf eine allgemeine Art und Weise. Wahrend die CPU 40 im normalen Betriebsstatus ist, fuhrt sie beispielsweise noch den Code aus und ändert eine Vielzahl von Registern im System 10. Ähnliche Aktivitaten treten ebenfalls im Standby-Status 152 auf. Somit ist die Speicher- und Registerkonfiguration des Rechnersystems 10 dynamisch, wahrend sich das System 10 im normalen Betriebsstatus 150 und dem Standby-Status 152 befindet.
  • Andere Einheiten können auch "in" bestimmten Status sein. Die Leistungssteuerlogik 106 benutzt vorzugsweise einen zweiten Prozessor als Leistungssteuerprozessor, beispielsweise einen Microcontroller U2, der in Fig. 6A abgebildet ist, um die verschiedenen Leistungssteuermerkmale zu implementieren. Viele dieser Prozessoren sind geeignet. In diesem speziellen Ausführungsbeispiel ist der Leistungssteuerprozessor ein vorprogrammierter 83C750 Microcontroller. Die Variablen und Pins des Microcontroller U2 können in verschiedenen Status sein, wie dies im Text zu Fig. 6A erklärt werden wird.
  • Das Vorstehende wird mit dem "Status von" einer Einheit verglichen, beispielsweise dem "Status des Rechnersystems 10" oder dem "Status der CPU 40". Der "Status von" einer Einheit bezieht sich auf den Zustand von dieser Einheit während eines bestimmten Computerzyklus. Alle Speicherstellen und Register haben bestimmte binäre Werte. Der "Status von" einer Einheit ist ein statischer binärer Schnappschuß von den Inhalten dieser Einheit.
  • Der "Status von" dem Rechnersystem 10 bezieht sich auf äquivalente Operationen und nicht notwendigerweise auf genaue Kopien. Ein Rechnersystem in einem Status A kann beispielsweise einen bestimmten Speicher entweder im CPU-Cache 41 oder System-Cache 60 haben. Es ist möglich, die Inhalte von jedem Cache zurück in den System-RAM 53 zu "leeren" (flush), der das Rechnersystem in einen Status B setzt. Das heißt, der Status des Rechnersystems im Status A ist anders als der Status des Rechnersystems im Status B, da die Inhalte von Cache und System-RAM unterschiedlich sind. Seitens der Software sind jedoch Status A und Status B derselbe, da - abgesehen von einer leichten Abnahme der Systemgeschwindigkeit (die durch das Programm verursacht wird, das nicht den Vorteil hat, vom Cache ausgeführt zu werden) - die Ausführungsprogramme nicht beeinflußt werden. Das heißt, ein Rechner im Status A und ein Rechner im Status B sind vom Betrieb der Software her gesehen äquivalent, obwohl der Rechner, dessen Cache geleert wird, eine leichte Abnahme in der Leistung erfährt, bis die Cache-Bereiche mit dem hilfreichen Code neu geladen sind.
  • Der Begriff "Leistung" wird auch auf zwei ähnliche, aber möglicherweise verwirrende Arten benutzt. "Leistung" bezieht sich meistens auf Strom. "Leistung" bezieht sich jedoch auch gelegentlich auf Rechnerleistung. Der Kontext sollte jedoch die beabsichtigte Verwendung verdeutlichen.
  • Ein "Schaltkreis" bezieht sich im allgemeinen auf eine physische elektronische Einheit oder eine Vielzahl von Einheiten, die elektrisch miteinander verbunden sind. Der Begriff "Schaltkreis" bezieht sich jedoch auch auf den CPU- Code als Äquivalent zu den physischen elektronischen Einheiten. Einerseits kann beispielsweise ein NAND-Gate mit zwei Eingängen über eine 74LS00 oder äquivalent in einer programmierbaren Einheit implementiert werden. Diese beiden Einheiten sind physische elektronische Einheiten. Ansonsten kann ein NAND-Gate auch implementiert werden, indem die CPU 40 zwei Eingänge aus zwei CPU-lesbaren Eingangs-Ports ausliest, das NAND-Ergebnis mittels eines CPU-Befehls generiert, und das Ergebnis über einen CPU-schreibbaren Ausgangs-Port ausgibt. Diese CPU-koppelbaren Ports können einfach sein, zum Beispiel decodierte Latches oder ihre programmierbare Einheit, sie können äquivalent oder komplex sein wie beispielsweise PIAs, die im Stand der Technik bekannt sind. Der Begriff "Schaltkreis" ist so angelegt, daß er alle drei Beispiele der obenerwähnten NAND-Gate-Implementierungen abdecken kann. In einigen Fällen kann sich der Begriff "Schaltkreis" auch nur auf einen Strompfad beziehen. Die Strompfadausführungen enthälten einen Leiter, eine Spur oder ein Verbindungsloch auf einer gedruckten Leiterplatte usw. oder eine Kombination von elektrischen Strompfadausführungen, die einen einzelnen, elektrisch angeschlossenen Pfad bilden.
  • Ein "Signal" kann sich auf eine einzelne elektrische Wellenform oder eine Vielzahl von Wellenformen beziehen. Das Bildsteuersystem generiert beispielsweise ein Bildsignal. Das Bildsignal besteht normalerweise aus einer Vielzahl von Signalen in einer Vielzahl von elektrischen Leitern: HYSNC, VSYNC, R, G, B usw. wie im Stand der Technik bekannt ist.
  • Es wird nun wieder auf Fig. 4 Bezug genommen. Der vierte und letzte Status ist der Off-Status 156. Der Off-Status 156 ist praktisch identisch mit dem Status eines normalen Rechnersystems, das wie üblich ausgeschaltet wurde. In diesem Status stellt die Primär-/Regeleinheit 172 der Stromversorgung 17 die Versorgung des Rechnersystems 10 mit geregeltem Strom ein (ausgenommen eine kleine Menge von geregeltem Strom durch AUX5, was im Text von Fig. 5 noch detaillierter erklärt werden wird), speichert den Status des Rechnersystems 10 jedoch nicht im Magnetplattenlaufwerk 31. Der Haltestatus 156 und der Off-Status ähneln sich darin, daß die Stromversorgung 17 nicht länger geregelten Strom erzeugt. Sie unterscheiden sich dadurch, daß im Off-Status 156, anders als im Haltestatus 154, der Status des Rechnersystems 10 nicht im Magnetplattenlaufwerk 31 gespeichert wird. Außerdem wird beim Verlassen des Off-Status 156 der Rechner 10 wie beim Einschalten "gebootet". Das heißt, ein Ausführungscode muß entweder vom Benutzer oder automatisch - zum Beispiel mittels der AUTOEXEC. BAT Datei - gestartet werden. Wenn jedoch der Haltestatus 154 verlassen wird, nimmt der Rechner 10 die Ausführung an der Stelle wieder auf, an der er unterbrochen wurde.
  • Fig. 4 zeigt auch eine allgemeinen Überblick über die Ereignisse, die die Übergänge zwischen den vier Status veranlassen. Diese Ereignisse werden außerdem im Text zu den Fig. 6 bis 8 detaillierter beschrieben. Eine flüchtige Erklärung kann jedoch hilfreich sein. Der Netzschalter 21, zwei Timer (Hinweise zum Inaktivitäts-Standby-Timer und zum Inaktivitäts-Halte-Timer finden Sie in Fig. 9 und dem zugehörigen Text) und ein Suspend-Enable-Flag (nähere Hinweise finden Sie in den Fig. 6A und 7 und dem zugehörigen Text) sind alle dafür verantwortlich, in welchen Status der Computer übergeht. Die beiden Timer können im allgemeinen entweder Hardware- oder CPU-Code-Timer sein, die in der CPU als ein Programm ausgeführt werden. In dem bevorzugten Ausführungsbeispiel sind es CPU-Code-Timer, die von BIOS- Datensegmenten ausgeführt werden. Die beiden Timer könnten jedoch auch Hardware-Timer sein, die im Hinblick auf eine Reduzierung der Systemverwaltungszeit eventuell die bessere Lösung sind. Die Timer werden detaillierter in dem zu Fig. 9 gehörenden Text erklärt. Beide Timer sind aktiv, wenn sich der Rechner 10 entweder im normalen Betriebsstatus 150 oder im Standby-Status 152 befindet. Die Timer kommunizieren mit den anderen Routinen, so daß der Ablauf von jedem Timer einen Übergang veranlaßt, wie dies nachstehend ausgeführt wird. Jeder oder beide Timer können so konfiguriert werden, daß sie nach einer bestimmten Zeit ablaufen, was von dem jeweiligen Bedarf des Benutzers abhängt. Im bevorzugten Ausführungsbeispiel können der Inaktivitäts-Standby-Timer und der Inaktivitäts-Halte-Timer so eingestellt werden, daß sie zwischen 10 und 90 Minuten ablaufen. Jeder oder beide Timer können gestoppt werden, das heißt, so konfiguriert werden, daß sie niemals ablaufen. Das "Stoppen" der Timer kann so aussehen, daß das Aufwärtszählen der Timer eingestellt wird oder einfach ignoriert wird, wenn sie abgelaufen sind. Im bevorzugten Ausführungsbeispiel wird, wenn als Timerablaufwert ein Nullwert eingestellt wird, veranlaßt, daß der Timerablauf nicht zu prüfen ist. Der Benutzer eines Netzwerkcomputers wünscht beispielsweise nicht, daß der Rechner in den Haltestatus 154 übergeht, da dadurch das LAN in bezug auf diesen Rechner ausfallen kann.
  • In der Theorie können die Timer auf- oder abwärtszählen und können in einen festen zuvor bestimmten Status zurückgesetzt werden und erwartungsgemäß in einem anderen festen, zuvor bestimmten Status zählen, wenn der Timer gestartet wird (oder wieder gestartet wird), oder der gegenwärtige Wert kann benutzt werden, um eine Differenz oder Summe als Endpunktablauftrigger (endpoint expiration trigger) zu kalkulieren. Im bevorzugten Ausführungsbeispiel wird, wenn die Timer zurückgesetzt werden, der gegenwärtige Wert der Minutenvariablen von der Realzeituhr 98 gespeichert. Die Timer werden auf Ablauf geprüft, indem der aktuelle Minutenwert von dem gespeicherten Minutenwert subtrahiert und die Differenz mit den vom Benutzer ausgewählten Werten verglichen wird.
  • Beide Timer werden von bestimmten Systemaktivitäten beeinflußt. Im bevorzugten Ausführungsbeispiel kann die Aktivität des Benutzers das Drücken der Tasten auf der Tastatur 12 sein, das Verschieben der Maus 13 sein, das Drücken der Tasten von der Maus 13 sein, oder die Aktivität des Magnetplattenlaufwerks 31 veranlaßt den Neustart von jedem Timer, was im Text zu Fig. 9 detaillierter erklärt werden wird. Deshalb wird, während ein Benutzer die Tasten auf der Tastatur 12 drückt oder die Maus 13 benutzt oder während eine Anwendung auf das Magnetplattenlaufwerk 31 zugreift, keiner der Timer ablaufen. Außerdem könnten andere Systemereignisse benutzt werden, um die Timer zurückzusetzen. Eine der Hardware-Unterbrechungen könnte alternativ auf Aktivitäten hin überwacht werden. Deshalb wäre es wünschenswert, Druckzugriff (IRQ5 oder IRQ7) oder einen COMM-Port-Zugriff (IRQ2 oder IRQ3) zu haben, um das System am Übergang in den Haltestatus 154 zu hindern.
  • Der Suspend-Enable-Flag ist ein CPU-manipulierbarer und CPUlesbarer Latch im Microcontroller U2, der ausführlicher im Text zu Fig. 6A erklärt werden wird. Wird der Microcontroller U2 in einen Modus gesetzt, wird durch Drücken des Schalters 21 das System 10 in den Off-Status gesetzt. Wird der Microcontroller U2 in einen anderen Modus gesetzt, wird durch Drücken des Schalters 21 das System 10 in den Haltestatus 154 gesetzt. Befindet sich das Rechnersystem 10 im normalen Betriebsstatus 150, und der Netzschalter 21 wird gedrückt, während das im Microcontroller U2 gespeicherte Suspend-Enable- Flag gelöscht (CLEARed) wird, geht das Rechnersystem 10 in den Off-Status 156 über, (siehe 158). Befindet sich das Rechnersystem 10 im Off-Status 156, und der Netzschalter 21 wird gedrückt, geht das Rechnersystem in den normalen Betriebsstatus 150 über (siehe 160). Außerdem können verschiedene "externe Ereignisse", die im folgenden detaillierter erklärt werden, das System veranlassen, vom Off- Status 156 in den normalen Betriebsstatus 150 überzugehen.
  • Wenn sich das Rechnersystem 10 im normalen Betriebsstatus 150 befindet, kann ein Ereignis den Rechner veranlassen, in den Standby-Status überzugehen: Wenn der Inaktivitäts-Standby- Timer abläuft, geht das Rechnersystem 10 in den Standby-Status 152 über (siehe 162). Als Alternative kann das System für den Benutzer ein Mittel bereitstellen, beispielsweise ein Dialogfeld, einen Schalter oder ein anderes Eingabegerät, mit dem er das System sofort in den Standby-Status zwingt. Während des Standby-Status 152 wird eine System- oder Benutzeraktivität der zuvor beschriebenen Art, einschließlich der Betätigung des Netzschalters 21 durch den Benutzer, den Rechner 10 veranlassen, den Standby-Status 152 zu verlassen und in den normalen Betriebsstatus 150 zurückzukehren (siehe 164).
  • Durch Drücken des Netzschalters 21 wird das System veranlaßt, vom Standby-Status 152 in den normalen Betriebsstatus 150 überzugehen, um den Benutzer nicht zu verwirren. Wie oben erwähnt, ist die Datensichtstation 11 während des Standby- Status unsichtbar, und die Power/Feedback-LED 23 ist entweder an oder blinkt, was von der Konfiguration der Flags im Microcontroller U2 abhängt. Ein Benutzer, der sich dem System nähert, wird bemerken, daß die Datensichtstation 11 unsichtbar ist, und drückt, da er annimmt, daß sich das System im Haltestatus 154 oder Off-Status 156 befindet, den Netzschalter, um dadurch das System zu veranlassen, in den normalen Betriebsstatus 150 überzugehen. Wenn durch Drücken des Netzschalters 21 das System veranlaßt wird, entweder in den Haltestatus 154 oder den Off-Status überzugehen, dann hat der obenerwähnte Benutzer den Rechner entweder in den Off- oder Haltestatus geschaltet, was direkt entgegen der Absicht des Benutzers ist. Im Standby-Status 152 wird durch Drücken des Netzschalters 21 das System veranlaßt, vom Standby-Status in den normalen Betriebsstatus überzugehen. Sogar im Ruhezustand wird die CPU 40 bald prüfen, ob der Schalter gedrückt wurde. Hardware-Unterbrechungen sorgen dafür, daß die CPU 40 den Ruhezustand etwa 20mal pro Sekunde verläßt. Danach wird der Microcontroller U2 während des nächsten APM Get Event aufgefordert, festzustellen, ob der Schalter 21 gedrückt wurde.
  • Wenn der Rechner 10 im normalen Betriebsstatus 150 ist, kann er durch zwei Ereignisse veranlaßt werden, in den Haltestatus 154 überzugehen. Erstens: Wenn der Inaktivitäts-Halte-Timer abgelaufen ist, geht das Rechnersystem 100 in den Haltestatus 154 über (siehe 166). Zweitens: Der Benutzer kann den Rechner 10 veranlassen, sofort in den Haltestatus 154 überzugehen, indem er den Netzschalter drückt, während der im Microcontroller U2 gespeicherte Suspend-Enable-Flag gesetzt (SET) wird (siehe 166). Alternativ kann der APM-Treiber außerdem eine Halteanforderung über einen "Set Power State: Suspend" Befehl ausgeben, der den APM BIOS Treiber veranlaßt, die Suspend-Routine aufzurufen. Vom Haltestatus 154 wechselt der Benutzer durch Drücken des Netzschalters in den normalen Betriebsstatus 150 (siehe 168).
  • Außerdem können mehrere externe Ereignisse benutzt werden, um das System 10 vom Haltestatus 154 in den normalen Betriebsstatus 150 umzuschalten (siehe 168) oder vom Off- Status 156 in den normalen Betriebsstatus (siehe 160). Ein Telefonruferkennungskreis (telephone ring detect circuit) im Microcontroller U2 in der Logik von Fig. 6A ist so konfiguriert, daß das System 10 den Off-Status 156 oder den Haltestatus 154 verläßt und in den normalen Betriebsstatus 154 übergeht, wenn ein angeschlossenes Telefon läutet. Ein solches Merkmal ist für Systeme nützlich, die Telefaxdaten oder digitale Daten empfangen. Das System geht beim Läuten des Telefons in den normalen Betriebsstatus über, führt die voreingestellten Funktionen durch, beispielsweise Annahme einer eingehenden Faxübertragung, Herauf- oder Herunterladen von Dateien, Zulassung eines Fernzugriffs auf das System usw., und schaltet wieder in den Haltemodus, wenn der Inaktivitäts- Halte-Timer abgelaufen ist, und verbraucht nur Strom, während sich das System im normalen Betriebsstatus befindet.
  • Ebenso implementiert der Microcontroller U2 einen Minutes-to- Wake-Alarm-Zähler, der ein Alarmereignis ermöglicht, mit dem das System 10 veranlaßt wird, den Haltestatus 154 oder den Off-Status 156 zu verlassen und in den normalen Betriebsstatus 150 überzugehen. Ein solches System ist nützlich, um Faxnachrichten oder digitale Daten zu einer bestimmten Tageszeit zu senden, um von niedrigeren Telefongebühren zu profitieren und Systemwartungsfunktionen durchzuführen wie beispielsweise das Magnetplattenlaufwerk 31 des Systems auf einer Magnetband-Sicherungseinheit zu sichern. In letzterem Fall ist der Minutes-to-Wake-Alarm so eingestellt, daß der Rechner zu einem festgesetzten Zeitpunkt eingeschaltet wird, bevor der Zeitplaner (scheduler) die Ausführung des Magnetband-Sicherungsprogramms veranlaßt. Alternativ kann der APM BIOS Zeitplaner benutzt werden, um die Ausführung des Magnetband-Sicherungsprogramms zu veranlassen.
  • Wenn das Rechnersystem 10 im Standby-Status 152 ist, und der Inaktivitäts-Halte-Timer abläuft, dann wechselt der Rechner 10 schließlich in den Haltestatus 154 (siehe 170). Das Rechnersystem 10 kann nicht vom Haltestatus 154 in den Standby-Status 152 zurückschalten, sondern kann nur in den normalen Betriebsstatus 150 übergehen, wie dies im Text, in dem der Übergang 168 erklärt wird, beschrieben ist.
  • Offensichtlich kann das Rechnersystem 10 nicht sofort den Status ändern. Bei jedem Übergang von einem der vier Status ist eine bestimmte Zeitspanne erforderlich, um die notwendigen Systemänderungen durchzuführen. Die Einzelheiten von jeder Übergangsperiode sind im Text zu den Fig. 6 bis 15 erklärt.
  • System-Hardware
  • Bevor die Einzelheiten der Codeausführung in der CPU 40 beschrieben werden, kann es hilfreich sein, zuerst die Hardware zu erörtern, die notwendig ist, um die vier Status zu erreichen. In Fig. 5 ist ein Blockdiagramm von der Stromversorgung 17 abgebildet. Die Stromversorgung 17 besteht aus zwei Einheiten: einem Steuergerät 174 und eine Primär- /Reglereinheit 172. Die Stromversorgung 17 hat mehrere Eingänge: Line-In, die entweder 115 VAC oder 220 VAC von einer normalen Wandsteckdose aufnehmen kann, und ON#, der die Regelaktivität der Stromversorgung 17 steuert. Die Stromversorgung 17 hat mehrere Ausgänge: AC Line-Out, ±5 VDC, ±12 VDC, AUX5, GND und POWERGOOD. Die AC Line-Out hat 115 VAC, die normalerweise an den Netzeingang (ohne Abbildung) der Datensichtstation 11 angeschlossen werden. Das Steuergerät 174 nimmt den ON# Eingang auf und generiert den POWERGOOD Ausgang. Die Primar-/Reglereinheit 172 regelt selektiv die 115 VAC vom Line-In Eingang auf ±5 VDC, ±12 VDC herunter. Ob-die Primär- /Reglereinheit 172 den Strom in den ±5 VDC und ±12 VDC Leitungen regelt, hängt von dem Wert von ON# ab, da diese mit dem Steuergerät 174 verbunden ist. In dem bevorzugten Ausführungsbeispiel sollte das Steuergerät die Trennung für die Schaltlogik bereitstellen, die das ON# Signal beispielsweise mittels eines Optokopplers generiert.
  • Der Line-In Eingang und die AC Line-Out, ±5 VDC, ±12 VDC, GND und POWERGOOD Ausgänge sind im Stand der Technik bekannt. Wenn die Stromversorgung 17 "off" ist, das heißt, keine geregelten Spannungen vom Line-In bereitstellt, ist das POWERGOOD Signal eine logische NULL (ZERO). Wenn die Stromversorgung 17 "on" ist, generiert die Stromversorgung 17 die geregelten ±5 VDC und ±12 VDC Spannungen von dem 115 VAC Line-In. Diese vier geregelten Spannungen und ihre zugehörige GND (Erde) sind die "Systemleistung" wie dies im Stand der Technik allgemein bekannt ist. Wenn die geregelten Spannungen Pegel innerhalb annehmbarer Toleranzen erreichen, ändert sich das POWERGOOD Signal in eine logische EINS (ONE). Jedesmal, wenn eine der ±5 oder ±12 V Leitungen außerhalb der Toleranz liegt, wird das POWERGOOD Signal eine logische NULL (ZERO) und gibt so diesen Zustand an.
  • Der AUXS Ausgang stellt für die Grundplatine ±5 VDC eine Hilfsstromversorgung bereit. Wenn die Stromversorgung 17 in eine normale Wandsteckdose gesteckt wird, die eine Nennleistung von 115 VAC liefert, stellt die Primar- /Reglereinheit 172 geregelte +5 VDC an AUX5 bereit, und zwar unabhängig davon, ob die Stromversorgung "EIN" oder "AUS" geschaltet ist. Die Stromversorgung 17 stellt an AUX5, wahrend sie mit Wechselstrom versorgt wird, immer eine Nennleistung von ±5 VDC bereit. Der AUX5 Ausgang unterscheidet sich vom ±5 Ausgang dadurch, daß die Primar-/Reglereinheit 172 über den ±5 Ausgang nur geregelte 5 VDC erzeugt, wahrend die Stromversorgung "EIN" geschaltet ist. Der AUX5 Ausgang unterscheidet sich vom +5 Ausgang außerdem dadurch, daß die Primar-/Reglereinheit 172 im bevorzugten Ausführungsbeispiel mehrere Ampere Strom über den +5 Ausgang an +5 VDC liefert, während die Primar-/Reglereinheit 172 weniger als ein Ampere über den AUX5 Ausgang an +5 VDC liefert.
  • Typische Stromversorgungen aus dem Stand der Technik benutzen einen Schalter mit zwei Stellungen, der eine hohe Stromstarke hat, um den Line-In Eingang an den Regelbereich der Stromversorgung anzuschließen und abzuklemmen. Die Stromversorgung 17 in der vorliegenden Erfindung benutzt keinen solchen Schalter. Der Schalter 21 steuert vielmehr die Schaltlogik, die das ON# Signal generiert. Im bevorzugten Ausführungsbeispiel ist der Schalter 21 ein einpoliger Drucktaster mit einer Stellung. Der Fachmann konnte jedoch die Schaltlogik aus Fig. 6A anpassen, um andere Schalterausführungen, beispielsweise einen einpoligen Schalter mit zwei Stellungen, nutzen zu können. Der AC Line-In ist immer an die Primar-/Reglereinheit 172 von der Wandsteckdose angeschlossen. Wenn ON# eine logische EINS (ONE) ist (etwa AUX5, nominal +5 VDC), regelt die Primar-/Reglereinheit 172 den 115 VAC Line-In nicht über die ±5 VDC oder ±12 VDC Ausgänge auf ±5 VDC oder ±12 VDC. Die Primär-/Reglereinheit 172 liefert nur eine Nennleistung mit niedriger Stromstärke von +5 VDC am AUX5 Ausgang. Wenn andererseits ON# eine logische NULL (ZERO) (etwa GND) ist, regelt die Primär- /Reglereinheit 172 die 115 VAC Line-In über die vier ±5 bzw. die ±12 Ausgänge auf ±5 VDC und ±12 VDC. Somit ist, wenn ON# eine EINS ist, die Stromversorgung 17 "AUS" geschaltet, und wenn ON# eine NULL (ZERO) ist, dann ist die Stromversorgung 17 "EIN" geschaltet.
  • Wenn angegeben, können Stromversorgungen mit einem AUX5 Ausgang und einem ON# Eingang - wie die oben beschriebene Stromversorgung 17 - bei Lieferanten von konventionelleren Stromversorgungen bezogen werden.
  • Es wird nun auf Fig. 6A Bezug genommen (bestehend aus den Fig. 6A1, 6A2 und 6A3), in der eine schematische Darstellung von der elektronischen Schaltlogik des Rechnersystems 10 gemäß der Erfindung abgebildet ist. Die Schaltlogik in Fig. 6A ist für die Verbindung zwischen dem Schalter 21, der Power/Feedback-LED 23, der Stromversorgung 17, der Datensichtstation 11 und der Codeausführung in der CPU 40 verantwortlich.
  • Die Schaltlogik enthält vier (4) integrierte Schaltkreise - U1, einen ersten vorprogrammierten PAL16L8; U2, einen vorprogrammierten 83C750 Microcontroller; 83, einen 74LS05, der im Stand der Technik bekannt ist; und U4, einen zweiten vorprogrammierten PAL16L8 (ohne Abbildung) - und die verschiedenen diskreten Komponenten in Schaltkreiskommunikation, wie diese in Fig. 6A abgebildet sind. Die PALs U1 und U4 (ohne Abbildung) stellen die Verbindung zwischen dem planaren E/A-Bus 90 in den Fig. 3A und 3B und dem Microcontroller U2 dar, der mit der übrigen Schaltlogik von Fig. 6A verbunden ist, die mit dem Schalter 21, der Stromversorgung 17, der Datensichtstation 11 und einem programmierbaren Clock-Synthesizer 906 verbunden ist. Der Clock-Synthesizer 906 kann einer von vielen Einheiten sein, die dem Fachmann bekannt sind. Ein solches Teil ist der CH9055A, der von Chrontel hergestellt wird und über zahlreiche Quellen bezogen werden kann.
  • Die Schaltlogik von Fig. 6A enthält außerdem den Schalter 21, einen 16 MHz Quarz Y1, achtzehn Widerstände R1-R18, acht Kondensatoren C1-C8, drei MOSFETs Q1-Q3, Typ N, bei denen es sich um Standard-Schwachstrom NMOS FETs handelt, die im bevorzugten Ausführungsbeispiel als Logikschalter eingesetzt werden können, und sechs (6) 1N4148 kleine Signaldioden CR1- CR6, die alle entsprechend der Abbildung in Fig. 6A konfiguriert und angeschlossen sind. Die Widerstände R1-R18 sind x Watt-Widerstände und ihre Werte sind in Fig. 6A abgebildet (±5%). Der Kondensator C1 ist ein 10 uF (±10%) Elektrolytkondensator. Die Kondensatoren C2 & C3 sind 22 pF (± 10%) Tantalkondensatoren. Die Kondensatoren C&sub4;-C8 sind 0,1 uF (±10%) Keramikkondensatoren. Der Kondensator C9 schließlich ist ein 1000 pF (±10%) Keramikkondensator.
  • Der Quarz Y1 und die Kondensatoren C2 und C3 generieren Signale, die der Microcontroller U2 benutzt, um den Zeitablauf von Operationen zu steuern, wie im Stand der Technik bekannt ist. Die Dioden CR1 und CR3 und der Widerstand R14 trennen das AUX5 Signal vom VBAT Signal, da zur gleichen Zeit, wenn dem AUX5 Signal erlaubt wird, das VBAT Signal zu ergänzen, während die Stromversorgung 17 das AUX5 Signal generiert, die Batterie 171 nicht entleert wird. Das AUX5 Signal wird vielmehr durch die Dioden CR1 und CR3 abwärtstransformiert, um die an VBAT angeschlossenen Einheiten mit der richtigen Spannung zu versorgen. Alternativ wird die VBAT Leitung von der AUX5 Leitung getrennt.
  • Der zweite PAL U4 (ohne Abbildung) ist mit den Adreßleitungen SA(1) bis SA(15) und der AEN (address enable) Leitung verbunden. SA(1) bis SA(5) und AEN sind Teil des planaren E/A- Busses 90, der in den Fig. 3A und 3B abgebildet ist. Der zweite PAL U4 ist nur als Adreßdecoder programmiert, der eine aktives DCD# LS ausgibt, wenn eine zuvor bestimmte Adresse in den Adreßleitungen SA(1) bis SA(15) vorhanden ist, und die AEN (adress enable) Leitung aktiv ist. In diesem bestimmten Ausführungsbeispiel ist der zweite PAL U4 vorprogrammiert, um zwei aufeinanderfolgende 8-Bit E/A-Ports in den Adressen OECH und OEDH zu decodieren. Das DCD# Signal kann von einem anderen elektronischen Gerät generiert werden, wie zum Beispiel von einem Speichersteuerwerk oder einer ISA-Controller-Chipgruppe, wie diese dem Fachmann bekannt sind.
  • Der erste PAL U1 ist so programmiert, daß er mehrere Funktionen vorsieht: (i) eine Lese-/Schreibschnittstelle zwischen CPU und Microcontroller U2, um Befehle und Daten zwischen CPU 40 und Microcontroller U2 zu übertragen, (ii) einen logischen ORing von der Mausunterbrechung INT12 und der Tastaturunterbrechung INT1 und (iii) einen Reset-Ausgang, um den Microcontroller U2 als Reaktion auf die Befehle von der CPU 40 zurückzusetzen.
  • Der erste PAL U1 benutzt zwei aufeinanderfolgende E/A-Ports, hier auch "Leistungssteuerports" genannt. Der erst PAL U1 hat acht (8) Eingänge vom planaren E/A-Bus 90: SD(4), SD(0), SA(0), IOW#, IOR#, RST_DRV, IRQ1 und IRQ12. Der erste PAL U1 wird vom aktiven RST_DRV HS-Eingangssignal in Pin 7 (16), das von der Speichersteuereinheit 46 generiert wird, zurückgesetzt, wie dies dem Fachmann bekannt ist.
  • Eine Reset-Leitung RST751 vom Microcontroller U2 befindet sich bei Pin 9. Ein Reset-Unterkreis 920 generiert das RST751 Signal. Er enthält die vier Widerstände R4, R16, R17 und R18, die beiden Kondensatoren C1 und C8 und die beiden MOSFETS Q2 und Q3, die mit dem ersten PAL U1 und dem Microcontroller U2 (siehe Fig. 6A) in Schaltkreiskommunikation stehen. Der Reset-Unterkreis 920 verbindet das Reset-Ausgangssignal RESET vom ersten PAL U1 mit dem Reset-Eingangssignal RST751 des Microcontrollers U2, so daß, wenn die RESET-Leitung eine logische EINS (ONE) ist, die RST751 Leitung in eine logische EINS (ONE) gezogen wird und dadurch den Microcontroller U2 zurücksetzt.
  • Der erste PAL U1 setzt den Microcontroller U2 zurück, der anspricht, wenn die CPU 40 in Bit 0 des Steuerports OEDH eine logische EINS (ONE) schreibt. Wird in Bit 0 des Steuerports OEDH eine logische EINS (ONE) geschrieben, wird der erste PAL U1 veranlaßt, die RESET-Leitung in eine logische EINS (ONE) zu ziehen, die die RST751 Leitung in eine logische EINS (ONE) und dadurch den Microcontroller U2 zurücksetzt. Die CPU 40 löscht die Reset-Anforderung, indem sie in Bit 0 des Steuerports OEDH eine logische NULL (ZERO) schreibt.
  • Der Reset-Unterkreis zieht außerdem die R5T751-Leitung in eine logische EINS und setzt dadurch den Microcontroller U2 zurück, wenn die Spannung des AUX5-Signals um eine bestimmte Menge ansteigt, wie dies geschieht, wenn die AUX5 Spannung während eines "Spannungsabfalls" oder "Blackouts" der AC-Quelle in der Stromversorgung 17 abfällt (siehe Fig. 6C). Der Hersteller des 83C750, Philips, empfiehlt, einen einfachen RC-Kreis zu benutzen, um Reset-Probleme zu verhindern. Ein einfacher RC- Kreis bietet jedoch dem 83C750 die Möglichkeit, während eines Spannungsabfalls nach oben zu verriegeln. In der besonderen Konfiguration von Fig. 6A wird die RST751 Leitung für einen von R17 und C8 definierten Zeitraum in eine logische EINS (ONE) gezogen (wobei der Microcontroller U2 zurückgesetzt wird), wenn die AUX5 Spannung um einen Schwellwert in einem Zeitraum ansteigt, der größer als die von R4, R16 und C1 definierte Zeitkonstante ist. Dies würde nach einem typischen Spannungsabfall oder Blackout geschehen. Der Schwellwert liegt in dem in Fig. 6A abgebildeten Ausführungsbeispiel bei 1,5 VDC.
  • Es wird nun auf Fig. 6C Bezug genommen, in der die Wellenformen für den Reset-Kreis 920 für einen Zeitraum abgebildet sind, in dem AUX5 ansteigt, während die Stromversorgung 17 mit Wechselstrom versorgt wird und einen Zeitraum, in dem ein "Spannungsabfall" auftritt. Vor t0 wird die Stromversorgung AUX5 nicht generieren, VBAT liegt bei ca. 3,3 V, Q3 ist leitend und zieht die RST751 Leitung gegen Erde. Bei t0 beginnt die Stromversorgung, AUX5 zu generieren, und Spannung steigt mit einer Geschwindigkeit an, die auf der Last und den Kondensatoren in der Stromversorgung basieren, die AUX5 beeinflussen. Node1, der Knoten zwischen C1 und R4, ist kapazitiv mit AUX5 gekoppelt und steigt somit an, wenn AUX5 ansteigt.
  • Bei t1 erreicht Node1 etwa 1,5 V, ausreichend, um Q2 zu triggern und Node2 gegen Erde zu ziehen. Bei t2, während Node2 in 2,5 V übergeht, ist Q3 nicht mehr leitend und die RST751 Leitung springt über R18 zur Ebene von AUX5 und steigt mit AUX5 auf ca. 5 V. Sobald die RST751 Leitung etwa 3 V erreicht, wird der Microcontroller U2 zurückgesetzt.
  • Bei t3 steigt AUX5 nicht mehr weiter an. Node1 unterbricht den Anstieg und beginnt, sich mit einer von C1 und R4 definierten Geschwindigkeit gegen Erde zu entladen (die RESET-Leitung des ersten PAL U1 ist LOW (niedrig). Bei t4, während Node1 durch ca. 1,5 V strömt, ist Q2 nicht mehr leitend, und Node2 entlädt sich mit einer von C8 und R17 festgelegten Geschwindigkeit. Bei t5, während Node2 durch ca. 2,5 V strömt, ist Q3 leitend und zieht die RST751 Leitung gegen Erde. Der Reset bei Power- On ist abgeschlossen. Das System befindet sich üblicherweise im Status, in dem AUX5 bei 5 V liegt, VBAT bei 3,3 V und Node1 gegen Erde und Node2 in VBAT liegt.
  • Bei t6 beginnt ein Spannungsabfall in der AUXS Leitung und AUX5 entlädt sich. Node1, der kapazitiv mit AUXS gekoppelt ist, versucht AUX5 zu folgen, was er aber nicht kann, da die Dioden im ersten PAL U1 ihn daran hindern, tiefer als - 0,5 V zu gehen. Bei t7 ist AUX5 an seinem tiefsten Punkt angekommen und beginnt, wieder anzusteigen. Node1 folgt wieder AUX5 und steigt an. Bei t8 erreicht Node1 etwa 1,5 V, die ausreichend sind, um Q2 zu triggern, der Node2 gegen Erde zieht. Bei t9 geht Node2 auf 2,5 V über, Q3 ist nicht mehr leitend, und die R5T751 Leitung springt über R18 zur Ebene von AUX5 und steigt mit AUX5 auf etwa 5 V. Wenn die RST751 Leitung bei etwa 3 V liegt, wird der Microcontroller U2 zurückgesetzt.
  • Bei t10 steigt AUX5 nicht mehr an. Node1 steigt deshalb nicht mehr an und beginnt, sich mit einer Geschwindigkeit, die von C1 und R4 definiert wurde, gegen Erde zu entladen. Bei t11, wenn Node1 bei etwa 1,5 V liegt, ist Q2 nicht mehr leitend, und Node2 entlädt sich mit einer von C8 und R17 definierten Geschwindigkeit. Bei t12, wenn Node2 bei etwa 2,5 V liegt, ist Q3 leitend und zieht die R5T751 Leitung gegen Erde. Der aufgrund des Spannungsabfalls notwendig gewordene Reset-Zyklus ist hiermit abgeschlossen. Es ist zu beachten, daß während dieses besonderen Spannungsabfalls Node1 nicht über 3 V ansteigt, und deshalb den Microcontroller nicht zurücksetzen könnte, wenn er an den RST751 Pin angeschlossen ist. Die Spannung von AUX5 wird auf unter 4 V heruntergefahren, was ausreichend ist, damit der Microcontroller U2 in einen undefinierten Status übergeht. Der Schwellwert zum Triggern eines Resets ist vom Referenzwert abhängt. Deshalb muß der Referenzwert (in diesem Fall VBAT), um die Schwellenspannung zu erhöhen oder zu senken, erhöht bzw. gesenkt werden. Der Reset-Kreis bietet die Vorteile des verbesserten Reset- Schutzes für den Microcontroller U2, wobei er sehr preiswert ist und praktisch keinen Strom verbraucht, wenn er nicht den Microcontroller U2 zurücksetzen muß.
  • Es wird nun wieder Bezug auf Fig. 6A genommen. Der Microcontroller U2 ist über den PAL U1 mit der CPU 40 verbunden und hat eine Anzahl von Eingängen, Ausgängen und intern steuerbaren Funktionen.
  • Das SWITCH Signal geht bei Pin 8 (P0.0) ein und reflektiert den aktuellen Status des Netzschalters 21. Der Netzschalter 21 ist normalerweise offen. Wahrend der Netzschalter 21 offen ist, wird die SWITCH Leitung über den Widerstand R1 auf eine logische NULL (ZERO) (Erde) gezogen. Bei Betätigung des Netzschalters 21 wird ein Schließvorgang ausgelöst. Die SWITCH Leitung wird über den Widerstand R13 auf eine logische EINS (ONE) (AUXS) gezogen. Der Kondensator C6 dient dazu, den Schalterschließvorgang zu entprellen (debounce). Die Schließvorgange des Schalters 21 werden innerhalb des Microcontroller U2 weiter entprellt, indem der SWITCH eine zuvor bestimmte Anzahl von Malen gelesen wird, z.B. 50mal. Gleichzeitig wird sichergestellt, daß die SWITCH Leitung bei allen Auslesevorgängen dieselbe ist, wie dies dem Fachmann bekannt ist.
  • Die Regelung der Stromversorgung 17 ist direkt vom Microcontroller U2 aus steuerbar. Wie Fig. 6A zeigt, wird das ON-Signal am Pin 5 (P3.0) ausgegeben und wird über den Widerstand R6 mit dem SWITCH Signal "wire-ORed", um das ON# Signal der Stromversorgung zu steuern. Wenn das ON-Signal eine logische EINS (ONE) ist, ist das MOSFET Q1 leitend, wobei die ON# Leitung (Pin 2 von JP2) auf eine logische NULL (ZERO) (GND) gezogen wird und dadurch die Stromversorgung 17 zu veranlassen, das System über die ±5 VDC und ±12VDC mit geregeltem Strom zu versorgen. Wenn andererseits die ON- Leitung eine logische NULL (ZERO) ist, ist MOSFET Q1 nicht leitend, und somit wird die ON# Leitung (Pin 2 von JP2) vom Widerstand R7 auf eine logische EINS (ONE) (AUX5) gezogen, wobei die Stromversorgung 17 veranlaßt wird, die Versorgung mit geregeltem Strom über die ±5 VDC und ±12 VDC Leitungen einzustellen.
  • Der Status der ON-Leitung wird vom Microcontroller U2 gesteuert, der auf einen Schließvorgang des Schalters 21 und über ein beschreibbares Registerbit im Microcontroller U2, das von der CPU 40 geschrieben werden kann, auf die CPU 40 reagiert. Der Microcontroller U2 wird von AUX5 versorgt. Der Microcontroller U2 wird somit immer mit Strom versorgt, führt den Code aus und steuert das System. Wenn die Stromversorgung 17 das System nicht über die ±5 VDC und ±12 VDC Leitungen mit geregeltem Strom versorgt, und entweder (i) der Schalter 21 gedrückt ist oder (ii) eines der externen Ereignisse eingetreten ist, dann führt der Microcontroller U2 das ON- Signal aus und veranlaßt somit die Stromversorgung 17, das System über die ±5 VDC und ±12 VDC Leitungen mit geregeltem Strom zu versorgen. Der Microcontroller führt weiterhin das ON-Signal aus, nachdem der Schalter 21 losgelassen wurde.
  • Als Backup-System kann die Stromversorgung 17 auch unter der direkten Steuerung des Benutzers über den Schalter 21 eingeschaltet werden. Diese Option wird normalerweise nur benutzt, wenn der Microcontroller U2 nicht mehr wie erwartet funktioniert, was sich anhand des Systems feststellen läßt, das nach einem Druck des Schalters 21 nicht hochfährt. Wie Fig. 6A zeigt, steuert der Schalter 21 auch die ON# Leitung der Stromversorgung über die Diode CR2, den MOSFET Q1, den Widerstand R7 und den Stecker JP2. Der Schalter 21 ist normalerweise offen, und die SWITCH Leitung wird über R1 auf eine logische NULL (ZERO) gezogen, und MOSFET Q1 leitet nicht. Dadurch wird die ON# Leitung (Pin 2 von JP2) vom Widerstand R7 auf eine logische EINS (ONE) (AUX5) gezogen, und die Stromversorgung 17 liefert über die ±5 VDC und ±12 VDC Leitungen keinen geregelten Strom. Wenn der Schalter 21 vom Benutzer gedrückt und gehalten wird, wird die SWITCH Leitung auf eine logische EINS (ONE) gezogen, und MOSFET Q1 ist leitend und zieht somit die ON# Leitung (Pin 2 von JP2) auf eine logische NULL (ZERO) (GND), wobei die Stromversorgung 17 veranlaßt wird, über die ±5 VDC und ±12 VDC Leitungen geregelten Strom zu liefern. Wird der Schalter weiter gedrückt halten, nachdem das System eingeschaltet wurde, veranlaßt BIOS die CPU 40 zu prüfen, ob der Microcontroller U2 noch funktioniert. Andernfalls setzt die CPU 40 den Microcontroller U2 zurück, der, nachdem er zurückgesetzt wurde, erkennt, daß der Schalter 21 gedrückt wird. Demzufolge gibt der Microcontroller, wenn der Schalter 21 weiterhin gedrückt gehalten wird, das ON-Signal aus, und der Benutzer kann den Schalter 21 endlich loslassen, weil er weiß, daß der Microcontroller nun die Stromversorgung 17 steuert. Um diese Backup-Option zu nutzen, muß der Benutzer den Schalter einige Sekunden gedruckt halten, etwa zwei Sekunden lang, nachdem das Logo angezeigt wird.
  • Der Microcontroller U2 schaltet nur das System aus, wenn (i) entweder der Schalter 21 gedrückt wird, oder (ii) die CPU 40 den Microcontroller auffordert, das System auszuschalten. Für den Microcontroller sind diese Ereignisse dieselben, da der Microcontroller so konfiguriert ist, daß eine Schalterbetätigung entweder von einem Schließvorgang des - Schalters 21 oder von der CPU 40 ausgelöst werden kann. Das Drücken/Loslasen eines Hardware-Schalters wird praktisch auf dieselbe Art und Weise behandelt wie das Drücken/Loslassen eines Software-Schalters. Der Microcontroller U2 schaltet das System ohne einen Befehl von der CPU nur aus, wenn das Suspend-Enable-Flag im Microcontroller U2 gelöscht wird. In diesem Fall wird der Microcontroller U2, wenn das System eingeschaltet und das Suspend-Enable-Flag, das auf einen Schließvorgang des Schalters 21 reagiert, gelöscht (CLEARed) wird, das ON-Signal löschen und dadurch die Stromversorgung 17 veranlassen, die Versorgung des Systems mit geregeltem Strom über die ±5 VDC und ±12 VDC Leitungen einzustellen. Das ON- Signal bleibt gelöscht, nachdem der Schalter losgelassen wird.
  • Der Microcontroller U2 schaltet auch das System aus, das auf einen Befehl von der CPU reagiert, wie dieser ausgegeben wird, nachdem der Systemstatus erfolgreich auf dem Magnetplattenlaufwerk gespeichert wurde (im Wartestatus). Als Reaktion auf einen solchen Befehl löscht der Microcontroller U2 das ON-Signal und veranlaßt dadurch die Stromversorgung 17, das System über die ±5 VDC und ±12 VDC Leitungen nicht mehr mit geregeltem Strom zu versorgen.
  • Der Microcontroller U2 kann auch das Auftreten bestimmter externer Ereignisse erkennen und das System entsprechend beeinflussen. Das EXT_RING Signal geht bei Pin 7 (P0.1) ein und ermöglicht dem Microcontroller U2, einen Ring von dem mit Strom versorgten externen Modem 902 zu erkennen. Wie dem Fachmann bekannt ist, liefern normale externe Modems ein Ringsignal, das auf eine logische EINS (ONE) im bekannten RS- 232C-Format umschaltet, wenn ein Ringsignal in den Tip- und Ring-Telefonleitungen erkannt wird. Dieses Signal gelangt über die Diode CR6 in den Microcontroller U2 und wird auf die Widerstände R10 und R11 verteilt und schließlich über die EXT_RING Leitung in den Microcontroller U2 eingegeben. Das Umschaltsignal wird nach jeweils 25 ms vom Microcontroller U2 abgetastet und analysiert, der annimmt, daß ein Ring vorhanden ist, wenn dieser Eingang bei zwei aufeinanderfolgenden Abtastungen eine logische EINS (ONE) ist. Wenn auf diesen Zustand reagiert wird, führt der Microcontroller U2 das ON- Signal aus, und veranlaßt dadurch die Stromversorgung 17, das System über die ±5 VDC und ±12 VDC Leitungen mit geregeltem Strom zu versorgen. Damit das EXT_RING Signal einen eingehenden Telefonanruf erkennen kann, muß ein mit Strom versorgtes externes Modem 902 vorhanden sein.
  • Alternativ kann ein anderes Gerät, das ein binäres Signal entsprechend der R5-232-Spezifikation (oder nah genug ist, daß es das EXT_RING Signal ausführt) ausgibt, an die EXT_RING Leitung angeschlossen und benutzt werden, um das System "aufzuwecken" wie beispielsweise Bewegungssensoren, Einbruchalarmsensoren, sprachaktivierte Sensoren, Lichtsensoren, IR-Lichtsensoren, "Clapper"-Sensoren usw.
  • Wie die Fig. 6A und 6B zeigen, bietet das bevorzugte Ausführungsbeispiel auch die Möglichkeit, ein Telefon-Ring- Signal von einem internen Modem 900 mit einem, auf einem Optokoppler OPTO1 basierenden Ring-Erkennungskreis zu erkennen. Eine Reihe passender Optokoppler wird beispielsweise von Hewlett Packard hergestellt und können über eine Vielzahl von Einkaufsquellen bezogen werden. Das interne Modem 900 kann entweder Teil der Schaltlogik von der System-Grundplatine 20 sein oder in einen der Erweiterungsschlitze 78 gesteckt werden. In letzterem Fall muß das Modem 900 geändert werden, um einen Berg oder ähnlichen Stecker bereitzustellen, damit das Signal vom Optokoppler OPT01 elektrisch mit der Schaltlogik der Leistungssteuerung aus Fig. 6A verbunden werden kann. Viele Modemhersteller ändern ihre internen Modems, um einen Stecker bereitzustellen, der in der Schaltlogik gemäß der vorliegenden Erfindung genutzt werden kann. Das EXT_WAKEUP# Signal geht in Pin 4 (P0.2) des Microcontroller U2 ein, und dient dazu, ein Signal vom Ring- Erkennungs-Optokoppler OPT01 des internen Modems 900 einzugeben. Dieses Signal ist über die Widerstände R9 und R5, die Diode CR6 und den Kondensator C9 verbunden und geht schließlich über die EXT_WAKEUP# Leitung in den Microcontroller U2 ein.
  • Der Schwellwert- und Schutzteil 905 des internen Modems 900 wird mit den Standard-Tip- und Ring-Telefonleitungen verbunden und (i) bietet Schutz vor Blitzschlag und anderen elektrischen Ereignissen, durch die das Modem 900 beschädigt werden könnte und (ii) stellen die Ring-Schwellenspannung ein, wie dies den Fachleuten im Bereich Modemdesign bekannt ist.
  • Das Umschaltsignal vom Optokoppler OPTO1 wird vom Microcontroller U2 erkannt und analysiert, der annimmt, daß ein Ring vorhanden ist, wenn die Frequenz von drei (3) aufeinanderfolgende Signalperioden des Signals in EXT_WAKEUP zwischen 15,1 Hz und 69,1 Hz liegt. Anders als der EXT_RING Signalkreis, der mit Strom versorgt werden muß, um das Ring- Signal entlang des EXT_RING bereitzustellen, muß das interne Modem 900 für den Optokoppler OPTO1 nicht mit Strom versorgt werden, um entlang der EXT_WAKEUP# Leitung, die normalerweise von R5 auf AUX5 hochgezogen wird, ein geeignetes Signal zu liefern.
  • Der Microcontroller U2 kann die CPU 40 über das System Management Interrupt (SMI) der CPU unterbrechen, wenn die CPU 40 einen SMI hat (die CPU 40 muß keinen SMI für das System haben, um von den vielen Vorteilen aus der vorliegenden Erfindung zu profitieren). Das SMI_OUT# Signal wird bei Pin 3 (P3.2) des Microcontroller U2 ausgegeben und ermöglicht dadurch dem Microcontroller U2, die CPU 40 sofort zu unterbrechen, ohne auf das Betriebssystem zu warten, um die Unterbrechung für gültig zu erklären oder sonstwie freizugeben. Der Status der SMI_OUT# Leitung wird von einem beschreibbaren Registerbit gesteuert, das von der CPU 40, die sich im Microcontroller U2 befindet, geschrieben werden kann. Zusätzlich kann der Microcontroller U2 das SMI_OUT# Signal ausführen und so die CPU 40 zu unterbrechen, die (i) auf die Aktivität reagiert, die in der ACTIVITY# Leitung erkannt wird, oder (ii) bevor der Microcontroller U2 die Stromversorgung 17 veranlaßt, die Versorgung des Systems mit geregeltem Strom zu stoppen. Dieses Ereignis oder beide können durch Befehle von der CPU an den Microcontroller U2 aktiviert oder deaktiviert werden.
  • Das SMI, der Mikrocode in der CPU 40, speichert den Status der CPU im speziellen CPU-Statusspeicherbereich im oder vom Speicher. Danach führt die CPU 40 den SMI Interrupt-Handler aus, der die folgenden Funktionen ausführt. Um den Status der CPU wiederherzustellen, gibt der SMI Interrupt-Handler den RSM (Wiederaufnahme) Befehl aus, der die CPU 40 veranlaßt, ihren eigenen Status aus dem speziellen Speicherbereich wiederherzustellen.
  • Bevor die CPU 40 den Microcontroller U2 veranlaßt, die CPU 40 über das SMI der CPU zu unterbrechen, schreibt die CPU 40 einen Wert in eine Variable im CMOS NVRAM, der den Grund fur das SMI nennt. Dieser Wert im CMOS NVRAM ist standardmäßig OOH und informiert die CPU 40, daß der Microcontroller U2 die CPU 40 asynchron unterbricht, wie dies geschieht, bevor der Microcontroller U2 die Stromversorgung 17 veranlaßt, die Bereitstellung von geregeltem Strom zu stoppen. Nach jedem SMI setzt die CPU 40 diese Variable im CMOS NVRAM auf OOH. Die CPU 40, die auf diesen Wert anspricht, führt bestimmte Aufgaben in der Annahme aus, daß das System kurz davor steht, vom Microcontroller U2 heruntergefahren zu werden. Die CPU 40 kann den Zeitraum erhöhen, bevor der Microcontroller U2 das System herunterfährt, indem der Power-Down-Extend-Timer im Microcontroller U2 regelmäßig neu gestartet wird.
  • Während dieses Zeitraums vor dem Herunterfahren des Systems kann die CPU 40 zahlreiche Aufgaben ausführen. Da der Benutzer beispielsweise einen oder mehrere Parameter geändert hat, die sich auf den Wake-Alarm auswirken, berechnet die CPU einen Fresh-Minutes-To-Wake-Wert neu und schreibt diesen in den Microcontroller U2. Zusätzlich schreibt die CPU in CMOS NVRAM bestimmte Informationen, die später im Magnetplattenlaufwerk 31 gespeichert werden müssen, wie zum Beispiel der Zeitraum, in dem das Rechnersystem seit dem letzten Einschalten in Betrieb war.
  • Zu den weiteren Werten, die von der CPU 40 geschrieben werden, gehören 01H, d.h., daß die CPU 40 bei 254 zur Suspend-Routine springen muß; 02H, d.h. daß die CPU 40 bei 454 zur Resume- Routine springen muß und OFFH, d.h., daß die CPU 40 den speziellen CPU-Statusspeicherbereich im Segment der E000H Datenstruktur einrichten muß.
  • Im vorliegenden Ausführungsbeispiel kann der Microcontroller die Datensichtstation 11 dunkelsteuern. Das DISP_BLANK Signal, das über den Pin 1 (P3.4) des Microcontroller U2 ausgegeben wird, steuert direkt die Dunkelsteuerung der Datensichtstation 11. Zwei Wechselrichter U3D und U3E stellen die Verbindung des DISP_BLANK Signals mit den ESYNC# und BLANK# Leitungen her. Mit den ESYNC# und BLANK# Leitungen in einer logischen EINS (ONE) (VCC) generiert das Bildsteuersystem 56 ein Bildsignal. Wenn BLANK# und ESYNC# in einer logischen Null (GND) sind, unterbricht das Bildsteuersystem 56 die Generierung des Bildsignals. Der Status der DISP_BLANK Leitung wird von einem beschreibbaren Registerbit gesteuert, das von der CPU 40, die sich im Microcontroller U2 befindet, geschrieben werden kann. Die CPU 40 befiehlt dem Microcontroller U2, die Datensichtstation unsichtbar zu machen, wenn das System in den Standby-Status 152 übergeht. Außerdem wird die DISP_BLANK Leitung zuerst gesetzt (SET) und anschließend gelöscht (CLEARed), wobei sie auf die Schließvorgänge des Schalters 21 reagiert. Ebenso Veranlaßt eine Aktivität in einer der Aktivitätsunterbrechungen, in diesem Fall INT1 und INT12, den Microcontroller, die DISP_BLANK Leitung zu LÖSCHEN (CLEAR), um so dem Bildsteuersystem 56 die Generierung des Bildsignals zu ermöglichen.
  • Der Microcontroller U2 steuert außerdem die Frequenz der Taktsignale, die von dem Clock-Synthesizer 906 generiert werden. Drei Berg-Jumpers (ohne Abbildung) JP0, JP1 und JP2 steuern den Clock-Synthesizer wie folgt: wenn JP0 = 0, JP1 = 1 und JP2 = 0 sind, generiert der Clock-Synthesizer ein 25 MHz Taktsignal; und wenn JP0 = 0, JP1 = 1 und JP2 = 1 sind, generiert der Clock-Synthesizer ein 8 MHz Taktsignal. Der Clock- Synthesizer 906 wird außerdem von drei Taktleitungen CLK0, CLK1 und CLK2 gesteuert, die JP0, JP1 und JP2 entsprechen. Wie in Fig. 6A abgebildet, werden diese Taktleitungen CLK0, CLK1 und CLK2 vom Microcontroller U2 über das CL_SLOW# Signal gesteuert, das bei Pin 2 (P3.3) des Microcontroller U2 ausgegeben wird. Wie aus der Abbildung hervorgeht, wird das CLK_SLOW# Signal von den Wechselrichtern mit offenen Kollektorausgängen U3A, U3B und U3C zweifach umgekehrt. Auch sind die Widerstände R15 und R8 Pullup-Widerstände, die benutzt werden, um den offenen Kollektorausgang von U3A bzw. den CLK0 Eingang im Clock-Synthesizer 906 auf eine logische EINS (ONE) zu ziehen.
  • Die drei Taktsignale CLK0, CLK1 und CLK2 und die drei Jumper JP0, JP1 und JP2 steuern den Clock-Synthesizer wie folgt: wenn das CLK SLOW# Signal eine logische EINS (ONE) ist, sind die CLK1 und die CLK2 Signale auch eine logische EINS (ONE) und demzufolge wird der Clock-Synthesizer 906 von den Jumpern JP1, JP2 gesteuert, und generiert das höhere 25 MHz oder 33 MHz Taktsignal zur Nutzung dutch das System. Andernfalls, wenn das CLK SLOW# Signal eine logische NULL (ZERO) ist, sind die CLK1 und CLK2 Signale auch eine logische NULL (ZERO), und demzufolge generiert der Clock-Synthesizer 906 die niedrigeren 8 MHz Signale zur Nutzung durch das System und veranlassen so das System, weniger Strom zu verbrauchen. Wie Fig. 6A zeigt, trennt ein Berg-Jumper die CLK SLOW# Leitung von der CLK0 Leitung. Ist ein Jumper vorhanden, folgt die CLK0 Leitung dem CLK SLOW# Signal. Andernfalls, wenn kein Jumper vorhanden ist, sorgt der Widerstand R8, ungeachtet des Status des CLK_SLOW# Signals, daß die CLK0 Leitung auf einer logischen EINS (ONE) bleibt. Der Status der CLK_SLOW# Leitung wird von einem beschreibbaren Registerbit, das von der CPU 40, die sich im Microcontroller U2 befindet, geschrieben werden kann. Die CLK_SLOW# Leitung kann außerdem vom Microcontroller U2 als Reaktion auf die Aktivität in der ACTIVITY# Leitung gelöscht werden. Wie der Fachmann verstehen wird, können andere Clock- Synthesizer in der vorliegenden Erfindung verwendet werden, wobei die Verbindungen zwischen dem Microcontroller U2 und dem Clock-Synthesizer eventuell geändert werden müssen, damit sie zu den spezifischen technischen Daten des verwendeten Synthesizers passen.
  • Der Microcontroller U2 steuert außerdem direkt die Beleuchtung der Power/Feedback-LED 23. Das LED_CNTRL Signal wird bei Pin 22 (P3.6) ausgegeben und ermöglicht die direkte Steuerung der Power/Feedback-LED 23 durch den Microcontroller U2. Die Widerstände R2 und R3 und die Dioden CR4 und CR5 ermöglichen es, daß die Power/Feedback-LED 23 entweder von der AUX5 Stromleitung oder der VCC-Stromleitung als Reaktion auf die LED_CNTRL Leitung getriggert werden können, die in einer logischen NULL (ZERO) ist. Wenn die LED_CNTRL Leitung auf einer logischen EINS (ONE) ist, ist die Power/Feedback-LED 23 nicht beleuchtet. Wie nachstehend ausführlicher beschrieben werden wird, wird der Status der LED_CNTRL Leitung vom Microcontroller U2 als Reaktion auf einen Schließvorgang des Schalters 21, als Reaktion auf den Wake-Alarm, als Reaktion auf einen oder mehrere Klingelzeichen (rings) im Ring- Erkennungseingang oder als Reaktion auf das System, das in den Standby-Modus gesetzt wurde, gesteuert.
  • Der Microcontroller U2 kann die LED 23 so steuern, daß sie eine einfache Power-LED ist. In dieser Eigenschaft wird die LED 23 nach einem Schließvorgang des Schalters 21, der das System veranlaßt, entweder vom Off-Status 156 in den normalen Betriebsstatus 150 zu wechseln oder vom Haltestatus 154, beleuchtet. Ebenso schaltet der Microcontroller U2 die LED 23 aus, nachdem der Schalter 21 losgelassen wurde, wodurch das System veranlaßt wird, vom normalen Betriebsstatus 150 entweder in den Haltestatus 154 oder den Off-Status 156 überzugehen.
  • Die LED 23 kann außerdem vom Microcontroller U2 veranlaßt werden, mit einer bestimmten Geschwindigkeit zu blinken (kann ausgewählt werden), z.B. sekundenweise, um darauf hinzuweisen, daß sich das System im Standby-Status 152 befindet. Die LED 23 kann außerdem vom Microcontroller U2 veranlaßt werden, mit einer unterschiedlichen Geschwindigkeit zu blinken (kann ausgewählt werden), z.B. jede halbe Sekunde, um anzugeben, daß das System von einem Ring oder vom Alarm aufgeweckt wurde, und sich das System entweder im Off-Status oder im Haltezustand befindet. Alternativ kann die LED 23 während des Haltestatus vom Microcontroller U2 selektiv zum Blinken in Blinklichtgruppen veranlaßt werden, um anzugeben, wie oft das System durch externe Ereignisse, wie beispielsweise Rufton, Alarm usw. hochgefahren und nach Ablauf des Inaktivitäts- Halte-Timers wieder heruntergefahren wurde. In diesem Fall wird BIOS mit einer oder mehreren Funktionen versehen, um den OS- und Anwendungsprogrammen die Änderung zu ermöglichen, wie oft der Microcontroller U2 die LED 23 zum Blinken Veranlaßt hat. Wenn das System beispielsweise von einem Rufton geweckt wurde, und eine Faxübertragung empfangen wird, kann das Telekommunikationsanwendungsprogramm die besondere BIOS- Funktion aufrufen, um eins zur Anzahl der Blinkvorgänge hinzuzufügen. Danach veranlaßt BIOS die CPU 40, den neuen Blinkwert in den Microcontroller U2 zu schreiben, der dann die LED 23 veranlaßt, so oft zu blinken, wie dies eingegeben wurde.
  • Das POWERGOOD Signal geht bei Pin 4 (P3.1) des Microcontroller U2 ein und kann vom Microcontroller U2 und der CPU 40 benutzt werden. Der Microcontroller benutzt das POWERGOOD Signal insbesondere, um einen auf Rückkopplung basierenden Fehler- und Korrekturkreis zu implementieren, um festzustellen, ob die Stromversorgung 17 ausgefallen ist und um den fehlerhaften Zustand zu beheben. Wie in dieser Spezifikation beschrieben wurde, nimmt der Microcontroller U2 an, daß, wenn das ON- Signal über einen Zeitraum (z.B. drei Sekunden) ausgeführt wurde, und das POWERGOOD Signal bei einer logischen Null ist, was darauf hindeutet, daß die Stromversorgung 17 keine geregelten Spannungen mit den richtigen Pegeln liefert, die Stromversorgung 17 aufgrund beispielsweise von einer Überstrombedingung ausgefallen ist. Folglich wird der Microcontroller U2, um die Fehlerbedingung möglicherweise zu beheben, die Ausführung des ON-Signals für einen Zeitraum (z.B. fünf Sekunden), damit der Fehler behoben werden kann. Danach wird der Microcontroller U2 das ON-Signal erneut ausführen und auf das POWERGOOD Signal warten, um eine logische EINS zu werden, was bedeutet, daß die Stromversorgung 17 das System nicht mit geregeltem Strom versorgt. Ohne dieses auf Rückkopplung basierende Fehlererkennungs- und Korrektursystem würde die Stromversorgung 17 defekt bleiben, und der Microcontroller U2 würde mit der Ausführung des ON- Signals fortfahren, um zu versuchen, die Stromversorgung 17 zu veranlassen, mit der Generierung von geregeltem Strom zu beginnen. Die einzige Lösung wäre es, den Wechselstrom von der Stromversorgung abzunehmen, um den Fehler zu beheben.
  • Ein alternatives Ausführungsbeispiel vom Fehlererkennungs- und Korrekturkreis in der Stromversorgung ist in Fig. 6D abgebildet. Dieses Ausführungsbeispiel benutzt vier FETs Q10- Q13, Widerstände R20-R23, einen Kondensator C20 und einen 74HC132, um zu erkennen, wenn die Stromversorgung 17 ausgefallen ist und den Fehler zu beheben. Q12 zieht das ON- Signal für einen Zeitraum, der von R22 und C20 festgelegt wird, niedrig (LOW), wenn das ON-Signal HIGH ist, wird AUX5 mit Strom versorgt, und VCC liegt unter dem Schwellwert, um Q11 zu triggern, wobei die Fehlerbedingung in der Stromversorgung behoben wird.
  • Das ACTIVITY# Signal, das bei Pin 19 (INT1) des Microcontroller U2 eingeht, wird vom Microcontroller U2 benutzt, um auf die Aktivität in der Tastatur 12 und der Maus 13 zu reagieren. IRQ1 ist das Unterbrechungssignal der Tastatur-Hardware, das bei Pin 8 (17) des ersten PAL U1 eingeht. Durch Drücken einer Taste auf der Tastatur 12 wird das IRQ1 Signal zum Takten veranlaßt. IRQ12 ist das Unterbrechungssignal der Maus-Hardware, das bei Pin 11 (19) des ersten PAL U1 eingeht. Wird die Maus 13 verschoben oder eine Taste auf der Maus 13 gedrückt, wird das IRQ12 Signal zum Takten veranlaßt. Die IRQ1 und IRQ2 Signale sind im ersten PAL U1 logisch ORed und werden als ACTIVITY# Signal ausgegeben. Durch Nutzung des ACTIVITY# Signals verpaßt der Microcontroller U2 niemals eine Aktivität der Tastatur 12 oder der Maus 13.
  • Im Standby-Status veranlaßt die Aktivität in der Unterbrechung den Microcontroller, die Bildanzeige sofort wiederherzustellen. Werden die Unterbrechungen IRQ1 und IRQ12 auf diese Weise genutzt, erhält der Benutzer sofort eine Rückkopplung in Form einer wiederhergestellten Bildanzeige, wenn die Rückkehr vom Standby-Status 152 in den normalen Betriebsstatus 154 erfolgt. Ohne diese, erhält der Benutzer die Rückkopplung erst Sekunden später, wenn APM nach Benutzeraktivitäten sucht, wie im Text zu Fig. 9 erklärt werden wird.
  • Kommunikationen zwischen der CPU 40 und dem Microcontroller U2 werden mittels SD(0) durchgeführt, die bei Pin 18 (I/O6) des ersten PAL U1 eingeht, und über die RWDO Leitung in den Microcontroller U2 eingeht, die bei Pin 13 (I/O3) des ersten PAL U1 ausgegeben und bei Pin 13 (P1.0) des Microcontroller U2 eingeht, SD(1), das bei Pin 14 (p1.1) des Microcontroller U2 eingeht, SD(2), das bei Pin 15 (p1.2) des Microcontroller U2 eingeht, SD(3), das bei Pin 16 (p1.3) des Microcontroller U2 eingeht, SD(4), das bei Pin 6 (15) des ersten PAL U1 eingeht, IO_STROBEH, das bei Pin 18 (INT0) des Microcontroller U2 eingeht und PROC_RDY, das bei Pin 20 (P1.7) des Microcontroller U2 ausgegeben wird. Der erste PAL U1 und der Microcontroller U2 sind so konfiguriert und programmiert, daß sie (i) über RWDO vier-Bit parallele Speicherungen von der CPU 40 entlang SD(0), SD(I), SD(2) und SD(3) bereitstellen, wobei eine Adresse eine im wesentlichen ein-Bit Speicherung ist, um den Microcontroller U2 zu ersetzen und die andere ein im Microcontroller U2 gespeichertes Halbbyte ist, das nur gultig ist, wenn das Datenbit SD(4) HTGH ist, und (ii) serielle (ein- Bit) Auslesevorgange vom Microcontroller U2 mittels der COPU 40 entlang SD(0) über RWDO bereitstellen, wobei die eine Adresse dem Statusbit entspricht und die andere dem Datenbit vom Microcontroller U2 entspricht.
  • Es wird nun auf Fig. 19 Bezug genommen. Mehrere der Routinen, die im Microcontroller U2 ausgeführt werden, sind abgebildet und beginnen bei 1160. Der Microcontroller U2 fuhrt für gewöhnlich eine der beiden Hauptroutinen aus: die Power-On- Routine mit Aufgaben von 1168 bis 1216 oder der Power-Off- Routine mit Aufgaben von 1260 bis 1308. Die Power-On-Routine wird vom Microcontroller U2 ausgeführt, wenn die Stromversorgung 17 in den ±5 und ±12 Leitungen geregelten Strom liefert, oder wenn die Stromversorgung 17 in den ±5 und ±12 Leitungen keinen geregelten Strom liefert, aber das System dabei ist, hochzufahren. Die Power-Off-Routine wird vom Microcontroller U2 ausgeführt, wenn die Stromversorgung 17 in den ±5 und ±12 Leitungen keinen geregelten Strom liefert, oder wenn die Stromversorgung 17 in den ±5 und ±12 Leitungen geregelten Strom bereitstellt, aber das System dabei ist, herunterzufahren. Es gibt außerdem drei unterbrechungsgetriggerte Routinen: eine, um mit der CPU 40 zu kommunizieren - bei 1220 bis 1232 -, eine, um Aktivitaten der Maus 13 oder der Tastatur 12 - bei 1236 bis 1244 - zu erkennen und eine, die eine Zeitbasis mit 25 Millisekunden-, Halbsekunden-, Sekunden- und Minutenauflosungen bei 1248 bis 1256 bereitstellt.
  • Der Microcontroller U2 wird bei 1164 zuerst initialisiert. Während dieser Zeit werden alle Variablen initialisiert, die Zählervariablen werden initialisiert, die Timer-Unterbrechung wird initialisiert und aktiviert, und externe Unterbrechungen, die die Kommunikationsroutine und die Aktivitätsroutine steuern, werden initialisiert.
  • Die Kommunikationsroutine ist eine unterbrechungsgetriggerte Routine, die bei 1220 beginnt, die als Reaktion auf die IO_STROBE Leitung, die vom ersten PAL U1 auf eine logische NULL (ZERO) gezogen wird, d.h., daß die CPU 40 mit einem Befehl oder mit einer Abfrage beginnt. Kurz gesagt, empfangt diese Routine einen aus einem oder mehreren Halbbyte bestehenden Befehl oder einer ebensolchen Abfrage von der CPU - bei 1224 - implementiert den Befehl bzw. schickt die Daten als Antwort auf die Abfrage bei 1228 zurück und sendet bei 1232 die Programmausführungssteuerung an den unterbrochenen Code zurück.
  • Der Microcontroller empfängt folglich die Halbbytes von der CPU, die den Befehl oder die Abfrage bilden. Nachdem ein Halbbyte empfangen wurde, zieht der Microcontroller PRC_RDY LOW. Wenn er für das nächste Halbbyte bereit ist, zieht er PROC_RDY HIGH. Wird der LOW in HIGH Übergang bei PROC_RDY festgestellt, dann kann die CPU 40 den nachsten Halbbyte- Befehl schreiben.
  • Während der Microcontroller U2 den Befehl oder die Abrage von der CPU 40 empfangt, kann er keinen anderen Befehl empfangen; deshalb fuhrt der Microcontroller U2 die PROC_RDY Leitung auf eine logische NULL (ZERO), das heißt für die CPU 40 (über das Auslesen des Status-Ports), daß der Microcontroller den nachsten Befehl/die nächste Abfrage noch nicht akzeptieren kann. Wenn die Implementierung beendet ist, wird die PRO_RDY Leitung in einer logischen EINS (ONE) ausgeführt, das heißt für die CPU 40 (über das Auslesen des Status-Ports) daß der Microcontroller U2 bereit ist, den nachsten Befehl/die nächste Abfrage anzunehmen.
  • Die Aktivitätsroutine ist eine unterbrechungsgetriggerte Routine, die bei 1236 beginnt, und als Reaktion darauf, daß die ACTIVITY# Leitung vom ersten PAL U1 auf eine logische NULL (ZERO) gezogen wird, ausgeführt wird und die besagt, daß der Benutzer entweder die Maus 13 oder die Tastatur 12 benutzt hat. Kurz gesagt, setzt (SET) diese Routine als Reaktion auf den Empfang der Unterbrechung (i) ein Bit, das besagt, daß entweder eine Aktivität der Maus 13 oder der Tastatur 12 vorhanden war; (ii) stellt die Taktgeschwindigkeit wieder her, wenn Taktverlangsamung aktiviert ist; (iii) macht die Datensichtstation 11 sichtbar, wenn die Dunkelsteuerung aktiviert ist; (iv) startet den Failsafe-Timer neu und (v) generiert in der CPU ein SMI, falls aktiviert, bei 1240. Danach sendet die Routine die Programmausführungssteuerung an den unterbrochenen Code bei 1244 zurück. Das von dieser Routine gesetzte Bit wird dann von der Supervisor-Routine bei jedem "get event" der APM abgefragt, was in dieser Spezifikation detailliert werden wird.
  • Die Timer-Routine ist eine unterbrechungsgetriggerte Routine, die bei 1248 beginnt und die als Reaktion auf die interne Timer-Unterbrechung, die auf einen 16-Bit freischwingenden Zähler reagiert, der konfiguriert wurde, um nach jeweils 25 ms die Unterbrechung zu generieren, um eine Zeitbasis für den Microcontroller U2 bereitzustellen. Die Timerroutine stellt die folgenden Zeitbasen bereit: 25 Millisekunden, Halbsekunden, Sekunden und Minuten. Kurz gesagt, diese Routine empfängt die Unterbrechung, bestimmt, wenn die verschiedenen Zeiten aufgetreten sind, führt die entsprechende Aktivität bei 1252 durch und sendet bei 1256 die Programmausführungssteuerung an den unterbrochenen Code zurück.
  • Bei jedem Uhrsignal (tick) (nach jeweils 25 ms), wenn die Stromversorgung keinen geregelten Strom liefert und der Microcontroller konfiguriert ist, um auf Rufe zu reagieren, prüft die Timer-Routine in der EXT_RING Leitung auf einen RS- 232-Ruf (ring) und setzt (SET) bei eins ein Bit.
  • In Abständen von Halbsekunden - im Off-Status oder Haltestatus - bestimmt die Timer-Routine, ob sie die LED 23 umschalten sollte, um die Blinkfolge des Awake-on-External-Ring-Indicätor zu implementieren, was in dieser Spezifikation ausführlich beschrieben ist.
  • Während des Standby-Status bestimmt die Timer-Routine jede Sekunde, ob sie die LED 23 umschalten sollte, um die Blinkfolge der Halteanzeige zu implementieren, was in dieser Spezifikation ausführlich beschrieben ist.
  • Jede Sekunde dekrementiert die Timer-Routine, falls erforderlich, den Failsafe-Timer, den APM Fail-Suspend-Timer und den Power-Supply-Fault-Timer und setzt (SET) ein entsprechendes Bit, wenn einer abgelaufen ist. Der Failsafe- Timer ist ein 20-Sekunden-Timer, der den Microcontroller veranlaßt, die Systemleistung abzuschalten, wenn er abgelaufen ist. Der Failsafe-Timer wird häufig von der Supervisor-Routine als Reaktion auf die APM Get Events neu gestartet (zurückgesetzt), d.h. so lange wie die Codeausführung in der CPU 40 korrekt ausgeführt wird, läuft der Failsafe-Timer niemals ab. Wenn jedoch der nicht korrekt ausgeführt wird, läuft der Failsafe-Timer ab, und spricht bei Betätigung und Loslassen des Netzschalters 21 an. Der Microcontroller U2 veranlaßt die Stromversorgung 17, die ±5 und ±12 Leitungen nicht mehr mit geregeltem Strom zu versorgen, wobei er annimmt, daß BIOS und die anderen Routinen versagt haben.
  • Der APM Fail-Suspend-Timer ist ein 18-Sekunden-Timer, der aktiviert wird, wenn der Schalter 21 im Off/Release-Status ist (der darauf hindeutet, daß der Benutzer versucht, das System auszuschalten), und der das System veranlaßt, zu versuchen, anzuhalten, wenn es abgelaufen ist - hoffentlich bevor der Failsafe-Timer abläuft - und den Microcontroller veranlaßt, das System auszuschalten. Wie der Failsafe-Timer wird der APM Fail-Suspend-Timer von der Codeausführung in der CPU 40, z.B. APM Get-Events, APM Working-on-Last-Request und APM Reject- Last-Request, häufig neu gestartet (zurückgesetzt). So lange wie die Codeausführung in der CPU 40 korrekt ausgeführt wird, läuft der APM Fail-Suspend-Timer niemals ab. Wenn der Code jedoch nicht korrekt ausgeführt wird, lauft der Fail-Suspend- Timer ab.
  • Ist der APM Fail-Suspend-Timer abgelaufen, setzt (SET) der Microcontroller U2 ein Bit. Dieses Bit wird während jeder Unterbrechung des Timer-Level 0, die etwa alle 55 Millisekunden auftritt, geprüft, wie dies dem Fachmann bekannt ist. Außerdem wird der Failsafe-Timer von der Unterbrechungsserviceroutine des Timer-Level 0 neu gestartet. Wenn die Unterbrechungsserviceroutine des Timer-Level 0 erkennt, daß der APM Fail-Suspend-Timer abgelaufen ist, springt sie zur Suspend-Routine und versucht, das System anzuhalten, wie dies im Text zu Fig. 10 beschrieben ist.
  • Der von der Unterbrechungsserviceroutine des Timer-Level 0 gestartete Halt ist nicht das bevorzugte Verfahren zum Halten. Viele Anwendungsprogramme und Adapter kennen APM und führen als Reaktion auf das System, das gehalten wird, Aufgaben durch. Ein von der Unterbrechungsserviceroutine des Timer- Level 0 gestarteter Halt kann APM nicht benutzen, um diesen APM bekannten Einheiten mitzuteilen, daß ein Halt kurz bevor steht. Das System wird folglich ohne diese Einheiten, die korrekt vorbereitet sind, gehalten. Das System wird somit von einem Halt gespeichert, der von der Unterbrechungsserviceroutine des Timer-Level 0 gestartet wurde. Im Speicher enthältene Daten gehen nicht verloren. Der Benutzer muß den Rechner neu booten, um das System in seinen korrekten Status zu setzen, nachdem die gewünschten Daten gespeichert wurden.
  • Der APM Fail-Suspend-Timer ist besonders hilfreich, um "Löcher" im APM-Treiber im OS anzuschließen. Wird beispielsweise in Microsoft Windows 3.1 ein vorrangiges Dialogfeld angezeigt, unterbricht der Windows APM-Treiber die Ausgabe von APM Get-Events. Folglich wird, wenn ein vorrangiges Dialogfeld angezeigt wird, wenn der Benutzer den Netzschalter 21 drückt, um zu versuchen, das System zu halten, das System nicht gehalten. Der Microcontroller U2 bemerkt, daß der Schalter sich im Off/Release-Status befindet, aber die Supervisor-Routine wird nicht aufgerufen, weil alle APM Get- Events gestoppt wurden. Die Schalterbetätigung bleibt wirkungslos, so lange das vorrangige Dialogfeld vom Benutzer nicht gelöscht wird. Sobald der Fail-Suspend-Timer jedoch abgelaufen ist, und dieser Zustand von der Unterbrechungsserviceroutine des Timer-Level 0 erkannt wird, wird der Systemstatus in dem Umfang gespeichert, der möglich ist, ohne den APM bekannten Einheiten mitzuteilen, daß das System gehalten wird.
  • Jede Minute dekrementiert die Timer-Routine den Minutes-to- Wake-Alarm-Timer und den Actitivty-Timer. Wenn der Minutes-to- Wake-Timer abgelaufen ist, veranlaßt der Microcontroller - sofern er dazu in der Lage ist - die Stromversorgung 17, die ±5 und ±12 Leitungen mit geregeltem Strom zu versorgen.
  • Nachdem der Microcontroller U2 initialisiert ist, wird die Stromversorgung bei 1168 getestet, um festzustellen, ob der Strom ausgeschaltet ist. Wenn der Strom noch eingeschaltet ist, führt der Microcontroller bei 1172 eine Prüfung durch, um festzustellen, ob die Stromversorgung ausgefallen ist. Die Stromversorgung 17 hat mehrere interne Schutzeinrichtungen, die sie zum Ausschalten oder zum "Ausfall" veranlassen. Der Microcontroller U2 bestimmt, ob die Stromversorgung 17 ausgefallen ist. Wenn der Microcontroller in Betrieb ist (d.h. AUXS wird mit Strom versorgt, d.h. die Stromversorgung 17 wird mit Wechselstrom versorgt) UND der Microcontroller U2 das ON- Signal ausfuhrt, um die Stromversorgung 17 zu veranlassen, die ±5 und ±12 Leitungen mit geregeltem Strom zu versorgen, UND die POWERGOOD Leitung nicht ausgeführt wird (d.h. daß die Stromversorgung 17 die ±5 und ±12 Leitungen nicht mit geregeltem Strom versorgt), dann ist die Stromversorgung 17 ausgefallen und muß zurückgesetzt werden.
  • Bei Aufgabe 1172 wird die Stromversorgung normalerweise zweimal geprüft. Der Microcontroller U2 führt das ON-Signal aus und wartet dann drei Sekunden, während die interne Zeitbasis die Messung durchführt. Wenn das POWERGOOD Signal nicht ausgeführt wird, nachdem ON drei Sekunden lang ausgeführt wurde, dann löscht der Microcontroller U2 das ON- Signal und wartet weitere drei Sekunden. Wenn das POWERGOOD Signal nicht ausgeführt wird, nachdem ON für die Dauer von drei Sekunden ausgeführt wird, dann löscht der Microcontroller U2 das ON-Signal, wenn er vermutet, daß die Stromversorgung 17 ausgefallen ist.
  • Wenn die Stromversorgung ausgefallen ist, springt der Microcontroller U2 zur Power-Off-Routine (siehe 1174) Andernfalls veranlaßt der Microcontroller, wenn die Stromversorgung nicht ausgefallen ist oder ausgeschaltet ist, die Stromversorgung 17 bei 1175 die ±5 und ±12 Leitungen mit geregeltem Strom zu versorgen, initialisiert die E/A-Ports, schaltet die LED 23 ein und aktiviert bei 1176 die externen Unterbrechungen.
  • Fig. 7 zeigt den Schalterstatus, der im Microcontroller U2 gehalten wird. Wie aus dieser Figur ersichtlich ist, ändern sich die Status als Reaktion auf Schließvorgange des Schalters 21 und andere Ereignisse, z.B. das Rücksetzen des Rechnersystems 10 und Speichervorgänge seitens der CPU 40.
  • Wird AUX5 nicht von der Stromversorgung 17 bereitgestellt, wird der Microcontroller U2 nicht mit Strom versorgt, und deshalb ist der Schalterstatus bei 174 bedeutungslos. Bei einem Druck des Schalters 21, einem Anruf von einer Quelle läuft der Minutes-to-Alarm-Timer ab, und durch einen Befehl von der CPU 40 wird der Microcontroller aufgefordert, die Stromversorgung 17 zu veranlassen, Systemleistung bereitzustellen, wie dies im Text zu Fig. 6 beschrieben ist.
  • Wie Fig. 7 zeigt, hat der Schalter 21 vier Status, die vom Microcontroller U2 überwacht werden: (i) den ON/Press-Status 176 (in dem der Benutzer den Schalter gedrückt hält und versucht, den Rechner einzuschalten), (ii) den ON/Release- Status 178 (in dem der Benutzer den Schalter losgelassen hat und versucht, den Rechner abzuschalten), den Off/Press-Status 180 (in dem der Benutzer den Schalter gedrückt hält und versucht den Rechner auszuschalten), und (iv) den Off/Release- Status 182 (in dem der Benutzer den Schalter losgelassen hat und versucht, den Rechner abzuschalten). Als nächstes prüft der Microcontroller U2 bei 1180, ob sich der Schalter im Off/Release-Status befindet, was bedeutet, daß der Benutzer den Schalter losgelassen hat und versucht, den Rechner auszuschalten.
  • Im Status 174 und bei gedrücktem Schalter 21 geht der Microcontroller U2 in den On/Press-Schalterstatus 176. Wird der Schalter 21 losgelassen, wird der Microcontroller U2 veranlaßt, in den ON/Release-Schalterstatus 178 überzugehen. Ebenso geht beim Zurücksetzen des Microcontroller U2 der Microcontroller U2 in den ON/Release-Schalterstatus 178 über. Wird der Schalter 21 erneut gedrückt, wird der Microcontroller U2 veranlaßt, in den Off/Release-Schalterstatus 182 überzugehen. Durch nachfolgende Schließvorgänge des Schalters 21 wird der Microcontroller U2 veranlaßt, die vier Status zu durchlaufen (siehe Fig. 7). Der Microcontroller U2 befindet sich im ON/Release-Schalterstatus 178, wenn das Rechnersystem 10 im normalen Betriebsstatus 150 ist. Die Anwendungsprogramme werden ausgeführt, so lange dieser Status anliegt. Das System 10 kann in diesem Status in den Standby-Status 152 übergehen und ihn verlassen. Dieser Status entspricht auch einem vom Benutzer generierten Suspend-Abort-Request. Der Off/Release- Schalterstatus ist der Schalterstatus, der eines vom Benutzer generierten Suspend-Request. Das heißt, wird das System im Off-Status 156 gestartet, wird durch einmaliges Drücken und anschließendes Loslassen des Schalters das Rechnersystem in den normalen Betriebsstatus 150 gesetzt. Wird der Schalter 21 noch einmal gedrückt und losgelassen, wird eine Suspend- Request generiert, die von der Supervisor-Routine, die später ausführlicher im Text zu Fig. 9 beschrieben wird, gelesen wird. Wird der Schalter 21 ein drittes Mal gedrückt und anschließend losgelassen, bevor das System 10 im Haltestatus 154 ist, wird eine Suspend-Abort-Request generiert, die von der Suspend-Routine gelesen wird.
  • Es wird wieder auf Fig. 19 Bezug genommen. Wenn der Benutzer den Schalter losgelassen und versucht, den Rechner auszuschalten, dann springt der Microcontroller U2 zur Power- Off-Routine, wie dies in 1184 angegeben ist.
  • Andernfalls prüft der Microcontroller, wenn der Schalter im Off/Press-Status ist, d.h. der Benutzer den Schalter gedrückt hält und versucht, den Rechner auszuschalten, ob der Schalter von BIOS bei 1192 maskiert wurde. BIOS maskiert den Schalter 21 einmal pro Eingang im Standby-Status, um das Drücken des Schalters zu verhindern, der das System vom Standby-Status in den Haltestatus zwingt und um Verwirrung seitens des Benutzers zu vermeiden, wie erklärt werden wird.
  • Wenn der Schalter 21 von BIOS maskiert wurde, dann springt der Microcontroller-Code zurück zu Aufgabe 1176 und löscht das Maskenbit, um beim nächsten Schalterdruck das System zu veranlassen, entweder in den Off-Status oder den Haltestatus überzugehen. Andernfalls, wenn der Schalter 21 nicht maskiert wurde, oder wenn sich der Schalter nicht im Off/Press-Status befindet, führt der Microcontroller die Heartbeat-Routine bei 1196 aus.
  • Die Heartbeat-Routine dient dazu, der CPU 40 mitzuteilen, daß der Microcontroller U2 korrekt funktioniert. Der CMD_STATE# Leitungsausgang des Microcontroller (Pin 17, P1.4) ist normalerweise eine logische EINS (ONE). Alle 50-60 Mikrosekunden zieht der Microcontroller U2 diese Leitung für etwa 1,5 Mikrosekunden auf eine logische NULL (ZERO) herab und dann wieder nach oben zurück auf eine logische EINS (ONE). Da der Leistungssteuerstatus-Port, der von der CPU 40 gelesen wird, das logische UND der CMD_STATE# und PROC_RDY Leitungen ist, kann dieser Übergang von HIGH zu LOW und zurück zu HIGH jedesmal von der CPU 40 überwacht werden, z.B. während das System bootet, um sicherzustellen, daß der Microcontroller U2 korrekt funktioniert.
  • Als nächstes prüft der Microcontroller U2, ob BIOS bei 1200 eine Abschaltung veranlaßt hat. Die CPU 40 kann praktisch auf jede Variable im Microcontroller U2 zugreifen und diese andern. Wenn BIOS die Variable so gesetzt hat, daß sie das Abschalten des Systems veranlaßt, wie z.B. nachdem der Status des Systems wahrend eines Haltestatus auf dem Magnetplattenlaufwerk 31 gespeichert wurde, springt der Microcontroller U2 zur Power-Off-Routine, wie dies bei 1204 angegeben ist.
  • Andernfalls, wenn BIOS keine Abschaltung veranlaßt hat, führt der Microcontroller bei 1208 die Failsafe-Routine aus. Der Failsafe-Timer ist ein 20-Sekunden-Timer, der aktiviert wird, wenn die Stromversorgung 17 in den ±5 und ±12 Leitungen geregelten Strom einspeist. Diese Routine prüft, ob der Failsafe-Timer abgelaufen ist und setzt (SET) ein Bit, wenn dies der Fall ist. Diese Routine fuhrt auch einen Neustart des Failsafe-Timers aus, wenn BIOS den Befehl dazu ausgegeben hat.
  • Als nächstes prüft der Microcontroller bei 1212, während einer Sicherheitsmaßnahme und um Microcontroller und Stromversorgung 17 zu synchronisieren, die POWER_GOOD Leitung, um festzustellen, ob die Stromversorgung in den ±5 und ±12 Leitungen noch geregelten Strom bereitstellt.
  • Wenn die Stromversorgung 17 in den ±5 und ±12 Leitungen keinen geregelten Strom bereitstellt, springt der Microcontroller U2 zur Power-Off-Routine, wie dies in 1216 dargestellt ist. Andernfalls, wenn die Stromversorgung 17 in den ±5 und ±12 Leitungen geregelten Strom bereitstellt, springt der Microcontroller Code zu Aufgabe 1180 zurück und fahrt mit der Ausführung fort.
  • Die Power-Off-Routine beginnt bei Aufgabe 1260. Zuerst deaktiviert der Microcontroller U2 die Aktivitätsunterbrechung bei 1264, um zu verhindern, daß das Display sichtbar wird.
  • Dann prüft der Microcontroller bei 1268 die POWER_GOOD Leitung, um festzustellen, ob die Stromversorgung 17 die ±5 und ±12 Leitungen noch mit geregeltem Strom versorgt. Wenn die Stromversorgung 17 die ±5 und ±12 Leitungen mit geregeltem Strom versorgt, prüft der Microcontroller U2 bei 1272, ob die Anzeige unsichtbar sein sollte und/oder die LED 23 ausgeschaltet werden sollte. Falls ja, veranlaßt der Microcontroller U2 das Bildsteuersystem 56, die Generierung der Bildsignale einzustellen und/oder schaltet die LED 23 aus.
  • Anschließend, oder wenn LED und Display nicht dunkelgesteuert werden müssen, prüft der Microcontroller als nächstes, ob (i) BIOS den Befehl ausgegeben hat, daß das System wieder eingeschaltet werden sollte, in dem ein Bit gesetzt wird, oder ob (ii) der Benutzer den Befehl ausgegeben hat, daß das System wieder eingeschaltet werden sollte, in dem der Netzschalter 21 wieder gedrückt wird. Wenn einer der Fälle eingetreten ist, dann hat das System ein Backup durchzuführen, und der Microcontroller U2 springt zur Power-On-Routine, wie dies in 1284 angegeben ist.
  • Als nächstes stellt der Microcontroller fest, ob in der EXT_WAKEUP# Leitung vom Optokoppler OPTO1 ein Rufzeichen anliegt. Was die R5-232 Leitung angeht, so beinhaltet das nur die Prüfung, ob die EXT_RING Leitung HIGH ist. Was das Signal vom Optokoppler OPTO1 angeht, bedeutet dies einen höheren Prüfumfang für den Microcontroller U2. Die EXT_WAKEUP# Leitung wird normalerweise vom Widerstand R5 hochgezogen (HIGH). Der Optokoppler OPTO1 zieht diese Leitung nach unten (LOW), wenn die Spannung durch Tip und Ring höher als der vom Schwellwert- und Schutzteil eingestellte Spannungsschwellwert ist, z.B. 60 V, wie das Rufzeichen in der Telefonleitung. Diese Bedingung kann auch erfüllt werden, wenn die Telefonleitung geprüft wird oder anhand des Geräuschs in der Leitung. Wenn in der EXT_WAKEUP# Leitung nur auf ein LOW gewartet wird, kann ein falsches "Rufzeichen" (ring) das System aufwecken. Folglich bestimmt der Microcontroller, ob das Signal ein Rufzeichen (ring) ist, indem die Frequenz des Rufzeichens (ring) gemessen wird. Ein Rufzeichen (ring) innerhalb der Normen ist ein Signal zwischen 16 Hz und 58 Hz. Der Microcontroller U2 mißt die drei Zeiträume zwischen vier ansteigenden Flanken des EXT_WAKEUP# Signals, und wenn alle drei einer Frequenz zwischen 15,1 Hz und 69,1 Hz entsprechen, geht der Microcontroller U2 davon aus, daß ein korrektes Rufzeichen in dieser Leitung aufgetreten ist, und setzt (SET) ein entsprechendes Bit.
  • Die Prüfroutine wird durch ein LOW gestartet, das in der EXT_WAKEUP# Leitung erkannt wird. Wenn diese Leitung bei drei aufeinanderfolgenden Lesevorgängen LOW ist, dann wartet der Microcontroller U2 auf die Leitung, um bei drei aufeinanderfolgen Lesevorgängen HIGH zurückzusenden. Unmittelbar danach wird der 16-Bit-Zähler, der die Basis für die Timer-Unterbrechung bildet, gelesen, der Wert wird gespeichert und der Microcontroller U2 wartet auf die Leitung, um bei drei aufeinanderfolgenden Lesevorgängen in LOW überzugehen. Als nächstes prüft der Microcontroller, ob die Zeit zwischen den ersten beiden Anstiegsflanken zwischen 15 und 66 Millisekunden liegt, wobei das Signal zwischen 15,1 Hz und 69,1 Hz liegt. Falls ja, wird der hochauflösende Zähler erneut abgetastet, und der Microcontroller kalkuliert den Unterschied zwischen zwei Zählerabtastungen, während er auf den nächsten LOW-in-HIGH-Übergang wartet. Der Prozeß wiederholt die nächsten zwei LOW-in-HIGH-Übergänge in der EXT_WAKEUP# Leitung. Wenn alle drei Zeitperioden innerhalb des Bereichs liegen, dann geht der Microcontroller U2 davon aus, daß ein korrektes Rufzeichen (ring) in dieser Leitung aufgetreten ist und setzt (SET) das entsprechende Bit. Wenn es in der EXT_WAKEUP# Leitung kein LOW gibt, oder wenn keine der Zeitperioden außerhalb dieses Bereichs liegen, fährt der Microcontroller fort, ohne das Bit zu setzen.
  • Als nächstes prüft der Microcontroller bei 1286, ob ein Rufzeichen (ring) vorhanden war, oder ob der Minutes-to-Wake- Alarm abgelaufen ist. Beim R5-232 Rufzeichen (Ring), dem Optokoppler-Rufzeichen oder dem Minutes-to-Wake-Alarm bedeutet dies für den Microcontroller U2, zu prüfen, ob das zugehörige Bit gesetzt (SET) ist.
  • Wenn es weder ein Rufzeichen (ring) gegeben hat noch der Minutes-to-Wake-Alarm abgelaufen ist, dann wird das System wieder eingeschaltet, und der Microcontroller U2 springt zur Power-On-Routine, wie dies bei 1287 abgebildet ist.
  • Danach prüft der Microcontroller bei 1288, ob die Stromversorgung 17 die ±5 und ±12 Leitungen mit geregeltem Strom versorgt. Falls nicht, springt der Code zurück zu Aufgabe 1280 und wiederholt die Schleife. Andernfalls, wenn die Stromversorgung 17 die ±5 und ±12 Leitungen mit geregeltem Strom versorgt, führt der Microcontroller U2 bei 1292 die Heartbeat-Routine und bei 1296 die Fallsafe-Routine aus. Diese beiden Routinen werden im Begleittext zu den Aufgaben 1196 bzw. 1208 beschrieben.
  • Der Microcontroller U2 veranlaßt die Stromversorgung 17, die Versorgung der ±5 und ±12 Leitungen mit geregeltem Strom nur bei drei Zuständen einzustellen: (1) BIOS hat eine sofortige Netzabschaltung ausgegeben, die in der Kommunikationsroutine auszuführen ist, (ii) der Failsafe-Timer ist abgelaufen, oder (iii) der Benutzer drückt den Netzschalter, und das Suspend- Enable-Flag im Microcontroller U2 ist nicht gesetzt (SET), ein Zustand, bei dem der Microcontroller U2 jedesmal prüft, ob der SWITCH-Eingang gelesen wurde. Deshalb prüft der Microcontroller bei 1300, ob der Failsafe-Timer abgelaufen ist. Andernfalls springt der Code zurück zu Aufgabe 1280 und wiederholt die Schleife.
  • Andernfalls, wenn der Failsafe-Timer abgelaufen ist, was darauf hindeutet, daß das System abzuschalten ist, generiert der Microcontroller U2 bei 1304 ein SMI in der CPU 40, sofern er dazu in der Lage ist. Dies ermöglicht es der CPU bestimmte Aufgaben in der Annahme durchzuführen, daß das System sofort anschließend auszuschalten ist. Die CPU 40 führt beispielsweise eine Neüberechnung eines aktualisierten Minutes-to-Wake-Alarm-Werts durch und speichert diesen im Microcontroller U2.
  • Wenn die CPU 40 keine weitere Aktion auszuführen hat, schaltet der Microcontroller das System ab, nachdem ein programmierbarer SMI-Timer abgelaufen ist. Die CPU 40 kann diesen Zeitraum durch Neustart des SMI-Timers erweitern, wobei im Microcontroller U2 ein entsprechender Wert zu speichern ist.
  • Danach, und wenn sich beim Test bei 1268 herausstellt, daß die Stromversorgung keinen guten Strom liefert, schaltet der Microcontroller U2 das System bei 1308 ab. Dies bedeutet, daß (i) die Stromversorgung 17 veranlaßt wird, die Versorgung der ±5 und ±12 Leitungen mit geregeltem Strom einzustellen, (ii) die Kommunikationsunterbrechung deaktiviert wird, da die CPU 40 dabei ist Strom zu verlieren, (iii) die Ausgangsports (ausgenommen ON) auf HIGH eingestellt werden müssen, um ihren Stromverbrauch zu minimieren (SWITCH, EXT_RING, EXT_WAKEUP usw. können vom Microcontroller U2 in diesem Modus noch gelesen werden, (iv) die Power-Off-Variable so zu setzen ist, daß die verbleibenden Routinen wissen, daß die Leistung im System abgeschaltet wurde und (v) der Schalterstatus auf Off/Release gestellt wird, so daß bei der nächsten Schalterbetätigung das System wieder eingeschaltet wird.
  • Danach springt der Code zurück zu Aufgabe 1280 und wiederholt wieder die Schleife, wartet auf ein Rufzeichen (ring), auf eine Schalterbetätigung, auf BIOS, um ihm den Befehl zum Aufwecken des Systems zu geben oder darauf, daß der Minutesto-Wake-Alarm abläuft.
  • Systemsoftware
  • Nachdem die Hardwareaspekte des Rechnersystems 10 nach der vorliegenden Erfindung beschrieben wurde, sind noch die Codeaspekte zu beschreiben.
  • Es wird nun Bezug auf Fig. 8 genommen, die einen allgemeinen Überblick von der Power-Up-Routine zeigt. Die Routine beginnt bei 200, wenn die CPU zu dem Code springt, auf den der Reset- Vector zeigt, und führt diesen aus. Dies geschieht jedesmal, wenn die CPU eingeschaltet wird, und wenn die CPU entweder von einem Reset-Hardware-Signal zurückgesetzt wird, oder wenn ein RESET-Befehl ausgeführt wird, indem zu dem Code gesprungen wird, auf den der Reset-Vector zeigt. Diese Reset-Prozeduren sind im Stand der Technik bekannt.
  • Der Verlauf der Power-Up-Routine hängt in erster Linie davon ab, warum der Rechner eingeschaltet wurde. Wie im Begleittext zu Fig. 11 detaillierter beschrieben wird, kann das System 10 aufgrund eines Spannungsabfalls oder eines Blackouts angeschaltet worden sein. In diesem Fall wäre es falsch, wenn das System eingeschaltet bliebe. Die Power-Up-Routine bestimmt deshalb bei 940 zuerst, ob das System eingeschaltet bleiben sollte. Wenn das System falsch angeschaltet wurde, dann befiehlt die CPU dem Microcontroller U2, die Stromversorgung zu veranlassen, die Versorgung des Systems mit geregeltem Strom einzustellen (bei 942).
  • Ziel eines Tests, der durchzuführen ist, um festzulegen, ob das System eingeschaltet bleiben soll, ist es, zu bestätigen, daß in der Telefonleitung ein Rufzeichen anliegt, wenn das System als Reaktion auf das, was der Microcontroller für ein Rufzeichen gehalten hat, eingeschaltet wurde. Nachdem das System angeschaltet wird, wenn das System als Reaktion auf ein Rufzeichen (ring) aufgeweckt wurde, wahrend das System darauf wartet, daß sich die Festplatte im Magnetplattenlaufwerk 31 zu drehen beginnt, fragt die CPU 40 das Modem 900 oder 902 (die jetzt eingeschaltet sind), ob es ebenfalls ein Rufsignal (ring signal) erkennt. Andernfalls wird das System abgeschaltet. Wenn das Modem 900 oder 902 auch ein Rufsignal erkennt, dann bleibt das System angeschaltet und der Booting-Prozeß wird fortgesetzt.
  • Angenommen, das System bleibt eingeschaltet, dann hängt der Ablauf der Power-Up-Routine davon ab, ob sich das System im Off-Status 156 oder im Haltestatus 154 befindet. Das heißt, ob das Suspend-Flag in CMOS NVRAM 96 gelöscht oder gesetzt wird. Wie bei 202 abgebildet ist, bestimmt das System 10, ob es sich im Off-Status 156 oder im Haltestatus 154 ist, indem ein Suspend-Flag aus dem nichtflüchtigen CMOS-Speicher 96 ausgelesen wird. Wenn das System den normalen Betriebsstatus 150 verläßt, um entweder in den Off-Status 156 oder den Haltestatus 154 überzugehen, setzt (SET) oder löscht (CLEAR) jede Routine das Suspend-Flag in NVRAM 96. Wenn das Suspend- Flag im NVRAM 96 gesetzt (SET) ist, dann befindet sich das Rechnersystem 10 im Haltestatus 154, und der Status des Rechnersystems 10 wurde im Magnetplattenlaufwerk 31 gespeichert. Andernfalls, wenn das Suspen-Flag im NVRAM 96 gelöscht (CLEAR) wird, dann befindet sich das Rechnersystem 10 im Off-Status 156, und der Status des Rechnersystems 10 wurde nicht im Magnetplattenlaufwerk 31 gespeichert. Wenn das Suspend-Flag im NVRAM 96 gesetzt (SET) ist, dann führt der Rechner eine "normale" Boot-Routine aus (siehe die Aufgaben 204-210). Die erste Aufgabe ist der Power-on-Self-Test (POST), der bei 204 abgebildet ist und im Begleittext zu Fig. 11 ausführlicher erklärt werden wird. Nachdem die CPU 40 vom POST zurückgekehrt ist, ruft sie die PBOOT-Routine auf, um das Betriebssystem zu laden (siehe 206).
  • Die PBOOT-Routine ist eine normale Routine, die in IBM Computern und leicht verändert wurde, was im folgenden erklärt werden wird. PBOOT bestimmt, von wo aus zu booten ist (entweder vom Magnetplattenlaufwerk 31 oder von einer im Diskettenlaufwerk 27 eingelegten Diskette) und lädt das Betriebssystem, das die Systemanderungen - entsprechend den Befehlen der CONFigurSYS Datei - analysiert und ausfuhrt, und schließlich die AUTOEXEC.BAT Stapeldatei ausführt. Die PBOOT- Routine ist im Stand der Technik bekannt. Das OS lädt einen APM-Gerätetreiber, der BIOS fragt, ob BIOS APM kennt. Falls ja, führen die BIOS APM-Routine und die OS APM-Routine ein Handshaking durch und arbeiten anschließend zusammen, um die verschiedenen, hier beschriebenen Merkmale bereitzustellen. Das Betriebssystem fuhrt den Code auf unbestimmte Zeit aus, informiert die Supervisor-Routine, die Ausführungsprogramme "parallel" auszuführen, wie dies in 212 angegeben ist. Das heißt, das System 10 ist ein Zeit-multiplexiertes Mehrprogrammsystem (multitasking system), und die APM Get- Event-Routine und demzufolge die Supervisor-Routine werden regelmäßig ausgeführt. Das Endergebnis ist, daß die Supervisor-Routine etwa jede Sekunde ausgeführt wird. Die Supervisor-Routine wird im Begleittext zu Fig. 9 detailliert erklärt werden. Nachdem die normale Boot-Routine 204-210 beendet ist, befindet sich das Rechnersystem 10 im normalen Betriebsstatus 150, wie dies im Begleittext zu Fig. 4 erörtert wurde.
  • Es wird nun wieder auf Aufgabe 202 Bezug genommen. Wenn das Suspend-Flag im NVRAM 96 gesetzt ist, dann wurde der Systemstatus im Magnetplattenlaufwerk 31 gespeichert, und das System 10 führt eine Resume-Boot-Routine aus, die in den Aufgaben 214-220 beschrieben ist. Das System führt zuerst - wie bei 214 angegeben - einen verkürzten POST durch. Der verkürzte POST wird ausführlicher im Begleittext zu Fig. 11 erklärt werden. Im Anschluß an den verkürzten POST ruft das System die Resume-Routine auf (siehe 216). Die Resume-Routine wird im Begleittext zu Fig. 12 ausführlicher erklärt werden. Es ist überflüssig zu sagen, daß die Resume-Routine den Status des Rechnersystems 10 zurück in die Konfiguration bringt, die vorhanden war, bevor das System 10 in den Haltestatus - übergegangen ist. Anders als die normale Boot-Routine, die in den Aufgaben 204-210 dargestellt ist, muß die Resume-Boot- Routine den APM API nicht von der Existenz der Supervisor- Routine informieren, da die APM-Routine ausgeführt werden muß, um das System in den Haltestatus zu setzen, und wenn der Systemstatus wiederhergestellt ist, wird das APM wieder in den Speicher zurückgeladen. Wenn die Resume-Routine beendet ist, wird der Status des Systems 10 wiederhergestellt. Das APM ist bereits eingerichtet und läuft "parallel" zum wiederhergestellten Code, wie dies bei 212 und 220 angegeben ist. Nachdem die Resume-Boot-Routine 214-220 beendet ist, befindet sich das Rechnersystem 10 im normalen Betriebsstatus 150, wie dies im Begleittext zu Fig. 4 erläutert wurde. Nachdem entweder die normale Boot-Routine 204-210 oder die Resume-Boot-Routine 214-220 ausgeführt sind, befindet sich das Rechnersystem 10 im normalen Betriebsstatus 150.
  • Fig. 9 zeigt ein Flußdiagramm, in dem Einzelheiten der Supervisor-Routine abgebildet sind, die vom APM etwa jede Sekunde wahrend eines "Get-Event" aufgerufen wird. Verschiedene Betriebssysteme führen ein Get-Event mit verschiedenen Frequenzen aus.
  • Die Supervisor-Routine beginnt bei 222 in Fig. 9. Im folgenden Text wird angenommen, daß das Rechnersystem 10 im normalen Betriebsstatus 150 startet. Die erste Aufgabe ist es, bei 224 zu prüfen, ob der Benutzer den Schalter 21 gedruckt hat. Der Schalter 21 wird von der CPU 40 geprüft, die den Microcontroller U2 abfragt, wie dies ausführlicher im Begleittext zu Fig. 6A und Fig. 7 beschrieben wurde.
  • Wenn der Test bei Aufgabe 224 angibt, daß der Benutzer den Schalter 21 gedruckt hat, dann bestimmt die Supervisor-Routine bei 950 als nächstes, ob vorher ein Suspend-Request an den APM-Gerätetreiber in OS ausgegeben wurde.
  • Wenn der Test bei Aufgabe 950 feststellt, daß noch kein Suspend-Request an den APM-Treiber gesendet wurde, dann gibt die Supervisor-Routine bei 226 einen "Suspend Request" an den OS APM-Geratetreiber aus und kehrt dann bei 228 zum APM- Treiber zurück. Als Reaktion auf das Setzen des "Suspend Request" APM Return-Code sendet der APM-Treiber den kurz bevorstehenden Haltestatus an alle, so daß APM bekannte Gerate die notwendigen Systemaufgaben (z.B. das Synchronisieren der Festplatten) ausführen können und gibt anschließend den "Suspend Command" aus, der die APM BIOS Routing Routine veranlaßt, die Suspend-Routine aufzurufen. Die Suspend-Routine ist im Begleittext zu Fig. 10 beschrieben. Die Suspend- Routine veranlaßt das System 10 im wesentlichen, den normalen Betriebsstatus 150 zu verlassen und in den Haltestatus 154 überzugehen und kann die Steuerung an die Supervisor-Routine nach mehreren Befehlen (wenn das System nicht bereit ist, in den Haltestatus zu gehen) oder nach mehreren Minuten, Stunden, Tagen, Wochen oder mehrere Jahre später (wenn das System gehalten und wiederaufgenommen wurde) zurückgeben. Die Suspend-Routine setzt (SET) immer den "Normal Resume" APM Return Code, und zwar unabhängig davon, ob die Suspend-Routine ohne gehalten worden zu sein, zurückkehrt oder nach einem abgeschlossenen Halte- und Wiederaufnahmevorgang.
  • Meistens wurde bei Aufgabe 224 der Schalter 21 nicht gedrückt, und die Supervisor-Routine geht dann zu Aufgabe 952, um festzustellen, ob ein Critical Suspend Flag gesetzt wurde. Wenn vorher ein Suspend-Request an den APM-Treiber in OS gesendet wurde, dann geht die Supervisor-Routine ebenfalls zu Aufgabe 952, um festzustellen, ob ein Critical-Suspend-Flag gesetzt wurde. Wenn das Critical-Suspend-Flag gesetzt wurde, prüft die Supervisor-Routine bei 954 als nächstes, ob vorher ein Critical-Suspend-Request an den APM-Treiber ausgegeben wurde.
  • Wenn kein Critcial-Suspend-Request an den APM-Treiber ausgegeben wurde, dann gibt die Supervisor-Routine bei 956 den Critical Suspend Request APM Return Code aus und kehrt dann bei 958 zum APM-Treiber zurück. Als Reaktion auf den Critical- Suspend-Request hält der APM-Treiber das System sofort, ohne alle von dem kurz bevorstehenden Halt zu informieren. Deshalb können APM bekannte Geräte ihre jeweiligen vorher gehaltenen Aufgaben nicht ausführen.
  • Wenn bei 952 das Critical-Suspend-Flag nicht gesetzt ist, oder der Critical Suspend Request bei 954 bereits an den APM- Treiber in OS ausgegeben wurde, bestimmt die Supervisor- Routine bei 957 als nächstes, ob ein "Suspend" länger als 15 Sekunden anliegt. Falls ja, setzt die Supervisor-Routine bei 958 das Critical-Suspend-Flag und veranlaßt dadurch, daß der Test bei Aufgabe 954 während des nächsten APM Get Event geprüft wird.
  • Danach, oder wenn ein "Suspend" nicht länger als 15 Sekunden anliegt, prüft der Supervisor bei 959, ob ein "Suspend" anliegt. Falls ja, fordert die CPU 40 den Mikroprozessor U2 bei 960 auf, den Failsafe-Timer und den APM Fail-Suspend-Timer neu zu starten (Reset).
  • Danach, oder wenn kein "Suspend" anliegt, geht die Supervisor- Routine als nächstes zu Aufgabe 230, um zu prüfen, ob das System gerade wieder aufgenommen wurde. Wenn die Suspend- Routine aufgerufen wird, dann denkt das System, daß es gerade wieder aufgenommen wurde, und zwar unabhängig davon, ob die Suspend-Routine ohne gehalten worden zu sein, zurückkehrt oder nach einem abgeschlossenen Halte- und Wiederaufnahmevorgang zurückkehrt. Die Wiederaufnahme wird bei 230 geprüft, und wenn das System gerade wieder aufgenommen wurde (oder das Halten erfolgte nicht aufgrund der DMA- oder Datei-Aktivität) wird bei 232 ein "Normal Resume" APM Return Code ausgegeben und an das APM bei 234 zurückgegeben. Als Antwort aktualisiert der APM OS Treiber die Systemuhr und sonstige Werte, die in der Zwischenzeit überholt sind.
  • Meistens wurde das System gerade nicht wieder aufgenommen, und die Supervisor-Routine geht dann zu Aufgabe 236, um zu prüfen, ob eine Benutzeraktivität erfolgt ist. Bei Aufgabe 236 werden drei Arten der Benutzeraktivität geprüft: Aktivität des Magnetplattenlaufwerks 31, Aktivität der Tastatur 12 und Aktivität der Maus 13. Bei jedem APM Get Event liest die Supervisor-Routine die Werte für den Magnetkopf, den Zylinder · und den Sektor aus dem Magnetplattenlaufwerk 31, fragt den Microcontroller U2, ob es entweder in der Maus- Unterbrechungsleitung oder in der Tastatur- Unterbrechungsleitung eine Aktivität gegeben hat - beides sind Benutzeraktivitäten - und liest den Minutenwert, der von 0 Minuten bis 59 Minuten reicht, aus der Realzeituhr 98 und springt dann zu Beginn jeder Stunde auf 0 Minuten zurück. Die drei Variablen von der Aktivität des Magnetplattenlaufwerks (Kopf, Zylinder und Sektor) und der Minutenwert werden dann temporär gespeichert. Anschließend werden die Variablen von der Aktivität des Magnetplattenlaufwerks mit den Variablen des Magnetplattenlaufwerks, die von dem vorherigen Get Event gespeichert wurden, verglichen. Wenn die drei aktuellen Werte des Magnetplattenlaufwerks mit den Werten von dem vorherigen Get Event übereinstimmen, und wenn es weder in der Maus- noch in der Tastatur-Unterbrechungsleitung eine Aktivität gegeben hat, dann haben keine Benutzeraktivitäten stattgefunden. Wenn sich die Werte des Magnetplattenlaufwerks unterscheiden, oder wenn es entweder in der Maus- oder in der Tastatur- Unterbrechungsleitung Aktivitäten gegeben hat, dann hat eine Benutzeraktivität stattgefunden, und die aktuellen Variablen von der Aktivität des Magnetplattenlaufwerks werden gespeichert, um mit den Werten verglichen zu werden, die während des nachsten Get Event eingelesen werden.
  • Das obige Aktivitäts-Erkennungsschema ist so, daß eine Routine in der CPU ausgeführt wird, um Aktivitäten des Magnetplattenlaufwerks festzustellen. Nur zwei Hardware- Unterbrechungen werden auf Aktivitäten untersucht. Alternativ könnten die Aktivitäten ausschließlich in einem Hardware-Modus überwacht werden. Die 16 Hardware-Unterbrechungsleitungen könnten auf Aktivitäten überwacht werden.
  • Wenn eine Aktivität stattgefunden hat, bestimmt die Supervisor-Routine als nächstes, ob sich das Rechnersystem 10 im Standby-Status 152 befindet, indem sie bei 238 das Standby- Flag prüft. Wenn das Standby-Flag gesetzt (SET) wurde, befindet sich das System 10 im Standby-Status 152. Die Supervisor-Routine verläßt dann den Standby-Status 152 und geht bei 240 in den normalen Betriebsstatus über. Die Supervisor-Routine verläßt den Standby-Status 152, indem sie die Einheiten, die vorher abgeschaltet wurden, wieder einschaltet, wenn der Übergang in den Standby-Status 152 erfolgt ist (siehe Fig. 18). Kurz gesagt, wenn das System den Standby-Status 152 verläßt, stellt die Supervisor-Routine das Bildsignal wieder her, setzt die Festplatte innerhalb des Magnetplattenlaufwerks 31 in Bewegung, stellt die Systemuhr wieder her, deaktiviert APM CPU Idle-Anrufe, so daß die CPU Idle-Anrufe vom APM-Treiber die CPU 40 nicht länger anhalten, und löscht ein Flag, das angibt, daß sich System 10 im Standby-Status 152 befindet.
  • Wenn eine Aktivität stattgefunden hat, dann wird der Minutenwert aus der Realzeituhr 98 auch gespeichert, um mit dem Minutenwert verglichen zu werden, der während aufeinanderfolgender Get Events gelesen wurde. Beim Speichern des aktuellen Minutenwerts werden der Inaktivitäts-Standby- Timer und die Inaktivitäts-Halte-Timer bei 241 wirksam zurückgesetzt. Während des normalen Betriebs finden Benutzeraktivitäten statt, und die Supervisor-Routine setzt (SET) den "No Event" APM Return Code bei 242 und kehrt bei 243 zum APM Calling-Code zurück. Das APM ruft als Reaktion auf den "No Event" Return Code keine weiteren Routinen mehr auf.
  • Wenn sich nach dem Test bei Aufgabe 236 herausstellt, daß keine Benutzeraktivität stattgefunden hat, dann prüft die Supervisor-Routine bei 245 bzw. 247 als nächstes, ob der Inaktivitäts-Standby-Timer und der Inaktivitäts-Halte-Timer abgelaufen sind. Wenn sich das System 10 im Standby-Status 152, dann wird nicht geprüft, ob der Inaktivitäts-Standby- Timer abgelaufen ist. Statt dessen wird der Test bei Aufgabe 244 übersprungen.
  • Es wird geprüft, ob die beiden Timer abgelaufen sind, indem der aktuelle Minutenwert von dem gespeicherten Minutenwert abgezogen wird, um einen Wert zu erhalten, der der Anzahl der Minuten entspricht, während der die Benutzeraktivität stattgefunden hat. Dieser Wert wird bei 245 mit dem Inactivity-Standby-Timeout-Wert und bei 247 mit dem Inactivity-Suspend-Timeout-Wert verglichen. Die beiden Timeout-Werte können vom Benutzer ausgewählt werden und so gesetzt werden, daß das System, aufgrund der Tatsache, daß einer der Timer abgelaufen ist, niemals in den Standby-Status 152, niemals in den Haltestatus 154 oder niemals weder in den Standby-Status 152 noch in den Haltestatus 154 übergeht. Wird der Timeout-Wert auf Null (0) gesetzt, bedeutet dies, daß der Timer niemals ablaufen sollte.
  • Wenn die Anzahl der Minuten, seit der letzten Benutzeraktivität gleich oder größer dem Inaktivitäts-Standby- Timeout-Wert ist, dann veranlaßt die Supervisor-Routine das System 10, bei 246 in den Standby-Status 152 überzugehen. Wenn der Inaktivitäts-Standby-Timer nicht abgelaufen ist, prüft die Supervisor-Routine bei 247 als nächstes, ob der Inaktivitäts- Halte-Timer abgelaufen ist. Andernfalls, wenn der Inaktivitats-Standby-Timer abgelaufen ist, veranlaßt die Supervisor-Routine das System 10, in den Standby-Status 152 überzugehen, indem bestimmte Komponenten in ihre jeweiligen. Kleinleistungsmodi gesetzt werden (siehe Fig. 18) Kurz gesagt, die Supervisor-Routine in dem bevorzugten Ausführungsbeispiel tastet das Bildsignal aus, verlangsamt die Festplatte im Magnetplattenlaufwerk 21, fährt die Systemuhr herunter, aktiviert die APM CPU Idle-Calls, so daß die CPU Idle calls vom APM-Treiber die CPU 40 anhalten, und setzt ein Flag, das angibt, daß sich das System 10 im Standby-Status 152 befindet. Nachdem das System 10 veranlaßt wurde, in den Standby-Status 152 überzugehen, prüft die Supervisor-Routine bei 247, ob der Inaktivitäts-Halte-Timer abgelaufen ist. Die Supervisor-Routine prüft bei 247, ob der Inaktivitäts- Halte-Timer abgelaufen ist. Wenn die Anzahl der Minuten seit der letzten Benutzeraktivität gleich oder größer als der Inactivity-Suspend-Timeout-Wert ist, dann setzt die Supervisor-Routine bei 248 den "Suspend Request" APM Return Code und kehrt dann bei 243 zu APM zurück. Wie oben im Begleittext zu Aufgabe 226 beschreiben wurde, führt das APM als Reaktion auf das Setzen (SET) des "Suspend Request" APM Return Code die notwendigen Systemaufgaben aus und ruft dann die Suspend-Routine auf. Die Suspend-Routine wird im Begleittext zu Fig. 10 ausführlicher erörtert. Kurz gesagt, sie veranlaßt das System 10, den normalen Betriebsstatus 150 zu verlassen und in den Haltestatus 154 überzugehen. Wie im Begleittext zu Aufgabe 226 beschrieben, kann die Suspend- Routine die Steuerung an die Supervisor-Routine zurückgeben, und zwar mit oder ohne angehaltenem/angehaltenes System 10. Andernfalls, wenn der Inaktivitäts-Halte-Timer nicht abgelaufen ist, dann setzt (SET) die Supervisor-Routine den "No Event" APM Return Code bei 242 und kehrt bei 243 zum APM Calling-Code zurück.
  • Obwohl öfters ein "No Event" APM Return Code an das APM zurückgeschickt wird, können verschiedene andere Ereignisse an das APM zurückgeschickt werden. Es kann jedoch nur ein APM Return Code pro APM Get Event angegeben werden. Beim Übergang in den Standby-Status 152 wird beispielsweise ein "No Event" an APM zurückgeschickt. Beim Verlassen des Haltestatus 154 wird der "Normal Resume" APM Return Code an das APM zurückgeschickt. Die spezifischen Meldungen, die für APM in die Warteschlange eingereiht wurden, hängen von der genauen Art des Computersystems ab. Die Supervisor-Routine sendet auch einen "Normal Resume" APM Return Code oder einen "Suspend Request" APM Return Code zurück.
  • Es wird nun auf Fig. 9B Bezug genommen, in der die APM Working-on-Last-Request-Routine, die bei 961 beginnt, abgebildet ist. Als Reaktion auf den ausgegebenen APM Working on Last Request starten die BIOS APM Routinen den Failsafe- Timer neu und der APM Failsuspend-Timer im Microcontroller U2 startet bei 962 den 15-Sekunden Suspend-Pending-Timer neu, um zu verhindern, daß ein Critical-Suspend-Request ausgegeben wird, während OS APM noch auf das System wartet, um bei 963 das Halten richtig vorzübereiten und bei 964 zurückzukehren.
  • Es wird nun auf Fig. 9C Bezug genommen, in der die APM Reject-Last-Request-Routine, die bei 965 beginnt, abgebildet ist. Als Reaktion auf den ausgegebenen APM Reject Last Request starten die BIOS APM Routinen den Failsafe-Timer neu und der APM Failsuspend-Timer im Microcontroller U2 setzt bei 966 das Critical Suspend Flag, und erzwingt dadurch bei 967 einen sofortigen Halt und kehrt bei 968 zurück.
  • Die Power-Up- und Resume-Routinen kann man besser verstehen, wenn man die Suspend-Routine kennt. Es wird daher angenommen, daß eine Beschreibung der APM BIOS Routinen am besten in der folgenden Reihenfolge durchgeführt wird: ein allgemeiner Überblick von der Power-Up-Routine gemäß der vorliegenden Erfindung (in Fig. 8 oben), Einzelheiten von der Supervisor- Routine (Fig. 9), Einzelheiten von der Suspend-Routine gemäß der vorliegenden Erfindung (Fig. 10), Einzelheiten vom Power- Up-Prozeß gemäß der vorliegenden Erfindung (Fig. 11), Einzelheiten von der Resume-Routine gemäß der vorliegenden Erfindung (Fig. 12), Einzelheiten von der Save-CPU-State- Routine (Fig. 13), Einzelheiten von der Restore-CPU-State- Routine (Fig. 14) und Einzelheiten von der Save-8259-State- Routine (Fig. 15).
  • Es wird angenommen, daß, während eine Erörterung des Rechnersystems 10 gemäß der vorliegenden Erfindung sich im Kreise dreht, da die meisten der Routinen untereinander kommunizieren und der Suspend-/Resume-Prozeß ein kontinuierlicher Zyklus ist, eine Erörterung der Suspend- Routine (Fig. 10) vor der Boot-Routine (Fig. 11) oder der Resume-Routine (Fig. 12) hilfreicher ist. Es wird nun auf Fig. 10 Bezug genommen, in der ein Flußdiagramm von der Suspend-Routine abgebildet ist. Es wird daran erinnert, daß, nachdem entweder die normale Boot-Routine 204-210 oder die Resume-Boot-Routine 214-220 ausgeführt wurde, das Rechnersystem 10 im normalen Betriebsstatus 150 ist. Außerdem, wie oben im Begleittext zu Fig. 8 erwähnt, ob das Rechnersystem entweder normal gebootet wurde (204-210) oder resume-gebootet wurde (214-220), kennt der APM OS Treiber nachdem die Routine beendet ist, die APM BIOS Routinen, wie die Supervisor-Routine, die in Fig. 8 abgebildet ist. Daraus resultiert, daß APM die Supervisor-Routine etwa jede Sekunde abruft.
  • Die Suspend-Routine ist in Fig. 10 abgebildet und beginnt bei 250. Die Suspend-Routine wird von APM als Reaktion auf die Supervisor-Routine aufgerufen, die dem APM einen "Suspend Request" APM Return Code zurücksendet. Außerdem wird die Suspend-Routine aufgerufen und teilweise ausgeführt, wenn das System einen Haltepunkt ausführt, was ausführlicher im Begleittext zu den Fig. 17 und 18 erklärt ist. Erstens hängt der Ablauf der Suspend-Routine davon ab, ob die CPU 40 bei 970 ein S-Teil mit einem SMI ist. Falls ja, veranlaßt die CPU 40 den Microcontroller U2 bei 972 ein SMI zurück an die CPU 40 zu generieren. Als Reaktion auf SMI speichert der Mikrocode in der CPU 40 bei 974 den Status der CPU 40 in der Datenstruktur von Segment E000H, wie dies dem Fachmann bekannt ist.
  • Andernfalls, wenn die CPU 40 kein S-Teil mit einem SMI ist, wird die Save-CPU-State-Routine aufgerufen (siehe 252). Die Save-CPU-State-Routine ist ausführlicher im Begleittext von Fig. 13 beschrieben. Es ist überflüssig nun zu sagen, daß es keine Rolle spielt, in welchem Modus die CPU 40 ist, wenn die Suspend-Routine ursprünglich aufgerufen wird. Der Rest der Suspend-Routine wird ausgeführt, während die CPU 40 im Real- Mode ist, und kann deshalb ohne Angst vor Fehlern ausgeführt werden, die entstehen könnten, wenn versucht wird, einen Befehl außerhalb des zulässigen Adreßraums auszuführen, oder wenn versucht wird, einen privilegierten Befehl auszuführen.
  • Die Save-CPU-State-Routine sendet bei 253 die Programmsteuerung auf eine einzigartige Weise an die Suspend- Routine zurück. Die "Rückkehr" (Return) von der Save-CPU- State-Routine in die Suspend-Routine beinhaltet das Rücksetzen der CPU und wird ausführlicher im Begleittext zu den Aufgaben 630 und 632 von Fig. 13 erläutert. Ein wichtiges Detail in bezug auf die Suspend-Routine ist, daß die CPU-Register in die Datenstruktur des E000H Segments geschrieben wurde, und die CPU 40 nun im Real-Mode ist.
  • Nachdem die Save-CPU-State-Routine zurückgekehrt ist, oder nachdem die CPU ihren eigenen Status als Reaktion auf ein SMI gespeichert hat, stellt die Suspend-Routine bei 254 fest, ob der Schalter 21 gedrückt wurde. Das Schließen des Schalters 21 wird gemäß der Beschreibung im Begleittext zu den Fig. 6 und 7 geprüft. Wenn der Schalter nicht gedrückt wurde, dann ist der Suspend-Underway ein Software-Suspend, und das Software-Suspend-Flag wird im CMOS NVRAM 96 gesetzt (SET). Dadurch wird sichergestellt, daß ein Software-Suspend nicht mit einem Hardware-Suspend verwechselt wird, das beim Schließen des Schalters aufgerufen wird. Alle Software- Suspends werden in Hardware-Suspends umgewandelt, indem ein Bit im Microcontroller U2 gesetzt wird. Beim nächsten Schließen des Schalters, nachdem der Software-Suspend in einen Hardware-Suspend umgewandelt wurde, wird der Suspend-Vorgang abgebrochen.
  • Die nächste Aufgabe bei 262 besteht darin, einen Stapel im Segment E000H zu setzen.
  • Nachdem der Stapel gesetzt ist, prüft die Suspend-Routine bei 264 das DMA-Steuersystem 72, den Diskettenadapter 84 und das IDE-Festplattensteuerwerk 86, um zu prüfen, ob irgendwelche Übertragungen vom DMA, Diskettenlaufwerk oder Magnetplattenlaufwerk zur Zeit unterwegs sind. Falls ja, kann der Suspend-Vorgang nicht durchgeführt werden, da die Eigenschaften, die zu diesen drei Arten von Übertragungen gehören, verhindern, daß ein zufriedenstellender Haltevorgang ausgeführt wird. Wenn beispielsweise eine Übertragung vom Magnetplattenlaufwerk 31 unterwegs ist, wurden die Daten bereits vom IDE-Festplattensteuerwerk 86 gelesen, aber noch nicht an den Systemspeicher 53 übertragen. Auf diese Daten kann die CPU nicht entsprechend zugreifen, und deshalb würden diese Daten verlorengehen, wenn das System in der Mitte eines Einlesevorgangs vom Magnetplattenlaufwerk angehalten wird. Somit wird der Haltevorgang, wenn eine dieser drei Übertragungsarten in Arbeit ist, bis zum nächsten APM Get Event verschoben, wenn IDE-Festplattensteuerwerk und Diskettenlaufwerke nochmals auf Aktivitäten hin geprüft werden.
  • Demzufolge müssen die bei 252, 260 und 262 durchgeführten Aufgaben umgekehrt werden, so daß die Steuerung zu APM zurückkehren kann. Zuerst wird BIOS von Read/Write in Read- Only (siehe 265) geändert. Dies geschieht, indem das Segment BOGOH geschlossen wird, das noch die schattierten (shadowed) Daten enthält. Der Stapel, der bei Aufgabe 262 erstellt wurde, wird ausgespeichert und wiederhergestellt. Schließlich wird der CPU-Status bei 266 von der Restore-CPU-State-Routine wiederhergestellt, bevor die Steuerung bei 267 zu APM zurückgegeben wird. Die Suspend-Routine wird während des nächsten Get Event in etwa einer Sekunde vom APM abgerufen. Die Übertragung/en, die den Suspend-Prozeß verhinderten, wird/werden wahrscheinlich in dieser Zeit abgeschlossen und ermöglichen dadurch, daß der Suspend-Vorgang fortgesetzt werden kann.
  • Zurück zu Aufgabe 264. Wenn zur Zeit keine Übertragungen vom DMA, Diskettenlaufwerk oder Magnetplattenlaufwerk unterwegs sind, dann kann ein Haltevorgang ausgeführt werden. Die Suspend-Routine fährt bei 268 fort. Es wird daran erinnert, daß der Failsafe-Timer kontinuierlich abwärts zählt und das System veranlassen wird, sich selbst abzuschalten, wenn der Timer abgelaufen ist, während der Schalter 21 im Off/Release- Status ist. Deshalb besteht eine erste Aufgabe darin, den Failsafe-Timer zurückzusetzen, was im Begleittext zu den Fig. 6A und 19 beschrieben ist (siehe 268).
  • Als nächstes wird bei 270 der Status des 8042 Koprozessors 104 gespeichert. Die Register des 8042 Koprozessors 104 sind im Stand der Technik bekannt. Die Register werden direkt von der CPU 40 ausgelesen, und ihre Werte werden direkt in die Datenstruktur in E000H geschrieben.
  • Anschließend wird bei 272 der Status des 8259 Unterbrechungssteuergeräts gespeichert. Die Suspend-Routine ruft die 8259 Save-State-Routine auf, die im Begleittext zu Fig. 15 ausführlicher beschrieben ist. Es ist hier überflüssig zu sagen, daß die 8259 Save-State-Routine die Inhalte der unbekannten Register von den beiden 8259 Unterbrechungssteuergeräten 92 feststellt, und zwar obwohl in einige der Register nur geschrieben werden kann. Die Registerwerte werden direkt in die Datenstruktur in E000H geschrieben.
  • Nachdem der Status des Unterbrechungssteuergeräts 92 gespeichert ist, muß die Konfiguration des Unterbrechungssteuergeräts 92 in einen bekannten Status geändert werden, um die richtige Funktion der verschiedenen, unterbrechungsgesteuerten Aufgaben, die von der Suspend- Routine ausgeführt werden, zu ermöglichen. Deshalb werden die BIOS Data Area & Vector Tabellen bei 274 überlagert. Die Suspend-Routine kopiert die Inhalte der BIOS Data Area and Vector Tabelle in Segment 0000H mit dem gegenwärtigen Status an eine Stelle in Segment E000H. Anschließend werden die Inhalte der BIOS Data Area und Vector Tabelle mit dem bekannten Status bei Aufgabe 414 der Boot-Up-Routine in Segment E000H kopiert, wie dies in Fig. 11 dargestellt ist, die spater erörtert werden wird. Schließlich wird die BIOS Data Area and Vector Tabelle mit dem gegenwärtigen Status von Segment 000H in die Datenstruktur in Segment E000H kopiert. Wenn die Routine bei 274 beendet ist, werden alle Unterbrechungen, wie beispielsweise die Unterbrechung 13H (disk read/write) und 10H (video access) wie erwartet funktionieren.
  • Anschließend wird bei 276 der Status der Timer 102 gespeichert. Die Register der Timer sind im Stand der Technik bekannt. Alle Register können von der CPU 40 direkt gelesen werden, und ihre Werte werden direkt in die Datenstruktur in E000H geschrieben. Der Status des IDE-Festplattensteuerwerks 86 wird ebenfalls bei 276 gespeichert. Die Register des IDE- Festplattensteuerwerks 86 sind im Stand der Technik bekannt. Alle Register können von der CPU 40 direkt gelesen werden, und ihre Werte werden direkt in die Datenstruktur in E000H geschrieben.
  • Im nächsten Schritt wird der Systemspeicher entsprechend vorbereitet, damit er in der Suspend-Datei im Magnetplattenlaufwerk 31 gespeichert werden kann. Der Systemspeicher enthält einen System-RAM 53 (der sowohl den Haupt- als auch einen Erweiterungsspeicher enthält) und den Bildspeicher 58. Zu diesem Zeitpunkt können Teile des RAM 53 im externen Cache 60 sein. Der CPU-Cache wurde bei Aufgabe 624 geleert, was im Begleittext zu Fig. 13 detaillierter erklärt werden wird. Anschließend wird bei 286 der externe Cache geleert und entsprechend aktiviert, um die Speichervorgänge im Magnetplattenlaufwerk 31 zu beschleunigen, Bei der Codeausführung im System 10 kann das IDE- Festplattensteuerwerk 86 in einen unbekannten Status gesetzt worden sein. Folglich besteht der nächste Schritt darin, das IDE-Festplattensteuerwerk 86 bei 292 in einen bekannten Status zu setzen. Dies geschieht, indem die Werte direkt in die Register im IDE-Festplattensteuerwerk 86 geschrieben werden.
  • Anschließend wird eine unterbrechungsgesteuerte parallele Befehlsfolge, um den Status von Modems in der E000H Datenstruktur zu lesen und zu speichern, bei 976 gestartet. Die Routine erfaßt die Unterbrechung, die dem COMM-Port entspricht, der zu dem bestimmten Modem gehört, überträgt die Befehle an das Modem, um es zu veranlassen, nacheinander die Inhalte seiner Register zurückzuübertragen, empfängt die Registerinhaltsübertragungen vom Modem und speichert die Registerwerte in der E000H Datenstruktur. Diese Routine überträgt einen ersten Befehl an das Modem und antwortet dann in einem unterbrechungsgesteuerten Modus, der die Antwort des Modems empfängt und den nächsten Befehl an das Modem überträgt, das auf jede COMM-Port-Unterbrechung reagiert, bis alle Register des Modems gespeichert wurden. Falls bei der Ausführung keine parallele Befehlsfolge benutzt wird, könnte diese Routine einige Sekunden (3-5 Sekunden pro Modem, was von dem jeweiligen Modem und der aktuellen Baudrate abhängt) zu der Zeit hinzufügen, die es dauert, um das System anzuhalten. Als eine unterbrechungsgesteuerte parallele Befehlsfolge fügt sie wenig oder keine Zeit zum Haltevorgang hinzu, wenn die Ausführung abgeschlossen ist, bevor der Systemstatus im Magnetplattenlaufwerk 31 gespeichert ist.
  • Nachdem die Interrupt-Driven-Parallel-Thread-Modem-Save- Routine gestartet wurde, muß die Suspend-Datei bei 294 auf der Festplatte im Magnetplattenlaufwerk 31 vorhanden sein. Kopf, Sektor und Zylinder der Suspend-Datei werden im CMOS-Speicher 96 gespeichert. Sobald die Suspend-Datei gefunden wurde, werden Dateigröße und Signatur gelesen. Im bevorzugten Ausführungsbeispiel ist die Signatur ein ASCII-Code von beliebiger Länge, der das Vorhandensein der Suspend-Datei angibt. Sonstige alternative Implementierungen der Signatur sind möglich, beispielsweise mittels binärer Zeichenketten mit der sehr geringen Wahrscheinlichkeit zufällig in einem Festplattensystem gefunden zu werden.
  • Nachdem Dateigröße und Signatur für die Suspend-Datei gelesen wurden, besteht der nächste Schritt darin, sicherzustellen, daß Signatur und Dateigröße korrekt sind (siehe 296). Wenn die Signatur falsch ist, kann es sein, daß ein anderes Programm die Suspend-Datei geändert hat, oder die Dateigröße nicht korrekt ist, was darauf hindeutet, daß die Größe der Suspend- Datei geändert wurde, dann ruft die Suspend-Routine die Fatal- Suspend-Error-Routine auf, die bei Aufgabe 652 von Fig. 13 bei 298 beginnt. Wenn der Benutzer den Schalter 17 betätigt, um die Fatal-Suspend-Error-Routine zu verlassen, springt die Programmsteuerung von Aufgabe 299 zu Aufgabe 506.
  • Andernfalls, wenn die Signatur korrekt ist, und die Suspend- Datei groß genug ist, dann kann die Suspend-Routine fortfahren, den Status des Rechnersystems im Speicher zu speichern.
  • Bevor der Status des Rechnersystems 10 auf der Festplatte 31 gespeichert wird, gibt die CPU 40 dem Microcontroller U2 den Befehl, den Failsafe-Timer neu zu starten (Reset) und fordert den Microcontroller U2 auf, bei 297 festzustellen, ob der Schalter 21 wieder gedrückt wurde. Wenn der Schalter 21 nicht wieder gedrückt wurde, dann sollte der Haltevorgang fortgesetzt werden. Andernfalls, wenn der Schalter 21 wieder gedrückt wurde, wird der Haltevorgang abgebrochen. Der Failsafe-Timer wird neu gestartet, und der Schalter 21 wird dahingehend überprüft, ob an verschiedenen Punkten in der Suspend-Routine schließt. Aufgabe 297 dient nur zu Illustrationszwecken. Ein Schaltkreis-Designer mit Fachkenntnissen in der anwendbaren Technik ist in der Lage, die Dauer und die zulässige Zeit zwischen den Neustarts des Failsafe-Timer festzustellen. Die Suspend-Routine sollte den Failsafe-Timer zurücksetzen, bevor er abläuft und den Microcontroller U2 veranlaßt, die Stromversorgung 17 auszuschalten. Der Schalter 21 sollte ebenso gelegentlich geprüft werden. Wenn der Schalter 21 wieder gedrückt wurde, bedeutet dies, daß der Benutzer den Haltevorgang abbrechen möchte. Der Code springt dann an den entsprechenden Punkt in der Resume-Routine, um den Haltevorgang aufzuheben ("unsuspend") und mit der Wiederherstellung von dem Teil- Haltevorgang zu beginnen.
  • Ebenso kann durch Drücken der Tasten Ctrl-Alt-Del bei 350 der Haltevorgang abgebrochen werden. Das Drücken der Ctrl-Alt- Delete Tasten (Taste Control, Taste Alt und Taste Delete gleichzeitig drücken) ist ein bekanntes Verfahren, um normale Rechnersysteme, basierend auf der IBM BIOS und Intel 80 · 86 Serie von CPUs. Das Rechnersystem 10 behandelt ein Ctrl-Alt- Del mit einem BIOS Interrupt 1 Handler, der im Stand der Technik bekannt ist. Das Rechnersystem 10 hat einen etwas geänderten Interrupt 1 Handler bei 350, der das Suspend Flag im CMOS-Speicher 96 bei 352 löscht und springt beim Reset zur Boot-Up-Routine (bei 354).
  • Im Rechnersystem 10 gemäß der vorliegenden Erfindung wird das Rechnersystem durch das Drücken von Ctrl-Alt-Del, während die Suspend-Routine ausgeführt wird, in den Off-Status 156 überzugehen. Dies geschieht, da nach dem Schließen des Schalters 21 durch Drücken von Ctrl-Alt-Del die Boot-Up- Routine aufgerufen wird, und die Boot-Up-Routine initialisiert den Microcontroller U2 in einem Status, in dem der Failsafe- Timer abgelaufen ist, und der Schalter noch immer im Off/Release-Status ist. Durch Drücken von Ctrl-Alt-Del während der Suspend-Routine wird das Rechnersystem veranlaßt, in den Off-Status 156 überzugehen.
  • Es wird nun auf Aufgabe 300 Bezug genommen. Die Suspend-Datei befindet sich wieder im Magnetplattenlaufwerk. Der Signaturausdruck wird bei 300 in die ersten Bytes der Suspend- Datei geschrieben. Anschließend werden die ganzen Daten (64 KB) im Segment E000H bei 302 in die Suspend-Datei geschrieben. Diese 64K-Kopie von E000H ist tatsächlich nur ein Platzhalter und wird an dieser Speicherstelle am Ende der Suspend-Routine neu geschrieben.
  • Anschließend wird bei 303 der Status des Bildsteuersystems 56 gespeichert. Die Register des Bildsteuersystems 56 sind im Stand der Technik bekannt. Alle Register können direkt von der CPU 40 gelesen werden, und ihre Werte werden direkt in die Datenstruktur in E000H geschrieben.
  • Als nächstes wird der Systemspeicher in die Suspend-Datei geschrieben. Dies wird von einem Doppelpuffersystem (twinbuffer) ausgeführt, das die Daten aus dem Systemspeicher ausliest, komprimiert und in Segment E000H schreibt, und die komprimierten Daten schließlich von Segment E000H in die Suspend-Datei schreibt. Zwei Routinen arbeiten in einer Zeitmultiplex-Anordnung: die eine komprimiert die Daten und schreibt sie in Segment E000H, die andere schreibt sie in die Suspend-Datei. Die Erstgenannte wird im Vordergrund ausgeführt, während die Letztgenannte eine unterbrechungsgesteuerte Routine ist, die im Hintergrund ausgeführt wird. Da es nur eine CPU 40 gibt, kann nur eine Routine zu einer bestimmten Zeit ausgeführt werden. Da jedoch die letztgenannte Routine unterbrechungsgesteuert ist, kann sie die Ausführung der ersten Routine ggf. unterbrechen, um die Übertragungsgeschwindigkeit von Daten an die Suspend-Datei zu optimieren. Jeder der beiden Puffer ist 8 KB lang und kann die Übertragungszeit im Magnetplattenlaufwerk 31 optimieren.
  • Der Prozeß beginnt bei 304 mit dem Lesen, Komprimieren und Schreiben von genügend Daten in Segment E000H, um den ersten der 8K Puffer zu füllen. Die Daten werden mittels des Lauflängencodierungsverfahren (run length encoding method) komprimiert. Es kann jedoch jedes geeignete Komprimierungsverfahren benutzt werden. Zu diesem Zeitpunkt wird bei 306 die Write-from-Buffer-Routine, die im allgemeinen bei 307 angegeben ist, gestartet. Die Write-from-Buffer- Routine 307 ist eine unterbrechungsgesteuerte Routine, die im Hintergrund ausgeführt wird und aus den Aufgaben 308-310 besteht. Die Komprimierungsroutine, die im allgemeinen bei 311 angegeben ist, enthält die Aufgaben 312-318 und ist die Vordergrundroutine (foreground routine). Zuerst schreibt die Write-from-Buffer-Routine 307 den gerade mittels Aufgabe 304 gefüllten Puffer bei 308 in die Suspend-Datei. Während die Write-from-Buffer-Routine 307 die Inhalte von diesem Puffer in die Suspend-Datei schreibt, fährt die Komprimierungsroutine 311 fort, die nächsten Bytes aus dem Systemspeicher auszulesen, zu komprimieren und die komprimierten Daten bei 312 in den anderen der beiden 8K Puffer zu schreiben. Sobald die Komprimierungsroutine 311 den Puffer mit komprimierten Daten gefüllt hat, wird im nächsten Schritt bei 314 bestimmt, ob der gesamte Systemspeicher schon komprimiert wurde.
  • Das IDE-Festplattensteuerwerk 86 kann nicht sehr schnell Daten in das Magnetplattenlaufwerk 31 schreiben. Folglich wird die Komprimierungsroutine 311 das Füllen des 8K Puffers, der nicht in das Magnetplattenlaufwerk 31 geschrieben wurde, immer beenden, bevor die Write-from-Buffer-Routine 307 das Schreiben des Puffers in das Magnetplattenlaufwerk 31 beendet hat. Deshalb muß die Komprimierungsroutine 311 auf die Write-from- Buffer-Routine 307 warten, um das Schreiben des Puffers in das Magnetplattenlaufwerk 31 zu beenden. Wenn die Komprimierungsroutine 311 das Komprimieren und Schreiben des gesamten Systemspeichers nicht beendet hat, dann wartet die Komprimierungsroutine 311 bei 316 auf die Write-from-Buffer- Routine. Die Komprimierungsroutine 311 und die Write-from- Buffer-Routine 307 kommunizieren über einen Satz Flags. Wenn die Write-to-Buffer-Routine 307 das Schreiben des aktuellen Puffers in die Suspend-Datei beendet, schaltet die Routine 307 als nächstes die Puffer-Flags, die die Komprimierungsroutine 311 informieren, daß sie beginnen kann, den Puffer, der gerade in die Suspend-Datei geschrieben wurde, mit komprimierten Daten zu füllen. Anschließend wird der Failsafe-Timer C2 zurückgesetzt, und der Schalter 21 wird bei 309 auf einen Schließvorgang hin geprüft, wie dies im Begleittext zu Aufgabe 297 erklärt wurde.
  • Die Write-to-Buffer-Routine 307 entscheidet dann bei 310, ob der gerade in die Suspend-Datei geschriebene Puffer der letzte Puffer ist, der zu schreiben ist. Andernfalls schreibt die Write-from-Buffer-Routine den Puffer in die Suspend-Datei, der gerade von der Komprimierungsroutine 311 gefüllt wurde. In der Zwischenzeit stellt die Komprimierungsroutine 311 durch Überprüfung der Puffer-Flags fest, daß ein Puffer für mehr komprimierten Systemspeicher bereit ist. Das heißt, daß die Komprimierungsroutine bei 316 wartet, bis die Write-from- Buffer-Routine mit dem aktuellen Puffer fertig ist. Zu diesem Zeitpunkt fährt die Komprimierungsschleife bei 312 fort. Es ist zu beachten, daß der Bildspeicher 58 komprimiert wird, wenn lineare Rahmenpufferung (frame buffering) unterstützt wird aber nicht für VESA-Page-Access komprimiert ist. Vielmehr wird der VESA-Page-Access-Bildspeicher mittels VESA-Aufrufen über das Bildsteuersystem 56 gelesen und ohne Komprimierung mittels des Doppelpuffersystems gespeichert, was oben ausführlicher erklärt wurde.
  • Sobald die Komprimierungsroutine 311 das Komprimieren des gesamten Systemspeichers beendet hat, wartet sie bei 318 auf die Write-from-Buffer-Routine 307, um das Schreiben des letzten Puffers in die Suspend-Datei zu beenden. Sobald die Write-from-Buffer-Routine 307 beendet ist, springt sie von 310 zu 318 und ist nicht mehr vorhanden. Zu diesem Zeitpunkt werden keine Hintergrundroutinen ausgefuhrt, und das Hauptprogramm fährt bei 320 fort.
  • Anschließend werden bei Aufgabe 320 der Status der DMA-Einheit 71 (DMA-Steuersystem 72 und zentraler Busverwalter 82), der 82077 Diskettenadapter 84 und die RS-232 UART 94 gespeichert. Diese Geräte haben Register, die im Stand der Technik bekannt sind. Alle Register innerhalb des Diskettenadapters 84 und der UARTs 94 können direkt von der CPU 40 ausgelesen werden, und ihre Werte werden direkt in die Datenstruktur in E000H geschrieben. Die DMA-Einheit hat keine lesbaren Register. Statt dessen werden die Write-Only-Register normalerweise vor jeder DMA-Übertragung gesetzt. Aus diesem Grund stoppt die Suspend-Routine einen Haltevorgang, wenn eine DMA-Übertragung erfolgt.
  • Anschließend prüft die Suspend-Routine bei 978, ob die unterbrechungsgesteuerte Modemstatusroutine, die im Begleittext zu Aufgabe 976 beschrieben wurde, beendet ist. Andernfalls wartet sie, bis diese Routine beendet ist. Es wird als wünschenswert angenommen, wenn eine Veränderung gegenüber der Suspend-Datei erkannt wird, sobald das Rechnersystem 10 in den Haltestatus 150 übergeht. Es kann beispielsweise für jemand möglich sein, eine geänderte Suspend-Datei zu erstellen, diese Suspend-Datei ins Magnetplattenlaufwerk 21 zu verschieben und zu versuchen, das Rechnersystem 10 in einem anderen Status als dem gespeicherten wiederherzustellen. Zu diesem Zweck wird ein Pseudozufallswert in die Datenstruktur von Segment E000H gesetzt. Wie aus 328 ersichtlich ist, wird, nachdem die unterbrechungsgesteuerte Modem-State-Save-Routine beendet ist, ein 16-Bit-Zeitstempel von einem der schnellen Timer 102 ausgelesen. Dieser Zeitstempel wird dann in der Datenstruktur des Segments E000H gespeichert.
  • Anschließend wird eine 16-Bit-Kontrollsumme für das gesamte E000H Segment berechnet, indem jedes 16-Bit-Wort in E000H hinzugefügt wird, ohne jemals das Übertragsbit zu berücksichtigen. Diese Kontrollsumme wird bei 330 in das Datensegment von Segment E000H geschrieben und bei 332 in den CMOS NVRAM 96. Anschließend werden bei 334 alle Arbeitsvariablen von der CPU 40 in die Datenstruktur von Segment E000H geschrieben, und das gesamte Segment E000H wird neu in die Suspend-Datei geschrieben, die nach dem Signaturausdruck der Suspend-Datei (direkt nach der Signatur) bei 336 beginnt. Als nächstes wird das Suspend-Flag im CMOS NVRAM 96 bei 338 gesetzt (SET), der das System 10 informiert, daß der Status des Rechnersystems in der Suspend-Datei gespeichert wurde.
  • Danach stellt die Suspend-Routine bei 980 fest, ob ein Haltepunkt zu berücksichtigen ist. Falls ja, dann sollte das System nicht heruntergefahren. Statt dessen muß das System in dem Umfang wieder aufgenommen werden, der notwendig ist, um die Wiederherstellung von dem Teil-Haltevorgang, der gerade durchgeführt wurde, auszuführen. Deshalb, wenn ein Haltepunkt zu berücksichtigen ist, springt die Suspend-Routine bei 982 zu Aufgabe 484 der Resume-Routine, die dann eine Teil- Wiederaufnahme durchfuhrt.
  • Wenn kein Haltepunkt zu berücksichtigen ist, dann schaltet die CPU 40 die Stromversorgung aus, indem sie einen Befehl an den Microcontroller U2 ausgibt, um das ON-Signal auf eine logische NULL (ZERO) zu ziehen und somit die Primar-/Reglereinheit 172 der Stromversorgung 17 zu veranlassen, die Versorgung der ±5 und ±12 Leitungen mit geregelter Spannung zu stoppen. Die Spannungen brauchen einige Sekunden, um bis auf etwa 0 abwärts zu transformieren, und geben so der CPU 40 Zeit, zahlreiche Befehle auszuführen. Deshalb fuhrt die CPU 40 bei 342 eine Endlosschleife (ein "spin") durch, wahrend sie auf die Systemspannungen wartet, die von der Stromversorgung 17 generiert werden, um abzulehnen, bis die CPU 40 den Betrieb einstellt.
  • Es wird nun auf Fig. 11 Bezug genommen, in der die Einzelheiten der Boot-Up-Routine abgebildet sind. Der Boot- Prozeß wurde im allgemeinen im Begleittext zu Fig. 8 erläutert. Die Boot-Up-Routine beginnt bei 380, wenn die CPU 40 zum Reset-Vector springt und den Code ausfuhrt, auf den der Reset-Vector zeigt. Dies geschieht jedesmal beim Einschalten der CPU 40, und immer wenn die CPU 40 zurückgesetzt wird, indem zu dem Code gesprungen wird, auf den der Reset-Vector zeigt. Diese Reset-Prozeduren sind im Stand der Technik bekannt.
  • Die erste Aufgabe besteht darin, bei 382die CPU 40 zu testen und die Speichersteuereinheit 46 zu initialisieren. Die CPU wird von der POST-Routine geprüft. Teil des CPU-Tests ist es, festzustellen, ob die CPU 40 ein "S"-Teil mit einem SMI ist. Falls ja, wird ein Flag gesetzt (SET), um diese Tatsache anzugeben. Die Speichersteuereinheit 46 wird von der POST- Routine initialisiert.
  • Als nächstes prüft die Boot-Up-Routine bei 986, ob der Microcontroller U2 funktioniert. Dazu liest die CPU sequentiell den Statusport der Leistungssteuerlogik 106 und wartet an diesem Port auf einen Übergang von HIGH zu LOW und zurück von LOW zu HIGH. Ein solcher Übergang bedeutet, daß der Heartbeat vom Microcontroller U2 funktioniert. Die CPU 40 kann daher den Boot-Prozeß in der Annahme fortsetzen, daß der Microcontroller U2 wie erwartet funktioniert.
  • Wenn die CPU innerhalb eines zuvor bestimmten Zeitraum, z.B. ein oder zwei Sekunden, keinen Übergang am Statusport erkennt, dann hat der Microcontroller U2 keinen Heartbeat, und die CPU 40 befiehlt dem ersten PAL U1 den Microcontroller U2 bei 988 zurückzusetzen, wie dies oben erklärt wurde. Dann wartet die CPU 40 bei 990 erneut auf einen Übergang von HIGH zu LOW am Statusport. Erkennt die CPU wiederum innerhalb von ein oder zwei Sekunden keinen Übergang am Statusport, dann hat der Microcontroller U2 keinen Heartbeat, und die CPU 40 deaktiviert bei 992 die hier beschriebenen Leistungssteuermerkmale in der Annahme, daß der Microcontroller U2 in einem solchen Status ist, daß er nicht zurückgesetzt werden kann.
  • Andernfalls, wenn der Microcontroller U2 funktioniert, dann frischt die CPU 40 bei 994 den Minutes-to-Wake-Alarm im Microcontroller U2 auf. Die Zeitbasis des RTC 98 sehr viel genauer als diejenige des Microcontroller U2. Um diese Einschränkung zu überwinden, und ohne eine sehr viel genauere und somit teurere Zeitbasis zum Microcontroller hinzufügen zu müssen, synchronisiert BIOS die weniger genauere Zeitbasis mit der genaueren Zeitbasis und aktualisiert den Minutes-to-Wake- Alarm-Wert im Microcontroller U2 mit einem genaueren Wert, der jedesmal, wenn das System bootet, vom RTC 98 abgeleitet wird. Um dies zu erreichen, liest die CPU das absolute Datum und die absolute Uhrzeit für den Alarm aus dem CMOS-Speicher 96, berechnet den Minutes-to-Wake-Alarm-Wert und schreibt diesen in den Microcontroller U2.
  • Danach, und wenn der Microcontroller U2 nicht funktioniert und die Leistungssteuermerkmale deaktiviert, stellt die Boot- Routine fest, ob das System, das bei 996 über die Stromversorgung 17 mit Strom versorgt wird, gebootet wurde. Die Stromversorgung 17 legt vorzugsweise immer Wechselstrom auf seine Primär-/Reglereinheit 172 an, und die Stromregelung in den ±5 und ±12 Leitungen wird von dem ON# Eingang gesteuert. Auf diese Art kann die Stromversorgung 17 ständig die AUX5 bereitstellen, die notwendig ist, um die Leistungssteuerlogik 106 mit Strom zu versorgen und sie kann von der Leistungssteuerlogik 106 gesteuert werden, ohne daß sie den Wechselstrom selbst schalten muß.
  • Wie dem Fachmann bekannt ist, bevorzugen einige Benutzer jedoch, ihre Rechnersysteme mit einem geschalteten Power Strip (ohne Abbildung) zu versorgen, die Wechselstromversorgung im gesamten System mit einem einzelnen Schalter aus- und einschalten zu können. Dies bringt für die Leistungssteuerlogik 106 Probleme mit sich, da der Microcontroller U2 und die anderen Geräte so konfiguriert sind, daß sie konstant von AUX5-Stromleitung versorgt werden. Das System muß ein Verfahren haben, um festzustellen, daß es durch das Anlegen von Wechselstrom mit Strom versorgt wird und sich entsprechend verhält.
  • Die AUX5-Leitung unterliegt jedoch auch Blackouts und Spannungsabfällen, die oben erklärt wurden. Nach einem Blackout oder Spannungsabfall setzt der Reset-Unterkreis 920 den Microcontroller U2 zurück, um ihn zu hindern, sich aufgrund der außerhalb der Toleranz liegenden Spannungen aufzuhängen. Das System muß außerdem in der Lage sein, festzustellen, ob der Microcontroller nach einem Spannungsabfall oder nach dem Anlegen von Wechselstrom geweckt wurde.
  • Folglich fragt die CPU bei 996 den Microcontroller U2 nach dem Ereignis, das die Stromversorgung 17 veranlaßt hat, sich einzuschalten. Der Microcontroller kann eine der vier Antworten zurückgeben: (1) Er wurde zurückgesetzt und veranlaßte deshalb die Stromversorgung 17, die ±5 und ±12 Leitungen mit geregeltem Strom zu versorgen. (2) Der Minutesto-Wake-Alarm ist abgelaufen. (3) Ein Rufzeichen (ring) ist entweder im RS-232 Ring-Input oder im Ring-Input vom Optokoppler OPTO1 aufgetreten bzw. (4) der Schalter 21 wurde gedrückt. Der Grund dafür, daß das System eingeschaltet wird, kann direkt vom Microcontroller U2 mittels der Anwendungsprogramme, zum Beispiel ein Scheduler, gelesen werden, die bestimmte Programme, die auf den speziellen Grund reagieren, aus dem das System eingeschaltet wurde, ausgeführt würden. Alternativ dazu kann der Grund für das Einschalten des Systems über eine oder mehrere BIOS-Calls bereitgestellt werden.
  • Anders als beim Reset durch die CPU 40 wird der Microcontroller U2 nur vom Reset-Unterkreis 920 zurückgesetzt, der den Microcontroller immer dann zurücksetzt, wenn entweder die AUX5-Leitung angelegt wird oder diese einen Störimpuls empfangt. Wenn der Microcontroller U2 zurückgesetzt wurde, oder wenn der Microcontroller einen ungültigen Wakeup-Code zurückgesendet hat, der bei 997 geprüft wird, muß die CPU dann bestimmen, ob die Stromversorgung bei 998 fortfahren sollte, den Strom in den ±5 und ±12 Leitungen zu regeln oder nicht. Zu diesem Zweck wird ein Flag in CMOS NVRAM benutzt, das sogenannte DEFAULT_ON. Wenn dieses Flag gesetzt (SET), dann sollte die Stromversorgung 17 fortfahren, geregelten Strom zu liefern, nachdem der Microcontroller U2 zurückgesetzt wurde. Andernfalls, wenn DEFAULT_ON nicht gesetzt ist, dann sollte die Stromversorgung 17 keinen geregelten Strom mehr liefern, nachdem der Microcontroller U2 zurückgesetzt wurde, und deshalb gibt die CPU 40 dem Microcontroller U2 den Befehl, die Stromversorgung 17 bei 1000 zu veranlassen, in den ±5 und ±12 Leitungen keinen geregelten Strom bereitzustellen. Danach dauert es einige Sekunden, bis die Spannungen etwa auf Null abwärtstransformiert sind. Dadurch hat die CPU 40 Zeit, zahlreiche Befehle auszuführen. Deshalb führt die CPU 40 bei 1002 eine endlose Schleife (ein "spin") aus, während sie auf die Systemspannungen wartet, die von Stromversorgung 17 erzeugt werden, um abzulehnen, bis die CPU 40 bei 1004 den Betrieb einstellt. Wie oben erwähnt, wird der Microcontroller U2 vorzugsweise konstant über die AUX5-Leitung mit Strom versorgt und fährt fort, seine programmierten Routinen auszuführen.
  • Danach, wenn der Microcontroller bei 997 einen gültigen Wakeup-Code zurückgesendet hat, oder wenn der Microcontroller U2 zurückgesetzt wurde, aber das System weiterhin Strom versorgt werden soll (siehe 998), befiehlt die CPU 40 dem Microcontroller U2 bei 1004 eine SMI zurück an die CPU 40 zu generieren, bevor sie die Stromversorgung veranlaßt, die Versorgung mit geregeltem Strom in den ±5 und ±12 Leitungen einzustellen, falls der Microcontroller U2 der Meinung ist, daß der Strom abgeschaltet werden sollte. Bei 1004 setzt die CPU auch das DEFAULT_ON Bit im CMOS NVRAM, so daß, wenn die Wechselstromversorgung verlorengeht, das System sich von selbst wieder einschalten kann, nachdem die Wechselstromversorgung wieder gewährleistet ist.
  • Dann führt die Boot-Routine bei 1006 den ersten Plug & Plan Resource Allocation Pass durch, wie dies dem Fachmann bekannt ist.
  • Anschließend wird der Schattenspeicher (shadow memory) geprüft, und das BIOS wird vom ROM 88 in den Schattenspeicherteil des RAM 53 kopiert. Der Ablauf des ausgeführten Codes hängt davon ab, ob das Suspend-Flag im CMOS NVRAM 96 gesetzt (SET) wurde. Wenn das Suspend-Flag gesetzt wurde, dann befindet sich, das Rechnersystem 10 im Haltestatus 15.0, und das Rechnersystem 10 sollte wieder in dem Status wiederhergestellt werden, in dem es sich befand, als es gehalten wurde. Der System-RAM 53 in den Segmenten E000H und F000H wird einem verkürzten Test unterzogen. Um die Dauer zu reduzieren, die der Computer für die Wiederaufnahme braucht, wird der Speicher nur geprüft, ob er die richtige Größe hat und mit Nullen gefüllt wurde (in jeder Speicherstelle steht 000H).
  • Andernfalls, wenn das Suspend-Flag im CMOS NVRAM 96 gelöscht (CLEAR) wurde, dann wird der System-RAM 53 in den Segmenten E000H und F000H dem Standard-In-Depth-Speichertest unterzogen, der aus folgenden Teilen besteht: (1) einem Sticky-Bit-Test, (2) einem Doppelbit-Speichertest und (3) einem Crossed- Address-Line-Test. Diese Tests sind im Stand der Technik bekannt.
  • Nachdem die Segmente E000H und F000H geprüft wurden, kann BIOS schattiert werden, wobei die Inhalte von ROM BIOS 88 in den System-RAM 53 kopiert werden, und die Speichersteuereinheit konfiguriert wird, um BIOS vom RAM auszuführen. Das Schattieren von BIOS wird durchgeführt, um die Systemgeschwindigkeit zu erhöhen. Die Systemleistung wird verbessert, da BIOS vom schnelleren System-RAM 53 (normale Zugriffszeit 80 ns) anstatt von dem langsameren ROM (normale Zugriffszeit 250 ns) ausgeführt wird. Das Schattieren von BIOS umfaßt das Laden eines BIOS Kopierers in eine Adresse im unteren Speicher, das Kopieren von BIOS aus dem ROM 88 in die Segmente E000H und F000H des System-RAM 53 und die Aktivierung des Schatten-RAM.
  • Als nächstes wird das Bildsteuersystem 56 geprüft und initialisiert, und der Bildspeicher 58 wird geprüft. Beides wird bei 384 durchgeführt. Diese Tests und Initialisierungen sind in der Technik bekannt.
  • Dann führt die Boot-Routine bei 1008 den zweiten Plug & Plan Resource Allocation Pass durch, der dem Fachmann bekannt ist.
  • Der Ablauf des ausgeführten Codes hängt davon ab, ob bei 386 das Suspend-Flag im CMOS NVRAM 96 gesetzt wurde. Wenn das Suspend-Flag gesetzt wurde, dann wird nur die Größe des verbleibende System-RAM 53 geprüft und dann mit Nullen gefüllt wie bei Aufgabe 383. Wenn jedoch das Suspend-Flag im CMOS NVRAM 96 gelöscht (CLEAR) wurde, dann wird der verbleibende System-RAM bei Aufgabe 398 mittels des aus drei Schritten bestehenden In-Depth-Memory-Tests geprüft, der im Begleittext zu Aufgabe 383 beschrieben wurde.
  • Nachdem der Speicher geprüft wurde, werden die Hilfseinrichtungen - einschließlich die 8259, die UARTs, die 8042 usw. - bei 400 geprüft und initialisiert. Bei Aufgabe 408 wird das IDE-Festplattensteuerwerk 86 initialisiert.
  • Der Ablauf des ausgeführten Codes hängt davon ab, ob das Suspend-Flag bei 409 im CMOS NVRAM 96 gesetzt (SET) wurde. Wenn das Suspend-Flag gesetzt wurde, bedeutet dies, daß der Status des Systems erfolgreich gespeichert wurde, als die Stromversorgung zuletzt aufgehoben wurde. Dann überspringt die Boot-Up-Routine den Test des Festplattensteuerwerks 86 und des Magnetplattenlaufwerks 31. Andernfalls, wenn das Suspend-Flag im CMOS NVRAM 96 gelöscht (CLEAR) wurde, bedeutet dies, daß der Status des Systems nicht gespeichert wurde, als die Stromversorgung zuletzt aufhoben wurde. Dann führt die Boot- Up-Routine bei Aufgabe 410 einen kompletten Test des Festplattensteuerwerks 86 und des Magnetplattenlaufwerks durch, wie dieser im Stand der Technik bekannt ist.
  • Als nächstes wird bei 412 der Diskettenadapter 84 geprüft und initialisiert.
  • Zu diesem Zeitpunkt werden alle Geräte initialisiert, und die Vektoren zeigen auf bekannte Speicherstellen, so daß alle Unterbrechungsroutinen wie erwartet arbeiten werden. Deshalb fertigt die Boot-Up-Routine bei 414 einen Schnappschuß von der BIOS Data Area and Vector Tabelle an, die eine Kopie der BIOS Data Area and Vector Tabelle in der Datenstruktur in Segment E000H speichert. Diese Kopie der BIOS Data Area and Vector Tabelle wird bei Aufgabe 274 von der Suspend-Routine benutzt, um das Rechnersystem 10 in einen bekannten Status zu setzen, wobei alle Unterbrechungen wie erwartet arbeiten.
  • Als nächstes werden bei 416 einige BIOS-Erweiterungen "eingescannt" und initialisiert, wie dies im Stand der Technik bekannt ist. Die BIOS-Erweiterungen sind Blöcke mit BIOS-Code, die mittels peripheren Adaptern, beispielsweise Netzwerkadaptern, zum System hinzugefügt werden. BIOS- Erweiterungen befinden sich normalerweise in den Segmenten C000H und D000H im ISA-Bus 76 und haben eine zugehörige "Signatur", um die BIOS-Erweiterung als solche zu identifizieren. Wird eine BIOS-Erweiterung erkannt, wird die Lange geprüft, und es wird eine Kontrollsumme berechnet und geprüft. Wenn Signatur, Länge und Kontrollsumme alle angeben, daß eine gültige BIOS-Erweiterung vorhanden ist, geht die Programmsteuerung zu dem Befehl, der sich drei Bytes hinter der Signatur befindet, und die BIOS-Erweiterung kann die notwendigen Aufgaben durchführen wie die Initialisierung des peripheren Adapters. Sobald die Erweiterung die Ausführung beendet hat, kehrt die Steuerung zur Boot-Up-Routine zurück, die nach weiteren BIOS-Erweiterungen sucht. Weitere BIOS- Erweiterungen werden wie die obengenannte BIOS-Erweiterung behandelt. Wenn keine weiteren BIOS-Erweiterungen festgestellt werden, geht die Boot-Up-Routine zu Aufgabe 417.
  • Bei 1010 liest die CPU dann das Systembetriebsstunden-Delta und fügt zu diesem den Wert hinzu, der in der speziellen Partition im Magnetplattenlaufwerk gespeichert ist, und schreibt die neuen Betriebsstunden zurück in die spezielle Partition im Magnetplattenlaufwerk 31. Wie erklärt werden wird, unterbricht der Microcontroller U2, bevor er das System herunterfährt die CPU 40, indem er die SMI-Leitung ausführt. Folglich führt die CPU bestimmte Aufgaben in der Annahme aus, daß das System in Kürze heruntergefahren wird. Vorzugsweise enthält dieser Vorgang das Speichern bestimmter Informationen im CMOS NVRAM, z.B. Power-On-Delta, wie dies von einem abgelaufenen Betriebsstundenzähler gemessen wird. Danach erlaubt die CPU 40 dem Microcontroller U2 das Herunterfahren.
  • Bei 417 sucht die Boot-Up-Routine nach einer Partition auf dem Magnetplattenlaufwerk 31, die der Suspend-Datei offensichtlich partitionsspezifisch zugeordnet wurde. Wenn eine Partition mit einem PS/1 Kennzeichner (identifier) "FE" oder eine Hibernation-Partition mit dem Kennzeichner "84" in der Partitionstabelle gefunden wurde, und diese Partition groß genug ist, um für dieses bestimmte System eine Suspend-Datei unterzubringen, dann wird diese Partition für die Suspend- Datei benutzt. Folglich wird die Signatur der Suspend-Datei in die ersten Bytes des Bereichs geschrieben, und der Startkopf, Sektor und Zylinder des Bereichs sind im CMOS NVRAM 96 gespeichert.
  • Der Ablauf des ausgeführten Codes verzweigt sich dann, was davon abhängt, ob bei 418 das Suspend-Flag im CMOS NVRAM 96 gesetzt (SET) wurde. Wenn das Suspend-Flag gelöscht wird, dann überträgt die Boot-Up-Routine bei 420 die Steuerung an die PBOOT-Routine. PBOOT ist im Stand der Technik bekannt und für das Laden des Betriebssystems (OS) und des Befehlsinterpreters entweder von einer Diskette oder vom Magnetplattenlaufwerk 31 verantwortlich. Wenn eine Partition für die Suspend-Datei bei Aufgabe 417 nicht gefunden wurde, dann führt OS einen OSspezifischen Treiber aus, der im Begleittext zu Fig. 16 beschrieben ist, und der prüft, ob eine Partition gefunden wurde, und falls nicht, eine Datei mit benachbarten Sektoren (ggf. einen Bereich defragmentieren) in FAT zuordnet, die Signatur in die ersten Bytes der Suspend-Datei schreibt, und den Startkopf, Sektor und Zylinder der Suspend-Datei in CMOS NVRAM 96 schreibt.
  • Ungeachtet davon, wann die Suspend-Datei zugeordnet wird, sollte die Datei benachbarte Sektoren haben, um während Halte- bzw. Wiederaufnahmevorgängen, ein schnelles Schreiben auf die Platte und ein schnelles Lesen von der Platte zu ermöglichen.
  • Als nächstes konfiguriert OS das System, das auf den Anweisungen basiert, die in der CONFigurSYS Datei gefunden wurden. Schließlich führt OS die AUTOEXEC.BAT Datei aus, die eventuell die Ausführungssteuerung zurück an das Betriebssystem gibt. Wenn das Suspend-Flag im CMOS NVRAM 96 gelöscht (CLEAR) wird, bedeutet dies, daß der Status des Systems nicht gespeichert wurde, als die Stromversorgung zuletzt eingestellt wurde, und dann wird RESUME. EXE, das ausführlicher im Begleittext zu Aufgabe 421 beschrieben ist, ignoriert.
  • Es wird nun wieder Bezug auf Aufgabe 418 genommen. Wenn das Suspend-Flag im CMOS NVRAM 96 gesetzt wurde, bedeutet dies, daß der Status des Systems gespeichert wurde, als die Stromversorgung zuletzt abgeschaltet wurde. Der Ablauf des ausgeführten Codes verzweigt dann, was davon abhängt, ob bei 419 das Reinitialize-Adapters-Flag im CMOS NVRAM 96 gesetzt wurde. Wenn das Reinitialize-Adapters-Flag gesetzt wurde, dann überträgt die Boot-Up-Routine bei 421 die Steuerung an die PBOOT-Routine. Wie die übliche PBOOT-Routine lädt PBOOT gemäß der vorliegenden Erfindung OS, das das System gemäß den Befehlen konfiguriert, die in den CONFigurSYS und AUTOEXEC.BAT Dateien gefunden wurden und die u. a. die Treiber laden und das System konfigurieren, wie dies im Stand der Technik bekannt ist.
  • Die Befehle in CONFigurSYST und AUTOEXEC.BAT können Adapterkarten im System initialisieren. Diese Anwendung geht davon aus, daß drei Arten von Adapterkarten vorhanden sind: Adapter Typ I müssen nicht initialisiert werden; Adapter Typ II müssen initialisiert werden, werden aber von der BIOS- Erweiterung oder dem Treiber entsprechend den CONFigurSYS oder AUTOEXEC. BAT Dateien geladen; und Adapter Typ III werden von der Codeausführung im System geändert. Systeme, die Adapter vom Typ I und vom Typ II enthälten, können gehalten und wiederhergestellt werden. Systeme jedoch, die Adapter vom Typ III enthälten und viele Netzwerkadapter haben, können nicht wiederhergestellt werden. Es sei denn, die Karten haben einen zugehörigen APM-bekannten Gerätetreiber, der den Adapter neu initialisiert nachdem bestimmte Bedingungen eingetreten sind, beispielsweise wurde die Stromversorgung des Systems eingestellt. Systeme können Karten vom Typ III halten, die einen APM-bekannten Gerätetreiber haben.
  • Die Datei RESUME.EXE wird im bevorzugten Ausführungsbeispiel zur AUTOEXEC.BAT Datei hinzugefügt und ist für die Übertragung der Programmsteuerung von OS an die Resume-Routine verantwortlich. OS in Aufgabe 420 ignoriert die Anwesenheit von RESUME.EXE. OS von Aufgabe 421 führt RESUME.EXE aus, die die Steuerung an die Resume-Routine überträgt, nachdem die Initialisierung der Adapter vom Typ II durch die Gerätetreiber, die von OS aus CONFigurSYS und AUTOEXEC.BAT geladen werden, abgeschlossen ist.
  • Es wird nun wieder Bezug auf Aufgabe 419 genommen. Wenn das Reinitialize-Adapters-Flag in CMOS 96 gelöscht wird, überträgt OS die Ausführungssteuerung über RESUME.EXE an die Resume- Routine. Die Resume-Routine stellt den Systemstatus von der Suspend-Datei im Magnetplattenlaufwerk wieder her und wird detailliert im Begleittext zu Fig. 12 beschrieben.
  • Es wird nun auf Fig. 12 Bezug genommen, in der die Einzelheiten der Resume-Routine und die Aufgaben 450 bis 530 abgebildet sind. Zuerst wird die CPU bei 451 geprüft. Wenn die CPU 40 eine SMI hat, dann wird ein CPU-Resume-SMI generiert, das die CPU im SMM-Modus plaziert und bei Aufgabe 454 zum Code springt. Wenn die CPU kein SMI hat, dann tritt ein Resume- Shutdown ein, in dem ein Reset veranlaßt wird, und der Reset- Handler springt bei Aufgabe 454 zum Code. Während des Konfigurationsprozesses wird die BIOS Data Area & Vector Tabelle wahrscheinlich in einen unbekannten Status geändert. Deshalb können die BIOS-Basisroutinen funktionieren oder nicht wie erwartet funktionieren. Folglich aktiviert die Resume- Routine das Segment E000H bei 454 als Read/Write und ruft bei 456 die Swap BIOS Data Area & Vector Table Routine auf. Diese Routine überlagert die bekannte, gute BIOS Data Area & Vector Tabelle, die bei Aufgabe 414 mit der geänderten BIOS Data Area & Vector Tabelle, die derzeit in Segment 0000H aktiv ist, in Segment E000H kopiert wurde. Wenn die Routine beendet ist, ist die bekannte BIOS Data Area & Vector Table in Segment E000H aktiv, die geänderte BIOS Data Area & Vector Table ist in Segment E000H aktiv, und die BIOS-Routinen werden wie erwartet funktionieren.
  • Als nächstes deaktiviert die Resume-Routine bei 458 alle Unterbrechungen, bis auf diejenigen, die Tastatur und Magnetplattenlaufwerk unterstützen. Anschließend lokalisiert die Resume-Routine die Suspend-Datei im Magnetplattenlaufwerk 31 und liest Dateigröße und Signatur, die - wie oben erwähnt - der Mehrwort-Kennzeichner (multi-byte identifier) für die Suspend-Datei ist. Der Ablauf des ausgeführten Codes verzweigt sich dann bei 462, was davon abhängt, ob die Suspend-Datei die richtige Größe und Signatur hat. Wenn die Suspend-Datei nicht die richtige Größe und Signatur hat, dann löscht (CLEAR) die Resume-Routine bei 464 das Suspend-Flag im CMOS-Speicher 96, und die Programmsteuerung wird an den Code in der Speicherstelle übertragen, auf den der Reset-Vector bei 466 zeigt und veranlaßt das System so zu booten, als wäre es niemals gehalten worden. Andernfalls, wenn die Suspend-Datei die richtige Größe und Signatur hat, dann setzt die Resume- Routine die Systemwiederaufnahme fort, indem sie den 64K Block in der Suspend-Datei liest, die nach der Signatur (der Teil der Suspend-Datei, der der Information in Segment E000H entspricht) in Segment 1000 H gefunden wurde (siehe 468).
  • Als nächstes wird bei 470 die Kontrollsumme des Blocks in 1000H berechnet. Die vorher gespeicherte Kontrollsumme wird aus dem nichtflüchtigen CMOS-Speicher bei 472 gelesen, und der Ablauf des ausgeführten Code verzweigt bei 474, was davon abhängt, ob die in Aufgabe 470 berechnete Kontrollsumme dieselbe ist wie die in Aufgabe 330 berechnete Kontrollsumme ist. Wenn die in Aufgabe 470 berechnete Kontrollsumme nicht dieselbe wie die in Aufgabe 330 berechnete Kontrollsumme ist, dann ist die Suspend-Datei irgendwie fehlerhaft (sie kann beispielsweise verwechselt worden sein) und die Steuerung wird an Aufgabe 464 übertragen, die das Suspend-Flag löscht und das System zurücksetzt, wie dies im Begleittext zu den Fig. 464 und 466 erklärt wurde. Wenn die in Aufgabe 470 berechnete Kontrollsumme dieselbe wie die in Aufgabe 330 berechnete Kontrollsumme ist, dann wird angenommen, daß die Suspend-Datei dieselbe ist wie diejenige, die von der Suspend-Routine geschrieben wurde, und die Daten in Segment 1000H werden bei 476 in Segment E000H kopiert.
  • Die Resume-Routine schreibt nun bei 478 ins Fenster. Ein spezielles Signalfenster informiert den Benutzer, daß das - System wiederhergestellt wird, und daß der Benutzer Ctrl-Alt- Del drücken sollte, um die Wiederaufnahme abzubrechen. Wie bei der Suspend-Routine wird durch Drucken von Ctrl-Alt-Del bei 526 das Suspend-Flag gelöscht, und das System wird bei 528 zum erneuten Booten veranlaßt. Das System wird normalerweise neu gebootet, wenn Ctrl-Alt-Del gedruckt und die Resume-Routine ausgefuhrt wird.
  • Dann werden der 82077 Diskettenadapter 84 und die DMA-Einheit 71 wiederhergestellt, indem die Werte aus dem Segment der E000H-Datenstruktur bei 480 bzw. 482 in ihre jeweiligen Register geschrieben werden.
  • Als nächstes wird bei 1020 eine unterbrechungsgesteuerte parallele Befehlsfolge, um den Status von Modems wiederherzustellen, von der E000H Datenstruktur gestartet. Wie bei der Routine bei Aufgabe 976 erfaßt die Modem-Restore- Routine die Unterbrechung, die dem COMM-Port entspricht, der zu dem bestimmten Modem gehört, liest Werte aus der E000H Datenstruktur, überträgt Befehle und Werte an das Modem, um es zu veranlassen, die darin enthältenen Register wiederherzustellen. Diese Routine überträgt einen ersten Befehl an das Modem und antwortet dann in einem unterbrechungsgesteuerten Modus, empfangt die Antwort des Modems und überträgt den nächsten Wert an das Modem, um auf jede COMM-Port-Unterbrechung zu reagieren, bis alle Modemregister wiederhergestellt wurden. Wie die Modem-Save- Routine, konnte diese Routine, wenn sie nicht als parallele Befehlsfolge ausgefuhrt wird, einige Sekunden zu der Zeit hinzufügen, die es dauert, um das System wieder aufzunehmen. Als eine unterbrechungsgesteuerte parallele Befehlsfolge fugt sie wenig oder keine Zeit zum Wiederaufnahmevorgang hinzu, wenn die Ausführung abgeschlossen ist, bevor der Systemstatus vom Magnetplattenlaufwerk 31 gelesen wird.
  • Nachdem die unterbrechungsgesteuerte parallele Thread-Modem- Restore-Routine bei den Aufgaben 486 bis 500 gestartet ist, wird der Systemspeicher mittels einer Twin-Buffer-Routine, die ähnlich der Routine ist, die im Begleittext zu den Aufgaben 304 bis 318 in der Suspend-Routine erklärt wurde, wiederhergestellt. Dieses Doppelpuffersystem liest die komprimierten Daten aus der Suspend-Datei aus, schreibt sie in das Segment E000H, dekomprimiert sie, und schreibt sie in den Systemspeicher. Zwei Routinen arbeiten in einer Zeitmultiplex- Anordnung: die eine liest die Daten aus der Suspend-Datei und schreibt sie in Segment E000H, und die andere dekomprimiert die Daten und schreibt die dekomprimierten Daten in den Systemspeicher. Die Letztgenannte wird im Vordergrund ausgeführt, während die Erstgenannte eine unterbrechungsgesteuerte Routine ist, die im Hintergrund ausgeführt wird. Da es nur eine CPU 40 gibt, kann nur eine Routine zu einer bestimmten Zeit ausgeführt werden. Da jedoch die erstgenannte Routine unterbrechungsgesteuert ist, kann sie die Ausführung der letzten Routine ggf. unterbrechen, um die Übertragungsgeschwindigkeit von Daten von der Suspend-Datei zu optimieren. Jeder der beiden Puffer ist 8 KB lang und kann die Übertragungszeit optimieren.
  • Dieser Prozeß beginnt bei 486 mit dem Auslesen aus der Suspend-Datei und dem Schreiben von genügend Daten in Segment E000H, um den ersten der 8K Puffer zu füllen. Zu diesem Zeitpunkt wird bei 306 die Read-from-Buffer-Routine, die im allgemeinen bei 489 angegeben ist, gestartet. Die Read-from- Buffer-Routine 489 ist eine unterbrechungsgesteuerte Routine, die im Hintergrund ausgeführt wird und aus den Aufgaben 490- 492 besteht. Die Dekomprimierungsroutine, die im allgemeinen bei 493 angegeben ist, enthält die Aufgaben 494-498 und ist die Vordergrundroutine (foreground routine). Zuerst beginnt die Read-from-Buffer-Routine 489 mit dem Lesen der nächsten 8K der Suspend-Datei und bei 490 mit dem Speichern in den anderen Puffer, jetzt der aktuelle Puffer. Während die Read-from- Buffer-Routine 489 die nächsten 8K aus der Suspend-Datei liest und im aktuellen Puffer speichert, liest die Dekomprimierungsroutine 493 den Puffer, der von Aufgabe 486 gefüllt wurde, dekomprimiert die komprimierten Daten und schreibt bei 494 die dekomprimierten Daten in den Systemspeicher. Sobald die Dekomprimierungsroutine 493 alle Daten in diesem Puffer dekomprimiert hat, wird im nächsten Schritt bei 496 bestimmt, ob der gesamte Systemspeicher schon dekomprimiert wurde.
  • Das IDE-Festplattensteuerwerk 86 kann nicht sehr schnell Daten aus dem Magnetplattenlaufwerk 31 lesen. Folglich wird die Dekomprimierungsroutine 493 das Dekomprimieren des 8K Puffers, der nicht in das Magnetplattenlaufwerk 31 geschrieben wurde, immer beenden, bevor die Read-from-Buffer-Routine 489 das Lesen der Daten aus dem Magnetplattenlaufwerk 31 in den aktuellen Puffer beendet hat. Deshalb muß die Dekomprimierungsroutine 493 auf die Read-from-Buffer-Routine 498 warten, um das Auslesen von Daten aus dem Magnetplattenlaufwerk 31 zu beenden. Wenn die Dekomprimierungsroutine 493 das Komprimieren und Schreiben des gesamten Systemspeichers nicht beendet hat, dann wartet die Dekomprimierungsroutine 493 bei 498 auf die Read-from-Buffer- Routine 489. Die Dekomprimierungsroutine 493 und die Read- from-Buffer-Routine 489 kommunizieren über einen Satz Flags. Wenn die Read-to-Buffer-Routine 489 das Lesen von Daten aus der Suspend-Datei in aktuellen Puffer beendet hast, die Routine 489 als nächstes die Puffer-Flags (bei 490), die die Dekomprimierungsroutine 493 informieren, daß sie beginnen kann, die Daten in den Puffer zu dekomprimieren, der gerade aus der Suspend-Datei gelesen wurde. Die Read-from-Buffer- Routine 489 entscheidet dann bei 492, ob ein 8K-Block verblieben ist, der aus der Suspend-Datei auszulesen ist. Falls nicht, liest die Read-from-Buffer-Routine die verbleibenden Daten aus der Suspend-Datei und schreibt diese bei 502 in den aktuellen Puffer. Die Read-from-Buffer-Routine stellt dann die Ausführung im Hintergrund ein und wartet bei 500 auf die Dekomprimierungsroutine, um das Dekomprimieren des letzten Speichers zu beenden.
  • In der Zwischenzeit stellt die Dekomprimierungsroutine 493 durch Überprüfung der Puffer-Flags fest, daß ein Puffer zur Dekomprimierung in den Systemspeicher bereit ist. Das heißt, daß die Dekomprimierungsroutine bei 498 wartet, bis die Readfrom-Buffer-Routine mit dem aktuellen Puffer fertig ist. Zu diesem Zeitpunkt fährt die Dekomprimierungsschleife bei 494 fort.
  • Sobald die Dekomprimierungsroutine 493 das Dekomprimieren des gesamten Systemspeichers beendet hat, ist die einzige Hintergrundroutine, die ausgeführt wird, die unterbrechungsgesteuerte Modem-Restore-Routine, die im Begleittext zu Aufgabe 1020 erklärt wird. Das Hauptprogramm wird bei 504 fortgesetzt.
  • Als nächstes werden Bildsteuersystem 56 und IDE- Festplattensteuerwerk 86 bei 504 und 506 wiederhergestellt, indem die Werte von der E000H Datenstruktur in die Register in jedem der beiden Gerate geschrieben werden. Die Aufgabe 504 ist auch der Punkt, an dem die Suspend-Routine springt (siehe Aufgabe 1024), wenn ein Haltepunkt zu berücksichtigen ist.
  • Die Resume-Routine prüft dann bei 1022, ob die unterbrechungsgesteuerte Modem-Restore-Routine, die im Begleittext zu Aufgabe 1020 beschrieben ist, beendet ist. Wenn nicht, wartet sie auf diese Routine, um den Vorgang zu beenden.
  • Nachdem die unterbrechungsgesteuerte Modem-State-Restore- Routine (siehe 508) beendet ist, werden der CPU-Cache 41 und der System-Cache 60 aktiviert, indem die entsprechenden Werte in der CPU 40 bzw. der Cache-Steuereinheit 62 gespeichert werden. Als nächstes stellt die Resume-Routine den Status des Timers 102, des 8042 Koprozessors 104 und des Unterbrechungssteuergeräts 92 wieder her, indem die Werte vom Segment der E000H-Datenstruktur in die Register in den jeweiligen Geräten geschrieben werden (siehe 510 bis 514).
  • Als nächstes werden die UARTs 94 wiederhergestellt, indem bei 484 die Werte vom Segment der E000H-Datenstruktur in ihre jeweiligen Register geschrieben werden.
  • Als nächstes ruft die Resume-Routine die Swap BIOS Data Area & Vector Table Routine bei 516 auf. Bevor die Routine aufgerufen wird, ist die bekannte BIOS Data Area & Vector Tabelle im Segment 0000H aktiv, und die BIOS Data Area & Vector Tabelle, die aus der Suspend-Datei ausgelesen wird, ist im Segment der E000H-Datenstruktur inaktiv. Nach der Auslagerung ist die bekannte BIOS Data Area & Vector Tabelle im Segment E000H inaktiv, und die BIOS Data Area & Vector Tabelle, die von der Suspend-Routine gespeichert wurde, ist in Segment 0000H aktiv.
  • Schließlich springt die Resume-Routine bei 518 zur Restore- CPU-Routine, die die CPU 40 im Status vor dem Halt wiederherstellt. Die Restore-CPU-Routine wird im Begleittext zu Fig. 14 ausführlicher erklart. Die Restore-CPU-Routine überträgt die Ausführungssteuerung eventuell zurück an das APM.
  • Schließlich führt die CPU 40 einen RETURN-Befehl aus, der das System veranlaßt, zum APM zurückzukehren. Das System fährt nun mit dem Ausführungscode fort, als wäre es niemals gehalten worden. Das System wird von der Halte-/Wiederaufnahmeprozedur nicht beeinflußt.
  • Es wird nun auf Fig. 13 Bezug genommen, in der Flußdiagramm von der Save-CPU-State-Routine abgebildet ist. Die Suspend- Routine springt bei 600 zur Save-CPU-State-Routine. Es ist zu beachten, daß das APM die Segmente E000H und F000H, von denen diese Routine ausgeführt werden, als Read/Write aktivierte. Außerdem wurden die EFLAGS und die acht Mehrzweckregister von APM gespeichert (siehe 602). Die Save-CPU-State-Routine wartet zuerst auf ein DMA, um bei 604 das Datenpaket der Maus 13 zu beenden und zu synchronisieren, um sicherzustellen, daß diese Routine zwischen Mauspaketübertragungen ausgeführt wird. Die folgenden Schritte ermöglichen es der DMA, das Mauspaket zu beenden und zu synchronisieren: (1) Unterbrechungen aktivieren, (2) 7 ms auf eine DMA warten, um abzuschließen, (3) Unterbrechungen deaktivieren, (4) 5 ms auf eine Mauspaketgrenze warten, (5) Unterbrechungen aktivieren, (6) 5 weitere Millisekunden auf die Ankunft des Mauspakets warten und (7) Unterbrechungen deaktivieren. Nach diesen Schritten kann der Code sicher zwischen den Mauspaketen ausgeführt werden.
  • Als nächstes wird der Status der Adreßleitung 20 (E/A-Port 92H) bei 606 in den Stapelspeicher geschoben (PUSH).
  • Der Ablauf des ausgeführten Codes verzweigt bei 1030, was davon abhängt, ob die CPU 40 ein "5" Teil mit SMI ist. Falls ja, gibt die CPU 40 einen Befehl an den Microcontroller U2 aus, um bei 1032 ein SMI zurück in die CPU 40 zu generieren. Als Reaktion auf das SMI speichert der Mikrocode in der CPU 40 bei 1034 den Status der CPU 40 in E000 : FE00H in der E000H Datenstruktur. Anschießend speichert die CPU 40 bei 1036 den Status des Gleitkomma-Koprozessors und ruft bei 1038 die Suspend-Routine (Fig. 10). Wie erklart wurde, kehrt die Suspend-Routine dann bei 1040 zurück und stellt den Status des Gleikomma-Koprozessors (ebenfalls bei 1040) wieder her. Danach wird bei 1042 mit einem RSM (resume) Befehl der CPU-Status wiederhergestellt und dann zu 732 verzweigt.
  • Andernfalls, wenn die CPU 40, kein SMI hat, muß der CPU-Status mit dem Rest des Codes aus Fig. 13 gespeichert werden, und der Status des arithmetischen Koprozessors 44 wird bei 608 in den Stapelspeicher geschoben. Dann wird bei 610 ein Flag gesetzt (SET) oder gelöscht (CLEAR), um anzugeben, ob die CPU im 32-Bit- oder 16-Bit-Modus ausgefuhrt wird.
  • Der Ablauf des ausgeführten Codes verzweigt dann zu 612, was davon abhängt, ob die CPU 40 im Protected Mode ausgefuhrt wird oder nicht. Wenn die CPU 40 nicht im Protected Mode ausgefuhrt wird, dann muß sie im Real Mode ausgefuhrt werden, und die Register können auf eine sehr einfache Art gespeichert werden. Zuerst werden die Werte im Maschinenstatuswort und CR3 im Segment der E000H-Datenstruktur bei 614 gespeichert. Bei 614 wird auch Null im Segment der E000H-Datenstruktur in den Bereichen gespeichert, die TR und LDTR entsprechen, da TR und LDTR im Real Mode Null sind.
  • Der Code wird dann bei 616 mit einem gemeinsamen Codepfad gemischt, wobei die in GDTR und LDTR gespeicherten Werte in Segment der E000H-Datenstruktur geschrieben werden. Als nächstes wird dann der Ablauf des ausgeführten Codes verzweigt, was davon abhängt, ob die CPU 40 bei 618 im Virtual 8086 Mode oder nicht im Virtual 8086 Mode ausgefuhrt wurde. Wenn die CPU nicht im Virtual 8086 Mode ausgefuhrt wurde, dann folgt der Code dem gemeinsamen Pfad nach unten zu Aufgabe 620, wob die Debug-Register DR7, DR6, DR3, DR2, DR1 und DR0 in den Stapelspeicher geschoben (PUSH) werden. Diese Register werden von Debuggern und anderen Routinen benutzt. Anschließend werden DS, Es, FS und GS bei 622 in den Stapelspeicher geschoben (PUSH). Als nächstes werden die Werte in CS, 55 und ESP in Segment E00H der Datenstruktur geschrieben.
  • An diesem Punkt wurden alle Werte, die in das Segment der E000H-Datenstruktur zu schreiben sind, gespeichert, so daß die Segmente E000H und F000H des Schatten-RAM bei 626 in Read-Only geändert werden können. Als nächstes wird der CPU-Cache 41 bei 628 mittels des Write-Back- und Invalidate-Cache-Befehls geleert.
  • Schließlich wird ein einzigartiger Shutdown-Flag bei 630 im nichtflüchtigen CMOS-Speicher 96 gesetzt (-SET). Danach kehrt die Save-CPU-State-Routine bei 632 zur Suspend-Routine zurück ("RETURN"). Die "Rückkehr" (RETURN) ist normalerweise ein RESET, der von einem Sprung in den Code gefolgt wird. Die CPU 40 setzt durch Sprung (JUMP) zu dem Code zurück, auf den der Reset-Vector zeigt. Durch den Reset der CPU 40 wird die CPU in den Real-Mode gezwungen, wobei auf alle Geräte und Speicherstellen zugegriffen werden kann, ohne Angst zu haben, einen Schutzfehler zu erzeugen. Nach diesem Punkt wurde der Status der CPU gespeichert, und die Suspend-Routine muß den Status vom Rest des Systems speichern.
  • Im Code, auf den der Reset-Vector zeigt, wird die Programmsteuerung verzweigt, was davon abhängt, ob das Shutdown-Flag im CMOS 96 gesetzt (SET) wird. Wenn das Shutdown-Flag gelöscht wird, dann bootet das System wie es normalerweise booten würde. Andernfalls, wenn das Shutdown- Flag gesetzt ist, dann verzweigt der Code mit dem Rest der Suspend-Routine, d. h. die Ausführungssteuerung springt zur Aufgabe 253 in Fig. 10 in der Suspend-Routine, die den Haltevorgang des Systems 10 beendet. Somit kehrt die Save-CPU- State-Routine bei 632 effektiv zur Suspend-Routine zurück. Es wird wieder Bezug auf Aufgabe 612 genommen, wenn die CPU im Protected Mode ist, dann verzweigt der Code zu Aufgabe 634, was davon abhängig ist, ob die CPU im Virtual 8086 Mode ist oder nicht. Wenn die CPU nicht im Virtual 8086 Mode ist, dann verzweigt der Code wieder zu Aufgabe 636, was davon abhängt, ob die aktuelle privilegierte Ebene Null ist. Wenn die aktuelle privilegierte Ebene Null ist, dann wird eine Routine ohne echtes Vorrecht die Save-CPU-State-Routine ausführen und die Fatal-Suspend-Error-Routine (beginnt bei Aufgabe 652) wird aufgerufen. Die Fatal-Suspend-Error-Routine wird nachstehend · erörtert. Wenn die Programmsteuerung von der Fatal Suspend Error Routine zurückkehrt, dann muß die CPU in ihren Zustand zurückgekehrt sein, bevor die Save-CPU-State-Routine aufgerufen wurde. Die Programmausführung verzweigt in Fig. 14 mit Aufgabe 794, die eine Teilwiederherstellung der CPU durchführt. Es ist nur eine Teilwiederherstellung erforderlich, da sehr wenig in der CPU geändert wurde.
  • Es wird nun wieder auf Aufgabe 636 Bezug genommen. Wenn der Calling-Code die richtige privilegierte Ebene hat, dann wird die Speicherung bei 642 fortgesetzt, wahrend die Werte in CR0, CR3, TR und LDTR im Segment der E000H-Datenstruktur gespeichert werden. Dann wird dieser Codepfad mit dem allgemeinen Codepfad bei 616 gemischt, wobei die Werte in GDTR und IDTR in der E000H Datenstruktur gespeichert werden, wie oben erklart wurde. Von hier aus folgt der Code dem Pfad von 618 bis 632, der oben erklart wurde. Dies führt zu einem "Return" (RESET plus eine Verzweigung) zum verbleibenden Suspend-Routine-Code.
  • Es wird nun wieder auf Aufgabe 634 Bezug genommen. Wenn die CPU 40 im Virtual 8086 Mode ist, dann fahrt die Ausführung bei 644 fort, wobei der Wert des Maschinenstatusworts (die unteren 16 Bits von CR0) in der E000H Datenstruktur gespeichert wird, und es wird ein Flag im Segment der E000H-Datenstruktur gesetzt, das angibt, daß die CPU im Virtual 8086 Mode ist. Dieser Code wird dann mit dem allgemeinen Code bei 616 mittels Transfer 646 und 648 gemischt. Wenn die CPU im Virtual 8086 Mode war, verzweigt bei Aufgabe 618 die Steuerung zu 650, wobei die Werte in DS, Es, FS und GS im Segment der E000H- Datenstruktur gespeichert werden. Dieser Code wird bei 624 wiederum mit dem allgemeinen Code gemischt. Von hier aus folgt der Code dem Pfad von 624 bis 634, das - wie oben erklärt wurde - in einem "Return" (Reset plus einer Verzweigung) zum verbleibenden Suspend-Routine-Code resultiert.
  • Die Fatal-Suspend-Error-Routine liegt bei den Aufgaben 652 bis 664 und wird bei 638 aufgerufen, wenn der Code mit einer falschen privilegierten Ebene versucht, den Status der CPU zu speichern. Zuerst wird der Failsafe-Timer bei 654 zurückgesetzt. Dann ertönt aus dem Lautsprecher eine Anzahl von Pieptönen in einer hörbaren Frequenz z.B. dreimal bei 886 Hz während 0,25 Sekunden, mit 1/6 Sekunde zwischen den Pieptönen (siehe 656). Die drei Pieptöne warnen den Benutzer, daß der versuchte Haltevorgang nicht stattgefunden hat. Nach dem Piepton wird der Failsafe-Timer bei 658 wieder zurückgesetzt, um dem Benutzer 15 bis 18 Sekunden Zeit zu geben, bevor der Failsafe-Timer abläuft und die Stromversorgung 17 abschaltet.
  • Als nächstes prüft die Fatal-Suspend-Error-Routine wiederholt, um festzustellen, ob der Schalter 21 vom Benutzer gedrückt wurde (siehe Aufgaben 660 und 662), d. h. daß der Benutzer den Haltevorgang abbrechen möchte. Das Schließen des Schalter wird von der CPU 40 geprüft, die den Microcontroller U2 abfragt, ob ein Schließvorgang eingetreten ist. Wenn der Benutzer den Schalter 21 drückt, dann kehrt die Ausführungssteuerung zu Aufgabe 640 oben zurück. Wenn der Benutzer den Schalter 21 nicht innerhalb von 15 bis 18 Sekunden betätigt, wird der Failsafe-Timer ablaufen, und die Stromversorgung 17 wird vom Microcontroller abgeschaltet, und offensichtlich wird die Ausführung des Codes von der CPU 40 eingestellt, wenn die Systemspannung außerhalb der Toleranz liegen.
  • Es wird nun auf Fig. 14 Bezug genommen, in der ein Flußdiagramm der Restore-CPU-Routine abgebildet ist, das bei 700 beginnt. Diese Routine wird von der Resume-Routine aufgerufen, nachdem der Rest der Hardware und des Speichers wieder in ihrem Status vor dem Haltestatus hergestellt wurden. Wenn das Segment E000H noch nicht Read/Write ist, sollte es bei 702 in Read/Write geändert werden.
  • Als nächstes verzweigt der Ablauf des ausgeführten Codes zu 704, was davon abhängig ist, ob die CPU im Virtual 8086 Mode ausgefuhrt wurde, als sie gehalten wurde. Wenn die CPU 40 im Virtual 8086 Mode ausgefuhrt wurde, wenn das System 10 gehalten wurde, dann wird der Code von den Aufgaben 706 bis 728, die im Virtual 8086 CPU einzigartig sind, wiederhergestellt. Anschließend wird der Code mit einem allgemeinen Pfad von den Aufgaben 730 bis 748 vermischt.
  • Wenn die CPU im Virtual 8086 Mode war, als der Status gespeichert wurde, dann konnte die Save-CPU-State-Routine nicht auf CR3, LDTR und TR zugreifen, um diese Werte in der E000H Datenstruktur zu speichern. Deshalb müssen CR3, LDTR und TR jeweils bei 706, 708 und 710 geschätzt werden. Im allgemeinen werden sie geschätzt, indem durch den System-RAM 53 nach den Strukturen gesucht wird, auf die CR3, LDTR und TR zeigen. Wird beispielsweise der LDT-Eintrag in der GDT gefunden kann LDTR ermittelt werden.
  • CR3 wird bei Aufgabe 706 geschätzt. CR3 enthält das Page Directory Base Register (PDBR), das die Seitenrahmenadresse des Seitenverzeichnisses, das Page-Level Cache Disable (PCD) Bit und das Page-Level Write Through (PWT) Bit enthält. Die Schätzung des PDBR basiert auf dem Wissen, daß das Seitenverzeichnis bei einer 4K-Grenze innerhalb des System-RAM 53 beginnen muß, wobei die Werte für IDTR und GDTR bekannt sind, die von der Save-CPU-State-Routine im Segment der E000H- Datenstruktur gespeichert wurden. Es wird außerdem angenommen, daß der BIOS-Code von Segment F000H ausgeführt wird. Die Annahme ist berechtigt, da der BIOS-Code bereits im Schatten- RAM für die Geschwindigkeit schattiert wurde. Wenn das Betriebssystem den BIOS-Code in einen anderen Bereich kopierte, würde die Schätzung von CR3 fehlschlagen.
  • Ausgehend von den obigen Kenntnissen und der obigen Annahme wird jede 4K-Seite des physischen Speichers auf das Vorhandensein einer Seitenübersetzungstabelle geprüft, die den BIOS-Codesegmenten entspricht. Das heißt, ein Offset von 03C0H in der Seite würde die Werte 000F0XXX, 000F1XXX, 000F2XXX, 000FEXXX enthälten. Sobald die Seite gefunden ist, wird der System-RAM 53 nach einem Seitenverzeichnis durchsucht, dessen erster Eintrag der physischen Adresse der Seitentabelle entspricht, die oben festgestellt wurde. Die physische Adresse des Seitenverzeichnisses ist eine "Schätzung" des Werts des PDBR.
  • Das hypothetische PDBR wird dann überprüft, indem sichergestellt wird, daß das PDBR die Adressen fur die GTDR und die IDTR korrekt übersetzt. Das heißt, das PDBR wird benutzt, um die lineare Adresse des GDTR zu übersetzen, und der erste Eintrag der GDT muß eine Null sein (die ersten acht Bytes der GDT sind in einem CPU-Modus immer 00H). Bei der physischen Adresse, die zurückgesendet wird, wird überprüft, ob sie innerhalb der Grenzen des physischen Speichers liegt. Um die lineare in die physische Übersetzung zu erreichen, wird eine Subroutine, die das CPU Übersetzungsverfahren nachahmt, benutzt. Die übersetzte Adresse wird an ESI zurückgeschickt, und das Übertragungs-Flag CF wird gelöscht, wenn die physische Seite im Speicher nicht vorhanden ist. Mit dieser Übersetzungsroutine wird das erste Byte der GDT aus dem Speicher 53 ausgelesen. Wenn der erste Eintrag der GDT eine Null ist, dann hat das hypothetische PDBR seinen ersten Test durchlaufen und wird somit erneut getestet. Das PDBR wird dann zur Übersetzung des IDTR benutzt, um die IDT mit der Übersetzungsroutine zu finden. Dann wird die physische Adresse, die zurückgeschickt wird, überprüft, ob sie innerhalb der Grenzen des physischen Speichers liegt. Wenn die erste Speicherstelle der IDT im physischen Speicher vorhanden ist, dann hat das PDBR seinen zweiten Test durchlaufen.
  • Wenn ein hypothetisches PDBR korrekt in das GDTR und das IDTR übersetzt, dann wird der Wert als PDBR angenommen und im CR3- Bereich innerhalb des Segments E000H der Datenstruktur gespeichert. Andernfalls, wenn das hypothetische CR den Test nicht besteht, dann startet die Routine erneut und durchsucht den Systemspeicher nach einer anderen BIOS Code-Segment-Page- Translation-Table, die zu einem gültigen CR3 führen könnte.
  • Von PCD und PWT wird immer angenommen, daß sie bei der normalen planaren Operation fest sind. Diese Werte werden auch auf Null gesetzt und innerhalb des Segments E000H der Datenstruktur mit dem PDBR in den C3-Bereich geschrieben.
  • Sobald das CR3 geschätzt wurde, wird das LDTR bei 708 geschätzt. Das LDTR kann geschätzt werden, wobei davon ausgegangen wird, daß das CR3 geschätzt wurde, und man weiß, daß die LDT irgendwo innerhalb der GDT ist, und man weiß, daß die LDT im Speicher vorhanden sein muß. Um das LDTR zu schätzen, wird die GDT nach einer LDT durchsucht, die als vorhanden markiert ist. Die erste LDT, die im physischen Speicher vorhanden ist (die mit der Übersetzungsroutine getestet wurde, das im Begleittext zu Aufgabe 706 erklärt wurde) und als vorhanden markiert ist, wird als die Tabelle angenommen, auf die das LDTR zeigt. Die physische Adresse vom Anfang dieser Tabelle wird im LDTR-Bereich im Segment der E000H-Datenstruktur gespeichert.
  • Das obengenannte Verfahren zum Schätzen des LDTR wird als zuverlässig genug angenommen, um nützlich zu sein, sogar unter OS/2, wo mehr als eine LDT als vorhanden markiert werden kann und im physischen Speicher vorhanden ist. EMM386 ist eine allgemeine Virtual 8086 Mode Routine und könnte deshalb möglicherweise Probleme verursachen. CR3 und LDTR für EMM386 sind einfach zu schätzen, weil EMM386 nur ein CR3 und ein LDTR hat.
  • Sobald CR3 und LDTR geschätzt wurden, wird das TR bei 710 geschätzt. Im wesentlichen wird jeder Task-Selector-Eintrag in der GDT und der LDT nach einem Task-State-Selector mit gesetztem Belegbit durchsucht. Das Typfeld für jeden Eintrag wird getestet, um festzustellen, ob es entweder ein belegter 80286 Task-State-Selector oder ein belegter 80486 Task-State- Selector ist. Der erste Eintrag mit entweder einem belegten 286 TSS oder einem belegten 486 TSS wird als die Adresse angenommen, auf die das TR zeigt. Die physische Adresse des Eintrags mit dem belegten 286 oder 486 TSS wird im TR-Bereich innerhalb des Segments E000H der Datenstruktur gespeichert. Wenn keiner der Einträge ein belegtes 286 oder 486 TSS hat, dann wird die Null im TR-Bereich innerhalb des Segments E000H der Datenstruktur gespeichert.
  • Nachdem CR3, LDTR und TR geschätzt wurden, fährt der Code bei Aufgabe 712 fort. Bei 712, wenn das IR auf ein gültiges TSS zeigt, dann wird das Busy-Bit im TSS, auf das das TR zeigt bei 714 gelöscht. Der Code fährt auf jeden Fall bei 716 fort, wobei DS, Es, FS und GS mit dem für GDT gültigen Selector geladen werden. Dann werden CR3 und CR0 mit den Werten aus dem Segment der E000H-Datenstruktur bei 718 geladen. Als nächstes wird bei 720 das Paging aktiviert, so daß der einzige Bereich, in dem lineare Adressen gleich den physischen Adressen sind, der Bereich in den Segmenten E000H und F000H ist. Dann werden IDTR, GDTR, LDTR und TR mit den Werten geladen, die im Segment der E000H-Datenstruktur (siehe 722) gespeichert sind.
  • Schließlich wird bei 724 und 726 ein Virtual 8086 Interrupt Stack erstellt, indem die Werte, die GS, FS, DS, Es, SS, ESP, EFLAGS (nachdem das VM-Bit gesetzt wurde) und CS entsprechen, vom Segment der E000H-Datenstruktur in den Kellerspeicher verschoben werden. Eine Rücksprungadresse, die dem Code bei Aufgabe 730 entspricht, wird bei 726 ebenfalls in den Speicher verschoben. Schließlich wird ein IRETD-Befehl ausgefuhrt, um die CPU 40 zurück in den Virtual 8086 Mode zu setzen und die Ausführung an den Code zu übertragen, der der Aufgabe 730 entspricht.
  • Die Aufgabe 730 beginnt bei der allgemeinen Befehlsfolge, die von jeder der verschiedenen Befehlsfolgen in Fig. 14 benutzt werden. Bei Aufgabe 730 wird der Coprozessor 44 mittels der Werte wiederhergestellt, die im Segment der E000H- Datenstruktur gespeichert sind. Als nächstes wird der Status der Adreßleitung 20 (E/A-Port 92H) bei 732 aus dem Kellerspeicher ausgespeichert. Die Aufgabe 732 ist auch der Punkt, auf den die auf SMI-basierende CPU Save-State-Routine springt (siehe Aufgabe 1046). Dann wird bei 734 das Segment E000H im Schatten-RAM nur gelesen. Bei 736 wird der APM an die Hardware angeschlossen, indem der Failsafe-Timer, wie im Begleittext zu den Fig. 6A und 19 beschrieben wurde, neu gestartet wird. Anschließend werden die Segmente E000H und F000H bei 738 im Schatten-RAM wieder nur gelesen. Schließlich setzt die Restore-CPU-State-Routine bei 740 ein Flag, der angibt, daß eine normale Wiederaufnahme aufgetreten ist. Die Aufgaben 742, 744 und 746 werden nicht von der Restore-CPU- State-Routine ausgefuhrt, sondern nur benutzt, um zu zeigen, daß zu einem Zeitpunkt, bevor zum Code zurückgesprungen wird, der von dem Halteereignis unterbrochen wurde, die acht allgemeinen Register aus dem Kellerspeicher ausgespeichert werden, die maskierbaren Unterbrechungen aktiviert werden (wenn sie aktiviert wurden, als der Code unterbrochen wurde), und die Flags aus dem Kellerspeicher ausgespeichert werden. Schließlich kehrt die Restore-CPU-State-Routine zur Supervisor-Routine zurück, die die Steuerung an den APM zurücksendet, der die Statussystemwerte aktualisiert und die Steuerung zurück an den Code sendet, der unterbrochen wurde. Es wird nun auf Aufgabe 704 Bezug genommen. Wenn die CPU zum Zeitpunkt der Unterbrechung nicht im Virtual 8086 Mode war, dann folgt der Code einem Pfad von 750 bis 792, wo der Code mit den allgemeinen Befehlsfolgen der Aufgaben 730 bis 748 gemischt wird. Bei 750 wird, wenn der TR-Wert im Segment der E000H-Datenstruktur angibt, daß das TR auf einen gültigen TSS zeigt, das Busy-Bit in diesem TSS bei 752 gelöscht. In diesem Fall werden als nächstes (bei 754) GDTR und GR0 mit Werten aus dem Segment der E000H-Datenstruktur geladen.
  • Anschließend werden bei den Aufgaben 756 bis 764 eine Dummy- Page-Directory-Table und eine Page-Translation-Table in Segment E000H geladen. Erstens: Bei 756 wird aus dem Segment E000H im Schatten-RAM ein Read/Write. Zweitens: Bei 758 wird bei der Adresse 0E0000H eine neue Page-Directory-Table erstellt. Drittens: Bei 760 wird der erste Eintrag in diese neue Page-Directory-Table geändert, um auf OE1000H zu zeigen. Viertens: Bei 0E1000H wird eine neue Page-Translation Table erstellt, so daß die Adressen 0E0000 bis 0FFFFF vorhanden sind, und für diesen Adreßbereich die linearen Adressen gleich der physischen Adressen (siehe 762). Schließlich wird das Page-Directory-Base-Register mit 0E0000H in CR3 geladen, so daß die Adreßübersetzungen über das neue Dummy-Page-Directory und die Page-Translation-Table in 0E0000H erstellt werden. Das Paging wurde wieder aktiviert (falls anwendbar), als CRO bei Aufgabe 754 geladen wurde.
  • Als nächstes werden bei 766 die Segmente E000H und F000H des Schatten-RAM zu Read/Write. Anschließend, wenn die CPU 40 den 16-Bit-Code ausgeführt hat, als sie gehalten wurde, dann war sie im 16-Bit-Modus, und ein Offset, der auf einen 16-Bit- Code-Pfad zeigt, wird im Segment der E000H-Datenstruktur gespeichert (siehe 770). Andernfalls, wenn die CPU 40 nicht im 16-Bit-Modus war, dann befand sie sich im 32-Bit-Modus, und ein Offset, der auf einen 32-Bit-Code zeigt, wird - anstelle des 16-Bit-Offsets - bei 722 im Segment der E000H- Datenstruktur gespeichert. In diesem Fall sind diese Codepfade parallel und unterscheiden sich nur dadurch, daß der eine 16- Bit-Operanden und der andere 32-Bit-Operanden benutzt. Mit den Aufgaben 770 und 772 wird nur der Offset in jedem der parallelen Pfade eingerichtet. Einer der Pfade (derjenige, der dem Offset entspricht) wird in der folgenden Aufgabe 782 eingegeben.
  • Als nächstes wird bei 774 der CR3-Wert aus dem Segment der E000H-Datenstruktur in EDX geladen, der SS-Wert aus dem Segment der E000H-Datenstruktur in CX geladen, der ESP-Wert aus dem Segment der E000H-Datenstruktur in EBP geladen, der TR-Wert aus dem Segment der E000H-Datenstruktur wird in die obere Halfte von ESI geladen, und der LDTR-Wert aus dem Segment der E000H-Datenstruktur wird die untere Hälfte von ESI (SI) geladen. Diese Werte werden unten in ihre richtigen Speicherstellen verschoben. Dann werden GDTR, LDTR und CRO bei 776 mit ihren Werten aus dem Segment der E000H-Datenstruktur geladen. Bei 778 wird LDTR mit dem in S1 gespeicherten Wert geladen. Dann springt der Code zum Offset, der entweder in der Aufgabe 770 oder 772 gesetzt wurde. Der Sprung wird codiert, indem der Operationscode direkt im Quellcode plaziert wird und indem der Offset entweder von 770 oder 772 benutzt wird. Der Code fährt dann bei 782 entweder in einem 16-Bit- Operationscodepfad oder in einem 32-Bit-Operationscode fort.
  • Als nächstes wird bei 784 C3 mit dem in EDX gespeicherten Wert geladen, SS wird mit dem in CX gespeicherten SS-Wert geladen, und ESP wird mit dem in EBP gespeicherten ESP-Wert geladen. Anschließend werden bei 786 GS, FS, Es und DS aus dem Kellerspeicher ausgespeichert. Bei 788, wenn die unterbrochene CPU 40 den Code im geschützten Modus ausgeführt hat, dann wird bei 790 das TR mit dem in der oberen Hälfte von ESI gespeicherten TR-Wert geladen. In diesem Fall fährt der Code bei Aufgabe 792 fort, wo die Debug-Register DR0, DR1, DR2, DR3, DR6 und DR7 aus dem Kellerspeicher ausgespeichert werden.
  • An diesem Punkt wird dieser Codepfad mit dem allgemeinen Codepfad der Aufgaben 730 bis 748 gemischt, die oben erklärt wurden. Bei 794 trifft die Error-Recovery-Routine auch auf den gemeinsamen Codepfad von Aufgabe 640 der Save-CPU-State- Routine.
  • Es wird nun wieder auf Fig. 15 Bezug genommen, in der ein Flußdiagramm der Save-8259-State-Routine abgebildet ist, die bei 800 beginnt. Das Speichern der Status des 8259 wird mit dem Speichern der periodischen Unterbrechungswerte fortgesetzt, die von der Realzeituhr 98 bei 802 benutzt werden, und das Speichern von allen anderen lesbaren Registern im Segment der E000H-Datenstruktur bei 804. Die Architektur des Rechnersystems 10 erfordert es, daß bestimmte 8259 Read- Only-Register feste Werte haben, wie dies im Stand der Technik bekannt ist. Diese Werte sind bekannt und müssen nicht ermittelt werden. Zu den 8259-Werten, die schwierig zu erhalten sind, gehören die 8259-Basisadresse, die 8259-Slave- Adresse, und ob die beiden 8259 gesetzt sind, um Pending- oder In-Service-Unterbrechungen von der OS zu zeigen.
  • Die vier obengenannten Punkte werden von dem Restcode in Fig. 15 ermittelt. Bei 806 wird 8259 maskiert, und nur Unterbrechungen von der Tastatur 12 und der Maus 13 werden nicht maskiert.
  • Als nächstes wird die Unterbrechungsvektortabelle gespeichert, indem das untere 1K des physischen Speichers bei 808 in ein Segment der E000H-Datenstruktur kopiert wird. Dann wird bei 810 eine neue "Dummy" Unterbrechungsvektortabelle in das untere 1K des physischen Speichers geladen, indem 256 einzigartige Dummy-Vektoren, die auf 256 Dummy-Unterbrechungs- Service-Routinen zeigen, die im Segment C800H starten, geladen werden. Bei 812 werden die 256 Dummy-Unterbrechungs-Service- Routinen im Segment C800H erstellt.
  • Dann werden bei 814 die Unterbrechungen von Tastatur 12 und Maus 13 deaktiviert. Bei 816 werden unbestätigte Unterbrechungen von Tastatur 12 und Maus 13 bestätigt.
  • Anschließend wird bei 818 eine Tastaturunterbrechung generiert, und die Unterbrechung wird getestet, um festzustellen, ob bei 822 die Basis 8259 auf "pending" oder "in-service" gesetzt wurde. Dieser Wert wird dann im Segment der E000H-Datenstruktur gespeichert. Bei 822 wartet der Code auf die Unterbrechung, die zu bedienen ist. Die Unterbrechung wird bei 824 bedient, indem eine der Dummy-Service-Routinen aufgerufen wird. Beim Aufrufen der Dummy-Service-Routine wird die 8259-Basisadresse bestimmt und bestimmt, ob die 8259 im Pending- oder In-Service-Modus war. Basisadresse und Modus werden im Segment der E000H-Datenstruktur gespeichert. Eine ähnliche Prozedur wird bei den Aufgaben 826, 828, 830 und 832 durchgeführt.
  • Bei 834 wird die Unterbrechungsvektortabelle wiederhergestellt, indem die Werte aus der E000H Datenstruktur zurück in das untere 1K des physischen Speichers kopiert werden. Dann wird das Segment der E000H bei 836 wieder zum Read-Only, und alle Unterbrechungen werden bei 838 als Vorbereitung zur Rücksendung an das aufrufende Programm bei 840 maskiert.
  • Es wird nun auf Fig. 16 Bezug genommen, in der die Routine, die benutzt wird, um die Suspend-Datei dynamisch zuzuordnen, abgebildet ist. Wie im Begleittext zu Aufgabe 1012 angegeben ist, sollte die Suspend-Datei, die FAT zugeordnet wurde, zusammenhängende Sektoren haben, um schnellen Schreiben auf Festplatte und schnelles Auslesen von der Festplatte während Halte- bzw. Wiederaufnahmevorgängen zu ermöglichen. Wie der Fachmann feststellen wird, muß die Suspend-Datei groß genug sein, um die komprimierten Inhalte des gesamten Systemstatus zu speichern.
  • Zu diesem Zweck beginnt die Routine mit der dynamischen Zuordnung des Haltevorgangs bei 1050. Diese Routine wird vom OS jedesmal ausgeführt, wenn das System bootet, ohne die Resume-Routine auszuführen. Sie sollte ausgefuhrt werden, nachdem der Speicher zum System hinzugefügt werden. Zuerst prüft die in Fig. 16 abgebildete Allocation-Routine bei 1052, ob der Leistungssteuerkreis vorhanden ist, indem ein Flag im CMOS NVRAM geprüft wird. Wenn keine Leistungssteuer-Hardware 106 vorhanden ist, dann prüft die Routine, um festzustellen, ob ein Resume-Vorgang anhängig ist (siehe 1056). Falls ja, wird das Programm bei 1058 beendet.
  • Wenn kein Resume-Vorgang anhängig ist, dann prüft die Allocation-Routine als nächstes, ob bei 1060 eine Save-File- Partition vorhanden ist. Wenn eine Save-File-Partition vorhanden ist, dann wird das Programm bei 1062 in der Annahme beendet, daß die Partition groß genug ist, um den gesamten Systemstatus zu speichern.
  • Wenn keine Save-File-Partition vorhanden ist, dann muß im FAT eine Datei als Safe-File zugeordnet werden. Zuerst wird bei 1064 die Größe der Datei bestimmt. Diese wird berechnet, indem die Größe vom System-RAM 53, die Größe des Bildspeichers 58, die Größe der anderen Einrichtungen mit großer flüchtiger Speicherkapazität und ein 64 KB-Bereich zum Speichern der Werte in den Registern der verschiedenen Einrichtungen, zum Beispiel der CPU 40, berechnet wird.
  • Nachdem die Größe der erforderlichen Save-File berechnet wurde, versucht die Allocation-Routine als nächstes die Save- File bei 1066 im FAT zuzuordnen. Wenn es im Magnetplattenlaufwerk 31 nicht genug freien Speicherplatz gibt, ruft die Allocation-Routine bei 1070 eine Routine auf, um die Größe des freien Speicherplatzes im Magnetplattenlaufwerk 31, wenn möglich zu erhöhen.
  • DOS-Aufrufe können keine zusammenhängende Sektoren in einer Datei garantieren. Wenn das Magnetplattenlaufwerk 31 genug Platz hat, um die Save-File zu speichern, bestimmt deshalb die Allocation-Routine als nächstes (bei 1072), ob es sich um zusammenhängenden Platz handelt. Wenn die Save-File fragmentiert ist (nicht zusammenhängend), dann ruft die Allocation-Routine bei 1074 eine Routine auf, um die Festplatte zu defragmentieren, um, wenn möglich, eine zusammenhängende Datei als Save-File bereitzustellen.
  • Ist die Save-File nicht fragmentiert, dann schreibt die Allocation-Routine als nächstes die Signatur ("PS/1 Power Management") in den ersten Sektor der Save-File (bei 1076). Dann konvertiert die Allocation-Routine den DOS-Handle für die Datei in den physischen Zylinder, Kopf und Sektor für das BIOS und schreibt diese Werte bei 1078 in den CMOS NVRAM. Schließlich wird die Allocation-Routine bei 1080 beendet.
  • Die Routine, um das Magnetplattenlaufwerk 31, das bei 1074 aufgerufen wurde, zu defragmentieren, beginnt bei Aufgabe 1082 und wird über die Aufgabe 1094 fortgesetzt. Zuerst wird bei 1084 das Magnetplattenlaufwerk 31 getestet, um zu bestimmen, ob es mittels einer der Komprimierungsroutinen des Magnetplattenlaufwerks, die dem Fachmann bekannt sind, zu komprimieren.
  • Wenn das Magnetplattenlaufwerk 31 nicht komprimiert wird, wird bei 1086 als nächstes das gesamte Magnetplattenlaufwerk 31 mittels eines Defragmentierungs-Dienstprogramms defragmentiert, das dem Fachmann bekannt ist. Anschließend kehrt die Routine bei 1088 zurück, um bei 1090 den Allocation- Teil der Allocation-Routine zu erneuern.
  • Wenn das Magnetplattenlaufwerk 31 komprimiert ist, dann wird bei 1092 der komprimierte Teil des Magnetplattenlaufwerks 31 minimiert. Danach wird bei 1094 der nicht komprimierte Teil des Magnetplattenlaufwerks 31 mittels eines Defragmentierungs- Dienstprogramms, das dem Fachmann bekannt ist, defragmentiert. Danach kehrt die Routine bei 1088 zurück, um den Allocation- Teil der Allocation-Routine bei 1090 zu erneuern.
  • Die Routine, um den auf dem Magnetplattenlaufwerk 31 freien Platz, der bei 1070 aufgerufen wurde, zu erhöhen, beginnt bei Aufgabe 1100 und wird über die Aufgabe 1110 fortgesetzt. Zuerst wird das Magnetplattenlaufwerk 31 bei 1102 getestet, um festzustellen, ob es mittels einer der Komprimierungsroutinen des Magnetplattenlaufwerks, die dem Fachmann bekannt sind, komprimiert wurde.
  • Wenn das Magnetplattenlaufwerk 31 nicht komprimiert wurde, dann hat das Magnetplattenlaufwerk 31 nicht genug freien Platz für die Save-File, und es wird bei 1104 eine Meldung angezeigt, die den Benutzer informiert, daß der Benutzer, um die Suspend- und Resume-Merkmale zu nutzen, das Magnetplattenlaufwerk um zusätzliche Kapazität erweitern oder Dateien vom Magnetplattenlaufwerk 31 löschen muß.
  • Wenn das Magnetplattenlaufwerk 31 komprimiert wird, dann wird bei 1108 als nächstes die Große des nicht komprimierten Teils des Magnetplattenlaufwerks 31, wenn möglich, erhöht. Danach kehrt die Routine bei 1110 zurück, um den Allocation-Teil der Allocation-Routine bei 1090 zu erneuern.
  • Es wird nun wieder auf Fig. 17 Bezug genommen. Die Routine, um den Standby-Status zu verlassen, ist bei 1120 (Start) abgebildet. Während das System den Standby-Status 152 verläßt, kehrt das System die Änderungen um, die veranlaßt wurden, als das System vom normalen Betriebsstatus 150 in den Standby- Status 152 wechselte. Kurz gesagt, während das System den Standby-Status verläßt, stellt das System das Bildsignal wieder her, beleuchtet die LED 24, fährt die Festplatte im Magnetplattenlaufwerk 31 hoch, stellt die Systemuhr wieder her, deaktiviert die APM CPU-Idle-Aufrufe, so daß die CPU- Idle-Aufrufe vom APM-Treiber die CPU 40 nicht länger stoppen und löscht ein Flag, das angibt, daß das System 10 im Standby- Status 152 ist.
  • Zuerst prüft die Routine bei 1122, ob ein Haltepunkt generiert wurde, als das System in den Standby-Status 152 übergegangen ist. Falls ja, wird das vom Haltepunkt genommene Bit bei 1124 gelöscht, um anzugeben, daß der Haltepunkt nicht länger gültig ist. In diesem bestimmten Ausführungsbeispiel wird der Haltepunkt für ungültig erklärt, wenn das System den Standby- Status verläßt. Die Haltepunktdaten werden nur benutzt, um das System wiederaufzunehmen, wenn das System ausgefallen ist, WÄHREND es im Standby-Status War, da die meisten Systeme virtuelle Überlagerungsdateien auf der Festplatte benutzen und durch die Wiederaufnahme von den Haltepunktdaten aus könnte das Gerät in einen Status gesetzt werden, in dem sich die Überlagerungsdatei vollkommen von dem unterscheidet, was von dem Systemstatus, der als Haltepunktdaten gespeichert ist, erwartet wird. Als Alternative können die Haltepunktdaten nach dem nächsten Plattenzugriff ungültig gemacht werden. In einer weiteren Alternative könnten die Haltepunktdaten nach einem Plattenzugriff auf eine Datei ungültig gemacht werden, die Systemprobleme verursachen könnte, wenn das System von den Haltepunktdaten wieder aufgenommen wurde. In noch einer weiteren Erfindung könnten die Haltepunktdaten den Benutzern stets verfügbar gemacht werden, wenn klar ist, daß bei Wiederaufnahme von den Haltepunktdaten aus einige oder alle Daten im Magnetplattenlaufwerk 31 verlorengehen könnten.
  • Anschließend, und wenn keine Haltepunktdaten genommen wurden, gibt die CPU 40 bei 1126 den Befehl an den Microcontroller U2 aus, um (i) das Bildsteuersystem 56 zu veranlassen, mit der Generierung des Bildsignals nochmals zu beginnen, (ii) den Clock-Synthesizer 906 zu veranlassen, die Systemuhr mit höherer Frequenz (25 MHz oder 33 MHz) wiederaufzunehmen und (iii) die LED 23 einzuschalten. Dann schreibt die CPU 40 bei 1128 einen passenden Wert in das Festplattensteuerwerk 86, um die Festplatte im Magnetplattenlaufwerk 31 zu veranlassen, sich zu drehen. Als nächstes werden die APM CPU Idle-Aufrufe deaktiviert, so daß bei 1130 keine CPU-Unterbrechungen auftreten. Schließlich wird bei 1132 das Standby-Flag gelöscht, das angibt, daß sich das System 10 im normalen Betriebsstatus 150 befindet, und die Routine kehrt bei 1140 zum aufrufenden Programm zurück.
  • Es wird nun Bezug auf Fig. 18 genommen, in der die Routine, um in den Standby-Status zu gelangen - beginnend bei 1140 - abgebildet ist. Kurz gesagt, wahrend das System in den Standby-Status 152 übergeht, loscht das System das Bildsignal, läßt die LED 23 blinken, fährt die Festplatte im Magnetplattenlaufwerk 31 herunter, verlangsamt die Systemuhr, aktiviert die APM CPU Idle-Aufrufe, so daß die CPU Idle- Aufrufe vom APM-Treiber die CPU stoppen und setzt ein Flag, das angibt, daß sich das System 10 im Standby-Status befindet.
  • Zuerst prüft die Routine bei 1142, ob ein Haltepunkt zu nehmen ist. Falls ja, wird das meiste der Suspend-Routine bei 1144 ausgeführt, so daß der Status des Computersystems 10 auf dem Magnetplattenlaufwerk 31 gespeichert wird. Im vorliegenden Ausführungsbeispiel wird ein Haltepunkt genommen, während das System in Standby übergeht. Als Alternative kann regelmäßig ein Haltepunkt genommen und benutzt werden, um das System wiederaufzunehmen, wobei die Hinweise, die im Begleittext zu Fig. 17 erörtert wurden, zu beachten sind. Dann wird bei 1146 genug Resume-Routine für die Wiederherstellung vom teilweisen Suspend, der bei 1144 genommen wurde. Dann wird das vom Haltepunkt genommene Bit bei 1148 gesetzt (SET), um anzugeben, daß ein gültiger Haltepunkt genommen wurde. Abruf (Recall) bedeutet in diesem Ausführungsbeispiel, daß die Haltepunktdaten nur benutzt werden, wenn das System WÄHREND es im Standby-Status 152 ist, ausfällt. In diesem Fall erfolgt die Wiederaufnahme des Systems, während es bootet, vom gesicherten Haltepunkt aus.
  • Der Haltepunkt sollte idealerweise für das System vollkommen transparent sein. Der Haltepunkt sollte deshalb abgebrochen werden, wenn eine Hardware-Unterbrechung auftritt, um Datenverluste zu vermeiden. Alternativ können, wie bei einem normalen Suspend, Hardware-Unterbrechungen ignoriert werden.
  • Anschließend, und wenn kein Haltepunkt genommen wurde, gibt die CPU 40 bei 1150 den Befehl an den Microcontroller U2 aus, (1) das Bildsteuersystem 56 zu veranlassen, die Generierung des Bildsignals zu stoppen, (ii) den Clock-Synthesizer 906 zu veranlassen, die Systemuhr von ihrer höheren Frequenz (25 MHz oder 33 MHz) auf 8 MHz zu verlangsamen, und (iii) die LED 23 zum Blinken zu veranlassen. Anschließend schreibt die CPU 40 bei 1152 einen entsprechenden Wert in das IDE- Festplattensteuerwerk 86, um die Festplatte innerhalb des Magnetplattenlaufwerks 31 zu veranlassen, die Drehung einzustellen. Als nächstes werden die APM CPU Idle-Aufrufe aktiviert, so daß die CPU Idle-Aufrufe vom APM-Treiber die CPU bei 1154 stoppen. Schließlich wird bei 1156 das System-Flag gesetzt (SET), das angibt, daß das System 10 im Standby-Status 152 ist, und die Routine kehrt bei 1158 zum aufrufenden Programm zurück.
  • Es wird geschätzt werden, daß viele der Aufgaben vom Leistungssteuerkreis 106 durchgeführt werden können, so kann beispielsweise die Hardware-Überwachung von einer oder mehreren Unterbrechungen in der Chipgruppe des Systems erstellt werden.

Claims (9)

1. Ein Rechnersystem mit:
(a) einer Zentraleinheit (CPU) (40), die in der Lage ist, Codes auszuführen;
(b) einem Leistungssteuerprozessor (106) in Schaltkreiskommunikation mit der CPU;
(c) externen Signalempfangsmitteln (902) in Schaltkreiskommunikation mit dem Leistungssteuerprozessor;
(d) einem konfigurierten Timer (102) in Schaltkreiskommunikation mit dem Leistungssteuerprozessor, der nach einem zuvor festgelegten Zeitraum abgelaufen ist;
(e) einer Stromversorgung (17) in Schaltkreiskommunikation mit der CPU und dem Leistungssteuerprozessor, dadurch gekennzeichnet, daß
die Stromversorgung Schaltlogik enthält, um das Rechnersystem selektiv mit Systemleistung von einer externen Quelle zu versorgen, wobei das Rechnersystem, das auf den Leistungssteuerprozessor reagiert, dadurch gekennzeichnet ist, daß es einen ersten Stromversorgungsstatus und einen zweiten Stromversorgungsstatus hat und des weiteren dadurch gekennzeichnet ist, daß es Schaltlogik enthält, um den Leistungssteuerprozessor mit Hilfsstrom zu versorgen;
wobei der erste Stromversorgungsstatus durch die Stromversorgung gekennzeichnet ist, die das Rechnersystem mit Systemleistung versorgt und durch den Hilfsstrom, der den Leistungsteuerprozessor von der externen Quelle versorgt; und
wobei der zweite Stromversorgungsstatus durch die Stromversorgung gekennzeichnet ist, die das Rechnersystem nicht mit Systemleistung versorgt sondern den Leistungsteuerprozessor von dieser externen Quelle mit Hilfsstrom versorgt; und das System des weiteren enthält:
(f) einen Schalter (21) in Schaltkreiskommunikation mit dem Leistungssteuerprozessor;
wobei der Leistungssteuerprozessor die Stromversorgung veranlaßt, vom zweiten Stromversorgungsstatus in den ersten Stromversorgungsstatus, der auf einen Schließvorgang dieses Schalters reagiert, überzugehen, wobei ein Signal über die externen Signalempfangsmittel oder durch den Ablauf des Timers erkannt wird.
2. Ein Rechnersystem wie in Anspruch 1 angemeldet, das des weiteren einen Glitch-Kreis in Schaltkreiskommunikation mit dem Leistungssteuerprozessor und der Stromversorgung enthält, wobei der Glitch-Kreis angeordnet ist, um den Leistungssteuerprozessor zurückzusetzen, wenn im Hilfsstrom zum Leistungssteuerprozessor ein Glitch erkannt wird.
3. Ein Rechnersystem wie in Anspruch 2 angemeldet, wobei der Glitch-Kreis Schaltlogik enthält, um zwischen einer mittels Reset gesteuerten Signalleitung, einer Stromsignalleitung, einer Erdungsleitung und einem elektronischen Gerät mit einem Reset-Eingang eine Verbindung herzustellen, wobei die Schaltlogik enthält:
(a) einen ersten Widerstand in Schaltkreiskommunikation mit der mittels Reset gesteuerten Eingangsleitung und einem ersten Knoten;
(b) einen ersten Kondensator in Schaltkreiskommunikation mit der Stromsignalleitung und einem ersten Knoten;
(c) einen zweiten Widerstand in Schaltkreiskommunikation mit dem ersten Knoten und der Erdungsleitung;
(d) einen ersten Transistor in Schaltkreiskommunikation mit dem ersten Knoten, der Erdungsleitung und einem zweiten Knoten;
(e) einen dritten Widerstand in Schaltkreiskommunikation mit einer Referenzspannung und dem zweiten Knoten;
(f) einen zweiten Kondensator in Schaltkreiskommunikation mit dem zweiten Knoten und der Erdungsleitung; und
(g) einen zweiten Transistor in Schaltkreiskommunikation mit dem zweiten Knoten, der Erdungsleitung und der Reset-Eingangsleitung des elektronischen Geräts;
wobei das Reset-Signal, das auf das Stromsignal, das um einen zuvor bestimmten Betrag abnimmt und zunimmt, anspricht, von dem zweiten Transistor für einen Zeitraum angefordert wird, der von dem zweiten Kondensator und dem dritten Widerstand bestimmt wird.
4. Ein Rechnersystem wie in irgendeinem der Ansprüche 1 bis 3 angemeldet, das des weiteren einen Override-Kreis in Schaltkreiskommunikation mit dem Schalter und der Stromversorgung enthält und das konfiguriert ist, um die Stromversorgung zu veranlassen, in den ersten Stromversorgungsstatus überzugehen, und zwar ungeachtet der Steuerung, die von dem Leistungsteuerprozessor von dieser Stromversorgung versucht wurde.
5. Ein Rechnersystem wie in einem vorhergehenden Anspruch angemeldet, wobei der Leistungssteuerprozessor des weiteren dadurch gekennzeichnet ist, daß seine Anordnung die Kommunikation mit der CPU ermöglicht, egal, ob der Übergang vom zweiten Stromversorgungsstatus in den ersten Stromversorgungsstatus von einem Schließvorgang dieses Schalters, eines über dieses Modem erkannten Rings oder den Ablauf des Timers veranlaßt wurde.
6. Ein Rechnersystem wie in irgendeinem der Anspruche 1 bis 4 angemeldet, wobei
(a) die Stromversorgung des weiteren durch einen dritten Stromversorgungsstatus gekennzeichnet ist;
(b) der dritte Stromversorgungsstatus durch die Stromversorgung gekennzeichnet ist, die das Rechnersystem nicht mit Systemleistung versorgt und den Leistungssteuerprozessor nicht mit Hilfsstrom von dieser externen Quelle versorgt; und
(c) der Leistungssteuerprozessor des weiteren dadurch gekennzeichnet ist, daß er angeordnet ist, um mit der CPU zu kommunizieren, egal, ob der Übergang vom zweiten Stromversorgungsstatus in den ersten Stromversorgungsstatus von einem Schließvorgang des Schalters, eines über dieses Modem erkannten Rings, den Ablauf des Timers oder durch den Übergang der Stromversorgung vom dritten Stromversorgungsstatus in den ersten Stromversorgungsstatus veranlaßt wurde.
7. Ein Rechnersystem wie in Anspruch 6 angemeldet, wobei der Code, der in der CPU ausgefuhrt wird, unterschiedlich reagiert, je nachdem, ob der Übergang vom zweiten Stromversorgungsstatus in den ersten Stromversorgungsstatus von einem Schließvorgang dieses Schalters, eines über dieses Modem erkannten Rings, den Ablauf des Timers oder durch den Übergang der Stromversorgung vom dritten Stromversorgungsstatus in den ersten Stromversorgungsstatus veranlaßt wurde.
8. Ein Rechnersystem wie in irgendeinem vorhergehenden Anspruch angemeldet, wobei der Leistungssteuerprozessor einen vorprogrammierten Microcontroller enthält.
9. Ein Rechnersystem wie in irgendeinem vorhergehenden Anspruch angemeldet, wobei das externe Signalempfangsmittel ein Modem ist.
DE69523399T 1994-09-07 1995-08-31 Leistungssteuerprozessor für Rechnersystem mit Halt/Wiederaufnahmefunktion-Fähigkeit Expired - Fee Related DE69523399T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US08/301,466 US5530879A (en) 1994-09-07 1994-09-07 Computer system having power management processor for switching power supply from one state to another responsive to a closure of a switch, a detected ring or an expiration of a timer

Publications (2)

Publication Number Publication Date
DE69523399D1 DE69523399D1 (de) 2001-11-29
DE69523399T2 true DE69523399T2 (de) 2002-07-11

Family

ID=23163500

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69523399T Expired - Fee Related DE69523399T2 (de) 1994-09-07 1995-08-31 Leistungssteuerprozessor für Rechnersystem mit Halt/Wiederaufnahmefunktion-Fähigkeit

Country Status (9)

Country Link
US (1) US5530879A (de)
EP (1) EP0701194B1 (de)
JP (1) JP3494510B2 (de)
KR (1) KR100218613B1 (de)
CN (1) CN1100287C (de)
AT (1) ATE207631T1 (de)
CA (1) CA2156539C (de)
DE (1) DE69523399T2 (de)
ES (1) ES2164137T3 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102021130154A1 (de) 2021-10-14 2023-04-20 Cariad Se Verfahren zum Einleiten eines Standby-Modus in einem Steuergerät eines Kraftfahrzeugs, entsprechend betreibbares Steuergerät und Kraftfahrzeug

Families Citing this family (96)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0799442B1 (de) * 1994-12-22 2007-08-22 Intel Corporation Leistungsverwaltung mit charakteristischem leistungsverbrauch einer vorrichtung
JPH08234874A (ja) * 1995-02-22 1996-09-13 Canon Inc 情報処理システム
DE69635409T2 (de) * 1995-03-06 2006-07-27 Intel Corp., Santa Clara Ein rechnersystem mit unbewachter auf-anfrage-verfügbarkeit
KR0172003B1 (ko) * 1995-03-28 1999-03-30 김광호 컴퓨터 시스템 및 그 제어방법
JPH0969889A (ja) * 1995-06-19 1997-03-11 Canon Inc データ処理装置
US5826092A (en) * 1995-09-15 1998-10-20 Gateway 2000, Inc. Method and apparatus for performance optimization in power-managed computer systems
DE19543942B4 (de) * 1995-11-25 2004-04-08 Grundig Ag I.Ins. Statusanzeige für ein Bildschirmsichtgerät
GB9603582D0 (en) 1996-02-20 1996-04-17 Hewlett Packard Co Method of accessing service resource items that are for use in a telecommunications system
US5974552A (en) * 1995-12-29 1999-10-26 Samsung Electronics Co., Ltd. Method and apparatus for executing a scheduled operation after wake up from power off state
US6018232A (en) * 1996-02-27 2000-01-25 Fujitsu Limited Method of operating battery powered computing device with radio transmitter
US5819069A (en) 1996-02-27 1998-10-06 Nexcom Technology, Inc. Recording apparatus and method having low power consumption
US5784625A (en) * 1996-03-19 1998-07-21 Vlsi Technology, Inc. Method and apparatus for effecting a soft reset in a processor device without requiring a dedicated external pin
US5765001A (en) 1996-04-29 1998-06-09 International Business Machines Corporation Computer system which is operative to change from a normal operating state to a suspend state when a power supply thereof detects that an external source is no longer providing power to said power supply at a predetermined level
KR100415504B1 (ko) * 1996-05-17 2004-05-12 삼성전자주식회사 하이버네이션상태의자동응답을위한자동응답장치를장착한컴퓨터시스템및그방법
DE19624140A1 (de) * 1996-06-17 1997-12-18 Philips Patentverwaltung System zum Übertragen von Daten
US5799196A (en) * 1996-07-02 1998-08-25 Gateway 2000, Inc. Method and apparatus of providing power management using a self-powered universal serial bus (USB) device
US6380929B1 (en) * 1996-09-20 2002-04-30 Synaptics, Incorporated Pen drawing computer input device
US5926640A (en) * 1996-11-01 1999-07-20 Digital Equipment Corporation Skipping clock interrupts during system inactivity to reduce power consumption
US5949261A (en) 1996-12-17 1999-09-07 Cypress Semiconductor Corp. Method and circuit for reducing power and/or current consumption
US5838982A (en) * 1996-12-19 1998-11-17 Intel Corporation Power switch method and apparatus for preventing a failure in the power controller
KR19980073522A (ko) * 1997-03-15 1998-11-05 김광호 파워다운모드를 지원하는 반도체 메모리 장치와 이를 구비한 컴퓨터 시스템 및 이의 제어방법
US6285406B1 (en) * 1997-03-28 2001-09-04 Compaq Computer Corporation Power management schemes for apparatus with converged functionalities
JPH10307653A (ja) * 1997-05-09 1998-11-17 Toshiba Corp コンピュータシステムおよびサウンドコントローラ並びにそれらに適用されるパワーダウン制御方法
KR100240349B1 (ko) * 1997-05-13 2000-01-15 강병호 컴퓨터용 온/오프 제어장치
EP0901062A1 (de) * 1997-06-11 1999-03-10 Compaq Computer Corporation Firmwaresteuernde blinkende Faceleuchtdiode
US6289466B1 (en) 1997-06-11 2001-09-11 Compaq Computer Corporation Usage of monitor bezel buttons to control and indicate multimedia functions
US6268845B1 (en) 1997-06-11 2001-07-31 Compaq Computer Corporation Bezel button controls over USB
US5944831A (en) * 1997-06-13 1999-08-31 Dell Usa, L.P. Power management apparatus and method for managing power application to individual circuit cards
US5931950A (en) 1997-06-17 1999-08-03 Pc-Tel, Inc. Wake-up-on-ring power conservation for host signal processing communication system
US6125449A (en) * 1997-06-30 2000-09-26 Compaq Computer Corporation Controlling power states of a computer
US6246397B1 (en) 1997-07-30 2001-06-12 Gateway, Inc. Screen saver computer program prohibition based on storage device activity
US5918059A (en) * 1997-08-15 1999-06-29 Compaq Computer Corporation Method and apparatus for responding to actuation of a power supply switch for a computing system
US6055643A (en) * 1997-09-25 2000-04-25 Compaq Computer Corp. System management method and apparatus for supporting non-dedicated event detection
JP3688448B2 (ja) * 1997-10-02 2005-08-31 富士通株式会社 スイッチング電源装置
US6216187B1 (en) 1997-12-01 2001-04-10 Toshiba America Information Systems, Inc. System for powering down a portable computer in a docking station
US6308278B1 (en) 1997-12-29 2001-10-23 Intel Corporation Supplying standby voltage to memory and wakeup circuitry to wake a computer from a low power mode
US6092207A (en) * 1997-12-29 2000-07-18 Intel Corporation Computer having a dual mode power supply for implementing a power saving mode
US6098175A (en) * 1998-02-24 2000-08-01 Smartpower Corporation Energy-conserving power-supply system
US7805724B1 (en) 1998-05-27 2010-09-28 Arc International I.P., Inc. Apparatus, method and computer program for dynamic slip control in real-time scheduling
US6052793A (en) * 1998-06-10 2000-04-18 Dell Usa, L.P. Wakeup event restoration after power loss
US7451447B1 (en) 1998-08-07 2008-11-11 Arc International Ip, Inc. Method, computer program and apparatus for operating system dynamic event management and task scheduling using function calls
US6708279B1 (en) * 1998-10-27 2004-03-16 Canon Kabushiki Kaisha Temperature sensor calibration during powersave mode by executing a control program in a control unit and lowering clock frequency after other devices are powered off
JP2000132259A (ja) * 1998-10-27 2000-05-12 Fujitsu Ltd 電子機器及び電子機器の制御回路並びに電子機器の制御方法
US6453378B1 (en) 1998-12-16 2002-09-17 Gateway, Inc. Portable computer with enhanced performance management
US7472215B1 (en) * 1999-03-31 2008-12-30 International Business Machines Corporation Portable computer system with thermal enhancements and multiple power modes of operation
JP2001022527A (ja) * 1999-07-12 2001-01-26 Nec Niigata Ltd コンピュータ内蔵hddへの外部からのアクセス方式
JP4421704B2 (ja) * 1999-07-28 2010-02-24 レノボ シンガポール プライヴェート リミテッド コンピュータのパワーオン方法及びコンピュータ
KR100626359B1 (ko) 1999-09-10 2006-09-20 삼성전자주식회사 컴퓨터 시스템의 전원 관리 방법
EP1160580B1 (de) * 2000-05-17 2004-09-15 Infineon Technologies AG Schaltungsanordnung zur Detektion einer Funktionsstörung
JP3568470B2 (ja) * 2000-09-21 2004-09-22 三洋電機株式会社 シェル型データ端末装置
US7725748B1 (en) 2000-12-29 2010-05-25 Intel Corporation Low power subsystem for portable computers
US6920573B2 (en) * 2001-05-23 2005-07-19 Smartpower Corporation Energy-conserving apparatus and operating system having multiple operating functions stored in keep-alive memory
US20030208550A1 (en) * 2001-06-28 2003-11-06 Hamilton Tony G. Method to provide direct system storage access within a notebook computer via a wireless interconnect and a low power high-speed data management bus while the main CPU is idle
US7034814B2 (en) * 2001-07-13 2006-04-25 Apple Computer, Inc. Methods and apparatuses using control indicators for data processing systems
US7039772B1 (en) 2002-02-22 2006-05-02 Teja Technologies, Inc. System, method, and computer program product for processing reflective state machines
US7130936B1 (en) 2002-02-22 2006-10-31 Teja Technologies, Inc. System, methods, and computer program product for shared memory queue
US7320044B1 (en) 2002-02-22 2008-01-15 Arc International I.P., Inc. System, method, and computer program product for interrupt scheduling in processing communication
US6985976B1 (en) 2002-02-22 2006-01-10 Teja Technologies, Inc. System, method, and computer program product for memory management for defining class lists and node lists for allocation and deallocation of memory blocks
EP1351145A1 (de) * 2002-04-04 2003-10-08 Hewlett-Packard Company Rechnerfehlerbehebung und Notifizierungssystem
US20070079077A1 (en) * 2002-04-29 2007-04-05 Baines Mandeep S System, method, and computer program product for shared memory queue
US20040078539A1 (en) * 2002-10-18 2004-04-22 Fulghum Patrick W. De-fragmenting memory by re-booting based on time
US20040268168A1 (en) * 2003-06-30 2004-12-30 Stanley Randy P Method and apparatus to reduce power consumption by a display controller
US20050184674A1 (en) * 2004-01-23 2005-08-25 Stephen Kaler Flexible linear lighting system
JP2005309767A (ja) * 2004-04-21 2005-11-04 Sony Ericsson Mobilecommunications Japan Inc 電源制御装置、電子機器、及び携帯電話端末
US7664970B2 (en) 2005-12-30 2010-02-16 Intel Corporation Method and apparatus for a zero voltage processor sleep state
US7363523B2 (en) * 2004-08-31 2008-04-22 Intel Corporation Method and apparatus for controlling power management state transitions
US7272731B2 (en) * 2004-10-13 2007-09-18 Dell Products L.P. Information handling system having reduced power consumption
US7581130B2 (en) * 2004-11-12 2009-08-25 Hewlett-Packard Development Company, L.P. Power management system and method
JP4594761B2 (ja) * 2005-02-10 2010-12-08 株式会社東芝 情報処理装置およびその制御方法
US7467306B2 (en) * 2005-03-08 2008-12-16 Hewlett-Packard Development Company, L.P. Methods and systems for allocating power to an electronic device
US7611944B2 (en) * 2005-03-28 2009-11-03 Micron Technology, Inc. Integrated circuit fabrication
ATE444512T1 (de) 2005-06-15 2009-10-15 Research In Motion Ltd Leistungssteuerung für tragbares elektronisches gerät mit einer hinweisvorrichtung
DE602005019057D1 (de) 2005-10-07 2010-03-11 Research In Motion Ltd Tragbare elektronische Vorrichtung mit Trackballeinheit und entsprechende Verfahren
US20070080946A1 (en) * 2005-10-07 2007-04-12 Research In Motion Limited Portable electronic device including trackball unit and associated methods
WO2008132558A1 (en) 2007-04-26 2008-11-06 Freescale Semiconductor, Inc. Microcontroller unit and method therefor
TWI353513B (en) 2007-11-02 2011-12-01 Htc Corp Main computer for vehicle and power management met
CN101441504B (zh) * 2007-11-22 2011-08-31 宏达国际电子股份有限公司 应用于交通工具的中控计算机及其相关电源管理方法
EP2254020A1 (de) * 2009-05-20 2010-11-24 Siemens Aktiengesellschaft Verfahren zum Betreiben eines Steuerrechners
US8238538B2 (en) 2009-05-28 2012-08-07 Comcast Cable Communications, Llc Stateful home phone service
US8392732B2 (en) 2010-04-16 2013-03-05 Comcast Cable Communications, Llc Systems, apparatuses, and methods to monitor signals received by a paging monitor to detect an activity trigger
CN102684144A (zh) * 2011-03-17 2012-09-19 环达电脑(上海)有限公司 低电保护装置
JP5715491B2 (ja) 2011-05-23 2015-05-07 キヤノン株式会社 情報処理装置及びその起動制御方法
US9250685B2 (en) 2012-11-05 2016-02-02 Comcast Cable Communications, Llc Remotely waking a sleeping device using a wake configuration file
CN104142869B (zh) * 2013-05-06 2017-11-14 上海海拉电子有限公司 一种用于车身控制系统的监控方法及看门狗模块
CN103442493A (zh) * 2013-09-03 2013-12-11 英华达(上海)科技有限公司 一种控制电源驱动的方法、装置、客户端、服务器和系统
US9665073B2 (en) * 2013-11-21 2017-05-30 Tricklestar Ltd Sensor
KR101704600B1 (ko) 2014-10-31 2017-02-08 한국전기연구원 홀센서 글리치 제거 장치
US10127095B2 (en) * 2015-11-04 2018-11-13 Quanta Computer Inc. Seamless automatic recovery of a switch device
US9826485B2 (en) 2015-11-20 2017-11-21 Symbol Technologies, Llc Power source hot swap mode
US10372192B2 (en) 2015-11-23 2019-08-06 Tricklestar Ltd System and an apparatus for controlling electric power supply and methods therefor
US10444816B2 (en) 2015-11-23 2019-10-15 Tricklestar Ltd System and an apparatus for controlling electric power supply and methods therefor
US10554519B2 (en) 2016-02-08 2020-02-04 Cray Inc. System and method for dampening power swings in distributed computer environments
WO2018129383A1 (en) * 2017-01-09 2018-07-12 Inmusic Brands, Inc. Systems and methods for musical tempo detection
TWI639082B (zh) 2017-06-09 2018-10-21 技嘉科技股份有限公司 識別電源供應器狀態的電子系統及方法
TWI670589B (zh) * 2018-10-04 2019-09-01 友通資訊股份有限公司 電腦系統
US11517831B2 (en) * 2019-06-25 2022-12-06 George Andrew Rabroker Abatement system for pyrophoric chemicals and method of use

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4443865A (en) * 1981-10-26 1984-04-17 Allen-Bradley Co. Processor module for a programmable controller
US4907150A (en) * 1986-01-17 1990-03-06 International Business Machines Corporation Apparatus and method for suspending and resuming software applications on a computer
US4851987A (en) * 1986-01-17 1989-07-25 International Business Machines Corporation System for reducing processor power consumption by stopping processor clock supply if a desired event does not occur
US5175845A (en) * 1988-12-09 1992-12-29 Dallas Semiconductor Corp. Integrated circuit with watchdog timer and sleep control logic which places IC and watchdog timer into sleep mode
US5249298A (en) * 1988-12-09 1993-09-28 Dallas Semiconductor Corporation Battery-initiated touch-sensitive power-up
US5027016A (en) * 1988-12-29 1991-06-25 Motorola, Inc. Low power transient suppressor circuit
US5241680A (en) * 1989-06-12 1993-08-31 Grid Systems Corporation Low-power, standby mode computer
AU629019B2 (en) * 1989-09-08 1992-09-24 Apple Computer, Inc. Power management for a laptop computer
US5167024A (en) * 1989-09-08 1992-11-24 Apple Computer, Inc. Power management for a laptop computer with slow and sleep modes
US5247655A (en) * 1989-11-07 1993-09-21 Chips And Technologies, Inc. Sleep mode refresh apparatus
US5239652A (en) * 1991-02-04 1993-08-24 Apple Computer, Inc. Arrangement for reducing computer power consumption by turning off the microprocessor when inactive
US5410713A (en) * 1992-01-02 1995-04-25 Smith Corona/Acer Power-management system for a computer
US5428252A (en) * 1992-01-03 1995-06-27 Zilog, Inc. Power supply interruption detection and response system for a microcontroller
US5513359A (en) 1993-07-23 1996-04-30 International Business Machines Corporation Desktop computer having a single-switch suspend/resume function
US5497494A (en) 1993-07-23 1996-03-05 International Business Machines Corporation Method for saving and restoring the state of a CPU executing code in protected mode
US5548763A (en) 1993-07-26 1996-08-20 International Business Machines Corporation Desk top computer system having multi-level power management
US5511202A (en) 1993-07-26 1996-04-23 International Business Machines Corporation Desktop computer system having zero-volt system suspend and control unit for ascertaining interrupt controller base address

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102021130154A1 (de) 2021-10-14 2023-04-20 Cariad Se Verfahren zum Einleiten eines Standby-Modus in einem Steuergerät eines Kraftfahrzeugs, entsprechend betreibbares Steuergerät und Kraftfahrzeug
DE102021130154B4 (de) 2021-10-14 2024-06-13 Cariad Se Verfahren zum Einleiten eines Standby-Modus in einem Steuergerät eines Kraftfahrzeugs, entsprechend betreibbares Steuergerät und Kraftfahrzeug

Also Published As

Publication number Publication date
ATE207631T1 (de) 2001-11-15
CN1100287C (zh) 2003-01-29
CN1139772A (zh) 1997-01-08
CA2156539C (en) 2000-01-11
EP0701194A1 (de) 1996-03-13
ES2164137T3 (es) 2002-02-16
JP3494510B2 (ja) 2004-02-09
KR960011628A (ko) 1996-04-20
US5530879A (en) 1996-06-25
DE69523399D1 (de) 2001-11-29
JPH0887362A (ja) 1996-04-02
KR100218613B1 (ko) 1999-09-01
CA2156539A1 (en) 1996-03-08
EP0701194B1 (de) 2001-10-24

Similar Documents

Publication Publication Date Title
DE69523399T2 (de) Leistungssteuerprozessor für Rechnersystem mit Halt/Wiederaufnahmefunktion-Fähigkeit
DE69523527T2 (de) Rechnersystem mit Klingelfeststelleinrichtung, um Systemaufwachverfahren einzuleiten
DE69428010T2 (de) Verfahren und Einrichtung zur Sicherung und Rückspeicherung des Zustands eines CPVs
DE69431275T2 (de) Tischcomputer mit Halt/Fortsetzungfunktion durch einen Schalter
DE69514242T2 (de) Steuerung der übergänge der leistungsverwaltungszustände in einem rechnersystem
DE69514241T2 (de) Durchführung von systemaufgaben bei stromabschaltung durch verwendung von systemverwaltungsunterbrechung
JP4028605B2 (ja) Sormセッションを有するコンピュータ・システム及び方法
US5758174A (en) Computer system having a plurality of stored system capability states from which to resume
US6081752A (en) Computer system having power supply primary sense to facilitate performance of tasks at power off
EP0701192B1 (de) Ein Leistungssteuerprozessorsystem, um Halt/Wiederaufnahmefunktion in einem Rechnersystem zur Verfügung zu stellen
US5551043A (en) Standby checkpoint to prevent data loss
US5752044A (en) Computer system having multi-level suspend timers to suspend from operation in attended and unattended modes
US5603038A (en) Automatic restoration of user options after power loss
US5581692A (en) Automatic clearing of power supply fault condition in suspend system
EP0749063A2 (de) Verfahren und Vorrichtung für Halt-/Fortsetzungsfunktion in einem Rechner
KR100207884B1 (ko) 컴퓨터 시스템, 코드 실행 제어 방법, 및 컴퓨터 시스템 전력 관리 방법

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee