DE102013022405B3 - Schutz globaler Register in einem Multithreaded-Prozessor - Google Patents

Schutz globaler Register in einem Multithreaded-Prozessor Download PDF

Info

Publication number
DE102013022405B3
DE102013022405B3 DE102013022405.5A DE102013022405A DE102013022405B3 DE 102013022405 B3 DE102013022405 B3 DE 102013022405B3 DE 102013022405 A DE102013022405 A DE 102013022405A DE 102013022405 B3 DE102013022405 B3 DE 102013022405B3
Authority
DE
Germany
Prior art keywords
global
thread
global resource
resource
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE102013022405.5A
Other languages
English (en)
Inventor
Guixin WANG
Hugh Jackson
Robert Graham Isherwood
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
MIPS Tech LLC
Original Assignee
MIPS Tech LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by MIPS Tech LLC filed Critical MIPS Tech LLC
Application granted granted Critical
Publication of DE102013022405B3 publication Critical patent/DE102013022405B3/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/468Specific access rights for resources, e.g. using capability register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Es wird der Schutz globaler Register in einem Multithreaded-Prozessor beschrieben. In einer Ausführungsform werden globale Ressourcen innerhalb eines Multithreaded-Prozessors geschützt, indem Überprüfungen ausgeführt werden, bevor einem Thread erlaubt wird, in eine globale Ressource zu schreiben, um zu bestimmen, ob der Thread Schreibzugriff auf die betreffende globale Ressource hat. Die Überprüfung beinhaltet ein Zugreifen auf ein oder mehrere lokale Steuerregister oder ein globales Steuerfeld innerhalb des Multithreaded-Prozessors, und in einem Beispiel wird auf ein lokales Register, das jedem anderen Thread im Multithreaded-Prozessor zugeordnet ist, zugegriffen und überprüft, ob es einen Identifikator für die betreffende globale Ressource enthält. Nur wenn keine der zugegriffenen lokalen Ressourcen einen solchen Identifikator enthält, wird die Instruktion ausgegeben und dem Thread erlaubt, in die globale Ressource zu schreiben. Anderenfalls wird die Instruktion gesperrt, und es kann eine Ausnahme ausgelöst werden, um das Programm, das die Instruktion ausgegeben hat, zu alarmieren, dass der Schreibvorgang fehlgeschlagen ist.Bei Veröffentlichung istder beiliegenden Zeichnungen beizufügen.

