-
TECHNISCHES GEBIET
-
Hier beschriebene Ausführungsformen betreffen allgemein Techniken zum Bereitstellen von Isolation auf Funktionsebene mit auf Fähigkeit basierender Sicherheit in einem deprivilegierten Betriebsmodus.
-
STAND DER TECHNIK
-
Das Gebiet der Computersicherheit ist in der heutigen vernetzten Umgebung immer wichtiger geworden. Angreifer können böswillige Software benutzen, die eine Datenverarbeitungsvorrichtung infiziert und bewirkt, dass sie böswillige Aktionen ausführt, wie etwa Stehlen sensibler Informationen von einem Unternehmen oder Individuum, das dem Hostcomputer zugeordnet ist, Verbreitung an andere Hostcomputer, Hilfe bei Distributed-Denial-of-Service-Attacken, Aussenden von Spam oder böswilligen E-Mails von dem Hostcomputer usw. Daher bleiben signifikante administrative Herausforderungen zum Schutz von Computern und Computernetzwerken vor böswilliger und unbeabsichtigter Ausnutzung durch böswillige Software und Angreifer.
-
Figurenliste
-
- 1 zeigt eine beispielhafte Ausführungsform einer Vorrichtung.
- 2 zeigt ein Beispiel für eine Anweisungssequenz.
- 3 zeigt ein Beispiel für einen Logikfluss.
- 4 zeigt ein Beispiel für ein System.
- 5 zeigt ein Beispiel für einen zweiten Logikfluss.
- 6 zeigt ein Beispiel für eine erste Datenverarbeitungsarchitektur.
- 7 zeigt eine beispielhafte Ausführungsform einer Vorrichtung.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Hier besprochene Ausführungsformen können in Systemen angewandt werden, die das Teilen von Hardware-Datenverarbeitungsressourcen unter Kunden ermöglichen, wie etwa Cloud-Datenverarbeitung, FaaS (Function as a Service) usw. Diese Systeme, die Ressourcen teilen, benötigen eine Weise zum Abgrenzen von Aktionen und Verhindern von Arbeitslastwechselwirkung zwischen Kunden, um Sicherheit und Privatsphäre zu bewahren. Zu abgegrenzten Aktionen kann Beliebiges gehören, das im Voraus begrenzt (eingegrenzt) werden muss - dies gilt gewöhnlich für Code, der durch Isolation eingeschlossen wird - zum Beispiel mit Sandkästen, virtuellen Maschinen usw. Obwohl es Verfahren gibt, die dieses Problem angehen, wie etwa virtuelle Maschinen, Prozesse, Namenräume für Container und verwaltete Laufzeiten, gibt es Probleme mit Herauffahrzeiten, Aufruf-Leistungsfähigkeit und/oder Speicheroverhead, wodurch die Anwendbarkeit und Dichte von Einsätzen begrenzt wird. Einige Anwendungen wie NFV (Network Functions Virtualization) erfordern Latenz im Nanosekunden- bis Mikrosekundenbereich, während typische FaaS-Implementierungen von heute zu einer Latenz von mehreren 10 Millisekunden für den Aufruf führen würden. Der Abfragemodus, der typischerweise in solchen Anwendungen verwendet wird, hat eine andere Menge von Problemen - Dichte und Speicheroverhead in Verbindung mit Isolation - VM und Container erfordern immer noch viel Speicher - von einigen MB bis GB, wodurch die Anzahl der Instanzen auf einem Server begrenzt wird, und die Abfragemodus-Ausführung funktioniert nicht gut mit Übersubskription. Dagegen ist der Ansatz des Laufs bis zum Abschluss entweder nur mit einer einzigen Anwendung anwendbar, aufgrund von geteiltem Speicherplatz zwischen Funktionsaufrufen, oder er hat bei Abbildung auf das FaaS-Modell mit guter Isolation hohe Latenz. Im Extremfall erreicht, wenn alle Anwendungen in Funktionen zerlegt werden (darunter OS-, Plattform- und Infrastrukturdienste), die sowohl lokal als auch entfernt laufen, die Anforderungs-Leistungsfähigkeit hunderte Millionen Aufrufe pro Sekunde pro Server - was heutzutage nur für nativen Code und CALL-Anweisung erreichbar ist.
-
FaaS-Verwendung wächst mit einer enormen Rate (bis 2021 7-10 x, laut http://blog.spotinst.com/2017/05/01/spotinsts-ceotakeouts-serverlessconf-2017/), und existierende Implementierungen erzeugen eine Anzahl von Problemen. Zum Beispiel erfordern aktuelle Lösungen typischerweise, dass Entwickler den Quellcode freigeben. Das Freigeben von Quellcode oder irgendeines nachkonstruierbaren Formats verursacht, dass einem Anwendungsanbieter ein gewisses Risiko des Leckens von geistigem Eigentum (IP) an Dienstanbieter und die Öffentlichkeit entsteht. Selbst wenn der Dienstanbieter den Quellcode schützt, kann er ihn jedoch in einem getrennten Container entsenden, wodurch eine andere Menge von Problemen entsteht, z.B. Ressourcen belastet und die Latenz vergrößert werden. Diese vorbekannten Implementierungen erschweren somit die Verwendung von FaaS in Implementierungen mit niedriger Latenz, wie etwa Netzwerkpaket-Verarbeitungsanwendungen, z.B. wenn Paketdaten als Parameter an eine Funktion geleitet werden, aufgrund von Leistungsfähigkeitseinbußen sicherer Isolation sehr. Vorbekannte Systeme verursachen auch einen Verlust an Effizienz aufgrund der Notwendigkeit, eine etwaige Ausführungszeit einzurichten, z.B. Kompilierung, Übersetzung und Verifikation, und zum Einrichten von Isolation.
-
Hier besprochene Ausführungsformen gehen die oben beschriebenen Probleme an, indem eine Ausführungsumgebung bereitgestellt wird, die Ausführung von Funktionen erlaubt, die in nativen Code kompiliert werden, während Sicherheits-Sandkästen implementiert werden. Außerdem ist die hier beschriebene Isolation/Sicherheit auf Funktionsebene in vielfältigen Anwendungen anwendbar - von einer Cloud mit dem FaaS-Modell bis zu leichter Isolation für Zuverlässigkeit und Sicherheit in Anwendungen des Internet of Things (IoT). Ausführungsformen sind nicht auf diese Beispiele beschränkt.
-
Verschiedene Ausführungsformen können allgemein die Ermöglichung eines deprivilegierten Betriebsmodus betreffen, der durch Benutzerebenen-Anwendungen konfigurierbar ist. Bei Ausführungsformen kann eine Funktion unter Benutzung des deprivilegierten Betriebsmodus vollständig eingegrenzt und mit beschränkten Fähigkeiten ausgeführt werden. Der deprivilegierte Betriebsmodus begrenzt die Verwendung von Systemaufrufen und Anweisungen, die Kontextwechsel und Programmfehler verursachen, z.B. CALL FAR, MOV zu einem Segmentregister usw. Stattdessen werden diese potentiell ‚gefährlichen‘ Anweisungen durch die Benutzerebenen-Anwendung gehandhabt. Die Benutzerebenen-Anwendung kann zum Beispiel Emulation von Systemaufrufen bereitstellen und/oder Ausführung verhindern. Außerdem wird ein zusätzlicher Mechanismus für legitime externe Aufrufe durch deprivilegierte Funktionen bereitgestellt, z.B. Infrastrukturdienste, Verkettung von Funktion zu Funktion usw. Ein Beispiel für einen externen Aufruf wäre eine Liste von ‚System‘-Funktionen, die durch den Aufrufer dem Aufgerufenen exponiert wird, die der Aufgerufene verwenden kann, um auf der dem Aufrufer erlaubten Ebene mit der Betriebsumgebung in Interaktion zu treten. Dies ist eines der Verfahren zur Implementierung des auf Fähigkeit basierenden Modells. Spezifische Beispiele können Zeit, Betriebskontext, Speicherzuteilung, Laden/Speichern von Daten oder Kontext usw. sein. Ausführungsformen stellen Verbesserungen des existierenden Systems bereit, wie etwa Fähigkeiten (erlaubte Anweisungen/Aufrufe), die durch die Aufruferfunktion für den aufgerufenen Code oder die aufgerufene Funktion definiert sind, durchgesetzter Adressenschutz mit Verwendung von Seitengenehmigungen mit Schutzschlüssel- bzw. PKEY-Durchsetzung von zusätzlichen Seitenattributen und Segmentregistern und durch den Aufrufer implementierte Programmfehlerbehandlungs-/Emulationsfunktionalität. Hier besprochene Ausführungsformen stellen außerdem effiziente Isolation auf Funktionsebene bereit, im Gegensatz zu vorbekannten Systemen, die Isolation auf Prozess- oder Virtuellmaschinenebene bereitstellen.
-
Es wird nun auf die Zeichnungen Bezug genommen, in denen durchweg gleiche Bezugszahlen verwendet werden, um gleiche Elemente zu bezeichnen. In der folgenden Beschreibung werden zur Erläuterung zahlreiche spezifische Einzelheiten skizziert, um ein umfassendes Verständnis dieser zu gewährleisten. Es ist jedoch ersichtlich, dass die neuartigen Ausführungsformen ohne diese spezifischen Details praktiziert werden können. In anderen Fällen werden wohlbekannte Strukturen und Vorrichtungen in Blockdarstellungsform gezeigt, um ihre Beschreibung zu erleichtern. Die Absicht ist, alle Modifikationen, Äquivalente und Alternativen, die mit dem beanspruchten Gegenstand vereinbar sind, abzudecken.
-
1 zeigt eine beispielhafte Ausführungsform einer Vorrichtung 100, in der Aspekte der vorliegenden Offenbarung verwendet werden können. Bei verschiedenen Ausführungsformen kann die Vorrichtung 100 als eine beliebige Art von Datenverarbeitungsvorrichtung realisiert sein, darunter eine persönliche Datenverarbeitung, ein Desktop-Computer, ein Tablet-Computer, ein Netbook-Computer, ein Notebook-Computer, ein Laptop-Computer, ein Server, eine Serverfarm, ein Blade-Server oder eine beliebige andere Art von Server usw. Bei einigen Ausführungsformen kann die Vorrichtung 100 eine Kommunikationsstation, eine Mobilstation, eine fortschrittliche Station, ein Client, eine Plattform, eine drahtlose Kommunikationsvorrichtung, ein Mobilcomputer, eine Set-Top-Box, ein Handheld-Computer, eine Handheld-Vorrichtung, eine PDA-Vorrichtung (Personal Digital Assistant), eine Handheld-PDA-Vorrichtung, ein Netbook, ein Mobiltelefon, ein Smartphone, ein zellulares Mobiltelefon usw. sein. Ausführungsformen sind auf diese Weise nicht beschränkt.
-
Die Vorrichtung 100 kann eine Anzahl von Vorrichtungen, Systemen, Komponenten, Schaltkreisen und Infrastruktur umfassen, um Isolation auf Funktionsebene bereitzustellen, und einen deprivilegierten Betriebsmodus zu ermöglichen, wie etwa die in 1 dargestellten. Man beachte, dass die Vorrichtung 100 zusätzliche Komponenten umfassen kann, die aber der Klarheit halber nicht gezeigt sind. Bei Ausführungsformen umfasst die Vorrichtung 100 Speicher 105 und eine Verarbeitungseinheit (CPU) 116 zum Verarbeiten von Daten und Informationen, um Isolation auf Funktionsebene zu ermöglichen, z.B. beim Tätigen von Funktionsaufrufen, von einer Funktion zu einer anderen Funktion.
-
Die CPU 116, die einen oder mehrere Kerne zum Verarbeiten von Informationen für die Vorrichtung 100 umfassen kann. Die CPU 116 kann eine oder mehrere von beliebigen Arten von Rechenelement sein, darunter, aber ohne Beschränkung darauf, ein Mikroprozessor, ein Prozessor, eine Zentralverarbeitungseinheit, eine digitale Signalverarbeitungseinheit, ein Zweikernprozessor, ein Mobilvorrichtungsprozessor, ein Desktop-Prozessor, ein Einzelkernprozessor, eine SoC-Vorrichtung (System auf einem Chip), ein CISC-Mikroprozessor (Complex Instruction Set Computing), ein RISC-Mikroprozessor (Reduced Instruction Set), ein VLIW-Mikroprozessor (Very Long Instruction Word) oder eine beliebige andere Art von Prozessor oder Verarbeitungsschaltung auf einem einzelnen Chip oder einer integrierten Schaltung. Bei einigen Ausführungsformen kann die CPU 116 über ein oder mehrere Verbindungselemente mit den anderen Elementen des Datenverarbeitungssystems verbunden sein und mit ihnen kommunizieren, wie etwa durch einen oder mehrere Busse, Steuerleitungen und Datenleitungen.
-
Die CPU 116 kann auch eine Anzahl von Subelementen umfassen, wie etwa Verarbeitungsschaltkreise 118, Speicher (nicht gezeigt), Schnittstellen (nicht gezeigt), Register, einschließlich Segmentregister 120, und so weiter. Die Segmentregister 120 umfassen das Datensegment- bzw. DS-Register 122, ein Codesegment- bzw. CS-Register 124, ein Stapelsegment- bzw. SS-Register 126, ein Extrasegment- bzw. ES-Register 128, das GS-Register 130 und das FS-Register 132. Das CS-Register 124 speichert die Startadresse eines Codesegments mit für ein Softwareprogramm (eine Funktion) auszuführenden Anweisungen. Das DS-Register 122 speichert die Startadresse des Datensegments, das Daten, Konstanten und einen Arbeitsbereich für eine Funktion enthält. Das SS-Register 126 umfasst die Startadresse eines Stapels, und der Stapel umfasst typischerweise Daten und Rückgabeadressenfunktionen oder Routinen. Das ES-Register 128, das GS-Register 130 und das FS-Register 132 sind zusätzliche Segmentregister, die keine speziell entworfene Hardware aufweisen.
-
Die Vorrichtung 100 kann auch Tabellen 131 umfassen, mit denen die CPU 116 Eigenschaften von Speicherbereichen des Speichers 105 definieren kann. Die Tabellen 131 sind Datenstrukturen, die im Speicher 105 gespeichert werden können. Die Tabellen 131 umfassen zum Beispiel eine GDT (Global Descriptor Table) 133, die eine Datenstruktur ist, mit der die Eigenschaften der verschiedenen Speicherbereiche definiert werden, die während der Programmausführung benutzt werden, z.B. Segmentdeskriptoren, darunter die Basisadresse, die Größe und Zugangsprivilegien wie Ausführbarkeit und Beschreibbarkeit. Diese Speicherbereiche sind Segmente, z.B. die Codesegmente, die Datensegmente und die Stapelsegmente, wie in 2 dargestellt. Die Tabellen 133 umfassen außerdem eine LDT (Local Descriptor Table) 125, die Deskriptoren für Speichersegmente enthält, die für spezifische Softwareprogramme und Funktionen privat sind. Bei Ausführungsformen umfassen die GDT 133 und eine LDT 135 jeweils 8192 Einträge als Deskriptoren oder 16384 kombinierte Einträge und spezifische Einträge können im 32-Bit-Modus bis zu 64 Bit Daten und im 64-Bit-Modus 128 Bit aufweisen. Die GDT 133 wird typischerweise im Systemraum (nicht gezeigt) des Speichers 105 gespeichert, und die LDT 135 kann im Systemraum oder Benutzerraum 109 gespeichert werden.
-
Bei Ausführungsformen gehen Speicherzugriffe, die ein Programm durchführen kann, durch ein Segment. Zum Referenzieren eines Segments muss ein Softwareprogramm oder eine Funktion seinen Index in der GDT 133 oder der LDT 135 verwenden. Wie erwähnt wird der Index als Segmentselektor oder kurz Selektor bezeichnet. Der Selektor wird in ein Segmentregister 120 zur Verwendung geladen. Das Laden eines Selektors in ein Segmentregister 120 liest automatisch die GDT 133 oder die LDT 135 und speichert die Eigenschaften des Segments in der CPU 116 selbst. Bei Ausführungsformen können die Tabellen 131 (GDT 133 und/oder LDT 135) mit den Segmentregistern 120 benutzt werden, um zugängliche Bereiche (Isolation) in den Segmenten bereitzustellen, wenn ein deprivilegierter Funktionsaufruf durchgeführt wird, wie nachfolgend ausführlicher besprochen wird.
-
Bei Ausführungsformen umfasst die Vorrichtung 100 Speicher 105, der über ein oder mehrere Verbindungselemente mit der CPU 116 gekoppelt ist. Der Speicher 105 kann Informationen und Daten für die CPU 116 zum Ausführen von Verarbeitung für die Vorrichtung 101 speichern. Bei Ausführungsformen umfasst der Speicher 105 ‚Haupt‘-Speicher, der als flüchtiger Speicher implementiert ist. Der Speicher 105 umfasst auch virtuellen Speicher, z.B. den Speicher, der durch ein Betriebssystem bereitgestellt und gesteuert wird, der auf den ‚Haupt‘-Speicher abgebildet wird. Der virtuelle Speicher kann in flüchtigem Speicher, nichtflüchtigem Speicher und einer Kombination davon implementiert werden. Bei Ausführungsformen kann der Speicher 105 Informationen und Daten für ein Betriebssystem (Kernel/OS-Raum) und Softwareprogramme (Benutzerraum 109) zum Betrieb speichern. Zum Beispiel kann der Benutzerraum 109 ein Block des Speichers sein, der von Softwareprogrammen verwendet werden kann, um Informationen und Daten zu speichern, wenn sie durch die CPU 116 ausgeführt werden. Bei Ausführungsformen kann der Benutzerraum 109 in zusätzliche Adressenräume 107-1 bis 107-x aufgeteilt werden, wobei x eine beliebige positive ganze Zahl sein kann, die jeweils durch ein Softwareprogramm zur Ausführung assoziiert und benutzt werden können. Spezieller kann jeder der Adressenräume 107 Zuteilungen eines oder mehrerer eines Codesegments, eines Datensegments und eines Stapelsegments für das Softwareprogramm umfassen. Die Adressenräume 107 können durch das Betriebssystem zugeteilt werden und definieren einen Bereich diskreter Adressen, die jeweils einer logischen oder physischen Entität entsprechen können, wie etwa einer Speicherzelle, einem Plattensektor und so weiter, und können einem oder mehreren Softwareprogrammen zugeordnet sein.
-
Bei Ausführungsformen kann ein Funktionen enthaltendes Softwareprogramm andere Funktionen anderer Softwareprogramme benutzen oder aufrufen. In einigen Fällen können sich diese Softwareprogramme in verschiedenen Adressenräumen 107 befinden, z.B. in dem Adressenraum 107-1 und dem Adressenraum 107-2, und mit verschiedenen Privilegebenen arbeiten. Somit kann eine Aufruferfunktion mit einem ersten zugeteilten oder zugeordneten Adressenraum 107-1 eine Aufgerufenenfunktion mit einem zweiten zugeteilten oder zugeordneten Adressenraum 107-2 mit einer anderen Privilegebene aufrufen. In anderen Fällen können Funktionsaufrufe zwischen Funktionen erfolgen, die denselben Adressenraum 107 benutzen, z.B. kann eine Aufruferfunktion eine Aufgerufenenfunktion in der Adresse 107-1 aufrufen.
-
Um Sicherheit bereitzustellen, z.B. zu verhindern, dass eine Funktion einen Sprung zu böswilligem Code durchführt, betreffen Ausführungsformen das Isolieren der Funktionen und das Behandeln von Versuchen, ‚gefährliche‘ Anweisungen auszuführen. In einem Beispiel kann die Funktion (Aufrufer) eine Far-Call-Anweisung und ein Call-Gate benutzen, um die andere Funktion, z.B. eine Aufgerufenenfunktion in dem anderen Adressenraum, „aufzurufen“. Die Verwendung einer Far-Call-Anweisung kann begrenzte Isolation zwischen der Aufrufer- und Aufgerufenenfunktion bereitstellen, indem Grenzen an dem Codesegment des Adressenraums der Aufgerufenenfunktion definiert sind, wodurch Ausführung außerhalb der Aufgerufenenfunktion verhindert und Stapelwechsel unterstützt wird.
-
Bei Ausführungsformen können eines oder mehrere der Segmentregister 120 benutzt werden, um zum Beispiel Isolation bereitzustellen. Die Aufruferfunktion kann das Datensegment- bzw. DS-Segmentregister 122 mit einem der erstellten Einträge in der GDT 133 oder LDT 135 laden, um den einer aufgerufenen Funktion verfügbaren Adressenbereich zu begrenzen, und das ES-/FS-/GS-Register 128/130/132 kann verwendet werden, um Zugang zu Tabellen bereitzustellen, die Adressen von Rückruffunktionen und Programmfehler-Handlern enthalten, mit denen die aufgerufene Funktion mit der Aufrufer-/Laufzeitumgebung in Interaktion treten kann. Eine Programmfehler-Handler-Adresse kann an einem definierten Ort sein, zum Beispiel bei ES:0000000, was sich auf den Eintrittspunkt des Programmfehler-Handlers mit implizitem CS-Wert des Aufrufers bezieht. Außerdem können Seitenschutzschlüssel verwendet werden, um kritische Datenstrukturen der Aufruferfunktion zu schützen. Dieser Ansatz gewährleistet jedoch begrenzte Isolationen zwischen aufgerufenen Funktionen.
-
Hier besprochene Ausführungsformen können zusätzliche Isolation zwischen den aufgerufenen Funktionen über Hardware- und/oder Softwaremodifikationen ermöglichen, z.B. Änderungen an Call- und Return-Anweisungen. Spezieller umfassen Ausführungsformen eine Erweiterung eines existierenden Anweisungssatzes zur Implementierung eines modifizierten Call-Return-Paars. Das modifizierte Paar kann ein CALL_DEPRIVILEGED und RET_DEPRIVILEGED sein, mit denen ein Benutzer oder Programmierer den deprivilegierten Betriebsmodus aufrufen kann. Man beachte, dass diese Namen nicht auf beschränkende Weise zu deuten sind und besprochene Ausführungsformen für funktional äquivalente Anweisungen gelten, die andere Namen aufweisen können.
-
2 zeigt ein mögliches Beispiel für einen Sequenzfluss 200 einer Aufruffunktion (Call-Funktion), die einem Aufruferadressenraum 207-1 zugeordnet ist, wodurch ein CALL_DEPRIVILEGED an eine Aufgerufenenfunktion aktiviert wird, die einem anderen Adressenraum 207-2 zugeordnet ist. Man beachte, dass der Aufruferadressenraum 207-1 und der Aufgerufenenadressenraum 207-2 im selben Adressenraum 207 liegen können, jedoch vom Standpunkt der jeweiligen Funktionen aus gesehen. Zum Beispiel kann die Aufruferfunktion einen Teil des Adressenraums 207 zugeteilt bekommen, der durch den Aufruferadressenraum 207-1 definiert wird, und die Aufgerufenenfunktion kann einen Teil des Adressenraums 207 zugeteilt bekommen, der durch den Aufgerufenenadressenraum 207-2 definiert wird, wie in 2 dargestellt.
-
Der Aufruferadressenraum 207-1 umfasst ein Codesegment 202-1, ein Datensegment 204-1 und ein Stapelsegment 206-1, und der Aufgerufenenadressenraum 207-2 umfasst ähnlich ein Codesegment 202-2, ein Datensegment 204-2 und ein Stapelsegment 206-2. Jede der Funktionen kann definierten Bereichen des Speichers innerhalb ihrer jeweiligen Adressenräume zugeordnet sein. Zum Beispiel umfasst die Aufruferfunktion einen Codesegmentbereich 208-1, einen Datensegmentbereich 210-1 und einen Stapelsegmentbereich 212-1. Die Aufgerufenenfunktion umfasst einen Codesegmentbereich 208-2, einen Datensegmentbereich 210-2 und ein Stapelsegment 212-2. Man beachte, dass die Stapelsegmentbereiche 212 Vorinstanzen-Stapelbereiche sein können und sich in dem Datensegment 204 und dem Stapelsegment 206 befinden können. Wie in 2 dargestellt, gibt eine Funktion eines Softwareprogramms eine CALL_DEPRIVILEGED-Anweisung aus, und wenn die Funktion zurückkehrt, ist die Adresse, an die sie zurückkehrt, speziell codiert, um eine RETURN_PRIVILEGED-Operation zu bewirken. Der Stapel der aufgerufenen Funktion (Stapelbereich 212-2) ist von dem Stapel (212-1) des aufrufenden Threads getrennt, und eine Rückkehradresse mit speziellem Wert wie etwa 0x00 kann auf den Stapel in dem Stapelbereich 212-2 geschoben werden. Wenn die aufgerufene Funktion ausgeführt wird, wird somit ein gewöhnliches Rückkehren als ein normales Rückkehren ausgeführt, und nur die Rückkehr, die mit CALL_DEPRIVILEGED übereinstimmt, triggert die RETURN_PRIVILEGED-Operation.
-
Bei Ausführungsformen kann die CPU 116 eine Anzahl von Operationen ausführen, um die CALL_DEPRIVILEGED-Anweisung auszuführen, um Isolation auf Funktionsebene sicherzustellen und im deprivilegierten Modus zu arbeiten. In einem Beispiel ist die CALL_DEPRIVILIGED-Anweisung eine Erweiterung oder Modifikation der Anweisung CALL FAR und von Segmentdeskriptoren, die eine niedrigere Privilegebene benutzen, z.B. die Privilegebene 4 oder ‚deprivilegiert‘. Der niedrigere deprivilegierte Betriebsmodus umfasst mehrere Beschränkungen, wie etwa Verbieten von Systemaufrufen und Verbieten von CALL FARs auf existierende Privilegebenen 3-0, wobei die Privilegebene 3 eine niedrigere privilegierte Ebene und die Privilegebene 0 eine höhere privilegierte Ebene ist. Die CPU 116 unterscheidet in der Privilegebene 3 vier verschiedene Zugangsrechte für Speicherseiten. Außerdem können Systemdatenstrukturen vollständig geschützt werden. Auf der Privilegebene 0 erlaubt die CPU 116 Lese- und Schreibzugriff auf alle auf Speicher abgebildeten Seiten. Zum Beispiel besteht kein Schutz vor Verfälschung der Systemtabellen oder des Codesegments.
-
Bei Ausführungsformen kann die Funktion CALL_DEPRIVILEGED aktivieren, und die CPU kann eine Anzahl von Tasks ausführen, darunter Laden eines Programmfehler-Handlers, Ermöglichen der Durchsetzung von Schutzschlüsseln, Lastgrenzen für Segmentregister, Konfigurieren eines Taktzählers, Schwenken auf einen neuen Stapel (Aufgerufenenstapel) und Wechsel zur Aufgerufenenfunktion. Bei Ausführungsformen kann die CPU 116 den Programmfehler-Handler für Systemaufrufe, „gefährliche Anweisungen“ wie Verschiebung zum Segmentregister (CALL/JMP FAR) konfigurieren, und um Programmfehler von vordefinierten Orten aus (Segmentdeskriptor, durch einige der Register definierte Adresse usw.) zu erzeugen. Andere ‚gefährliche‘ Anweisungen oder Aktionen wären die Anweisungen SYSCALL, VMCALL, CALL FAR, JMP FAR, das Laden von Segmentregistern, SGDT/LGDT, SIDT/LIDT und andere Anweisungen würden einen Programmfehler verursachen, der durch den Funktionsaufrufer-Programmfehler-Handler behandelt wird.
-
Die CPU 116 kann Schutzschlüssel durchsetzen, die in der aufgerufenen Adresse definiert sind. Alle Zugriffe auf das Codesegment 202-2, das Datensegment 204-2 und das Stapelsegment 204-2 der Aufgerufenenfunktion finden somit nur mit durchgesetzten Schutzschlüsseln statt. Es wird verhindert, dass die Aufgerufenenfunktion Schutzschlüsselbit in der aufgerufenen Adresse ändert. Schutzschlüssel (PKEY) verwenden den Umstand, dass in einem 64-Bit-Adressierungsmodus nicht alle Bit verwendet werden. Die PKEY sind eine neue Verwendung für sechs hohe Bit einer Adresse zum Definieren eines granulareren Zugriffs auf Seiten, so dass dieselbe Seite abhängig von dem Wert dieser Hoch-Bit verschiedene Zulassungen aufweisen kann. Zum Beispiel kann ein Wert dieser 6 Bit, z.B. 000000b, definieren, dass diese Seite eine Lese-Schreib-Datenseite ist, der Wert 000001b kann die Seite als eine Nur-Lese-Seite definieren, und der Wert 000010b kann definieren, dass kein Zugriff erlaubt ist. Alle diese verschiedenen Zulassungen können auf dieselbe Seite mit derselben linearen Adresse angewandt werden, und es wird kein Aliasing verwendet. Da diese Zulassungen anwendungsdefiniert sind und durch die Anwendung gesteuert werden können, begrenzt die CPU 116 Steuerung im deprivilegierten Modus. Die CPU 116 begrenzt Steuerung durch die Anwendung durch Durchsetzen desselben Werts wie durch den Aufrufer einer zu verwendenden Funktion definiert, wobei Versuche der aufgerufenen Funktion, diese Werte zu ändern, ignoriert werden und eine spezifische Menge von Zulassungen durchgesetzt wird. Als ein Beispiel kann der Aufrufer eine spezielle Sicht seines Adressenraums erzeugen, wobei alle kritischen Datenstrukturen für die aufgerufene Funktion entweder nur lesbar oder nicht zugänglich sind, während auf diejenigen, die zugänglich sind, im selben Adressenraum zugegriffen werden kann, und kein Kontextwechsel notwendig ist.
-
Ferner lädt die CPU 116 Grenzen für die Segmentregister 120 aus den Tabellen LDT 135 oder GDT 133, wenn ein Deskriptor gegeben ist, der ein Index in einer der jeweiligen Tabellen ist. Die Grenzen in Kombination mit den Schutzschlüsseln verhindern Zugriff auf das Codesegment 202-2, das Datensegment 204-2 und das Stapelsegment 206-2 außerhalb erlaubter Regionen, z.B. des CS-Bereichs 208-2, des DS-Bereichs 210-2 und des SS-Bereichs 212-2. Um die Grenzen zu implementieren, interpretiert die CPU die ‚Basis‘-Adresse in den Einträgen der GDT 133 oder LDT 135, die in Segmentdeskriptoren geladen werden, als eine minimal mögliche zugängliche Adresse (untere Schranke) im Aufrufer-Adressenraum 207-1, statt als Basisadresse in dem Segment, wenn die CALL_DEPRIVELEGED-Anweisung ausgeführt wird. Dies soll einen einzigen Adressenraum zwischen Aufrufer und Aufgerufenem bewahren, um den Austausch von Parametern zu vereinfachen. Wie bereits erwähnt kann ein einziger Adressenraum für die Aufruferfunktion, z.B. der Aufrufer-Adressenraum 207-1, und die Aufgerufenenfunktion, z.B. der AufgerufenenAdressenraum 207-2, betrachtet vom Standpunkt der jeweiligen Funktionen, verwendet werden. Zum Beispiel kann die CPU 116 Segmentregister benutzen, um Basisadressenwerte für die Segmente zu speichern, wobei jeder Basisadressenwert eine untere Grenze eines zugänglichen Bereichs eines Segments ist. In einem Beispiel kann die CPU 116 einen ersten Basisadressenwert in einem ES-Register 128 speichern, um eine untere Grenze eines Zugangsbereichs des Datensegments (untere Grenze des DS-Bereichs 210-2) zu setzen, einen zweiten Basisadressenwert in einem FS-Register 132 speichern, um eine zweite untere Grenze eines zweiten Adressenbereichs des Codesegments (untere Grenze des CS-Bereichs 208-2) zu setzen, und einen dritten Basisadressenwert in einem GS-Register 130 speichern, um eine dritte untere Grenze einer dritten Adresse des Stapelsegments (untere Grenze des SS-Bereichs 212-2) zu setzen. Ausführungsformen sind nicht auf dieses Beispiel begrenzt. Bei einigen Ausführungsformen können ein oder mehrere der Segmentregister (ES, GS und FS) anderen Segmenten (CS, DS und SS) zugeordnet werden als dem in dem Beispiel bereitgestellten. Außerdem und bei einigen Ausführungsformen Speichern eines vierten Basisadressenwerts in einem ES-Register, um eine vierte untere Grenze einer vierten Adresse des Datensegments zu setzen, Speichern eines fünften Basisadressenwerts in einem FS-Register, um eine fünfte untere Grenze einer fünften Adresse des Datensegments zu setzen, und Speichern eines sechsten Basisadressenwerts in einem GS-Register, um eine sechste untere Grenze einer sechsten Adresse des Datensegments zu setzen.
-
In Systemen und wie zuvor besprochen wird das DS-Segment 204 für Datenzugriff für eine Funktion verwendet, das CS-Segment 202 wird für Code verwendet und das SS-Segment 206 ist für den Stapel, obwohl sich in einigen Fällen der Stapel im DS-Segment 204 befinden kann. Bei einigen Ausführungsformen kann die Vorgabekonfiguration für die Segmente für den deprivilegierten Betriebsmodus umdefiniert werden. Zum Beispiel können das ES-, FS- und GS-Segment für Daten, Code und Stapel verwendet werden. Diese Segmente können durch die Aufruferfunktion mit Betriebssystemunterstützung konfiguriert werden, um Segmentdeskriptoren in einer Deskriptortabelle (LDT 135 und/oder GDT 133 bereitzustellen und geeignete Selektoren zurückzugeben. Wenn die Anwendung anfordert, Werte in den Tabellen LDT 135 oder GDT 133 zu modifizieren, z.B. ein Systemaufruf modify_ldt() in Linux, stellt das Betriebssystem sicher, dass durch die Anwendung für diese Deskriptoren bereitgestellte Einstellungen korrekte Privilegebenen aufweisen und sich nicht auf Speicher außerhalb des Prozessadressenraums beziehen. Die Segmentgrenzen, die in einem Adressenraum des Aufrufers konfiguriert sind, verhindern, dass deprivilegierter Code beim Teilen desselben Adressenraums entkommt.
-
Grenzen für das CS-Segment können jedoch bedeuten, dass jede dynamische Laufzeitausführung (wie dynamisch gelinkte libc) außerhalb der Grenzen liegt und einen Programmfehler verursacht, der durch den Aufrufer-Programmfehler-Handler behandelt wird. Die Aufruferfunktion kann eine Sandkastenimplementierung der Laufzeit bereitstellen.
-
Segmentregisterselektoren werden erweitert zur Segmentcodierung, die nur einen zugänglichen Bereich definiert, während die Basis dieselbe wie für die Aufruferfunktion ist, oder anders ausgedrückt die Basis nicht zu der Adresse hinzugefügt wird, aber Zugriff auf die Adresse unterhalb der Basis einen Bereichsgrenzen-Programmfehler verursacht. Ferner kann Segmentsemantik in jedem Datensegment mit einer Kennung für das Codesegment, das auf es zugreifen kann, erweitert werden. Somit kann für jedes Nachrichtenobjekt, das exklusiv jeweils einer einzigen Funktion zugänglich sein muss, ein getrenntes Segment zu einem Zeitpunkt definiert und in der GDT gespeichert werden. Wenn eine Anweisung versucht, den Segmentdeskriptor zu laden, wird zusätzlich zu den gewöhnlichen Prüfungen der CS-Selektor für die Anweisung mit dem autorisierten CS-Selektor in dem Datensegmentdeskriptor verglichen. In einem Beispiel wird eine neue Anweisung definiert, um es einer Funktion mit einem zum Zugriff auf das Segment autorisierten CS-Selektor zu gestatten, Eigentümerschaft dieses Segments auf eine bestimmte andere Funktion mit einem designierten CS-Selektor zu übertragen.
-
Die Anweisung führt die Segmentdeskriptoraktualisierung durch, ohne eine Aktivierung privilegierter Software zu erfordern. Privilegierte Software kann eine Tabelle konstruieren, in der jeder Eintrag einen Quellen-CS-Selektor auf einen Ziel-CS-Selektor abbildet, um zu spezifizieren, dass die dem Quellen-CS-Selektor zugeordnete Funktion dafür autorisiert ist, Eigentümerschaft eines oder mehrerer Datensegmente an die dem Ziel-CS-Selektor zugeordnete Funktion zu übertragen, indem die Anweisung entsprechend zum Aktualisieren der spezifizierten Datensegmentdeskriptoren verwendet wird. Wenn die Anweisung aktiviert wird, um Eigentümerschaft eines Datensegments zu übertragen, und entweder der aktuelle CS-Selektor in dem Datensegmentdeskriptor nicht spezifiziert ist oder die aktuelle Funktion durch die Tabelle nicht dafür autorisiert ist, die angeforderte Deskriptoraktualisierung durchzuführen, kann ein Programmfehler oder ein Abbruch der virtuellen Maschine (VM) erzeugt werden. Dies hilft dabei, es privilegierter Software zu ermöglichen, zu steuern, welche Funktionen miteinander kommunizieren können, ohne zu erfordern, dass die privilegierte Software aktiviert wird, um jede Deskriptoraktualisierung durchzuführen. Auf die Tabelle könnte ein modellspezifisches Register, ein Steuerregister, eine Virtuellmaschinen-Steuerstruktur usw. zeigen. Die privilegierte Software könnte den Zugriff auf die Tabelle an eine vertrauenswürdige Funktion delegieren, indem die Tabelle in Speicher gespeichert wird, der der vertrauenswürdigen Funktion zugänglich ist. Die Anweisung kann einen Index in der Autorisierungstabelle spezifizieren, um das Overhead des Durchsuchens der gesamten Tabelle nach einem passenden Eintrag zu vermeiden. Die privilegierte Software kann jede Funktion über die entsprechenden Indizes zur Verwendung für verschiedene Ziel-CS-Selektoren informieren.
-
Die Anweisung kann auch die aktuellen Inhalte der Datensegmentregister prüfen, um etwaige mit einem Selektor zu identifizieren, der auf den für den Deskriptor, der modifiziert wird, passt. Wenn eine Übereinstimmung gefunden wird, kann ein Programmfehler erzeugt werden, oder das Segmentregister kann gelöscht werden, um Verwendung eines abgestandenen Segmentdeskriptorwerts zu vermeiden. Es kann notwendig sein, für jeden logischen Prozessor eine andere GDT zu verwenden, wenn eine einzelne Funktion gleichzeitig auf mehreren logischen Prozessoren ausgeführt werden kann, da andernfalls ein anderer logischer Prozessor als der die Anweisung ausführende immer noch einen abgestandenen Deskriptorwert verwenden kann.
-
Bei Ausführungsformen konfiguriert die CPU 116 auch einen Taktzähler, um eine Zeitgrenze für Ausführung zu setzen. Spezieller aktiviert die CPU 116, Kopie des aktuellen Werts des Zeitstempelzählers (TSC), einen Taktzähler, um einen Wert, z.B. einen Startwert, in Richtung eines Zeitgrenzenwerts zu zählen, wenn sie sich im deprivilegierten Betriebsmodus befindet. In einem Beispiel kann der Startwert 0 und der Zeitgrenzenwert 100 sein, und der Takt kann in Millisekunden zählen. Wenn der Takt den Zeitgrenzenwert erreicht, z.B. eine Zeitüberschreitung auftritt, bewirkt die CPU 116 einen Programmfehler.
-
Bei Ausführungsformen schwenkt die CPU 116 auch auf einen neuen Stapel, z.B. in dem Stapelbereich 212-2, wofür der Schreibzugriff durch die Änderung des Schutzschlüssels ermöglicht wird (entweder Änderung der Zulassung pro Schutzschlüsseln zugeordneter Seite oder Ändern des Schlüssels auf einen anderen Wert, der andere Zulassungen für dieselbe Seite definiert). Auf diesem neuen Stapel wird ein Call-Frame mit einem speziellen Wert als Rückkehradresse, z.B. 0x00, 0x00000 usw., platziert. Als Alternative kann ein Wert auf dem Stapel ignoriert werden, wenn eine spezielle Anweisung für RET DEPRIVILIGED verwendet wird, wie RET FAR, die sich von einer regulären RET-Anweisung zwischen Funktionen unterscheidet. Wenn CALL_DEPRIVILEGED aktiviert wird, wechselt die CPU 116 in die Aufgerufenenfunktion. Alle Flüsse der Steuerung in dem Hauptteil der Aufgerufenenfunktion schreiten normal voran, aber jeder Aufruf außerhalb der Aufgerufenenfunktion, der nicht in einem erlaubten Aufruf in die Benutzeranwendung fortschreitet, erzeugt automatisch einen Programmfehler, der durch den Programmfehler-Handler behandelt wird.
-
Bei Ausführungsformen kann CALL_DEPRIVILEGED codiert werden, ohne dass ein anderer Opcode hinzugefügt werden muss. Zum Beispiel kann die CALL_DEPRIVILEGED-Anweisung CALL FAR wiederverwenden, aber eine spezifische Segmentdeskriptoradresse bereitstellen, oder ein Präfix für die normale CALL-Anweisung hinzufügen (wie LOCK CALL oder REP CALL oder CS: CALL). Zum Beispiel kann die CALL_DEPRIVILIGED-Anweisung die Semantik von CALL FAR erweitern, indem das Datensegment und das Stapelsegment gespeichert werden, das Datensegmentregister und das Stapelsegmentregister geladen werden und die Privilegebene (CPL) auf eine niedrigere Ebene, z.B. CPL=4, gesetzt wird, um einen deprivilegierten Betriebsmodus anzugeben. Ähnlich würde die Semantik von RET umdefiniert werden, indem DS- und SS-Änderungen für die RET_DEPRIVILEGED-Anweisung umgekehrt werden.
-
Bei Ausführungsformen kann die den Programmfehler-Handler enthaltende CPU 116 jedes Auftreten des Systemaufrufs, des Programmfehlers, der gefährlichen Anweisung usw. während der Ausführung von deprivilegiertem Code behandeln. Der Programmfehler-Handler empfängt Details des Programmfehlers und implementiert/emuliert entweder das Verhalten der Anweisung oder bricht die Ausführung der Funktion ab. Zum Beispiel kann der Programmfehler-Handler syscall für erlaubte Systemfunktionen ‚weiterleiten‘ und die Ausführung fortsetzen. Es können spezifische Aufrufkonventionen definiert werden. Zum Beispiel können VMEXIT-Codes zum Definieren von Typen von Programmfehlern erweitert werden, und die RET_EXTERNAL-Anweisung kann verwendet werden, um die Ausführung fortzusetzen oder den Stapel zu säubern und die Ausführung der Aufruferfunktion fortzusetzen, wie etwa RET_DEPRIVILIGED.
-
Bei Ausführungsformen kann die CPU 116 auch vernestete Aufrufe behandeln. Im deprivilegierten Betriebsmodus werden, während der deprivilegierte Code ausgeführt wird, Modifikation von Segmentregistern 120, Deskriptortabellen 131 usw. verboten ist, vernestete Aufrufe nicht direkt unterstützt. Die CPU 116 kann die vernesteten Aufrufe jedoch mittels Emulation behandeln und ermöglichen. In einem Beispiel würden Aufrufe an Funktionen von einem einzigen Ort kommen, z.B. einem FaaS-Router, und die CPU 116 würde ‚CALL EXTERNAL‘ verwenden, um Aufrufe von Funktion zu Funktion durchzuführen. ‚CALL EXTERNAL‘ dient zum Implementieren eines Rückrufs von einer deprivilegierten Funktion zur Laufzeitumgebung für Dienstfunktionen, die typischerweise durch Systemaufrufe bereitgestellt werden, z.B. Speicherzuteilungen, E/A-Operationen usw. Der Aufrufer konfiguriert eine Liste von Eintrittspunkten für Funktionen, die in dediziertem Speicherbereich verwendet werden können, worauf sich eines der Segmentregister ES/FS/GS oder andere Register oder bekannte Speicherstellen beziehen.
-
Die CPU 116 kann auch die umgekehrte Anweisung ‚RET DEPRIVILEGED‘ verarbeiten, die entweder explizit getriggert oder implizit durch die CPU 116 getriggert werden kann, wenn ein RET zu einer Spezialwertadresse, z.B. der „0“-Adresse, angetroffen wird. Ähnlich wie die CALL_DEPRIVILEGED-Anweisung kann die RET_DEPRIVILEGED-Anweisung mit einem Präfix wie ‚REP RET‘ oder ‚CS: RET‘ oder anderen Varianten codiert werden. Beim Verarbeiten der umgekehrten Anweisung gibt die CPU 116 die Steuerung an die nächste Anweisung nach der CALL_DEPRIVILEGED-Anweisung in der Aufruferfunktion unter Verwendung einer Adresse aus den Stapeln des Aufrufers zurück, was beim Stapelwechsel mit dem Aufruf zu einem ‚Schattenstapel‘ wird. Wenn Stapelwechsel nicht erwünscht ist, kann eine ordnungsgemäße eine Rückkehradresse in dem in der CPU implementierten dedizierten ‚Schattenstapel‘ platziert werden, wie ‚Return Stack Buffer‘, was dazu dient, die Rückkehradresse für RET-Anweisungen zu erhalten, oder eine andere dedizierte Struktur. Die Adresse ist die nächste Adresse nach der Adresse, die der CALL_DEPRIVILEGED-Anweisung zugeordnet ist. Die CPU 116 kann in das herkömmliche Ausführungsmodell wechseln und den Stapel zum ursprünglichen Stapel schwenken, z.B. von der Stapelregion 212-2 auf die Stapelregion 212-1. Die RET _DEPRIVILIGED-Anweisung kann im Fall der Verwendung eines speziellen Werts auf dem Stapel zur Unterscheidung zwischen einem regulären RET und RET DEPRIVILIGED als eine RET-Anweisung codiert werden, oder es wird nicht erwartet, dass die aufgerufene Funktion Aufrufe anderer Funktionen als unter Verwendung von CALL_EXTERNAL durchführt. Dies wird Doppelverwendungsfunktionen ermöglichen und Binärkompatibilität sicherstellen, vorausgesetzt, dass, wenn sie aufgerufen werden, wenn sie im herkömmlichen Modus ausgeführt werden, die Doppelverwendungsfunktionen als reguläre Funktionen funktionieren.
-
Bei Ausführungsformen kann die CPU 116 auch eine CALL_EXTERNAL-Anweisung verarbeiten, die von einem Programmierer in einem Softwareprogramm benutzt werden kann. Spezieller umfasst eine abgegrenzte Aktion oder Funktion eine CALL_EXTERNAL-Anweisung, um Aufrufe in ihre Betriebsumgebung (Laufzeit) für Dienste wie Zuteilung von Speicher, E/A-Operationen, Zugreifen auf Ereignisse usw. im deprivilegierten Betrieb durchzuführen. Die CALL_EXTERNAL-Anweisung verwendet einen Funktionsindex als Parameter, so dass nur eine Anzahl erlaubter Aufrufe durchgeführt werden kann. Die CALL_EXTERNAL-Anweisung kann durch Wiederverwendung von Codierung der existierenden SYSCALL- oder VMCALL-Anweisungen implementiert werden und weist eine umdefinierte Semantik auf, statt als ‚gefährliche Anweisung‘ einen Programmfehler zu produzieren und eine neue Funktionalität von CALL_EXTERNAL im deprivilegierten Betriebsmodus bereitzustellen. Außerdem bewirkt die CALL_EXTERNAL-Anweisung einen Programmfehler mit vordefiniertem Code, was der Aufruferfunktion erlaubt, angeforderte Funktionalität bereitzustellen.
-
Ähnlich kann die CPU 116 eine RET-EXTERNAL-Anweisung verarbeiten, die in einem Softwareprogramm benutzt wird. Bei Ausführungsformen wird die RET EXTERNAL-Anweisung von dem durch die Aufruferfunktion implementierten Programmfehler-Handler verwendet, um die Kontrolle nach Programmfehler oder CALL_EXTERNAL an die deprivilegierte Funktion zurückzugeben. Die CPU 116 transferiert nach der Anweisung, die den Programmfehler verursacht hat, die Kontrolle an die nächste Anweisung.
-
3 zeigt eine beispielhafte Ausführungsform eines Logikflusses 300. Der Logikfluss 300 kann einige oder alle der durch eine oder mehrere hier beschriebene Ausführungsformen ausgeführten Operationen repräsentieren. Zum Beispiel kann der Logikfluss 300 Operationen darstellen, die durch die Vorrichtung 100 und die CPU 116 ausgeführt werden.
-
In Block 302 umfassen Ausführungsformen Detektieren einer Aufrufanweisung von einer ersten Funktion an eine zweite Anweisung. Bei Ausführungsformen kann der Aufruf an die zweite Anweisung erfolgen, die einem anderen Adressenraum als die Aufruferfunktion zugeordnet ist und eine andere Privilegebene aufweist. In einem Beispiel bestimmt die CPU 116, dass eine CALL_DEPRIVILEGED-Anweisung aktiviert wird. Die CALL_DEPRIVILEGED-Anweisung kann eine neue Anweisung mit einem neuen Opcode sein oder kann codiert werden, ohne einen anderen Opcode hinzufügen zu müssen. Zum Beispiel kann die CALL_DEPRIVILEGED-Anweisung CALL FAR wiederverwenden, aber eine spezifische Segmentdeskriptoradresse bereitstellen oder ein Präfix für die normale CALL-Anweisung hinzufügen (wie LOCK CALL oder REP CALL oder CS: CALL). Zum Beispiel kann die CALL DEPRIVILIGED-Anweisung die Semantik von CALL FAR erweitern, und die CPU 116 kann den Aufruf detektieren.
-
In Block 304 kann die CPU 116 einen Programmfehler-Handler für die Aufruferfunktion laden, um Programmfehler zu behandeln, die auftreten, während die Aufgerufenenfunktion ausgeführt wird. Bei Ausführungsformen kann die CPU 116 den Programmfehler-Handler für Systemaufrufe, „gefährliche Anweisungen“ wie Verschiebung ins Segmentregister (CALL/JMP FAR) laden, und Programmfehler von vordefinierten Orten aus erzeugen (Segmentdeskriptor, durch einige der Register definierte Adresse usw.).
-
In Block 306 kann die CPU 116 bestimmen, ob PKEY zu benutzen sind. In einigen Fällen können PKEY nicht benutzt werden und es werden Seitenzulassungen verwendet, z.B. wenn sie nicht auf einem System verfügbar oder durch ein System konfiguriert sind. In diesen Fällen kann der Logikfluss 300 zu Block 308 übergehen. In anderen Fällen können PKEY jedoch verwendet werden und sie können in Block 307 konfiguriert werden. In einem Beispiel kann die CPU 116 PKEY zur Benutzung in Block 307 auf der Basis der PKEY bestimmen, die als Teil der Seitenzulassungen in Block 307 konfiguriert werden.
-
In Block 308 setzt die CPU 116 Grenzen für die Segmente und setzt diese durch. Bei Ausführungsformen interpretiert die CPU 116, um die Grenzen zu implementieren, die ‚Basis‘-Adresse der CALL_DEPRIVELEGED-Anweisung und Segmentdeskriptoren als minimal mögliche zugängliche Adresse (untere Grenze) im Aufruferadressenraum für jedes des Codesegments, des Datensegments und des Stapelsegments, statt als Basisadresse im Segment.
-
Die CPU 116 setzt in Block 310 einen Taktzähler (und initiiert ihn), um die Ausführung eine Zeitgrenze überschreiten zu lassen, wenn der Zähler einen Zeitgrenzenwert erreicht. Spezieller aktiviert die CPU 116 einen Taktzähler, um einen Wert, z.B. einen Startwert, in Richtung eines Zeitgrenzenwerts zu zählen, wenn sie sich im deprivilegierten Betriebsmodus befindet und die Aufgerufenenfunktion ausgeführt wird. Wenn der Takt den Zeitgrenzenwert erreicht, z.B. eine Zeitüberschreitung auftritt, bewirkt die CPU 116 einen Programmfehler.
-
In Block 312 wechselt die CPU 116 Stapel. Spezieller schwenkt die CPU 116 zu einem neuen Stapel, der sich in einem in den Segmenten spezifizierten Bereich von Adressen befindet. Außerdem wird ein spezieller Wert, z.B. 0x00, 0x00000 usw. auf dem neuen Stapel platziert. Ferner wechselt die CPU 116 in die Aufgerufenenfunktion. In Block 314 führt die CPU 116 die Funktion, z.B. eine oder mehrere Anweisungen für die Funktion, aus.
-
Die CPU 116, die den Programmfehler-Handler enthält, kann die für die Funktion ausgeführten Anweisungen überwachen. Ferner und in Block 316 kann die den Programmfehler-Handler enthaltende CPU 116 bestimmen, ob versucht wird, eine ‚gefährliche‘ Anweisung auszuführen. Wenn in Block 116 keine gefährliche Anweisung detektiert wird, kann die CPU 116 einen Schutzschlüssel aus der aufgerufenen Adresse in der Anweisung bestimmen und Schutzschlüssel durchsetzen, die in der aufgerufenen Adresse definiert sind, wenn Schutzschlüssel in dem optionalen Block 317 benutzt werden. Alle Zugriffe auf das Codesegment 202-2, das Datensegment 204-2 und das Stapelsegment 204-2 der Aufgerufenenfunktion finden somit nur mit durchgesetzten Schutzschlüsseln statt. Außerdem wird verhindert, dass die Aufgerufenenfunktion Schutzschlüsselbit in der aufgerufenen Adresse ändert. Wenn die CPU 116 in Block 316 eine gefährliche Anweisung detektiert oder in Block 317 die CPU 116 bestimmt, dass ein Schutzschlüssel nicht mit einem Wert übereinstimmt, der einer Seite oder Region zugewiesen ist, auf die versucht wird, zuzugreifen, kann die CPU 116 in Block 320 einen Programmfehler bewirken und/oder die Ausführung an die Aufruferfunktion zurückgeben. Die CPU 116 kann gültige Zugriffsversuche, die passende Schutzschlüssel und Werte aufweisen, in Block 317 gestatten.
-
Bei Ausführungsformen kann der Logikfluss 300 in Block 320 bestimmen, ob eine Funktion bis zum Abschluss weiter ausgeführt werden kann. In Block 320 kann die CPU 116 bestimmen, ob die Funktion abgeschlossen ist, z.B. irgendwelche Anweisungen verbleiben. Wenn dem so ist, kann die Funktion mit der Ausführung in Block 314 fortfahren. Die CPU 116 kann jedoch bestimmen, dass die Funktion abgeschlossen ist, und/oder den speziellen Wert auf dem Stapel detektieren und die Kontrolle an die Aufruferfunktion in Block 322 zurückgeben. Die CPU 116 kann die Kontrolle zurückgeben und zu den Segmenten für die Aufruferfunktion zurückschwenken.
-
Bezüglich 4 zeigt eine Blockdarstellung ein beispielhaftes Datenverarbeitungssystem 400, das in eine Laufzeitumgebung 404 integriert ist, und eine Prozessor- und Speicheranordnung 402. Die Prozessor- und Speicheranordnung 402 repräsentiert eine große Vielfalt von Prozessor- und Speicheranordnungen, darunter, aber ohne Beschränkung darauf, Anordnungen mit Einzel- oder Mehrkernprozessoren verschiedener Ausführungsgeschwindigkeiten und Stromverbrauche und Speicher verschiedener Architekturen mit einer oder mehreren Ebenen von Caches und von verschiedenen Typen wie dynamischem Direktzugriff, Flash usw. Bei verschiedenen Ausführungsformen kann der Prozessor 412 dafür ausgelegt werden, Verarbeitungsfunktionen für das Betriebssystem 414 bereitzustellen. Außerdem kann die Prozessor- und Speicheranordnung 402 mindestens einen Prozessor 414 umfassen. Der Prozessor 414 kann zum Beispiel eine CPU, einen Einzel- oder Mehrkernmikroprozessor, wie etwa die CPU 116 oder dergleichen, umfassen. Ferner kann das OS 414 Speicherressourcen verwalten, Task-Ausführung einteilen und so weiter.
-
Um Interaktion mit dem zugrundeliegenden System zu unterstützen, kann die Prozessor- und Speicheranordnung 402 mehrere Bibliotheken 416 umfassen. Die s Bibliotheken 416 können ausgelegt sein zum Bereitstellen von Aufrufen zwischen Anwendungen mit Benutzercode 440 und/oder deprivilegiertem Code 445 und dem OS 414. Die Bibliotheken 116 können auch verschiedene Plattform-Betriebsfunktionen bereitstellen, wie etwa Dateispeicherung und Eingabe-/Ausgabeoperationen. Die Laufzeitumgebung 404 kann einen Lader zum Laden von Code umfassen, der über die Compilewerkzeuge 432 und/oder durch ein anderes Datenverarbeitungssystem kompiliert werden kann.
-
Bei Ausführungsformen können in die Prozessor- und Speicheranordnung 402 Anwendungen oder Software geladen sein, darunter Benutzercode 440 und deprivilegiert. Die Anwendung repräsentiert einen großen Umfang von Anwendungen. Beispiele für eine Anwendung wären, aber ohne Beschränkung darauf, persönlicher Assistent, Produktivität oder Anwendungen für soziale Vernetzung wie Kalender, Textverarbeitung, Tabellenkalkulation, Twitter, Facebook und andere oder generische Anwendungsagenten wie ein Browser.
-
Bei Ausführungsformen kann in der Laufzeitumgebung 404 über den Prozessor 412 eine Anwendung ausgeführt werden, die Benutzercode 440 aufweist. Der Prozessor 412 kann jede Anweisung des Benutzercodes 440 ausführen, einschließlich Behandlung eines Aufrufs eines anderen Codes. In dem dargestellten Beispiel kann der Benutzercode 440 eine CALL_DEPRIVILEGED-Anweisung zum Aufrufen des deprivilegierten Codes 445 umfassen. Der Prozessor 412 kann den Aufruf wie zuvor in dem Logikfluss 300 besprochen ausführen, einschließlich Laden eines Programmfehler-Handlers, Durchsetzen von Schutzschlüsseln, Einstellen von Segmentregiongrenzen und so weiter. Der deprivilegierte Code 445 kann einen deprivilegierten Betriebsmodus betreiben, z.B. CPL4. Der deprivilegierte Code 445 kann ausgeführt werden, bis ein spezieller Wert auf dem Stapel des deprivilegierten Codes 445 detektiert wird und eine Rückkehr getriggert wird. Zum Beispiel kann der Prozessor 412 eine RET DEPRIVILEGED-Anweisung ausführen und zu der nächsten Anweisung nach der CALL_DEPRIVILEGED-Anweisung zurückkehren.
-
5 zeigt eine beispielhafte Ausführungsform eines zweiten Logikflusses 500. Der Logikfluss 400 kann die durch eine oder mehrere hier beschriebene Ausführungsformen ausgeführten Operationen ganz oder teilweise repräsentieren. Zum Beispiel kann der Logikfluss 500 Operationen veranschaulichen, die durch die Vorrichtung 100 und die CPU 116 und das Datenverarbeitungssystem 400 und den Prozessor 412 ausgeführt werden.
-
Der Logikfluss 500 umfasst Detektieren einer ersten Funktion, die einem Adressenraum zugeordnet ist, die eine Aufrufanweisung an eine zweite Funktion in dem Adressenraum einleitet. Bei Ausführungsformen ruft die erste Funktion die zweite Funktion in einem deprivilegierten Betriebsmodus auf. Zum Beispiel kann die erste Funktion im Benutzerraum arbeiten und kann eine zugeordnete Adresse im Speicher zum Verarbeiten von Daten aufweisen. Die erste Funktion kann eine Anzahl von Anweisungen umfassen, einschließlich einer Aufrufanweisung, die eine CALL_DEPRIVILEGED-Anweisung sein kann, um Anweisungen der zweiten Funktion einzuleiten. Die zweite Funktion kann eine andere Privilegebene und einen anderen Teil des zugeteilten Adressenraums aufweisen. Außerdem kann die zweite Funktion in einem deprivilegierten Betriebsmodus arbeiten. Wie bereits besprochen kann die CALL_DEPRIVILEGED-Anweisung einen neuen Opcode oder einen aktuellen Opcode (FAR CALL) mit anderer Semantik benutzen.
-
In Block 510 umfasst der Logikfluss 500 Definieren von zugänglichen Adressenbereichen für Segmente des Adressenraums für die zweite Funktion. Bei Ausführungsformen soll jedes Segment einen anderen Adressenbereich in dem Adressenraum aufweisen, in dem der zweiten Funktion gestattet wird, im deprivilegierten Betriebsmodus zuzugreifen. Spezieller kann die zweite Funktion unter Verwendung definierter Regionen im Codesegment, Datensegment und Stapelsegment auf der Basis von Informationen in der aufgerufenen Adresse arbeiten. Wenn die zweite Funktion versucht, aus einer dieser Regionen herauszuspringen oder sich hinauszubewegen, kann der Programmfehler-Handler einen Programmfehler bewirken.
-
In Block 515 umfasst der Logikfluss 500 Wechseln zu dem Stapel, der dem zweiten Adressenraum und der zweiten Funktion zugeordnet ist. Ferner und in Block 525 umfasst der Logikfluss 500 Einleitung der Ausführung der zweiten Funktion im deprivilegierten Betriebsmodus. Die Anweisungen der zweiten Funktion können arbeiten, bis der spezielle Wert detektiert wird und die Kontrolle an die erste Funktion zurückgegeben wird.
-
6 zeigt eine Ausführungsform einer beispielhaften Datenverarbeitungsarchitektur 600, die zur Implementierung verschiedener zuvor beschriebener Ausführungsformen geeignet ist. Bei einer Ausführungsform kann die Datenverarbeitungsarchitektur 600 die Vorrichtung 100, das System 400 und/oder die Vorrichtung 700 umfassen oder als Teil dieser implementiert sein.
-
So wie sie in der vorliegenden Anmeldung verwendet werden, sollen sich die Ausdrücke „System“ und „Komponente“ auf eine computerbezogene Entität beziehen, entweder Hardware, eine Kombination von Hardware und Software, Software oder Software in Ausführung, wofür Beispiele durch die beispielhafte Datenverarbeitungsarchitektur 600 bereitgestellt werden. Zum Beispiel kann eine Komponente, aber ohne Beschränkung darauf, ein Prozess, der auf einem Prozessor läuft, ein Prozessor, eine Festplatte, mehrere Speicherungslaufwerke (eines optischen und/oder magnetischen Speicherungsmediums), ein Objekt, eine ausführbare Datei, ein Ausführungs-Thread, ein Programm und/oder ein Computer sein. Zur Veranschaulichung können sowohl eine auf einem Server laufende Anwendung als auch der Server eine Komponente sein. Eine oder mehrere Komponenten können in einem Prozess und/oder Thread der Ausführung residieren, und eine Komponente kann auf einem Computer lokalisiert und/oder zwischen zwei oder mehr Computern verteilt sein. Ferner können Komponenten durch verschiedene Arten von Kommunikationsmedien kommunikativ miteinander gekoppelt sein, um Operationen zu koordinieren. Die Koordination kann unidirektionalen oder bidirektionalen Austausch von Informationen beinhalten. Zum Beispiel können die Komponenten Informationen in Form von Signalen übermitteln, die über die Kommunikationsmedien übermittelt werden. Die Informationen können als Signale implementiert werden, die an verschiedene Signalleitungen vergeben werden. Bei solchen Vergaben ist jede Nachricht ein Signal. Weitere Ausführungsformen können als Alternative jedoch Datennachrichten verwenden. Solche Datennachrichten können über verschiedene Verbindungen gesendet werden. Beispielhafte Verbindungen umfassen parallele Schnittstellen, serielle Schnittstellen und Busschnittstellen.
-
Die Datenverarbeitungsarchitektur 600 umfasst verschiedene gewöhnliche Datenverarbeitungselemente, wie etwa einen oder mehrere Prozessoren, Mehrkernprozessoren, Coprozessoren, Speichereinheiten, Chipsätze, Steuerungen, Peripheriegeräte, Schnittstellen, Oszillatoren, Timingvorrichtungen, Videokarten, Audiokarten, Komponenten für Multimedia-Eingabe/Ausgabe(E/A), Stromversorgungen und so weiter. Die Ausführungsformen sind jedoch nicht auf die Implementierung durch die Datenverarbeitungsarchitektur 600 beschränkt.
-
Wie in 6 gezeigt, umfasst die Datenverarbeitungsarchitektur 600 eine Verarbeitungseinheit 604, einen Systemspeicher 606 und einen Systembus 608. Bei der Verarbeitungseinheit 604 kann es sich um beliebige verschiedener im Handel erhältlicher Prozessoren handeln.
-
Der Systembus 608 stellt eine Schnittstelle für Systemkomponenten bereit, darunter, aber ohne Beschränkung darauf, der Systemspeicher 606 für die Verarbeitungseinheit 604. Der Systembus 608 kann eine beliebige von mehreren Arten von Busstruktur sein, die unter Verwendung beliebiger von vielfältigen im Handel erhältlichen Busarchitekturen ferner an einen Speicherbus (mit oder ohne einen Speichercontroller), einen Peripheriebus und einen lokalen Bus angeschlossen sein können. Schnittstellenadapter können über eine Steckplatzarchitektur an den Systembus 608 angeschlossen sein. Beispielhafte Steckplatzarchitekturen wären ohne Beschränkung AGP (Accelerated Graphics Port), Card Bus, (E)ISA ((Extended) Industry Standard Architecture), MCA (Micro Channel Architecture), NuBus, PCI(X) (Peripheral Component Interconnect (Extended)), PCI Express, PCMCIA (Personal Computer Memory Card International Association) und dergleichen.
-
Die Datenverarbeitungsarchitektur 600 kann verschiedene Herstellungsartikel umfassen oder implementieren. Ein Herstellungsartikel kann ein computerlesbares Speicherungsmedium zum Speichern von Logik umfassen. Beispiele für ein computerlesbares Speicherungsmedium wären beliebige greifbare Medien, die elektronische Daten speichern können, darunter flüchtiger Speicher oder nichtflüchtiger Speicher, wechselbarer oder nicht wechselbarer Speicher, löschbarer oder nicht löschbarer Speicher, beschreibbarer oder neu beschreibbarer Speicher und so weiter. Beispiele für Logik wären ausführbare Computerprogrammanweisungen, die unter Verwendung einer beliebigen geeigneten Art von Code implementiert werden, wie etwa Quellcode, kompilierter Code, interpretierter Code, ausführbarer Code, statischer Code, dynamischer Code, objektorientierter Code, visueller Code und dergleichen. Ausführungsformen können auch mindestens teilweise als Anweisungen implementiert werden, die in einem nichttransitorischen computerlesbaren Medium enthalten sind oder sich darauf befinden, die durch einen oder mehrere Prozessoren gelesen und ausgeführt werden können, um Ausführung der hier beschriebenen Operationen zu ermöglichen.
-
Der Systemspeicher 606 kann verschiedene Arten von computerlesbaren Speicherungsmedien in Form von einer oder mehreren schnelleren Speichereinheiten umfassen, wie etwa ROM (Festwertspeicher), RAM (Direktzugriffsspeicher), DRAM (dynamischer RAM), DDRAM (Double-Data-Rate DRAM), SDRAM (Synchronous DRAM), SRAM (statischer RAM), PROM (programmierbarer ROM), EPROM (löschbarer programmierbarer ROM), EEPROM (elektrisch löschbarer programmierbarer ROM), Flash-Speicher, Polymerspeicher wie ferroelektrischer Polymerspeicher, ovonischer Speicher, Phasenänderungs- oder ferroelektrischer Speicher, SONOS-Speicher (Silizium-Oxid-Nitrid-Oxid-Silizium), magnetische oder optische Karten, ein Array von Vorrichtungen wie RAID-Laufwerke (Redundant Array of Independent Disks), Halbleiter-Speichervorrichtungen (z.B. USB-Speicher), Halbleiterlaufwerke (SSD) und eine beliebige andere Art von zum Speichern von Informationen geeigneten Speicherungsmedien. Bei der in 6 gezeigten dargestellten Ausführungsform kann der Systemspeicher 606 nichtflüchtigen Speicher 610 und/oder flüchtigen Speicher 612 umfassen. In dem nichtflüchtigen Speicher 610 kann ein BIOS (Basic Input/Output System) gespeichert werden.
-
Der Computer 602 kann verschiedene Arten von computerlesbaren Speicherungsmedien in Form von einer oder mehreren langsameren Speichereinheiten umfassen, darunter ein internes (oder externes) Festplattenlaufwerk (HDD) 614, ein magnetisches Diskettenlaufwerk (FDD) 616 zum Lesen eines wechselbaren magnetischen Datenträgers 618 oder zum Beschreiben dieses und ein optisches Datenträgerlaufwerk 620 zum Lesen aus einem wechselbaren optischen Datenträger 622 (z.B. einer CD-ROM oder DVD) oder Beschreiben dieser. Das HDD 614, FDD 616 und das optische Datenträgerlaufwerk 620 können durch eine HDD-Schnittstelle 624, eine FDD-Schnittstelle 626 bzw. eine optische Laufwerkschnittstelle 628 mit dem Systembus 608 verbunden werden. Die HDD-Schnittstelle 624 für Implementierungen mit externem Laufwerk kann die Schnittstellentechnologien USB (Universal Serial Bus) und/oder IEEE 1394 umfassen.
-
Die Laufwerke und zugeordneten computerlesbaren Medien stellen flüchtige und/oder nichtflüchtige Speicherung von Daten, Datenstrukturen, computerausführbaren Anweisungen und so weiter bereit. Zum Beispiel kann in den Laufwerken und Speichereinheiten 610, 612 eine Anzahl von Programmmodulen gespeichert werden, darunter ein Betriebssystem 630, ein oder mehrere Anwendungsprogramme 632, andere Programmmodule 634 und Programmdaten 636. Bei einer Ausführungsform können das eine oder die mehreren Anwendungsprogramme 632, die anderen Programmmodule 634 und die Programmdaten 636 zum Beispiel die verschiedenen Anwendungen und/oder Komponenten des Systems 700 umfassen.
-
Mittels einer oder mehrerer verdrahteter/drahtloser Eingabevorrichtungen, zum Beispiel einer Tastatur 638 und einer Zeigevorrichtung, wie etwa einer Maus 640, kann ein Benutzer Befehle und Informationen in den Computer 602 eingeben. Andere Eingabevorrichtungen wären Mikrofone, Infrarot- bzw. IR-Fernbedienungen, Hochfrequenz- bzw. HF-Fernbedienungen, Spiel-Pads, Stylus-Stifte, Kartenleser, Dongles, Fingerabdruckleser, Handschuhe, Graphik-Tablets, Joysticks, Tastaturen, Netzhautleser, Berührungsschirme (z.B. kapazitiv, resistiv usw.), Trackballs, Trackpads, Sensoren, Stifte und dergleichen. Diese und andere Eingabevorrichtungen sind oft mittels einer Eingabevorrichtungsschnittstelle 642, die mit dem Systembus 608 gekoppelt ist, mit der Verarbeitungseinheit 604 verbunden, können aber durch andere Schnittstellen, wie etwa einen parallelen Port, einen seriellen Port gemäß IEEE 1394, einen Spielport, einen USB-Port, eine IR-Schnittstelle und so weiter verbunden sein.
-
Ein Monitor 644 oder eine andere Art von Anzeigevorrichtung ist auch über eine Schnittstelle, wie etwa einen Videoadapter 646, mit dem Systembus 608 verbunden. Der Monitor 644 kann sich innerhalb oder außerhalb des Computers 602 befinden. Zusätzlich zu dem Monitor 644 umfasst ein Computer typischerweise andere Peripherie-Ausgabevorrichtungen, wie etwa Lautsprecher, Drucker und so weiter.
-
Der Computer 602 kann unter Verwendung logischer Verbindungen über verdrahtete und/oder drahtlose Kommunikation mit einem oder mehreren entfernten Computern, wie etwa einem entfernten Computer 648, in einer vernetzten Umgebung arbeiten. Der entfernte Computer 648 kann eine Workstation, ein Servercomputer, ein Router, ein Personal Computer, ein tragbarer Computer, ein mikroprozessorgestütztes Unterhaltungsgerät, eine Peer-Vorrichtung oder ein anderer gemeinsamer Netzwerkknoten sein und umfasst typischerweise viele oder alle der relativ zu dem Computer 602 beschriebenen Elemente, obwohl der Kürze halber nur eine Speicher-/Speicherungsvorrichtung 650 dargestellt ist. Die abgebildeten logischen Verbindungen umfassen verdrahtete/drahtlose Konnektivität mit einem lokalen Netzwerk (LAN) 652 und/oder größeren Netzwerken, zum Beispiel einem großflächigen Netzwerk (WAN) 654. Solche LAN- und WAN-Vernetzungsumgebungen sind in Büros und Firmen überall anzutreffen und ermöglichen unternehmensweite Computernetzwerke, wie etwa Intranets, die alle an ein globales Kommunikationsnetzwerk, z.B. das Internet, angeschlossen sein können.
-
Wenn er in einer LAN-Vernetzungsumgebung verwendet wird, ist der Computer 602 mittels einer verdrahteten und/oder drahtlosen Kommunikationsnetzwerkschnittstelle oder eines Adapters 656 mit dem LAN 652 verbunden. Der Adapter 656 kann verdrahtete und/oder drahtlose Kommunikation mit dem LAN 652 ermöglichen, wozu auch ein darauf angeordneter drahtloser Zugangspunkt gehören kann, um mit der drahtlosen Funktionalität des Adapters 656 zu kommunizieren.
-
Bei Verwendung in einer WAN-Vernetzungsumgebung kann der Computer 602 ein Modem 658 umfassen oder ist mit einem Kommunikationsserver im WAN 654 verbunden oder weist andere Mittel zur Herstellung von Kommunikation über das WAN 654 auf, wie etwa mittels des Internet. Das Modem 658, das intern oder extern und eine verdrahtete und/oder drahtlose Vorrichtung sein kann, verbindet sich über die Eingabevorrichtungsschnittstelle 642 mit dem Systembus 608. In einer vernetzten Umgebung können relativ zu dem Computer 602 abgebildete Programmmodule oder Teile davon in der entfernten Speicher-/Speicherungsvorrichtung 650 gespeichert sein. Es versteht sich, dass die gezeigten Netzwerkverbindungen beispielhaft sind und andere Mittel zum Herstellen einer Kommunikationsverbindung zwischen den Computern verwendet werden können.
-
Der Computer 602 ist betreibbar, um unter Verwendung der Familie IEEE 602 von Standards mit verdrahteten und drahtlosen Vorrichtungen oder Entitäten zu kommunizieren, wie etwa drahtlosen Vorrichtungen, die wirksam in drahtloser Kommunikation angeordnet sind (z.B. IEEE 602.11-Funkmodulationstechniken). Dazu gehören unter anderem mindestens die drahtlosen Technologien WiFi (oder Wireless Fidelity), WiMAX und Bluetooth™. Somit kann die Kommunikation eine vordefinierte Struktur wie bei einem herkömmlichen Netzwerk sein oder einfach eine Ad-Hoc-Kommunikation zwischen mindestens zwei Vorrichtungen. WiFi-Netzwerke verwenden Funktechnologien, die als IEEE 602.118 (a, b, g, n usw.) bezeichnet werden, um sichere, zuverlässige und schnelle drahtlose Konnektivität bereitzustellen. Ein WiFi-Netzwerk kann verwendet werden, um Computer miteinander, mit dem Internet und mit verdrahteten Netzwerken (die IEEE 602.3-bezogene Medien und Funktionen verwenden) zu verbinden.
-
Die verschiedenen Elemente der Vorrichtungen, die zuvor mit Bezug auf 1-5 beschrieben wurden, können verschiedene Hardwareelemente, Softwareelemente oder eine Kombination beider umfassen. Beispiele für Hardwareelemente wären Vorrichtungen, Logikvorrichtungen, Komponenten, Prozessoren, Mikroprozessoren, Schaltungen, Prozessoren, Schaltungselemente (z.B. Transistoren, Widerstände, Kondensatoren, Induktivitäten und so weiter), integrierte Schaltungen, ASIC (anwendungsspezifische integrierte Schaltungen), PLD (programmierbare Logikvorrichtungen), DSP (digitale Signalprozessoren), FPGA (Field Programmable Gate Array), Speichereinheiten, Logikgatter, Register, Halbleitervorrichtung, Chips, Mikrochips, Chipsätze und so weiter. Beispiele für Softwareelemente wären Softwarekomponenten, Programme, Anwendungen, Computerprogramme, Anwendungsprogramme, Systemprogramme, Softwareentwicklungsprogramme, Maschinenprogramme, Betriebssystemsoftware, Middleware, Firmware, Softwaremodule, Routinen, Subroutinen, Funktionen, Methoden, Prozeduren, Softwareschnittstellen, API (Anwendungsprogrammschnittstellen), Anweisungssätze, Datenverarbeitungscode, Computercode, Codesegmente, Computercodesegmente, Wörter, Werte, Symbole oder eine beliebige Kombination davon. Die Bestimmung, ob eine Ausführungsform unter Verwendung von Hardwareelementen und/oder Softwareelementen implementiert wird, kann jedoch abhängig von einer beliebigen Anzahl von Faktoren unterschiedlich sein, wie etwa der gewünschten Rechengeschwindigkeit, Energiepegeln, Wärmetoleranzen, Verarbeitungszyklusbudget, Eingangsdatenraten, Ausgangsdatenraten, Speicherressourcen, Datenbusgeschwindigkeiten und andere Entwurfs- oder Leistungsfähigkeitsbeschränkungen, so wie sie für eine gegebene Implementierung erwünscht sind.
-
7 zeigt eine Ausführungsform eines Systems 700. Bei verschiedenen Ausführungsformen kann das System 700 ein System oder eine Architektur repräsentieren, das bzw. die für Verwendung mit einer oder mehreren hier beschriebenen Ausführungsformen, wie etwa der Vorrichtung 100, geeignet ist.
-
Wie in 7 gezeigt, kann das System 700 mehrere Elemente umfassen. Ein oder mehrere Elemente können unter Verwendung von einer oder mehreren Schaltungen, Komponenten, Registern, Prozessoren, Software-Subroutinen, Modulen oder einer beliebigen Kombination davon implementiert werden, so wie es für eine gegebene Menge von Entwurfs- oder Leistungsfähigkeitsbeschränkungen erwünscht ist. Obwohl 7 als Beispiele eine begrenzte Anzahl von Elementen in einer bestimmten Topologie zeigt; ist ersichtlich, dass Elemente in einer beliebigen geeigneten Topologie in dem System 700 verwendet werden können, so wie es für eine gegebene Implementierung erwünscht ist. Die Ausführungsformen sind in diesem Kontext nicht beschränkt.
-
Bei verschiedenen Ausführungsformen kann das System 700 eine Datenverarbeitungsvorrichtung 705 umfassen, bei der es sich um eine beliebige Art von Computer- oder Verarbeitungsvorrichtung handeln kann, darunter ein Personal Computer, ein Desktop-Computer, ein Tablet-Computer, ein Netbook-Computer, ein Notebook-Computer, ein Laptop-Computer, ein Server, eine Serverfarm, ein Blade-Server oder eine beliebige andere Art von Server und so weiter.
-
Beispiele für eine Datenverarbeitungsvorrichtung wären auch Computer, die dafür ausgelegt sind, von einer Person getragen zu werden, wie etwa ein Handgelenkcomputer, Fingercomputer, Ringcomputer, Brillencomputer, Gürtelschnallencomputer, Armbandcomputer, Schuhcomputer, Bekleidungscomputer und andere Wearable-Computer. Bei Ausführungsformen kann zum Beispiel eine mobile Datenverarbeitungsvorrichtung als ein Smartphone implementiert sein, das in der Lage ist, Computeranwendungen sowie Sprachkommunikation und/oder Datenkommunikation auszuführen. Obwohl einige Ausführungsformen als Beispiel mit einer mobilen Datenverarbeitungsvorrichtung beschrieben werden können, die als Smartphone implementiert ist, versteht sich, dass andere Ausführungsformen auch unter Verwendung von anderen drahtlosen mobilen Datenverarbeitungsvorrichtungen implementiert werden können. Die Ausführungsformen sind in diesem Kontext nicht beschränkt.
-
Bei verschiedenen Ausführungsformen kann die Datenverarbeitungsvorrichtung 705 eine Prozessorschaltung 702 umfassen. Die Prozessorschaltung 702 kann unter Verwendung von beliebigen Prozessor- oder Logikvorrichtungen implementiert werden. Bei der Verarbeitungsschaltung 702 kann es sich um eines oder mehrere einer beliebigen Art von Rechenelement handeln, wie etwa, aber ohne Beschränkung darauf, einen Mikroprozessor, einen Prozessor, eine Zentralverarbeitungseinheit, eine digitale Signalverarbeitungseinheit, einen Zweikernprozessor, einen Mobilvorrichtungsprozessor, einen Desktop-Prozessor, einen Einzelkernprozessor, eine SoC-Vorrichtung (System auf einem Chip), einen CISC-Mikroprozessor (Complex Instruction Set Computing), einen RISC-Mikroprozessor (Reduced Instruction Set), einen VLIW-Mikroprozessor (Very Long Instruction Word) oder eine beliebige andere Art von Prozessor- oder Verarbeitungsschaltung auf einem einzigen Chip oder einer integrierten Schaltung. Die Verarbeitungsschaltung 702 kann über ein Verbindungselement 743, wie etwa einen oder mehrere Busse, Steuerleitungen und Datenleitungen, mit den anderen Elementen des Datenverarbeitungssystems verbunden sein und mit ihnen kommunizieren.
-
Bei einer Ausführungsform kann die Datenverarbeitungsvorrichtung 705 eine Speichereinheit 704 zur Kopplung mit der Prozessorschaltung 702 umfassen. Die Speichereinheit 704 kann über einen Kommunikationsbus 753 mit der Prozessorschaltung 702 gekoppelt sein, oder durch einen dedizierten Kommunikationsbus zwischen der Prozessorschaltung 702 und der Speichereinheit 704, so wie es für eine gegebene Implementierung erwünscht ist. Die Speichereinheit 04 kann unter Verwendung beliebiger maschinenlesbarer oder computerlesbarer Medien mit der Fähigkeit zum Speichern von Daten implementiert werden, darunter sowohl flüchtiger als auch nichtflüchtiger Speicher. Bei einigen Ausführungsformen kann das maschinenlesbare oder computerlesbare Medium ein nichttransitorisches Medium umfassen. Die Ausführungsformen sind in diesem Kontext nicht beschränkt.
-
Die Datenverarbeitungsvorrichtung 705 kann bei verschiedenen Ausführungsformen eine Graphikverarbeitungseinheit (GPU) 706 umfassen. Die GPU 706 kann eine beliebige Verarbeitungseinheit, Logik oder Schaltkreise, optimiert zum Ausführen von graphikbezogenen Operationen, sowie die Videodecoder-Engines und die Einzelbildkorrelations-Engines umfassen. Die GPU 706 kann zur Wiedergabe von zweidimensionalen (2D-) und/oder dreidimensionalen (3D-) Bildern für verschiedene Anwendungen wie Videospiele, Graphiken, CAD (Computer Aided Design), Simulations- und Visualisierungswerkzeuge, Bildgebung usw. verwendet werden. Verschiedene Ausführungsformen sind auf diese Weise nicht beschränkt; die GPU 706 kann eine beliebige Art von Graphikdaten verarbeiten, wie etwa Bilder, Videos, Programme, Animation, 3D, 2D, Objektbilder und so weiter.
-
Bei einigen Ausführungsformen kann die Datenverarbeitungsvorrichtung 705 eine Anzeigesteuerung 708 umfassen. Die Anzeigesteuerung 708 kann eine beliebige Art von Prozessor, Steuerung, Schaltung, Logik und so weiter zum Verarbeiten von Graphikinformationen und Anzeigen der Graphikinformationen sein. Die Anzeigesteuerung 708 kann Graphikinformationen von einem oder mehreren Puffern empfangen oder abrufen. Nach dem Verarbeiten der Informationen kann die Anzeigesteuerung 708 die Graphikinformationen zu einer Anzeige senden.
-
Bei verschiedenen Ausführungsformen kann das System 700 einen Sendeempfänger 744 umfassen. Der Sendeempfänger 744 kann ein oder mehrere Funkgeräte umfassen, die Signale unter Verwendung von verschiedenen geeigneten drahtlosen Kommunikationstechniken senden und empfangen können. Solche Techniken können Kommunikation über ein oder mehrere drahtlose Netzwerke beinhalten. Beispielhafte drahtlose Netzwerke umfassen (aber ohne Beschränkung darauf) drahtlose lokale Netzwerke (WLAN), drahtlose persönliche Netzwerke (WPAN), drahtlose städtische Netzwerke (WMAN), Mobilfunknetze und Satellitennetze. Bei der Kommunikation über solche Netzwerke kann der Sendeempfänger 744 gemäß einem oder mehreren anwendbaren Standards in beliebiger Version arbeiten. Die Ausführungsformen sind in diesem Kontext nicht beschränkt.
-
Bei verschiedenen Ausführungsformen kann die Datenverarbeitungsvorrichtung 705 eine Anzeige 745 umfassen. Die Anzeige 745 kann eine beliebige Anzeigevorrichtung darstellen, die Informationen anzeigen kann, die von der Prozessorschaltung 702, der Graphikverarbeitungseinheit 706 und der Anzeigesteuerung 708 empfangen werden.
-
Bei verschiedenen Ausführungsformen kann die Datenverarbeitungsvorrichtung 705 Speicherung 746 umfassen. Die Speicherung 746 kann als eine nichtflüchtige Speicherungsvorrichtung implementiert sein, wie etwa, aber ohne Beschränkung darauf, ein magnetisches Datenträgerlaufwerk, ein optisches Datenträgerlaufwerk, ein Bandlaufwerk, eine interne Speicherungsvorrichtung, eine angeschlossene Speicherungsvorrichtung, Flash-Speicher, batteriegesichterten SDRAM (synchronen DRAM) und/oder eine netzwerkzugängliche Speicherungsvorrichtung. Bei Ausführungsformen kann die Speicherung 746 Technologie zur Erhöhung der Speicherungsleistungsfähigkeit mit erweitertem Schutz für wertvolle digitale Medien umfassen, wenn zum Beispiel mehrere Festplatten vorliegen. Weitere Beispiele für die Speicherung 746 wären eine Festplatte, eine Diskette, CD-ROM (Compact Disk Read Only Memory), CD-R (Compact Disk Recordable), CD-RW (Compact Disk Rewritable), ein optischer Datenträger, magnetische Medien, magnetooptische Medien, wechselbare Speicherkarten oder Datenträger, verschiedene Arten von DVD-Vorrichtungen, eine Bandvorrichtung, eine Kassettenvorrichtung oder dergleichen. Die Ausführungsformen sind in diesem Kontext nicht beschränkt.
-
Bei verschiedenen Ausführungsformen kann die Datenverarbeitungsvorrichtung 705 einen oder mehrere E/A-Adapter 747 umfassen. Beispiele für E/A-Adapter 747 wären USB-Ports/-Adapter (Universal Serial Bus), Firewire-Ports/-Adapter gemäß IEEE 1374 und so weiter. Die Ausführungsformen sind in diesem Kontext nicht beschränkt.
-
Die ausführliche Offenbarung geht nun dazu über, Beispiele bereitzustellen, die weitere Ausführungsformen betreffen. Die nachfolgenden Beispiele 1 bis 27 sollen beispielhaft und nicht beschränkend sein.
-
In einem ersten Beispiel können Ausführungsformen Folgendes umfassen: einen Apparat, eine Vorrichtung, ein System, Mittel zum und so weiter mit Speicher zum Speichern von Anweisungen und mit dem Speicher gekoppelte Verarbeitungsschaltkreise, wobei die Verarbeitungsschaltkreise betreibbar sind, um die Anweisungen auszuführen, die, wenn sie ausgeführt werden, Verarbeitungsschaltkreise befähigen zum Detektieren einer ersten Funktion, die einem Adressenraum zugeordnet ist, die eine Aufrufanweisung an eine zweite Funktion in dem Adressenraum einleitet, wobei die erste Funktion die zweite Funktion in einem deprivilegierten Betriebsmodus aufrufen soll, Definieren zugänglicher Adressenbereiche für Segmente des Adressenraums für die zweite Funktion, wobei jedes Segment einen anderen Adressenbereich in dem Adressenraum aufweisen soll, worin der zweiten Funktion Zugriff im deprivilegierten Betriebsmodus gestattet wird, Wechseln zu dem Stapel, der dem zweiten Adressenraum und der zweiten Funktion zugeordnet ist, und Einleiten der Ausführung der zweiten Funktion im deprivilegierten Betriebsmodus.
-
In einem zweiten Beispiel und als Erweiterung des ersten Beispiels können Ausführungsformen Folgendes umfassen: einen Apparat, eine Vorrichtung, ein System, Mittel zum und so weiter mit Verarbeitungsschaltkreisen zum Detektieren des Abschlusses der Ausführung der zweiten Funktion, Zurückgeben der Kontrolle an die erste Funktion zur Ausführung einer nächsten Anweisung nach der Aufrufanweisung auf der Basis einer Rückkehradresse, Wechseln zu einem Stapel in dem Adressenraum, der der ersten Funktion zugeordnet ist, und Wechseln von dem deprivilegierten Betriebsmodus zu einem normalen Betriebsmodus.
-
In einem dritten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen einen Apparat, eine Vorrichtung, ein System, Mittel zum und so weiter mit Verarbeitungsschaltkreisen zum Bestimmen der Rückkehradresse zum Rückgeben der Kontrolle an die erste Funktion auf der Basis eines speziellen Werts, der auf einem der zweiten Funktion zugeordneten zweiten Stapel platziert wird, umfassen.
-
In einem vierten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen einen Apparat, eine Vorrichtung, ein System, Mittel zum und so weiter mit Verarbeitungsschaltkreisen umfassen zum Einleiten eines Programmfehler-Handlers zum Behandeln von Systemaufrufanweisungen, die durch die zweite Funktion im deprivilegierten Betriebsmodus eingeleitet werden, wobei die Systemaufrufanweisungen mindestens eine der Anweisungen SYSCALL, VMCALL, CALL FAR, JMP FAR, einer Ladesegmentregisteranweisung und einer Menge von Operationen zum Manipulieren von als privilegiert definierten Systemparametern umfassen.
-
In einem fünften Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen einen Apparat, eine Vorrichtung, ein System, Mittel zum und so weiter mit Verarbeitungsschaltkreisen umfassen zum Detektieren einer Aktivierung einer der Systemaufrufanweisungen durch die zweite Funktion, Bewirken eines Programmfehlers und Durchführen des Zurückgebens der Kontrolle an die erste Funktion zur Ausführung einer nächsten Anweisung nach der Aufrufanweisung und/oder Bewirken eines Programmfehlers durch einen Programmfehler-Handler.
-
In einem sechsten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen einen Apparat, eine Vorrichtung, ein System, Mittel zum und so weiter mit Verarbeitungsschaltkreisen umfassen zum Bestimmen eines Schutzschlüssels, der in einer aufgerufenen Adresse der zweiten Funktion definiert ist, um zu verhindern, dass die zweite Funktion ein Bit außerhalb eines zulässigen Teils des Adressenraums modifiziert und/oder außerhalb des zweiten Adressenraums der zweiten Funktion springt.
-
In einem siebten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen einen Apparat, eine Vorrichtung, ein System, Mittel zum und so weiter mit Verarbeitungsschaltkreisen umfassen zum Aufrufen eines Taktzählers zum Zählen eines Werts in Richtung eines Zeitgrenzenwerts im deprivilegierten Betriebsmodus und Bewirken eines Programmfehlers, wenn der Wert gleich dem Zeitgrenzenwert ist.
-
In einem achten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen einen Apparat, eine Vorrichtung, ein System, Mittel zum und so weiter mit Verarbeitungsschaltkreisen umfassen zum Benutzen von Segmentregistern zum Speichern von Basisadressenwerten für die Segmente, wobei jeder Basisadressenwert eine untere Grenze eines zugänglichen Bereichs eines Segments ist.
-
In einem neunten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen einen Apparat, eine Vorrichtung, ein System, Mittel zum und so weiter mit Verarbeitungsschaltkreisen umfassen zum Speichern eines ersten Basisadressenwerts in einem erweiterten Segment- bzw. ES-Register zum Setzen einer unteren Grenze eines Zugangsbereichs des Datensegments, Speichern eines zweiten Basisadressenwerts in einem FS-Register zum Setzen einer zweiten unteren Grenze eines zweiten Adressenbereichs des Codesegments und Speichern eines dritten Basisadressenwerts in einem GS-Register zum Setzen einer dritten unteren Grenze einer dritten Adresse des Stapelsegments.
-
In einem zehnten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen einen Apparat, eine Vorrichtung, ein System und so weiter mit Verarbeitungsschaltkreisen umfassen für eine Netzwerkschnittstelle, die mit dem Speicher und den Verarbeitungsschaltkreisen gekoppelt ist, wobei die Netzwerkschnittstelle Informationen übermitteln, z.B. FaaS-Funktionalität bereitstellen soll.
-
In einem elften Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen ein computerimplementiertes Verfahren umfassen, das Folgendes umfasst: Detektieren des Abschlusses der Ausführung der zweiten Funktion, Zurückgeben der Kontrolle an die erste Funktion zur Ausführung einer nächsten Anweisung nach der Aufrufanweisung auf der Basis einer Rückkehradresse, Wechseln zu einem Stapel in dem Adressenraum, der der ersten Funktion zugeordnet ist, und Wechseln von dem deprivilegierten Betriebsmodus zu einem normalen Betriebsmodus.
-
In einem zwölften Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen ein computerimplementiertes Verfahren umfassen, das Folgendes umfasst: Bestimmen der Rückkehradresse zum Zurückgeben der Kontrolle an die erste Funktion auf der Basis eines speziellen Werts, der auf einem der zweiten Funktion zugeordneten zweiten Stapel platziert wird.
-
In einem dreizehnten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen ein computerimplementiertes Verfahren umfassen, das Folgendes umfasst: Einleiten eines Programmfehler-Handlers zum Behandeln von Systemaufrufanweisungen, die durch die zweite Funktion im deprivilegierten Betriebsmodus eingeleitet werden, wobei die Systemaufrufanweisungen mindestens einer der Anweisungen SYSCALL, VMCALL, CALL FAR, JMP FAR, einer Ladesegmentregisteranweisung und einer Menge von Operationen zum Manipulieren von als privilegiert definierten Systemparametern umfassen.
-
In einem vierzehnten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen ein computerimplementiertes Verfahren umfassen, das Folgendes umfasst: Detektieren einer Aktivierung einer der Systemaufrufanweisungen durch die zweite Funktion; Bewirken eines Programmfehlers und Ausführen von Zurückgeben der Kontrolle an die erste Funktion zur Ausführung einer nächsten Anweisung nach der Aufrufanweisung und/oder Bewirken eines Programmfehlers durch einen Programmfehler-Handler.
-
In einem fünfzehnten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen ein computerimplementiertes Verfahren umfassen, das Folgendes umfasst: Bestimmen eines in einer aufgerufenen Adresse der zweiten Funktion definierten Schutzschlüssels, um zu verhindern, dass die zweite Funktion ein Bit außerhalb eines zulässigen Teils des Adressenraums modifiziert und/oder außerhalb des zweiten Adressenraums der zweiten Funktion springt.
-
In einem sechzehnten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen ein computerimplementiertes Verfahren umfassen, das Folgendes umfasst: Aktivieren eines Taktzählers zum Zählen eines Werts in Richtung eines Zeitgrenzenwerts im deprivilegierten Betriebsmodus und Bewirken eines Programmfehlers, wenn der Wert gleich dem Zeitgrenzenwert ist.
-
In einem siebzehnten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen ein computerimplementiertes Verfahren umfassen, das Folgendes umfasst: Benutzen von Segmentregistern zum Speichern von Basisadressenwerten für die Segmente, wobei jeder Basisadressenwert eine untere Grenze eines zugänglichen Bereichs eines Segments ist.
-
In einem achtzehnten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen ein computerimplementiertes Verfahren umfassen, das Folgendes umfasst: Speichern eines ersten Basisadressenwerts in einem erweiterten Segment- bzw. ES-Register zum Setzen einer unteren Grenze eines Zugangsbereichs eines Datensegments, Speichern eines zweiten Basisadressenwerts in einem FS-Register zum Setzen einer zweiten unteren Grenze eines zweiten Adressenbereichs eines Codesegments und Speichern eines dritten Basisadressenwerts in einem GS-Register zum Setzen einer dritten unteren Grenze einer dritten Adresse eines Stapelsegments.
-
In einem neunzehnten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen ein nichttransitorisches computerlesbares Speicherungsmedium umfassen, das mehrere Anweisungen umfasst, die, wenn sie ausgeführt werden, Verarbeitungsschaltkreise befähigen zum Detektieren einer ersten Funktion, die einem Adressenraum zugeordnet ist, die eine Aufrufanweisung an eine zweite Funktion in dem Adressenraum einleitet, wobei die erste Funktion die zweite Funktion in einem deprivilegierten Betriebsmodus aufrufen soll, Definieren von zugänglichen Adressenbereichen für Segmente des Adressenraums für die zweite Funktion, wobei jedes Segment einen anderen Adressenbereich in dem Adressenraum aufweisen soll, worin der zweiten Funktion gestattet ist, im deprivilegierten Betriebsmodus zuzugreifen, Wechseln zu dem Stapel, der dem zweiten Adressenraum und der zweiten Funktion zugeordnet ist, und Einleiten der Ausführung der zweiten Funktion in dem deprivilegierten Betriebsmodus.
-
In einem zwanzigsten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen ein nichttransitorisches computerlesbares Speicherungsmedium umfassen, das mehrere Anweisungen umfasst, die, wenn sie ausgeführt werden, Verarbeitungsschaltkreise befähigen zum Detektieren des Abschlusses der Ausführung der zweiten Funktion, Zurückgeben der Kontrolle an die erste Funktion zur Ausführung einer nächsten Anweisung nach der Aufrufanweisung auf der Basis einer Rückkehradresse, Wechseln zu einem Stapel in dem Adressenraum, der der ersten Funktion zugeordnet ist, und Wechseln von dem deprivilegierten Betriebsmodus zu einem normalen Betriebsmodus.
-
In einem einundzwanzigsten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen ein nichttransitorisches computerlesbares Speicherungsmedium umfassen, das mehrere Anweisungen umfasst, die, wenn sie ausgeführt werden, Verarbeitungsschaltkreise befähigen zum Bestimmen der Rückkehradresse zum Zurückgeben der Kontrolle an die erste Funktion auf der Basis eines speziellen Werts, der auf einem der zweiten Funktion zugeordneten zweiten Stapel platziert wird.
-
In einem zweiundzwanzigsten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen ein nichttransitorisches computerlesbares Speicherungsmedium umfassen, das mehrere Anweisungen umfasst, die, wenn sie ausgeführt werden, Verarbeitungsschaltkreise befähigen zum Bestimmen eines in einer aufgerufenen Adresse der zweiten Funktion definierten Schutzschlüssels, um zu verhindern, dass die zweite Funktion ein Bit außerhalb eines zulässigen Teils des Adressenraums modifiziert und/oder außerhalb des zweiten Adressenraums der zweiten Funktion springt.
-
In einem dreiundzwanzigsten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen ein nichttransitorisches computerlesbares Speicherungsmedium umfassen, das mehrere Anweisungen umfasst, die, wenn sie ausgeführt werden, Verarbeitungsschaltkreise befähigen zum Aktivieren eines Taktzählers zum Zählen eines Werts in Richtung eines Zeitgrenzenwerts im deprivilegierten Betriebsmodus und Bewirken eines Programmfehlers, wenn der Wert gleich dem Zeitgrenzenwert ist.
-
In einem vierundzwanzigsten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen ein nichttransitorisches computerlesbares Speicherungsmedium umfassen, das mehrere Anweisungen umfasst, die, wenn sie ausgeführt werden, Verarbeitungsschaltkreise befähigen zum Benutzen von Segmentregistern zum Speichern von Basisadressenwerten für die Segmente, wobei jeder Basisadressenwert eine untere Grenze eines zugänglichen Bereichs eines Segments ist.
-
In einem fünfundzwanzigsten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen ein nichttransitorisches computerlesbares Speicherungsmedium umfassen, das mehrere Anweisungen umfasst, die, wenn sie ausgeführt werden, Verarbeitungsschaltkreise befähigen zum Speichern eines ersten Basisadressenwerts in einem erweiterten Segment- bzw. ES-Register zum Setzen einer unteren Grenze eines Zugangsbereichs eines Datensegments, Speichern eines zweiten Basisadressenwerts in einem FS-Register zum Setzen einer zweiten unteren Grenze eines zweiten Adressenbereichs eines Codesegments und Speichern eines dritten Basisadressenwerts in einem GS-Register zum Setzen einer dritten unteren Grenze einer dritten Adresse eines Stapelsegments.
-
In einem sechsundzwanzigsten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen ein nichttransitorisches computerlesbares Speicherungsmedium umfassen, das mehrere Anweisungen umfasst, die, wenn sie ausgeführt werden, Verarbeitungsschaltkreise befähigen zum Einleiten eines Programmfehler-Handlers zum Behandeln von Systemaufrufanweisungen, die durch die zweite Funktion im deprivilegierten Betriebsmodus eingeleitet werden, wobei die Systemaufrufanweisungen mindestens eine der Anweisungen SYSCALL, VMCALL, CALL FAR, JMP FAR, einer Ladesegmentregisteranweisung und einer Menge von Operationen zum Manipulieren von als privilegiert definierten Systemparametern umfassen.
-
In einem siebenundzwanzigsten Beispiel und als Erweiterung beliebiger der vorherigen Beispiele können Ausführungsformen ein nichttransitorisches computerlesbares Speicherungsmedium umfassen, das mehrere Anweisungen umfasst, die, wenn sie ausgeführt werden, Verarbeitungsschaltkreise befähigen zum Detektieren einer Aktivierung einer der Systemaufrufanweisungen durch die zweite Funktion; Bewirken eines Programmfehlers und Ausführen von Zurückgeben der Kontrolle an die erste Funktion zur Ausführung einer nächsten Anweisung nach der Aufrufanweisung und/oder Bewirken eines Programmfehlers durch einen Programmfehler-Handler.
-
In einem achtundzwanzigsten Beispiel und als Erweiterung beliebiger vorheriger Beispiele können Ausführungsformen Verarbeitungsschaltkreise umfassen zum Konstruieren einer Tabelle, die Einträge umfasst, wobei jeder Eintrag einen Quellencodesegment- bzw. Quellen-CS-Selektor auf einem Ziel-CS-Selektor abbildet, um zu spezifizieren, dass die dem Quellen-CS-Selektor zugeordnete erste Funktion autorisiert ist, die Eigentümerschaft eines oder mehrerer Datensegmente an die dem Ziel-CS-Selektor zugeordnete zweite Funktion zu transferieren.
-
Einige Ausführungsformen können unter Verwendung des Ausdrucks „einer Ausführungsform“ oder „eine Ausführungsform“, zusammen mit ihren Ableitungen, beschrieben werden. Diese Ausdrücke bedeuten, dass ein Merkmal, eine Struktur oder ein Charakteristikum, das bzw. die in Verbindung mit der Ausführungsform beschrieben wird, in mindestens einer Ausführungsform enthalten ist. Das Erscheinen der Phrase „bei einer Ausführungsform“ an verschiedenen Stellen in der Patentschrift bezieht sich nicht unbedingt immer auf dieselbe Ausführungsform. Ferner können einige Ausführungsformen unter Verwendung des Ausdrucks „gekoppelt“ und „verbunden“, zusammen mit ihren Ableitungen, beschrieben werden. Diese Ausdrücke sind nicht unbedingt als einander synonym gedacht. Zum Beispiel können einige Ausführungsformen unter Verwendung der Ausdrücke „verbunden“ und/oder „gekoppelt“ beschrieben werden, um anzugeben, dass sich zwei oder mehr Elemente in direktem physischen oder elektrischen Kontakt miteinander befinden. Der Ausdruck „gekoppelt“ kann jedoch auch bedeuten, dass sich zwei oder mehr Elemente nicht in direktem Kontakt miteinander befinden, aber dennoch miteinander kooperieren oder interagieren.
-
Es wird betont, dass die Zusammenfassung der Offenbarung bereitgestellt wird, um es einem Leser zu erlauben, schnell die Beschaffenheit der technischen Offenbarung zu bestimmen. Sie wird mit dem Verständnis eingereicht, dass sie nicht zur Deutung oder Beschränkung des Schutzumfangs oder der Bedeutung der Ansprüche verwendet wird. Außerdem ist in der obigen ausführlichen Beschreibung ersichtlich, dass verschiedene Merkmale zur Straffung der Offenbarung zu einer einzigen Ausführungsform gruppiert sind. Dieses Offenbarungsverfahren ist nicht als Absicht widerspiegelnd zu deuten, dass die beanspruchten Ausführungsformen mehr Merkmale erfordern, als ausdrücklich in jedem Anspruch angeführt sind. Wie die folgenden Ansprüche widerspiegeln, ist stattdessen erfindungsgemäßer Gegenstand in weniger als allen Merkmalen einer einzigen offenbarten Ausführungsform begründet. Die folgenden Ansprüche werden dementsprechend hiermit in die ausführliche Beschreibung aufgenommen, wobei jeder Anspruch für sich als getrennte Ausführungsform steht. In den angefügten Ansprüchen werden die Ausdrücke „einschließlich“ und „in dem“ als umgangssprachliche Äquivalente der jeweiligen Ausdrücke „umfassend“ bzw. „wobei“ gebraucht. Außerdem werden die Ausdrücke „erstes“, „zweites“, „drittes“ und so weiter lediglich als Bezeichnungen verwendet und sollen ihren Objekten keinerlei numerische Anforderungen auferlegen.
-
Das oben Beschriebene umfasst Beispiele für die offenbarte Architektur. Es ist natürlich nicht möglich, jede denkbare Kombination von Komponenten und/oder Methodologien zu beschreiben, aber für Durchschnittsfachleute ist erkennbar, dass viele weitere Kombinationen und Permutationen möglich sind. Dementsprechend soll die neuartige Architektur alle solchen Abänderungen, Modifikationen und Varianten abdecken, die in den Gedanken und Schutzumfang der angefügten Ansprüche fallen.