Description

  • Hintergrund
  • Multithreaded-Prozessoren umfassen in der Regel lokale und globale Allzweckregister. Die lokalen Register sind dem jeweiligen Hardware-Thread vorbehalten, und nur der Hardware-Thread selbst kann darauf zugreifen, während globale Register von verschiedenen Hardware-Threads gemeinsam genutzt werden. In einem Beispiel kann ein Multithreaded-Prozessor ein Vier-Thread-Prozessor sein, und diese vier Threads können alle in der Lage sein, auf einen Satz globaler Register zuzugreifen. Diese globalen Register können von verschiedenen Threads für verschiedene Zwecke verwendet werden, und die Zuweisung globaler Register für diese verschiedenen Zwecke wird in der Regel von einem Compiler ausgeführt.
  • Aus dem Handbuch Tricore 1, 32-bit Unified Processor Core Volume 1, Core Architecture V1.3&V1.3.1 Architecture, V1.3.8, Januar 2008 ist ein Verfahren zum Verwalten globaler Ressourcen innerhalb eines Multithreaded-Prozessors bekannt, wobei der Schreibengriff auf globale Register erlaubt oder versagt werden kann.
  • In dem Artikel von Kluge, F. et al: Use of Helper Threads for OS Support in the Multithreaded Embedded TriCore 2 Prozessor (Proc. Work-in Progress-Session of the 13th IEEE Real-time and Embedded Technology and Applications Symposium, Bellevue, USA, 2007 Seiten 25-27 wird eine Architektur mit mehreren Hardware-Threads diskutiert.
  • Die unten beschriebenen Ausführungsformen sind nicht auf Implementierungen beschränkt, die einige oder alle der Nachteile bekannter Multithreaded-Prozessoren beseitigen.
  • Kurzfassung
  • Diese Kurzdarstellung dient dazu, eine Auswahl von Konzepten, die weiter unten in der detaillierten Beschreibung eingehender beschrieben werden, in einer vereinfachten Form vorzustellen. Diese Kurzdarstellung ist weder dafür gedacht, Hauptmerkmale oder wesentliche Merkmale des beanspruchten Gegenstandes herauszuarbeiten, noch ist sie dafür gedacht, als eine Hilfe bei der Feststellung des Schutzumfangs des beanspruchten Gegenstandes verwendet zu werden.
  • Vor diesem Hintergrund kann die zu lösende Aufgabe darin gesehen werden, die Verwaltung des Zugriffs auf globale von mehreren Threads gemeinsam genutzte Ressourcen zu verbessern.
  • Diese Aufgabe wird durch das Verfahren gemäß Anspruch 1 sowie den Prozzesor gemäß Anspruch 8 gelöst.
  • Es wird ein Schutz globaler Register in einem Multithreaded - Prozessor beschrieben. In einer Ausführungsform werden globale Ressourcen innerhalb eines Multithreaded-Prozessors geschützt, indem, bevor einem Thread erlaubt wird, in eine globale Ressource zu schreiben, Überprüfungen ausgeführt werden, um zu bestimmen, ob der Thread einen Schreibzugriff auf die betreffende globale Ressource hat. Die Überprüfung beinhaltet das Zugreifen auf ein oder mehrere lokale Steuerregister oder ein globales Steuerfeld innerhalb des Multithreaded-Prozessors, und in einem Beispiel wird auf ein lokales Register, das jedem anderen Thread im Multithreaded-Prozessor zugeordnet ist, zugegriffen und überprüft, ob es einen Identifikator für die betreffende globale Ressource enthält. Nur falls keine der zugegriffenen lokalen Ressourcen einen solchen Identifikator enthält, wird die Instruktion ausgegeben und dem Thread erlaubt, in die globale Ressource zu schreiben. Anderenfalls wird die Instruktion gesperrt, und es kann eine Ausnahme ausgelöst werden, um das Programm, das die Instruktion ausgegeben hat, zu alarmieren, dass der Schreibvorgang fehlgeschlagen ist.
  • Ein erster Aspekt stellt ein Verfahren zum Verwalten globaler Ressourcen innerhalb eines Multithreaded-Prozessors bereit, wobei der Multithreaded-Prozessor mehrere Threads umfasst, und das Verfahren umfasst: Empfangen einer Instruktion aus einem Thread, in eine globale Ressource zu schreiben; Überprüfen, unter Verwendung von Hardware-Logik, eines oder mehrerer Register im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat; und in Reaktion auf das Bestimmen, dass der Thread Schreibzugriff auf die globale Ressource hat, Erlauben der Ausgabe der Instruktion.
  • Das Verfahren kann ferner umfassen: in Reaktion auf das Bestimmen, dass der Thread keinen Schreibzugriff auf die globale Ressource hat, Verhindern der Ausgabe der Instruktion und Auslösen einer Ausnahme.
  • Das Überprüfen eines oder mehrerer Register im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat, kann umfassen: Überprüfen eines oder mehrerer lokaler Steuerregister im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat, wobei jedes lokale Steuerregister einem der mehreren Threads zugeordnet ist.
  • Das Überprüfen eines oder mehrerer lokaler Steuerregister im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat, kann umfassen: Zugreifen auf ein lokales Steuerregister, das jedem anderen Thread im Multithreaded-Prozessor zugeordnet ist; und Bestimmen, ob eines der zugegriffenen lokalen Steuerregister die globale Ressource identifiziert, wobei, falls keines der zugegriffenen lokalen Steuerregister die globale Ressource identifiziert, der Thread Schreibzugriff auf die globale Ressource hat.
  • Das Überprüfen eines oder mehrerer lokaler Steuerregister im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat, kann umfassen: Zugreifen auf ein lokales Steuerregister, das dem Thread zugeordnet ist; und Bestimmen, ob das zugegriffene lokale Steuerregister die globale Ressource identifiziert, wobei, falls das zugegriffene lokale Steuerregister die globale Ressource identifiziert, der Thread Schreibzugriff auf die globale Ressource hat.
  • Das Verfahren kann ferner umfassen: Empfangen einer Instruktion aus einem Thread, Daten, die eine globale Ressource identifizieren, in ein lokales Steuerregister zu schreiben, das dem Thread zugeordnet ist; Zugreifen auf ein lokales Steuerregister, das jedem anderen Thread im Multithreaded-Prozessor zugeordnet ist; Bestimmen, ob eines der zugegriffenen lokalen Steuerregister Daten umfasst, die die globale Ressource identifizieren; und in Reaktion auf das Bestimmen, dass keines der zugegriffenen lokalen Steuerregister Daten umfasst, die die globale Ressource identifizieren, Erlauben der Ausgabe der Instruktion.
  • Das Verfahren kann ferner umfassen: in Reaktion auf das Bestimmen, dass eines der zugegriffenen lokalen Steuerregister Daten umfasst, die die globale Ressource identifizieren, Verhindern der Ausgabe der Instruktion und Auslösen einer Ausnahme.
  • Das Überprüfen eines oder mehrerer Register im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat, kann umfassen: Überprüfen eines globalen Steuerfeldes in einem globalen Register im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat, wobei das globale Steuerfeld der globalen Ressource zugeordnet ist.
  • Das Verfahren kann ferner umfassen: Empfangen einer Instruktion aus einem Thread, aus einer globalen Ressource zu lesen; Überprüfen eines oder mehrerer Register im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Lesezugriff auf die globale Ressource hat; und in Reaktion auf das Bestimmen, dass der Thread Lesezugriff auf die globale Ressource hat, Erlauben der Ausgabe der Instruktion.
  • Das Verfahren kann ferner umfassen: in Reaktion auf das Bestimmen, dass der Thread keinen Lesezugriff auf die globale Ressource hat, Verhindern der Ausgabe der Instruktion und Auslösen einer Ausnahme.
  • Das Überprüfen eines oder mehrerer Register im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Lesezugriff auf die globale Ressource hat, kann umfassen: Überprüfen eines oder mehrerer lokaler Steuerregister im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Lesezugriff auf die globale Ressource hat, wobei jedes lokale Steuerregister einem der mehreren Threads zugeordnet ist.
  • Das Überprüfen eines oder mehrerer lokaler Steuerregister im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Lesezugriff auf die globale Ressource hat, kann umfassen: Zugreifen auf ein lokales Steuerregister, das jedem anderen Thread im Multithreaded-Prozessor zugeordnet ist; und Bestimmen, ob eines der zugegriffenen lokalen Steuerregister die globale Ressource identifiziert, wobei, falls keines der zugegriffenen lokalen Steuerregister die globale Ressource identifiziert, der Thread Lesezugriff auf die globale Ressource hat.
  • Das Überprüfen eines oder mehrerer Register im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Lesezugriff auf die globale Ressource hat, kann umfassen: Überprüfen eines globalen Steuerfeldes, das der globalen Ressource im Multithreaded-Prozessor zugeordnet ist, um zu bestimmen, ob der Thread Lesezugriff auf die globale Ressource hat.
  • Die Instruktion aus einem Thread, in eine globale Ressource zu schreiben, kann eine Instruktion aus einem Thread umfassen, einen alternativen Stapelzeiger in eine globale Ressource zu schreiben.
  • Die globale Ressource kann ein globales Register umfassen.
  • Ein zweiter Aspekt stellt einen Multithreaded-Prozessor bereit, der umfasst: mehrere Threads; wenigstens eine globale Ressource; und Hardware-Logik, die ausgelegt ist zum: Empfangen einer Instruktion aus einem der mehreren Threads, in eine globale Ressource zu schreiben; Überprüfen eines oder mehrerer Register im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat; und in Reaktion auf das Bestimmen, dass der Thread Schreibzugriff auf die globale Ressource hat, Erlauben der Ausgabe der Instruktion.
  • Die Hardware-Logik kann ferner dafür ausgelegt sein, in Reaktion auf das Bestimmen, dass der Thread keinen Schreibzugriff auf die globale Ressource hat, das Ausgeben der Instruktion zu verhindern und eine Ausnahme auszulösen.
  • Der Multithreaded-Prozessor kann ferner mehrere lokale Steuerregister umfassen, wobei jedes lokale Steuerregister einem der mehreren Threads zugeordnet ist, und wobei die Hardware-Logik dafür ausgelegt ist, durch Überprüfen eines oder mehrerer der lokalen Steuerregister zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat.
  • Die Hardware-Logik kann dafür ausgelegt sein, eines oder mehrere der lokalen Steuerregister zu überprüfen, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat, durch: Zugreifen auf das lokale Steuerregister, das jedem anderen Thread in den mehreren Threads zugeordnet ist; und Bestimmen, ob eines der zugegriffenen lokalen Steuerregister die globale Ressource identifiziert, wobei, wenn keines der zugegriffenen lokalen Steuerregister die globale Ressource identifiziert, der Thread Schreibzugriff auf die globale Ressource hat.
  • Die Hardware-Logik kann dafür ausgelegt sein, eines oder mehrere der lokalen Steuerregister zu überprüfen, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat, durch: Zugreifen auf das lokale Steuerregister, das dem Thread zugeordnet ist; und Bestimmen, ob das zugegriffene lokale Steuerregister die globale Ressource identifiziert, wobei, falls das zugegriffene lokale Steuerregister die globale Ressource identifiziert, der Thread Schreibzugriff auf die globale Ressource hat.
  • Die Hardware-Logik kann ferner ausgelegt sein zum: Empfangen einer Instruktion aus einem Thread, Daten, die eine globale Ressource identifizieren, in das lokale Steuerregister zu schreiben, das dem Thread zugeordnet ist; Zugreifen auf das lokale Steuerregister, das jedem anderen Thread in den mehreren Threads zugeordnet ist; Bestimmen, ob eines der zugegriffenen lokalen Steuerregister Daten umfasst, die die globale Ressource identifizieren; und in Reaktion auf das Bestimmen, dass keines der zugegriffenen lokalen Steuerregister Daten umfasst, die die globale Ressource identifizieren, Erlauben der Ausgabe der Instruktion.
  • Die Hardware-Logik kann ferner ausgelegt sein zum: Empfangen einer Instruktion von einem Thread, aus einer globalen Ressource zu lesen; Überprüfen eines oder mehrerer der lokalen Steuerregister, um zu bestimmen, ob der Thread Lesezugriff auf die globale Ressource hat; und in Reaktion auf das Bestimmen, dass der Thread Lesezugriff auf die globale Ressource hat, Erlauben der Ausgabe der Instruktion.
  • Die Hardware-Logik kann dafür ausgelegt sein, eines oder mehrere der lokalen Steuerregister zu überprüfen, um zu bestimmen, ob der Thread Lesezugriff auf die globale Ressource hat, durch: Zugreifen auf das lokale Steuerregister, das jedem anderen Thread in den mehreren Threads zugeordnet ist; und Bestimmen, ob eines der zugegriffenen lokalen Steuerregister die globale Ressource identifiziert, wobei, falls keines der zugegriffenen lokalen Steuerregister die globale Ressource identifiziert, der Thread Lesezugriff auf die globale Ressource hat.
  • Jedes lokale Steuerregister kann dafür ausgelegt sein, Daten zu speichern, die eine oder mehrere globale Ressourcen im Multithreaded-Prozessor identifizieren.
  • Jedes lokale Steuerregister kann ein oder mehrere Steuerfelder umfassen, und jedes Steuerfeld ist dafür ausgelegt, Daten zu speichern, die eine oder mehrere globale Ressourcen im Multithreaded-Prozessor identifizieren.
  • Jedes Steuerfeld kann einer zuvor festgelegten Aufgabe zugeordnet sein.
  • Der Multithreaded-Prozessor kann ferner mehrere Gruppen von lokalen Registern umfassen, wobei jede Gruppe von lokalen Registern einem der mehreren Threads zugeordnet ist, und wobei ein lokales Steuerregister, das einem Thread zugeordnet ist, innerhalb der Gruppe von lokalen Registern, die diesem Thread zugeordnet ist, gespeichert wird.
  • Der Multithreaded-Prozessor kann ferner ein globales Register umfassen, das mehrere globale Steuerfelder umfasst, wobei jede globale Ressource ein zugeordnetes globales Steuerfeld aufweist, und wobei die Hardware-Logik dafür ausgelegt ist zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat, indem sie das globale Steuerfeld im globalen Register überprüft, das der globalen Ressource zugeordnet ist.
  • Die Instruktion aus einem Thread, in eine globale Ressource zu schreiben, kann eine Instruktion aus einem Thread umfassen, einen alternativen Stapelzeiger in eine globale Ressource zu schreiben.
  • Die globale Ressource kann ein globales Register umfassen.
  • Der Multithreaded-Prozessor kann ferner eine Decodierstufe umfassen, und wobei die Hardware-Logik einen Teil der Decodierstufe bildet.
  • Ein dritter Aspekt stellt einen Multithreaded-Prozessor bereit, wie er im Wesentlichen mit Bezug auf eine der 1 und 4 der Zeichnungen beschrieben ist.
  • Ein vierter Aspekt stellt ein Verfahren zum Verwalten globaler Ressourcen innerhalb eines Multithreaded-Prozessors bereit, wie es im Wesentlichen mit Bezug auf eine der 2, 3 und 5 der Zeichnungen beschrieben ist.
  • Die hier beschriebenen Verfahren können durch Software in maschinenlesbarer Form auf einem berührbaren Speichermedium ausgeführt werden, zum Beispiel in Form eines Computerprogramms, das ein Computerprogrammcodemittel umfasst, das dafür ausgelegt ist, alle Schritte eines der im vorliegenden Text beschriebenen Verfahren auszuführen, wenn das Programm auf einem Computer laufen gelassen wird, und wobei das Computerprogramm auf einem computerlesbaren Medium verkörpert sein kann. Beispiele von berührbaren (oder nicht-transitorischen) Speichermedien umfassen Disks, USB-Sticks, Speicherkarten usw., jedoch keine propagierten Signale. Die Software kann zur Ausführung auf einem parallelen Prozessor oder einem seriellen Prozessor geeignet sein, so dass die Verfahrensschritte in jeder geeigneten Reihenfolge oder gleichzeitig ausgeführt werden können.
  • Damit wird anerkannt, dass Firmware und Software wertvolle, separat marktfähige Handelsgüter sein können. Darunter soll auch Software fallen, die auf „unintelligenter“ oder Standard-Hardware läuft oder diese steuert, um die gewünschten Funktionen auszuführen. Darunter soll ebenso Software fallen, die die Konfiguration von Hardware „beschreibt“ oder definiert, wie zum Beispiel HDL (Hardware Description Language)-Software, wie sie zum Entwerfen von Siliziumchips oder zum Konfigurieren programmierbarer Universalchips verwendet wird, um gewünschte Funktionen auszuführen.
  • Die bevorzugten Merkmale können nach Bedarf kombiniert werden, wie dem Fachmann einleuchtet, und können mit jedem der Aspekte der Erfindung kombiniert werden.
  • Figurenliste
  • Es werden Ausführungsformen der Erfindung - beispielhaft und mit Bezug auf die folgenden Zeichnungen - beschrieben, in denen:
    • 1 ein Schaubild eines Multithreaded-Prozessors zeigt;
    • 2 drei beispielhafte Flussdiagramme von Arbeitsverfahren eines Multithreaded-Prozessors zeigt;
    • 3 zwei beispielhafte Flussdiagramme eines Verfahrensschrittes aus 2 in größerer Detailliertheit zeigt;
    • 4 ein weiteres Schaubild eines Multithreaded-Prozessors zeigt; und
    • 5 zwei weitere Beispiele von Verfahrensschritten aus 2 in größerer Detailliertheit zeigt.
  • In allen Figuren werden gemeinsame Bezugszahlen zum Bezeichnen ähnlicher Merkmale verwendet.
  • Detaillierte Beschreibung
  • Im Folgenden werden Ausführungsformen der vorliegenden Erfindung lediglich beispielhaft beschrieben. Diese Beispiele repräsentieren die besten Wege zum Praktizieren der Erfindung, die dem Anmelder derzeit bekannt sind, auch wenn sie nicht die einzigen Wege sind, auf denen dies erreicht werden kann. Die Beschreibung legt die Funktionen des Beispiels und die Abfolge von Schritten zum Realisieren und Ausführen des Beispiels dar. Jedoch können die gleichen oder gleichwertige Funktionen und Abfolgen auch durch andere Beispiele erreicht werden
  • 1 zeigt ein Schaubild eines Multithreaded-Prozessors 100, der eine Anzahl von Gruppen von lokalen Registern 101-104 umfasst, wobei jede Gruppe von lokalen Registern (die zum Beispiel 4 oder 8 lokale Register umfassen können) einem der Threads 105-108 zugeordnet ist. Der Multithreaded-Prozessor 100 umfasst ferner eine Anzahl von globalen Registern 110 (zum Beispiel 8 oder 16 globale Register). Der Begriff „globales Register“ meint im vorliegenden Text ein Register in einem Pool aus Registern, die von jedem der Threads und von jedem Teil von Code im System, in dem sich der Prozessor 100 befindet, verwendet werden können. Diese globalen Register sind ein Beispiel einer globalen Ressource innerhalb des Prozessors (wobei eine „globale Ressource“ jede Ressource ist, die von Threads gemeinsam genutzt wird), und globale Register können von einem Thread (zum Beispiel als ein zusätzliches lokales Register) für einen bestimmten Zweck verwendet werden, wie zum Beispiel, um einen alternativen Stapelzeiger oder Kernzustand des Betriebssystems zu speichern.
  • Da alle Threads auf die globalen Ressourcen zugreifen können, können verschiedene Threads ohne Hardware-Einschränkung auf dasselbe globale Register zugreifen und es beschreiben. Wenn ein Thread eine bestimmte globale Ressource für einen bestimmten Zweck verwendet, kann jede Modifikation oder Beschädigung der in der globalen Ressource gespeicherten Daten durch einen anderen Thread zu einer Fehlfunktion des Prozessors oder des Systems führen. In einem Beispiel kann ein globales Register von dem Kern (zum Beispiel einem Linux-Kern) verwendet werden, um einen alternativen Stapelzeiger (zum Beispiel einen separat zugeteilten Interrupt-Stapelzeiger) zu speichern, der von einem Interrupt-Handler verwendet werden soll. Falls dieses globale Register von einem anderen Thread modifiziert oder aktualisiert wird, so verliert der Interrupt-Handler den beabsichtigten Zugriff auf seinen Stapel und funktioniert nicht korrekt.
  • Die folgende Beschreibung beschreibt Verfahren und Hardware zum Schützen globaler Ressourcen, wie zum Beispiel globaler Register, so dass sie nur von einem bestimmten Thread beschrieben werden können, der momentan die Kontrolle über die Ressource hat. In einigen Beispielen kann auch ein Leseschutz implementiert werden, was ebenfalls weiter unten beschrieben wird. Der Vorgang des Schützens einer Ressource, sei es ein Schutz vor einem Schreibzugriff oder ein Schutz sowohl vor einem Lese- als auch vor einem Schreibzugriff durch andere Threads, kann so beschrieben werden, dass ein Thread die Kontrolle über die betreffende Ressource übernimmt. Die unten beschriebenen Verfahren ermöglichen es einem Thread, die Kontrolle über eine globale Ressource in einer solchen Weise zu übernehmen, dass die Ressource praktisch zu einer lokalen Ressource wird, weil sie nicht von einem anderen Thread modifiziert, beschädigt oder aktualisiert werden kann. Dies erlaubt Flexibilität zur Ressourcenzuweisung (zum Beispiel wenn ein Thread über einen Zeitraum mehr Ressourcen benötigt als andere Threads), und wenn die globale Ressource ein globales Register ist, das zum Speichern eines alternativen Stapelzeigers verwendet wird, so wird es außerdem dem Wert innerhalb des alternativen Stapelzeigers ermöglicht, während des gesamten Programms fortzubestehen. Die unten beschriebenen Verfahren implementieren Überprüfungen (zum Beispiel vor dem Ausgeben von Schreibinstruktionen an eine globale Ressource), damit die globalen Ressourcen, die geschützt werden, nicht von einem anderen beliebigen Thread überschrieben werden können.
  • 2 zeigt drei beispielhafte Flussdiagramme 21-23 von Arbeitsverfahren eines Multithreaded-Prozessors. Das erste Verfahren 21, das ein Verfahren zum Verhindern des Bearbeitens von globalen Ressourcen ist, kann unabhängig oder in Kombination mit einem oder beiden der anderen Verfahren 22-23 verwendet werden, die ein Verfahren zum Schützen einer globalen Ressource (oder zur Übernahme der Kontrolle über eine globale Ressource) (Verfahren 22) und ein Verfahren zum Verhindern eines Lesezugriffs auf eine globale Ressource (Verfahren 23) zeigen.
  • Wie im ersten Verfahren 21 in 2 gezeigt, wenn eine Instruktion von einem Thread kommend empfangen wird, der in eine globale Ressource schreibt (Block 202), so wird eine Überprüfung ausgeführt (in Block 204), um zu bestimmen, ob der betreffende Thread Schreibzugriff auf die betreffende globale Ressource hat, die in der Instruktion identifiziert wurde (d. h. ob der betreffende Thread in die identifizierte globale Ressource schreiben darf). Wenn die Überprüfung (in Block 204) identifiziert, dass der Thread Schreibzugriff hat („Ja“ in Block 204), so darf die Instruktion ausgegeben werden (Block 206), und falls der Thread keinen Schreibzugriff hat („Nein“ in Block 204), so wird eine Ausnahme ausgelöst (Block 208), um das Programm zu alarmieren, dass der Schreibvorgang nicht erfolgreich war.
  • Der Überprüfungsschritt (in Block 204) kann umfassen, auf ein oder mehrere lokale Steuerregister zuzugreifen, um zu bestimmen, ob der betreffende Thread Schreibzugriff auf die betreffende identifizierte globale Ressource hat (zum Beispiel auf ein bestimmtes globales Register). In einem solchen Beispiel weist jeder Thread ein lokales Steuerregister 112 auf, das Teil der zugeordneten Gruppe von lokalen Registern 101-104 des Threads sein kann, wie in 1 gezeigt. Das lokale Steuerregister 112 für einen bestimmten Thread (zum Beispiel Thread 0) wird zum Speichern von Details aller globaler Ressourcen verwendet, die der Thread geschützt hat. Wie oben angemerkt, kann, wenn ein Thread eine globale Ressource geschützt hat, gesagt werden, dass er Kontrolle über die betreffende globale Ressource hat, wobei sich diese Kontrolle auf den Schutz der globalen Ressource vor einem Beschreiben durch andere Threads erstreckt. Das lokale Steuerregister kann globale Ressourcen auf jede beliebige Weise identifizieren und Beispiele umfassen, sind aber nicht darauf beschränkt, eine Auflistung von Identifikatoren (IDs) für jene globalen Ressourcen, über die ein Thread die Kontrolle hat oder die eine Globale-Ressourcen-Maske (oder eine Globale-Register-Maske) verwenden. Wenn eine Maske verwendet wird, so identifiziert diese Maske all jene Ressourcen, deren Kontrolle von dem Thread beansprucht wird, anstatt die einzelnen IDs für jede Ressource aufzulisten.
  • Es gibt eine Reihe verschiedener Möglichkeiten, in der der Multithreaded-Prozessor, und insbesondere die globalen Ressourcen, ausgelegt werden können, und dies beeinflusst die Art und Weise, wie die lokalen Steuerregister 112 verwendet werden können, um den Überprüfungsschritt (in Block 204) vor der Ausgabe einer Schreibinstruktion zu implementieren. In einem ersten Beispiel kann der Multithreaded-Prozessor dafür ausgelegt sein, eine Standardposition aufzuweisen, dass alle Threads sowohl Lese- als auch Schreibzugriff auf globale Ressourcen haben, so dass ein Thread in eine globale Ressource schreiben kann, sofern nicht ein anderer Thread im Multithreaded-Prozessor die Kontrolle über diese Ressource beansprucht hat. In dieser Situation, wie im ersten beispielhaften Flussdiagramm 31 in 3 gezeigt, beinhaltet der Überprüfungsschritt (Block 204) das Zugreifen auf die lokalen Steuerregister für jeden anderen Thread im Multithreaded-Prozessor (Block 310) und das Bestimmen, unter Verwendung der zugegriffenen lokalen Steuerregister, ob ein anderer Thread die Kontrolle über die betreffende globale Ressource beansprucht hat (Block 312). Nur falls keine anderen Threads die Kontrolle über die betreffende globale Ressource beansprucht haben, d. h. diese globale Ressource in keinem der zugegriffenen lokalen Steuerregister identifiziert ist („Nein“ in Block 312), darf die Schreibinstruktion ausgegeben werden (Block 206). Wie oben beschrieben, wenn die globale Ressource bereits unter der Kontrolle eines anderen Threads ist (d. h. wenn die globale Ressource in einem der zugegriffenen lokalen Steuerregister identifiziert ist), so darf die Schreibinstruktion nicht ausgegeben werden, und eine Ausnahme wird ausgelöst (Block 208).
  • In einem zweiten Beispiel kann der Multithreaded-Prozessor so ausgelegt sein, dass die Standardposition statt dessen ist, dass die globalen Ressourcen für alle Threads nur zum Lesen sind und dass eine globale Ressource nur von einem Thread beschrieben werden kann, der die Kontrolle über die betreffende globale Ressource beansprucht hat. Wie aus dem zweiten beispielhaften Flussdiagramm 32 in 3 zu erkennen ist, erfordert diese Situation nur, dass auf ein einziges lokales Steuerregister zugegriffen wird (Block 320), d. h. das lokale Steuerregister des Threads, das den Schreibvorgang auszuführen versucht, denn sofern nicht die betreffende globale Ressource, die in der Schreibinstruktion identifiziert ist, im lokalen Steuerregister des Threads beansprucht wird (wie in Block 322 bestimmt), kann die globale Ressource nicht von dem Thread beschrieben werden. Wenn also das lokale Steuerregister die betreffende globale Ressource nicht identifiziert („Nein“ in Block 322), darf die Instruktion nicht ausgegeben werden, und eine Ausnahme wird ausgelöst (Block 208). Alternativ, wenn das lokale Steuerregister die betreffende globale Ressource identifiziert („Ja“ in Block 322), darf die Instruktion ausgegeben werden (Block 206).
  • In jedem der Beispiele, die in 3 gezeigt sind und oben beschrieben wurden, wird der Schutz der globalen Ressourcen durch die Verwendung der lokalen Steuerregister 112 bewerkstelligt, wenn das lokale Steuerregister für einen bestimmten Thread die eine oder die mehreren globalen Ressourcen identifiziert, über die der Thread die Kontrolle beansprucht (d. h. so, dass der Thread in die globale Ressource schreiben kann und andere Threads nicht). Damit ein Thread eine globale Ressource schützen kann, wird ein Mechanismus bereitgestellt, durch den ein Thread in sein eigenes lokales Steuerregister schreiben kann (wie zum Beispiel im zweiten Flussdiagramm 22 in 2 gezeigt). Wie oben beschrieben, können die geschriebenen Daten die ID der globalen Ressource umfassen oder können die Form einer Aktualisierung einer Globale-Ressourcen-Maske haben.
  • In einigen Beispielen kann jedem Thread erlaubt werden, in sein eigenes lokales Steuerregister zu schreiben, ohne dass eine Überprüfung ausgeführt wird (d. h. unabhängig von der Aktivität eines anderen Thread im Multithreaded-Prozessor). Wenn aber keine Überprüfungen ausgeführt werden, so können zwei (oder mehr) Threads (in einigen Implementierungen) die Kontrolle über dieselbe globale Ressource (zum Beispiel dasselbe globale Register) gleichzeitig beanspruchen, und das kann dazu führen, dass keiner der Threads in der Lage ist, in die globale Ressource zu schreiben (falls Verfahren 31 in 3 verwendet wird), oder dass beide Threads in der Lage sind, in die globale Ressource zu schreiben (falls Verfahren 32 in 3 verwendet wird). Folglich können Überprüfungen ausgeführt werden, bevor ein Thread in der Lage ist, in sein lokales Steuerregister zu schreiben, wie im zweiten Flussdiagramm 22 in 2 gezeigt ist. Das im ersten Flussdiagramm 21 in 2 gezeigte Verfahren kann jedoch unabhängig von jedem der anderen Verfahren (in den Flussdiagrammen 22-23), die in 2 gezeigt und unten beschrieben sind, implementiert werden.
  • Das zweite Flussdiagramm 22 in 2 zeigt ein Verfahren zum Schützen einer globalen Ressource. Wenn eine Instruktion, eine globale Ressource zu schützen, aus einem Thread kommend empfangen wird (Block 222), so wird eine Überprüfung ausgeführt (in Block 224), um zu bestimmen, ob die globale Ressource momentan von einem anderen Thread geschützt wird. In einer ähnlichen Weise wie bei den Blöcken 310 und 312 in 3 umfassen diese Überprüfungen das Zugreifen auf die lokalen Steuerregister für jeden anderen Thread im Multithreaded-Prozessor und das anschließende Bestimmen, ob eines der zugegriffenen lokalen Steuerregister einen Eintrag enthält, der die betreffende globale Ressource, die in der empfangenen Instruktion identifiziert ist, beansprucht (in Block 222). Falls kein anderer Thread die globale Ressource geschützt hat („Nein“ in Block 224), so darf der Thread in das lokale Steuerregister schreiben und die Kontrolle über die globale Ressource übernehmen (Block 226). Falls hingegen ein anderer Thread bereits die Kontrolle über die globale Ressource übernommen hat (d. h. eines der lokalen Steuerregister, auf die zugegriffen wurde, einen Identifikator für die betreffende globale Ressource enthält), so wird eine Ausnahme ausgelöst (Block 228), und es wird verhindert, dass der Thread die Kontrolle über die betreffende globale Ressource beansprucht.
  • In einigen Beispielen kann ein Thread in der Lage sein, die Kontrolle über eine beliebige Menge globaler Ressourcen zu übernehmen - einschließlich der Übernahme der Kontrolle über sämtliche globalen Ressourcen (zum Beispiel alle globalen Register 110). Jedoch kann in anderen Beispielen eine Obergrenze für die Menge der globalen Ressourcen gesetzt werden, über die ein einzelner Thread die Kontrolle übernehmen kann, und diese Obergrenze kann zum Beispiel durch Beschränken der Größe des lokalen Steuerregisters implementiert werden. In einem solchen Beispiel kann ein lokales Steuerregister ein oder mehrere Steuerfelder umfassen, wobei jedes Steuerfeld ein oder mehrere globale Register reserviert. Durch Beschränken der Anzahl von Steuerfeldern in einem lokalen Steuerregister wird die Anzahl der globalen Ressourcen begrenzt, die ein Thread schützen kann. Wenn eine Obergrenze angewendet wird, so kann sie für alle Threads im Multithreaded-Prozessor dieselbe sein, oder verschiedene Threads können verschiedene Obergrenzen aufweisen (falls zum Beispiel ein Thread allgemein mehr Fähigkeiten besitzt, wie zum Beispiel DSP und FPU, so kann ihm eine höhere Obergrenze gegeben werden, so dass er eine größere maximale Anzahl von geschützten Registern aufweist). In einigen Beispielen kann die Obergrenze je Aufgabe implementiert werden, so dass eine maximale Anzahl von globalen Ressourcen von einem Thread für jede konkrete Aufgabe oder jeden konkreten Zweck geschützt werden kann. In einem Beispiel kann ein dediziertes Steuerfeld für jede konkrete Aufgabe bereitgestellt werden, für die ein globales Register beansprucht werden kann (zum Beispiel kann eine Aufgabe ein Interrupt-Stapelzeiger sein, und eine andere Aufgabe kann ein zusätzliches lokales Register sein), und die Größe eines Steuerfeldes (d. h. die Anzahl der globalen Register, die es reserviert) kann von der betreffenden Aufgabe abhängig sein, auf die sie sich bezieht, so dass verschiedene Aufgaben unterschiedlich große Steuerfelder haben können. Wenn beispielsweise die geschützte globale Ressource zum Zweck des Speicherns eines Stapelzeigers verwendet wird, so wird nur ein einziges globales Register benötigt, so dass das lokale Steuerfeld ein einzelnes Steuerfeld umfassen kann, und das einzelne Steuerfeld kann dann ein Paar globaler Register schützen, weil Register innerhalb des betreffenden Prozessors paarweise organisiert sind. In anderen Beispielen kann eine andere Anzahl von Steuerfeldern vorhanden sein, und/oder ein Steuerfeld kann eine andere Anzahl von globalen Registern schützen.
  • Die Zuweisung bestimmter globaler Ressourcen zu bestimmten Threads kann statisch sein oder kann sich im zeitlichen Verlauf ändern (d. h. kann dynamisch sein). Wenn die Menge an globalen Ressourcen, die beansprucht werden kann, begrenzt ist (zum Beispiel durch die Verwendung einer beschränkten Anzahl von Steuerfeldern), so können die Verfahren automatisch dazu führen, dass Threads die Kontrolle über globale Ressourcen abgeben. Wenn zum Beispiel ein einzelnes Steuerfeld in einem lokalen Steuerregister vorhanden ist und dieses Steuerfeld ein einzelnes globales Register identifiziert, so kann ein Thread ein erstes globales Register schützen und dann von der Verwendung des ersten globalen Registers zur Verwendung eines zweiten globalen Registers für den gleichen Zweck wechseln. Beim Schützen des zweiten globalen Registers werden die Details des ersten globalen Registers im lokalen Steuerregister überschrieben, und es wird kein Schutz für dieses erste globale Register durchgesetzt. Ein anderer Thread kann dann in der Lage sein, in dieses erste globale Register zu schreiben (in Abhängigkeit von dem als Standard voreingestellten Zugriffsstatus, der im Multithreaded-Prozessor verwendet wird), und ein anderer Thread ist in der Lage, die Kontrolle über das erste globale Register zu beanspruchen.
  • In einigen Beispielen, wie zum Beispiel, wo es keinen automatischen Widerruf der Kontrolle über globale Ressourcen gibt, kann ein expliziter Mechanismus vorhanden sein, um es einem Thread zu ermöglichen, Einträge aus seinem lokalen Steuerregister zu löschen. Ein solcher Mechanismus erfordert keinerlei Überprüfungen, bevor die Löschung eines Eintrags in einem lokalen Steuerregister gestattet wird, da die Löschung eines Eintrags keine negative Auswirkung auf das Funktionieren der anderen Threads hat.
  • Die obige Beschreibung betrifft einen Thread, der die Kontrolle über eine globale Ressource übernimmt, damit der Thread in die globale Ressource schreiben kann und andere Threads nicht, und die globale Ressource wird dann als „geschützt“ beschrieben (zum Beispiel vor Beschädigung, Überschreiben, Modifikation usw.). In einer Erweiterung der beschriebenen Verfahren kann ein Thread eine globale Ressource davor schützen, sowohl gelesen als auch überschrieben zu werden, wie im dritten beispielhaften Flussdiagramm 23 in 2 gezeigt ist. Das kann beispielsweise dort nützlich sein, wo ein Thread ein Geheimnis, wie zum Beispiel einen privaten RSA-Schlüssel, im globalen Register speichern will. In einer solchen Implementierung kann ein Eintrag in einem lokalen Steuerregister, der eine bestimmte globale Ressource identifiziert, verhindern, dass andere Threads sowohl aus der Ressource lesen als auch in die Ressource schreiben, oder alternativ können separate lokale Steuerregister oder separate Steuerfelder innerhalb eines lokalen Steuerregisters bereitgestellt werden, um den Lesezugriff und den Schreibzugriff zu kontrollieren. Wie oben beschrieben, kann das Verfahren, das im ersten beispielhaften Flussdiagramm 21 in 2 gezeigt ist, unabhängig oder in Kombination mit einem oder beiden der anderen in 2 (in den beispielhaften Flussdiagrammen 22-23) gezeigten Verfahren verwendet werden.
  • Ein Thread kann eine globale Ressource unter Verwendung des Verfahrens, das im zweiten Flussdiagramm 22 in 2 (oben beschrieben) gezeigt ist, davor schützen, gelesen zu werden. Falls auf Überprüfungen verzichtet wird (Block 224 wird ausgelassen), so kann auch hier mehr als ein Thread eine globale Ressource davor schützen, gelesen zu werden, was zur Folge hat, dass kein Thread in der Lage ist, die betreffende globale Ressource zu lesen.
  • Das dritte Flussdiagramm 23 in 2 zeigt ein Verfahren zum Implementieren eines Leseschutzes für eine globale Ressource. Bei Erhalt einer Instruktion von einem Thread, aus einer globalen Ressource zu lesen (Block 232), wird eine Überprüfung ausgeführt, die bestimmt, ob der Thread Lesezugriff auf die in der Lese-Instruktion identifizierte globale Ressource hat (Block 234), und dieser Überprüfungsschritt kann Mechanismen verwenden, die denen ähnlich sind, die oben mit Bezug auf 3 beschrieben wurden, und die von der Art und Weise abhängig sein können, wie die globalen Ressourcen innerhalb des Multithreaded-Prozessors konfiguriert sind. Wenn zum Beispiel ein Thread standardmäßig Lesezugriff auf alle globalen Ressourcen hat, so kann die Überprüfung das Zugreifen auf das lokale Steuerregister für alle anderen Threads und das Überprüfen, dass in keinem dieser lokalen Steuerregister verzeichnet ist, dass ein anderer Thread den Lesezugriff auf die betreffende globale Ressource geschützt hat, umfassen.
  • Wenn standardmäßig alle globalen Register sowohl lese- als auch schreibgeschützt sind, so umfasst die Überprüfung (in Block 234) alternativ das Überprüfen des lokalen Steuerregisters auf den betreffenden Thread, der die globale Ressource lesen will, um zu bestimmen, ob der Thread die Kontrolle über die globale Ressource beansprucht hat. Falls die Überprüfung bestätigt, dass der Thread Lesezugriff hat („Ja“ in Block 234), so darf die Lese-Instruktion ausgegeben werden (Block 236), anderenfalls wird eine Ausnahme (zum Beispiel eine allgemeine Schutzausnahme) ausgelöst (Block 238).
  • Die Verwendung eines Leseschutzes auf diese Weise ermöglicht es, dass Spezialinstruktionen in der Prozessor-Pipeline Zugriff auf einen geheimen Schlüssel im zugeteilten globalen Register erhalten können und der Schlüssel dann von den Spezialinstruktionen dafür verwendet werden kann, geheime Funktionen ausführen.
  • Obgleich das Geheimnis alternativ in einem lokalen Register anstelle der globalen Ressource gespeichert werden kann, erhöht die Verwendung der globalen Ressource (zum Beispiel eines globalen Registers) die Sicherheit und verringert die Komplexität, weil die globalen Register für Hardware direkt zugänglich sind, weshalb es nicht notwendig ist, das Geheimnis aus dem globalen Register an einen anderen Ort zu kopieren und es dann an dem neuen Ort zu schützen, damit das Geheimnis verwendet werden kann.
  • Wenn dieser Leseschutz verwendet wird, so kann der jeweilige Zustand des globalen Registers auch automatisch zurückgesetzt werden, wann immer der Lesezugriffschutz aufgehoben oder entfernt wird, so dass der Schlüssel vollkommen sicher ist (im Gegensatz zu normalen Registern, die nicht routinemäßig zurückgesetzt werden).
  • Die beispielhaften Flussdiagramme in den 2 und 3, die oben beschrieben sind (und auch in 5, die unten beschrieben wird), lösen eine Ausnahme aus, wenn eine Instruktion nicht ausgegeben werden kann (in den Blöcken 208, 228 und 238). Es versteht sich, dass in Varianten dieser Verfahren keine Ausnahmen ausgelöst zu werden brauchen, und in einigen Beispielen kann verhindert werden, dass Instruktionen ausgegeben werden. Ungeachtet der verwendeten Implementierung wird in allen Fällen verhindert, dass die Instruktion den realen Registerwert liest oder überschreibt. Das Verwenden einer Ausnahme ermöglicht es, dass das Programm, das die Instruktion ausgegeben hat, weiß, dass der Schreib- und Lesevorgang nicht erfolgreich war.
  • In einer beispielhaften Anwendung der oben beschriebenen Verfahren ist die globale Ressource ein globales Register, und dieses globale Register wird zum Speichern eines alternativen Stapelzeigers eines Interruptsystems verwendet. Um das globale Register, das als der alternative Stapelzeiger verwendet wird, vor dem Überschriebenwerden zu schützen, wird die Index (oder ID)-Nummer des globalen Registers von dem Thread in sein zugeordnetes lokales Steuerregister geschrieben (in diesem Beispiel wird ein Schreibschutz und kein Leseschutz implementiert). Falls ein anderer Thread anschließend versucht, in dieses globale Register zu schreiben (um zum Beispiel einen alternativen Stapelzeiger in diesem globalen Register zu speichern), so schlagen die Überprüfungen, die vor dem Ausgeben der Schreibinstruktion ausgeführt werden, fehl, und an diesem Punkt kommt es zu einer Ausnahme, die anzeigt, dass das betreffende globale Register von einem anderen Thread geschützt wird. Die Verwendung dieses alternativen Stapelzeigers wird automatisch in Hardware verwaltet (d. h. der Wert des alternativen Stapelzeigers wird bei Eintreten in die unterste Interrupt-Eintritts-Austritts-Sequenz in den eigentlichen Stapelzeiger kopiert).
  • In einer solchen beispielhaften Anwendung weiß eine Instruktion möglicherweise nicht, welches Register zum Speichern eines alternativen Stapelzeigers verwendet wird, und so kann auf das lokale Steuerregister (und das relevante Steuerfeld, wenn es Steuerfelder für mehrere spezielle Zwecke gibt), das dem Thread zugeordnet ist, der die Instruktion ausführt, zugegriffen werden, um zu identifizieren, in welchem globalen Register der alternative Stapelzeiger gespeichert ist. Wo dies implementiert ist, kann jeder Thread den gleichen Code (d. h. dieselbe Liste von Instruktionen) ablaufen lassen, und das lokale Steuerregister für einen Thread kann dafür verwendet werden, den genauen Ort des alternativen Stapelzeigers für einen bestimmten Thread zu identifizieren.
  • Die oben beschriebenen Verfahren können vor Laufzeit oder bei Laufzeit implementiert werden. In einem Beispiel kann die Entscheidung, welche Registernummern welchen Threads zuzuordnen sind, im Voraus vor Laufzeit festgelegt werden, und das Setup der zugeteilten Thread-Register für jeden Thread kann dann während des Bootstrap oder Ladens durch ein Programm erfolgen, das zu Beginn über externe oder interne Pfade vollen Zugriff auf die Steuerregister aller Threads hat. Nach dem Setup des Programms kann ein solches Programm sein Recht, den Zustand des gesamten Systems zu bearbeiten oder zu steuern, je nach Bedarf vorübergehend oder dauerhaft aufgeben, so dass das System dann seine Funktion mit entsprechenden Schutzgraden oder voller Geheimhaltung ausführt. In einem solchen Beispiel werden dann Überprüfungsverfahren (zum Beispiel die Verfahren, die in den Flussdiagrammen 21 und 23 in 2 gezeigt sind) bei Laufzeit implementiert.
  • Einige oder alle der oben beschriebenen Verfahren können in Hardware 403 als Teil der Decodierstufe 404 eines Multithreaded-Prozessors implementiert werden. 4 zeigt einen Multithreaded-Prozessor, der umfasst: eine Hol-Stufe 402, die dafür ausgelegt ist, Instruktionen aus einem Programm zu holen, eine Decodierstufe 404, die dafür ausgelegt ist, die Instruktionen zu interpretieren und eine Registerumbenennung auszuführen, eine Ausgabestufe 406, die dafür ausgelegt ist, Instruktionen auszugeben, und eine Pipeline 408, die dafür ausgelegt ist, die ausgegebenen Instruktionen auszuführen. Wie oben beschrieben, bildet die Hardware (zum Beispiel Hardware-Logik), die die oben beschriebenen Verfahren ausführt, einen Teil der Decodierstufe 404 und ist dafür ausgelegt, ein oder mehrere lokale Steuerregister bei Erhalt einer Instruktion, in eine globale Ressource zu schreiben, zu überprüfen (und in einigen Beispielen bei Erhalt einer Instruktion, in eine globale Ressource zu schreiben), und eine Ausnahme 410 auszugeben, oder anderenfalls das Ausgeben der Instruktion zu verhindern, wenn es einem Thread nicht gestattet wird, eine bestimmte globale Ressource (zum Beispiel ein globales Register) zu lesen und zu beschreiben. Die Hardware kann auch dafür ausgelegt sein, es einem Thread zu erlauben, in sein zugeordnetes lokales Steuerregister zu schreiben (wie in Verfahren 22 in 2), und/oder ein oder mehrere lokale Steuerregister bei Erhalt einer Instruktion, aus einer globalen Ressource zu lesen, zu überprüfen (wie in Verfahren 23 in 2).
  • Obgleich 4 die Hardware 403 als Teil der Decodierstufe 404 zeigt, versteht es sich, dass diese Hardware-Logik alternativ als ihre eigene Stufe implementiert sein kann (zum Beispiel zwischen der Decodierstufe 404 und der Ausgabestufe 406) oder in einer anderen Stufe der Pipeline enthalten sein kann (zum Beispiel als Teil der Ausgabestufe 406).
  • Obgleich die oben beschriebenen Beispiele lokale Steuerregister verwenden, wenn die Zugriffsüberprüfungen für eine globale Ressource ausgeführt werden (in Blöcken 204 und 234 in den 2 und 3), kann das Verfahren in anderen Beispielen unter Verwendung eines globalen Steuerfeldes je globaler Ressource implementiert werden. In einem solchen Beispiel kann ein Thread die Kontrolle über eine globale Ressource erhalten, indem er seine Thread-ID in das entsprechende Steuerfeld schreibt, und wenn dann Zugriffsüberprüfungen ausgeführt werden, so kann das Steuerfeld überprüft werden, ob es die ID des anfordernden Threads enthält. 5 zeigt zwei beispielhafte Verfahren, die Varianten derjenigen sind, die in den 2 und 3 gezeigt sind. Im ersten beispielhaften Flussdiagramm 51 wird eine Instruktion empfangen, in eine globale Ressource zu schreiben (Block 202), und der Überprüfungsschritt (Block 204) umfasst das Überprüfen des globalen Steuerfeldes für die globale Ressource (Block 510), um zu bestimmen, ob es die ID des Threads enthält, der die Schreibinstruktion ausgegeben hat (Block 512). Nur falls das Steuerfeld die korrekte ID enthält („Ja“ in Block 512), darf die Instruktion ausgegeben werden (Block 206). Das zweite beispielhafte Flussdiagramm 52 zeigt ein entsprechendes Verfahren zum Überprüfen des Lesezugriffs. In einer ähnlichen Weise wie im ersten Flussdiagramm umfasst der Überprüfungsschritt (Block 234) das Überprüfen des globalen Steuerfeldes für die globale Ressource (Block 520), um zu bestimmen, ob es die ID des Threads enthält, der die Lese-Instruktion ausgegeben hat (Block 522). Nur wenn das Steuerfeld die korrekte ID enthält („Ja“ in Block 522), darf die Instruktion ausgegeben werden (Block 236).
  • In den oben beschriebenen Verfahren kann ein Thread die Kontrolle über eine globale Ressource, wie zum Beispiel ein globales Register, übernehmen. In einigen Beispielen kann ein Thread eine Situation erreichen, in der er die Verwendung der Ressource beendet hat und darum die Kontrolle über die betreffende globale Ressource aufgeben kann. Wenn globale Steuerfelder verwendet werden, um den Zugriff auf die globale Ressource zu kontrollieren, wie in 5 gezeigt, kann ein Thread das Steuerfeld leeren, sobald er die Verwendung der Ressource beendet hat, um es anderen Threads zu ermöglichen, die Kontrolle zu beanspruchen. Gleichermaßen, wenn lokale Steuerregister verwendet werden (wie zum Beispiel in den 2 und 3 gezeigt), kann ein Thread Einträge in den lokalen Steuerregistern löschen, um die Kontrolle über eine bestimmte globale Ressource aufzugeben.
  • In der obigen Beschreibung werden Verfahren und Vorrichtungen zum Schützen globaler Ressourcen beschrieben. Diese Verfahren können auf jede Ressource angewendet werden, die von den Threads in einem Multithreaded-Prozessor (oder von jeweils zwei Threads in einem Multithreaded-Prozessor) gemeinsam genutzt wird, und in einem Beispiel kann die globale Ressource globale Register umfassen.
  • Die oben beschriebenen Verfahren können auf alle globalen Ressourcen innerhalb des Multithreaded-Prozessors oder auf eine Teilmenge der globalen Ressourcen angewendet werden. Wenn die Verfahren nur auf eine Teilmenge der globalen Ressourcen angewendet werden, können die Verfahren zum Beispiel auf eine bestimmte Art von globalen Ressourcen (zum Beispiel globale Register) oder eine Teilmenge einer bestimmten Art angewendet werden (zum Beispiel können einige globale Register vorhanden sein, die durch Threads geschützt werden können, und andere, die nicht geschützt werden können). In weiteren Beispielen können die Verfahren auf Teilmengen mehrerer Arten angewendet werden (zum Beispiel eine Teilmenge von globalen Registern und eine Teilmenge einer anderen globalen Ressource).
  • Die Begriffe „Prozessor“ und „Computer“ meinen im Sinne des vorliegenden Textes jede Vorrichtung mit einer Verarbeitungsfähigkeit, so dass sie Instruktionen ausführen kann. Der Fachmann erkennt, dass solche Verarbeitungsfähigkeiten in vielen verschiedenen Vorrichtungen vorhanden sind, und deshalb umfasst der Begriff „Computer“ Set-Top-Boxen, Mediaplayer, digitale Radios, PCs, Server, Mobiltelefone, Personal Digital Assistants und viele andere Vorrichtungen.
  • Ein konkreter Verweis auf „Logik“ meint eine Struktur, die eine oder mehrere Funktionen ausführt. Ein Beispiel von Logik sind Schaltungen, die dafür ausgelegt sind, diese Funktion(en) auszuführen. Zum Beispiel können solche Schaltungen Transistoren und/oder andere Hardware-Elemente enthalten, die in einem Fertigungsprozess verfügbar sind. Solche Transistoren und/oder andere Elemente können verwendet werden, um Schaltungen oder Strukturen zu bilden, die beispielsweise Speicher, wie zum Beispiel Register, Flipflops oder Latches, logische Operatoren, wie zum Beispiel Boolesche Operationen, mathematische Operatoren, wie zum Beispiel Addierer, Multiplizierer oder Schieber, und Interconnects implementieren und/oder enthalten. Solche Elemente können als Custom-Schaltungen oder Standardzellenbibliotheken, Makros oder auf anderen Abstraktionsebenen bereitgestellt werden. Solche Elemente können in einer bestimmten Anordnung miteinander verbunden sein. Logik kann Schaltungen enthalten, die feste Funktionen darstellen, und Schaltungen können programmiert werden, um eine oder mehrere Funktionen auszuführen; eine solche Programmierung kann über ein Firmware- oder Software-Update oder einen Steuerungsmechanismus ausgeführt werden. Logik, die dafür vorgesehen ist, eine Funktion auszuführen, kann auch Logik umfassen, die eine Teilfunktion oder einen Teilprozess implementiert. In einem Beispiel hat Hardware-Logik Schaltungen, die eine oder mehrere Festfunktionsoperationen, Zustandsmaschinen oder Prozesse implementieren. Der Fachmann erkennt, dass Speichervorrichtungen, die zum Speichern von Programminstruktionen genutzt werden, in einem Netz verteilt sein können. Zum Beispiel kann ein entfernter Computer ein Beispiel eines Prozesses speichern, der als Software beschrieben ist. Ein lokaler oder Arbeitsplatz-Computer kann auf den entfernten Computer zugreifen und einen Teil der, oder alle, Software herunterladen, um das Programm ablaufen zu lassen. Alternativ kann der lokale Computer Stücke der Software nach Bedarf herunterladen oder einige Software-Instruktionen auf dem lokalen Arbeitsplatz-Computer und einige auf dem entfernten Computer (oder Computernetz) ausführen. Der Fachmann erkennt auch, dass durch Verwendung herkömmlicher, dem Fachmann bekannter Techniken alle, oder ein Teil der, Software-Instruktionen von einem dedizierten Schaltkreis, wie zum Beispiel einem DSP, einen programmierbaren Logik-Array oder dergleichen ausgeführt werden können.
  • Jeder Bereichs- oder Vorrichtungswert, der im vorliegenden Text genannt ist, kann erweitert oder geändert werden, ohne dass der gewünschte Effekt verloren geht, wie dem Fachmann einleuchtet.
  • Es versteht sich, dass sich die oben beschriebenen Nutzeffekte und Vorteile auf eine Ausführungsform oder auf mehrere Ausführungsformen beziehen können. Die Ausführungsformen sind nicht auf jene beschränkt, die einige oder alle der beschriebenen Probleme lösen, oder jene, die einen oder alle der beschriebenen Nutzeffekte und Vorteile aufweisen.
  • Verweise auf „ein“ Element beziehen sich auf ein oder mehrere dieser Elemente. Der Begriff „umfasst“ bedeutet im Sinne des vorliegenden Textes, dass er die genannten Verfahrensblöcke oder Elemente einschließt, wobei aber solche Blöcke oder Elemente keine ausschließliche Liste umfassen, und eine Vorrichtung weitere Blöcke oder Elemente enthalten kann, und ein Verfahren weitere Operationen oder Elemente umfassen kann.
  • Die Schritte der im vorliegenden Text beschriebenen Verfahren können in jeder geeigneten Reihenfolge oder gegebenenfalls gleichzeitig ausgeführt werden. Ferner können einzelne Blöcke aus jedem der Verfahren weggelassen werden, ohne vom Wesen und Schutzbereich des im vorliegenden Text beschriebenen Gegenstandes abzuweichen. Aspekte von jedem der oben beschriebenen Beispiele können mit Aspekten von jedem der anderen beschriebenen Beispiele kombiniert werden, um weitere Beispiele zu bilden, ohne dass der angestrebte Effekt verloren geht. Wenn Elemente der Figuren durch Pfeile verbunden dargestellt sind, so versteht es sich, dass diese Pfeile nur einen beispielhaften Kommunikationsfluss (der Daten und Steuermeldungen umfasst) zwischen Elementen zeigen. Der Fluss zwischen Elementen kann in einer oder in beiden Richtungen stattfinden. Es versteht sich, dass die obige Beschreibung einer bevorzugten Ausführungsform nur beispielhaft ist und dass der Fachmann verschiedene Modifizierungen vornehmen kann. Obgleich oben verschiedene Ausführungsformen mit einem gewissen Grad an Detailliertheit oder mit Bezug auf eine oder mehrere einzelne Ausführungsformen beschrieben wurden, könnte der Fachmann zahlreiche Änderungen an den offenbarten Ausführungsformen vornehmen, ohne vom Wesen oder Schutzbereich der Erfindung abzuweichen.
  • Beschreibung von Ausführungsformen:
    • Ausführungsform 1: Verfahren zum Verwalten globaler Ressourcen innerhalb eines Multithreaded-Prozessors, wobei der Multithreaded-Prozessor mehrere Threads umfasst und das Verfahren umfasst:
      • Empfangen (202) einer Instruktion aus einem Thread, in eine globale Ressource zu schreiben;
      • Überprüfen (204), unter Verwendung von Hardware-Logik, eines oder mehrerer Register im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat; und
      • in Reaktion auf das Bestimmen, dass der Thread Schreibzugriff auf die globale Ressource hat, Erlauben (206) der Ausgabe der Instruktion.
    • Ausführungsform 2: Verfahren nach Ausführungsform 1, ferner umfassend:
      • in Reaktion auf das Bestimmen, dass der Thread keinen Schreibzugriff auf die globale Ressource hat, Verhindern (208) der Ausgabe der Instruktion und Auslösen einer Ausnahme.
    • Ausführungsform 3: Verfahren nach Ausführungsform 1 oder 2, wobei das Überprüfen eines oder mehrerer Register im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat, umfasst:
      • Überprüfen (204) eines oder mehrerer lokaler Steuerregister im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat, wobei jedes lokale Steuerregister einem der mehreren Threads zugeordnet ist.
    • Ausführungsform 4: Verfahren nach Ausführungsform 3, wobei das Überprüfen eines oder mehrerer lokaler Steuerregister im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat, umfasst:
      • Zugreifen (310) auf ein lokales Steuerregister, das jedem anderen Thread im Multithreaded-Prozessor zugeordnet ist; und
      • Bestimmen (312), ob eines der zugegriffenen lokalen Steuerregister die globale Ressource identifiziert, wobei, falls keines der zugegriffenen lokalen Steuerregister die globale Ressource identifiziert, der Thread Schreibzugriff auf die globale Ressource hat.
    • Ausführungsform 5: Verfahren nach Ausführungsform 3, wobei das Überprüfen eines oder mehrerer lokaler Steuerregister im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat, umfasst:
      • Zugreifen (320) auf ein lokales Steuerregister, das dem Thread zugeordnet ist; und
      • Bestimmen (322), ob das zugegriffene lokale Steuerregister die globale Ressource identifiziert, wobei, falls das zugegriffene lokale Steuerregister die globale Ressource identifiziert, der Thread Schreibzugriff auf die globale Ressource hat.
    • Ausführungsform 6: Verfahren nach einer der Ausführungsformen 3-5, ferner umfassend:
      • Empfangen (222) einer Instruktion aus einem Thread, Daten, die eine globale Ressource identifizieren, in ein lokales Steuerregister zu schreiben, das dem Thread zugeordnet ist;
      • Zugreifen auf ein lokales Steuerregister, das jedem anderen Thread im Multithreaded-Prozessor zugeordnet ist;
      • Bestimmen (224), ob eines der zugegriffenen lokalen Steuerregister Daten umfasst, die die globale Ressource identifizieren; und
      • in Reaktion auf das Bestimmen, dass keines der zugegriffenen lokalen Steuerregister Daten umfasst, die die globale Ressource identifizieren, Erlauben (226) der Ausgabe der Instruktion.
    • Ausführungsform 7: Verfahren nach Ausführungsform 6, ferner umfassend:
      • in Reaktion auf das Bestimmen, dass eines der zugegriffenen lokalen Steuerregister Daten umfasst, die die globale Ressource identifizieren, Verhindern (228) der Ausgabe der Instruktion und Auslösen einer Ausnahme.
    • Ausführungsform 8: Verfahren nach Ausführungsform 1 oder 2, wobei das Überprüfen eines oder mehrerer Register im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat, umfasst:
      • Überprüfen (510, 512) eines globalen Steuerfeldes in einem globalen Register im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat, wobei das globale Steuerfeld der globalen Ressource zugeordnet ist.
    • Ausführungsform 9: Verfahren nach einer der vorhergehenden Ausführungsformen, ferner umfassend:
      • Empfangen (232) einer Instruktion aus einem Thread, aus einer globalen Ressource zu lesen;
      • Überprüfen (234) eines oder mehrerer Register im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Lesezugriff auf die globale Ressource hat; und
      • in Reaktion auf das Bestimmen, dass der Thread Lesezugriff auf die globale Ressource hat, Erlauben (236) der Ausgabe der Instruktion.
    • Ausführungsform 10: Verfahren nach Ausführungsform 9, ferner umfassend:
      • in Reaktion auf das Bestimmen, dass der Thread keinen Lesezugriff auf die globale Ressource hat, Verhindern der Ausgabe der Instruktion und Auslösen (238) einer Ausnahme.
    • Ausführungsform 11: Verfahren nach Ausführungsform 9 oder 10, wobei das Überprüfen eines oder mehrerer Register im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Lesezugriff auf die globale Ressource hat, umfasst:
      • Überprüfen eines oder mehrerer lokaler Steuerregister im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Lesezugriff auf die globale Ressource hat, wobei jedes lokale Steuerregister einem der mehreren Threads zugeordnet ist.
    • Ausführungsform 12: Verfahren nach Ausführungsform 11, wobei das Überprüfen eines oder mehrerer lokaler Steuerregister im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Lesezugriff auf die globale Ressource hat, umfasst:
      • Zugreifen auf ein lokales Steuerregister, das jedem anderen Thread im Multithreaded-Prozessor zugeordnet ist; und
      • Bestimmen, ob eines der zugegriffenen lokalen Steuerregister die globale Ressource identifiziert, wobei, falls keines der zugegriffenen lokalen Steuerregister die globale Ressource identifiziert, der Thread Lesezugriff auf die globale Ressource hat.
    • Ausführungsform 13: Verfahren nach Ausführungsform 9 oder 10, wobei das Überprüfen eines oder mehrerer Register im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Lesezugriff auf die globale Ressource hat, umfasst:
      • Überprüfen (520, 522) eines globalen Steuerfeldes, das der globalen Ressource im Multithreaded-Prozessor zugeordnet ist, um zu bestimmen, ob der Thread Lesezugriff auf die globale Ressource hat.
    • Ausführungsform 14: Verfahren nach einer der vorhergehenden Ausführungsformen, wobei die Instruktion aus einem Thread, in eine globale Ressource zu schreiben, eine Instruktion aus einem Thread umfasst, einen alternativen Stapelzeiger in eine globale Ressource zu schreiben.
    • Ausführungsform 15: Verfahren nach einem der vorhergehenden Ansprüche, wobei die globale Ressource ein globales Register umfasst.
    • Ausführungsform 16: Multithreaded-Prozessor, umfassend:
      • mehrere Threads (105-108);
      • wenigstens eine globale Ressource (110); und
      • Hardware-Logik (403), die ausgelegt ist zum: Empfangen einer Instruktion aus einem der mehreren Threads, in eine globale Ressource zu schreiben; Überprüfen eines oder mehrerer Register im Multithreaded-Prozessor, um zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat; und in Reaktion auf das Bestimmen, dass der Thread Schreibzugriff auf die globale Ressource hat, Erlauben der Ausgabe der Instruktion.
    • Ausführungsform 17: Multithreaded-Prozessor nach Ausführungsform 16, wobei die Hardware-Logik ferner dafür ausgelegt ist, in Reaktion auf das Bestimmen, dass der Thread keinen Schreibzugriff auf die globale Ressource hat, das Ausgeben der Instruktion zu verhindern und eine Ausnahme auszulösen.
    • Ausführungsform 18: Multithreaded-Prozessor nach Ausführungsform 16 oder 17, der ferner mehrere lokale Steuerregister (112) umfasst, wobei jedes lokale Steuerregister einem der mehreren Threads zugeordnet ist, und wobei die Hardware-Logik dafür ausgelegt ist, durch Überprüfen eines oder mehrerer der lokalen Steuerregister zu bestimmen, ob der Thread Schreibzugriff auf die globale Ressource hat.
    • Ausführungsform 19: Multithreaded-Prozessor nach Ausführungsform 18, wobei jedes lokale Steuerregister ein oder mehrere Steuerfelder umfasst und jedes Steuerfeld dafür ausgelegt ist, Daten zu speichern, die eine oder mehrere globale Ressourcen im Multithreaded-Prozessor identifizieren.
    • Ausführungsform 20: Multithreaded-Prozessor nach Ausführungsform 19, wobei jedes Steuerfeld einer zuvor festgelegten Aufgabe zugeordnet ist.

Claims (8)

  1. Verfahren zum Verwalten globaler Ressourcen innerhalb eines Multithreaded-Prozessors, wobei der Multithreaded-Prozessor mehrere Hardware-Threads umfasst und das Verfahren umfasst: Empfangen (202) einer Instruktion aus einem Hardware-Thread, in eine globale Ressource zu schreiben; Überprüfen (204) eines globalen Steuerfelds in einem globalen Register im Multithreaded-Prozessor, um zu bestimmen, ob der Hardware-Thread Schreibzugriff auf die globale Ressource hat, wobei das globale Steuerfeld der globalen Ressource zugeordnet ist; in Reaktion auf das Bestimmen, dass der Hardware-Thread Schreibzugriff auf die globale Ressource hat, Erlauben (206) der Ausgabe der Instruktion; und in Reaktion auf das Bestimmen, dass der Hardware-Thread keinen Schreibzugriff auf die globale Ressource hat, Verhindern (208) der Ausgabe der Instruktion und Auslösen einer Ausnahme.
  2. Verfahren nach Anspruch 1, wobei die Instruktion aus einem Hardware-Thread, in eine globale Ressource zu schreiben, eine Instruktion aus einem Hardware-Thread umfasst, einen alternativen Stapelzeiger in eine globale Ressource zu schreiben.
  3. Verfahren nach einem der vorhergehenden Ansprüche, ferner umfassend: Empfangen (232) einer Instruktion aus einem Hardware-Thread, aus einer globalen Ressource zu lesen; Überprüfen (234) eines oder mehrerer Register im Multithreaded-Prozessor, um zu bestimmen, ob der Hardware-Thread Lesezugriff auf die globale Ressource hat; und in Reaktion auf das Bestimmen, dass den Hardware-Thread Lesezugriff auf die globale Ressource hat, Erlauben (236) der Ausgabe der Instruktion.
  4. Verfahren nach Anspruch 3, ferner umfassend: in Reaktion auf das Bestimmen, dass der Hardware-Thread keinen Lesezugriff auf die globale Ressource hat, Verhindern der Ausgabe der Instruktion und Auslösen (238) einer Ausnahme.
  5. Verfahren nach Anspruch 3 oder 4, wobei das Überprüfen eines oder mehrerer Register im Multithreaded-Prozessor, um zu bestimmen, ob der Hardware-Thread Lesezugriff auf die globale Ressource hat, umfasst: Überprüfen eines oder mehrerer lokaler Steuerregister im Multithreaded-Prozessor, um zu bestimmen, ob der Hardware-Thread Lesezugriff auf die globale Ressource hat, wobei jedes lokale Steuerregister einem der mehreren Hardware-Threads zugeordnet ist.
  6. Verfahren nach Anspruch 5, wobei das Überprüfen eines oder mehrerer lokaler Steuerregister im Multithreaded-Prozessor, um zu bestimmen, ob der Hardware-Thread Lesezugriff auf die globale Ressource hat, umfasst: Zugreifen auf ein lokales Steuerregister, das jedem anderen Hardware-Thread im Multithreaded-Prozessor zugeordnet ist; und Bestimmen, ob eines der zugegriffenen lokalen Steuerregister die globale Ressource identifiziert, wobei falls keines der zugegriffenen lokalen Steuerregister die globale Ressource identifiziert, der Hardware-Thread Lesezugriff auf die globale Ressource hat.
  7. Verfahren nach Anspruch 3 oder 4, wobei das Überprüfen eines oder mehrerer Register im Multithreaded-Prozessor, um zu bestimmen, ob der Hardware-Thread Lesezugriff auf die globale Ressource hat, umfasst: Überprüfen eines globalen Steuerfeldes, das der globalen Ressource im Multithreaded-Prozessor zugeordnet ist, um zu bestimmen, ob der Hardware-Thread Lesezugriff auf die globale Ressource hat.
  8. Multithreaded-Prozessor, umfassend: mehrere Hardware-Threads (105-108); wenigstens eine globale Ressource (110); und Hardware-Logik (403), die ausgelegt ist zum: Empfangen einer Instruktion aus einem der mehreren Hardware-Threads, in eine globale Ressource zu schreiben; Überprüfen eines globalen Steuerfelds in einem globalen Register im Multithreaded-Prozessor, um zu bestimmen, ob der Hardware-Thread Schreibzugriff auf die globale Ressource hat, wobei das globale Steuerfeld der globalen Ressource zugeordnet ist; und in Reaktion auf das Bestimmen, dass der Hardware-Thread Schreibzugriff auf die globale Ressource hat, Erlauben der Ausgabe der Instruktion, wobei die Hardware-Logik ferner dafür ausgelegt ist, in Reaktion auf das Bestimmen, dass der Hardware-Thread keinen Schreibzugriff auf die globale Ressource hat, das Ausgeben der Instruktion zu verhindern und eine Ausnahme auszulösen.
DE102013022405.5A 2012-08-30 2013-08-26 Schutz globaler Register in einem Multithreaded-Prozessor Active DE102013022405B3 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1215428.2 2012-08-30
GB1215428.2A GB2499277B (en) 2012-08-30 2012-08-30 Global register protection in a multi-threaded processor

Publications (1)

Publication Number Publication Date
DE102013022405B3 true DE102013022405B3 (de) 2018-08-02

Family

ID=47074967

Family Applications (3)

Application Number Title Priority Date Filing Date
DE102013022405.5A Active DE102013022405B3 (de) 2012-08-30 2013-08-26 Schutz globaler Register in einem Multithreaded-Prozessor
DE102013022299.0A Active DE102013022299B3 (de) 2012-08-30 2013-08-26 Schutz globaler Register in einem Multithreaded-Prozessor
DE102013014172.9A Active DE102013014172B4 (de) 2012-08-30 2013-08-26 Schutz globaler register in einem multithreaded-prozessor

Family Applications After (2)

Application Number Title Priority Date Filing Date
DE102013022299.0A Active DE102013022299B3 (de) 2012-08-30 2013-08-26 Schutz globaler Register in einem Multithreaded-Prozessor
DE102013014172.9A Active DE102013014172B4 (de) 2012-08-30 2013-08-26 Schutz globaler register in einem multithreaded-prozessor

Country Status (4)

Country Link
US (2) US8996847B2 (de)
CN (2) CN105138397B (de)
DE (3) DE102013022405B3 (de)
GB (1) GB2499277B (de)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9304702B2 (en) 2014-05-29 2016-04-05 Netapp, Inc. System and method for parallelized performance data collection in a computing system
US9477521B2 (en) 2014-05-29 2016-10-25 Netapp, Inc. Method and system for scheduling repetitive tasks in O(1)
US9256477B2 (en) * 2014-05-29 2016-02-09 Netapp, Inc. Lockless waterfall thread communication
US9760410B2 (en) * 2014-12-12 2017-09-12 Intel Corporation Technologies for fast synchronization barriers for many-core processing
US11544214B2 (en) * 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
CN105786525B (zh) * 2016-03-23 2019-01-25 鼎点视讯科技有限公司 一种进程模型向线程模型移植代码的方法及装置
US10037288B2 (en) * 2016-04-01 2018-07-31 Intel Corporation Memory protection at a thread level for a memory protection key architecture
WO2019046723A1 (en) * 2017-08-31 2019-03-07 MIPS Tech, LLC RELATED ADDRESSING OF GLOBAL POINTER IMPLICIT FOR ACCESS TO GLOBAL MEMORY
EP3462312B1 (de) 2017-09-29 2022-08-17 ARM Limited Ermöglichung einer nicht-abgebrochenen verarbeitung einer transaktion nach einem ausnahmemaskenaktualisierungsbefehl
GB2580327B (en) * 2018-12-31 2021-04-28 Graphcore Ltd Register files in a multi-threaded processor
CN111124622A (zh) * 2019-11-22 2020-05-08 深圳震有科技股份有限公司 一种多线程访问临界资源的方法、存储介质及智能终端
CN112130904B (zh) * 2020-09-22 2024-04-30 黑芝麻智能科技(上海)有限公司 处理系统、处理器间通信方法、以及共享资源管理方法
US12013791B2 (en) 2021-06-01 2024-06-18 International Business Machines Corporation Reset dynamic address translation protection instruction
US11593275B2 (en) 2021-06-01 2023-02-28 International Business Machines Corporation Operating system deactivation of storage block write protection absent quiescing of processors
CN113626205B (zh) * 2021-09-03 2023-05-12 海光信息技术股份有限公司 处理器、物理寄存器管理方法及电子装置

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4891753A (en) * 1986-11-26 1990-01-02 Intel Corporation Register scorboarding on a microprocessor chip
US5185872A (en) * 1990-02-28 1993-02-09 Intel Corporation System for executing different cycle instructions by selectively bypassing scoreboard register and canceling the execution of conditionally issued instruction if needed resources are busy
US5625789A (en) * 1994-10-24 1997-04-29 International Business Machines Corporation Apparatus for source operand dependendency analyses register renaming and rapid pipeline recovery in a microprocessor that issues and executes multiple instructions out-of-order in a single cycle
US7257814B1 (en) * 1998-12-16 2007-08-14 Mips Technologies, Inc. Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors
US7269714B2 (en) * 2001-09-24 2007-09-11 Broadcom Corporation Inhibiting of a co-issuing instruction in a processor having different pipeline lengths
US6842848B2 (en) * 2002-10-11 2005-01-11 Sandbridge Technologies, Inc. Method and apparatus for token triggered multithreading
US7185338B2 (en) * 2002-10-15 2007-02-27 Sun Microsystems, Inc. Processor with speculative multithreading and hardware to support multithreading software
US20040268093A1 (en) * 2003-06-26 2004-12-30 Samra Nicholas G Cross-thread register sharing technique
US7890735B2 (en) * 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture
GB2427045B (en) * 2005-06-06 2007-11-21 Transitive Ltd Method and apparatus for converting program code with access coordination for a shared resource
CN1917504A (zh) * 2005-08-20 2007-02-21 中兴通讯股份有限公司 一种避免资源数据共享访问导致死锁的加锁方法
US7584342B1 (en) * 2005-12-15 2009-09-01 Nvidia Corporation Parallel data processing systems and methods using cooperative thread arrays and SIMD instruction issue
US9274859B2 (en) * 2006-05-25 2016-03-01 Nvidia Corporation Multi processor and multi thread safe message queue with hardware assistance
US7836116B1 (en) * 2006-06-15 2010-11-16 Nvidia Corporation Fast fourier transforms and related transforms using cooperative thread arrays
US7757070B1 (en) * 2007-04-10 2010-07-13 Marvell International Ltd. Methods, apparatuses, and system for facilitating control of multiple instruction threads
US8140823B2 (en) * 2007-12-03 2012-03-20 Qualcomm Incorporated Multithreaded processor with lock indicator

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Kluge, F. et al.: Use of Helper Threads for OS Support in the Multithreaded Embedded TriCore 2 Processor. In: Proceedings Work-In-Progress-Session of the 13th IEEE Real-time and Embedded Technology and Applications Symposium, Bellevue, USA, 2007. pp. 25 -27 <http://cse.wustl.edu/Research/Lists/Technical %20Reports/Attachments/792/proceedings.pdf>(recherchiert am 16.2.2016)
TriCore 1 32-bit Unified Processor Core Volume 1 Core Architecture V 1.3 & V 1.31 Architecture User's Manual, V 1.3.8, January 2008, Ordering No. B158-H8581-G2-X-7600, Infineon Technologies AG

Also Published As

Publication number Publication date
CN105138397B (zh) 2019-08-30
GB2499277A (en) 2013-08-14
GB2499277B (en) 2014-04-02
DE102013014172A1 (de) 2014-03-06
GB201215428D0 (en) 2012-10-17
CN105138397A (zh) 2015-12-09
CN103678991B (zh) 2016-03-09
US20140068232A1 (en) 2014-03-06
CN103678991A (zh) 2014-03-26
US9727380B2 (en) 2017-08-08
US20150160981A1 (en) 2015-06-11
DE102013014172B4 (de) 2016-06-09
US8996847B2 (en) 2015-03-31
DE102013022299B3 (de) 2016-07-21

Similar Documents

Publication Publication Date Title
DE102013022405B3 (de) Schutz globaler Register in einem Multithreaded-Prozessor
DE102007025397B4 (de) System mit mehreren Prozessoren und Verfahren zu seinem Betrieb
DE112012000693B4 (de) Ausführen einer Vielzahl von Instanzen einer Anwendung
DE10394383B4 (de) Verfahren und Vorrichtung zum Laden eines vertrauenswürdigen Betriebssystems
DE4104781C2 (de) Speicherzugriffssteuerung
DE112010004963T5 (de) Synchronisieren von SIMD Vektoren
DE112007001714T5 (de) Virtualisieren von Leistungszählern
DE112010003971T5 (de) Vorübergehende Bereitstellung höherer Vorrechte für ein Rechensystem für eine Benutzerkennung
DE112013001711T5 (de) Optimieren von Unterroutine-Aufrufen auf der Grundlage der Architekturebene einer aufgerufenen Unterroutine
DE69818135T2 (de) Verfahren zum Zugriff auf Datenbankinformation
DE102007006190A1 (de) Techniken zur Verwendung von Speicher-Attributen
DE3606211A1 (de) Multiprozessor-computersystem
DE112005002402T5 (de) Hybride Hardware-/Software-Implementierung eines Transaktionsspeicherzugriffs
DE102015002191A1 (de) Sicherheits-Hypervisor-Funktion
WO2013110736A1 (de) Speichercontroller zur bereitstellung mehrerer definierter bereiche eines massenspeichermediums als unabhängige massenspeicher an einen master-betriebssystem - kern zur exklusiven bereitstellung an virutelle maschinen
DE102008058209A1 (de) Anordnung und Verfahren um zu verhindern, dass ein Anwenderbetriebssystem in einem VMM System eine Anordnung abschaltet, die von einem Servicebetriebssystem verwendet wird
DE112006002908T5 (de) Technik für die Kommunikation und Synchronisation von Threads
DE102018114322A1 (de) Architektur und Dienste zur Unterstützung der rekonfigurierbaren Synchronisation in einem Multiprozessorsystem
DE102006046717B4 (de) Dynamisch migrierende Kanäle
DE112016004301T5 (de) Vornehmen einer flüchtigen Fehleratomarität von Isolierungstransaktionen in einem nichtflüchtigen Speicher
DE19954407A1 (de) Verfahren zum direkten Aufrufen einer Funktion mittels eines Softwaremoduls durch einen Prozessor mit einer Memory-Management-Unit (MMU)
DE102013016114B3 (de) Bussystem und Verfahren für geschützte Speicherzugriffe
DE102013214218A1 (de) Verfahren und system zum überprüfen von software
DE102015210539A1 (de) Speicherschutzeinheit, Speicherverwaltungseinheit und Mikrocontroller
EP0265636A1 (de) Multiprozessor mit mehreren mit Cache-Speichern ausgerüsteten Prozessoren und einem gemeinsamen Speicher

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R129 Divisional application from

Ref document number: 102013022299

Country of ref document: DE

R016 Response to examination communication
R002 Refusal decision in examination/registration proceedings
R006 Appeal filed
R008 Case pending at federal patent court
R081 Change of applicant/patentee

Owner name: MIPS TECH, LLC (N.D.GES.D.STAATES DELAWARE), S, US

Free format text: FORMER OWNER: IMAGINATION TECHNOLOGIES LIMITED, KINGS LANGLEY, HERTFORDSHIRE, GB

R082 Change of representative

Representative=s name: CMS CAMERON MCKENNA NABARRO OLSWANG LLP, GB

Representative=s name: OLSWANG GERMANY LLP, DE

R019 Grant decision by federal patent court
R020 Patent grant now final
R082 Change of representative

Representative=s name: GLOBAL IP EUROPE PATENTANWALTSKANZLEI, DE

Representative=s name: CMS CAMERON MCKENNA NABARRO OLSWANG LLP, GB

R082 Change of representative

Representative=s name: GLOBAL IP EUROPE PATENTANWALTSKANZLEI, DE

R082 Change of representative

Representative=s name: GLOBAL IP EUROPE PATENTANWALTSKANZLEI, DE