DE3781406T2 - Steuerungsschema fuer segmentierte puffer, gegruendet auf gemeinsam genutzter referenzzaehlung. - Google Patents
Steuerungsschema fuer segmentierte puffer, gegruendet auf gemeinsam genutzter referenzzaehlung.Info
- Publication number
- DE3781406T2 DE3781406T2 DE19873781406 DE3781406T DE3781406T2 DE 3781406 T2 DE3781406 T2 DE 3781406T2 DE 19873781406 DE19873781406 DE 19873781406 DE 3781406 T DE3781406 T DE 3781406T DE 3781406 T2 DE3781406 T2 DE 3781406T2
- Authority
- DE
- Germany
- Prior art keywords
- buffer
- locator
- segment
- base buffer
- memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 239000000872 buffer Substances 0.000 title claims description 153
- 238000000034 method Methods 0.000 claims description 82
- 230000015654 memory Effects 0.000 claims description 71
- 241000353097 Molva molva Species 0.000 claims description 13
- 230000011218 segmentation Effects 0.000 claims description 11
- 230000003247 decreasing effect Effects 0.000 claims 1
- 230000008569 process Effects 0.000 description 61
- 238000007726 management method Methods 0.000 description 30
- 230000006870 function Effects 0.000 description 13
- 238000012546 transfer Methods 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000008571 general function Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/468—Specific access rights for resources, e.g. using capability register
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
- Computer And Data Communications (AREA)
- Multi Processors (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
- Die vorliegende Erfindung betrifft die Zuweisung und den gemeinsamen Zugriff auf Speicherraum in Datenverarbeitungssystemen und speziell die willkürliche Segmentierung eines zugewiesenen Puffers und die Weitergabe von Zugangsrechten für selektierbare Anteile eines Puffers im Speicher.
- In der Datenverarbeitung ist es oft notwendig, daß zwei Prozessoren oder Prozesse auf dieselben Daten Zugriff haben. Dies ist nicht nur der Grund für gemeinsam genutzten Speicher, sondern auch für zeitlich begrenzt zugeordnete Puffer. Der allgemeine Zugriff kann nicht nur notwendig sein, weil mehr als ein Prozessor zur ordnungsgemäßen Verarbeitung eines Datensatzes erforderlich ist, sondern er kann auch als brauchbarer Weg zur Weitergabe von auf dem einen Prozessor erzeugten oder gespeicherten Daten zu einem nachfolgend genutzten anderen Prozessor verwendet werden. Im folgenden bezeichnet der Ausdruck "Prozeß" generell eine Gesamtheit, die entweder ein Prozessor oder ein Prozeß sein kann (z. B. ein Programm, das eine spezifische Aufgabe ausführt).
- Verschiedene Verfahren der Speicherzuweisung und der gemeinsamen Nutzung von Speicherplatz sind bekannt und werden beispielsweise in folgenden Veröffentlichungen offengelegt:
- (a) IBM Handbuch SC19-6203 (August 1983): "Virtual Machine/System Product, System Programmer's Guide". In diesem Handbuch wird ein Funktionssystem beschrieben, in dem freie Speicher durch ein GETMAIN- oder DMSFREE-Makro zugewiesen werden können; zugewiesene Speicher können durch ein FREEMAIN- oder DMSFRET- Makro freigegeben werden. In Verbindung mit diesen Zuordnungs-/Freigabefunktionen sind weder gemeinsame Nutzung noch eine Referenzzählung erwähnt. Es ist nicht für die Abtrennung eines zugewiesenen Speichers gesorgt.
- (b) I.L.Traiger: "Virtual Memory Management for Database Systems." ACM OPERATING Systems Review, Ausgabe 16 Nr. 4, Oktober 1982, Seite 26-48. In dieser Veröffentlichung wird ein Datenspeichersystem beschrieben, in dem das Puffermanagement eine angeforderte Seite im Virtuellen Speicher (VM) lokalisiert oder sie dahinein lädt und eine Lokalisierfunktion ("fix") schafft, die die VM-Adresse an den Ersuchenden zurückgibt. Mehrfache Prozesse können auf dieselbe Kopie einer Seite zugreifen. Für jede Seite wird eine feste Zählung unterhalten, die die Anzahl der Ersuchen für Transaktionen angezeigt; die feste Zählung wird jedesmal verringert, wenn eine Transaktion ausgeführt ist. Eine Seite wird von einem Seitenrahmen des VM freigegeben und erst dann an den Plattenspeicher zurückgegeben, wenn die betreffende feste Zählung auf Null geht. Der Ablauf behandelt nur Seiten mit einer festen Größe; weder eine variable Puffergröße noch die Teilung von zugewiesenem Speicherraum steht zur Verfügung.
- (c) A.Bensoussan et al.: "The Multics Virtual Memory". ACM Zweites Symposium über Operating System Principles. Princeton University, 20.-22.Oktober 1968, S. 30-42. Es wird ein System beschrieben, in dem jedes Segment im Speicher von einem ersten Benutzer definiert wird und das seinen eigenen Beschreiber hat, der die Namen von erlaubten Benutzern enthält. Die Freigabe eines Segments wird nicht erörtert; die Namen aller Benutzer müssen in Listen durch das System geführt werden. Es ist weder die Teilung von zugewiesenem Speicherraum noch die Nutzung einer Referenzzählung erwähnt.
- Gewöhnlich wird dem allgemeinen Zugriff auf einen Prozeß entweder durch eine Management- oder eine Serviceeinheit auf Ersuchen stattgegeben; oder ein Prozeß, der schon das Zugriffsrecht auf einen Speicherbereich (sowie auf einen temporären Speicher) erhalten hat, kann Zugriffsrechte für den selben Bereich auf andere Prozesse "delegieren", muß dann aber die Spur für alle bestehenden Zugriffsrechte für "seinen" Speicherbereich offenhalten, sogar dann, wenn er selbst den Zugriff nicht länger benötigt.
- Das ist zum Beispiel dann unerwünscht, wenn der erste Prozeß seine Arbeit mit einigen Daten abgeschlossen hat, sie in den dafür bezeichneten Puffer gespeichert hat und keine weitere Verbindung zu diesem Puffer benötigen würde, wobei ein anderer Prozeß (der ein Zugriffsrecht vom ersten Prozeß innehält) noch einige Zeit den Pufferinhalt bearbeiten würde.
- Die Situation wird in Fig. 1 veranschaulicht. Ein Puffer B wurde einem Prozeß P1 durch das Managementprogramm des Hauptspeichers zugewiesen. Zusammen mit einem assistierenden Prozeß P2, dem P1 das Zugriffsrecht auf eine Untersektion S1 des Puffers B gegeben hat, bearbeitet P1 ein Problem, wobei die resultierenden Daten in B zurückgelassen werden. Ein anderer Prozeß P3 muß unabhängig diese resultierenden Daten bearbeiten können und würde ein Zugriffsrecht auf den ganzen Puffer B von P1 erhalten. Nach Abschluß ihrer Arbeit brauchen P1 und P2 keine Verbindung mehr zu B, aber P3 hat noch Bedarf an den Daten und kann sogar ein nachfolgendes Zugriffsrecht auf eine Teilmenge der in der Subsektion 2 gespeicherten Daten zu einem anderen Prozeß P4 erwünschen.
- Dies ist die Situation, in der die Erfindung außerordentlich helfen kann, die Operationen zu vereinfachen.
- Gegenstand der Erfindung ist es, eine Methode gemeinsamen Zugriffs durch viele Nutzer auf einen Puffer im Speicher hervorzubringen, die eine einfache Segmentierung und willkürliche Teilung jenes Puffers mit einem Minimum an Verwaltungsfunktionen erlaubt.
- Ein weiterer Gegenstand der Erfindung ist ein Verfahren zur Puffersegmentierung, durch die jeder Benutzer leicht Zugriffsrechte auf einen ganzen Puffer oder selektierbare Anteile davon durch einige einfache Funktionen auf einen anderen Benutzer übertragen kann.
- Ein weiterer Gegenstand der Erfindung ist der gemeinsame Zugriff auf einen Puffer und ein Verfahren zur Segmentierung, in dem der erste oder anfängliche Nutzer eines Puffers ein Zugriffsrecht auf einen anderen Nutzer übertragen kann ohne das vermerken zu müssen, und in dem dieser anfängliche Nutzer auf die Nutzung des Puffers sowie auf jede Verbindung zu ihm verzichten kann, sogar wenn andere Nutzer noch mit dem selben Puffer arbeiten, und in dem der ganze Puffer schließlich von irgendeinem Nutzer freigegeben werden kann, der ihn oder ein Teilsegment davon ohne irgendwelche Beteiligung durch den ersten oder anfänglichen Nutzer abschließend freigibt.
- Die Gegenstände der Erfindung werden durch ein Verfahren, wie in Anspruch 1 beschrieben, erreicht. In diesem Verfahren werden drei einfache Funktionen zur Übertragung wesentlicher Pufferanforderungen und Puffersegmentanforderungen als auch zur Nachrichtenfreigabe zum Speichermanagementsystem geschaffen; ein Lokalisierer, der irgendein Puffersegment definiert, wird als Zugriffszeichen benutzt, das vom Speichermanagement bereitgestellt wird und kann zwischen zwei Nutzern (Prozessen) weitergegeben werden. Für den gesamten Puffer und irgendeinen Teil davon (z. B. alle Segmente, sogar wenn sie überlappen), wird eine einzige Referenzzählung aufrecht erhalten, so daß die Handhabung der Puffersegmente außerordentlich vereinfacht wird.
- Diese und weitere Vorteile der Erfindung werden durch nachfolgende detaillierte Beschreibung einer Anwendung offensichtlich, die sich auf die Zeichnungen bezieht.
- Fig. 1 veranschaulicht die allgemeine Situation, in der die Erfindung benutzt wird;
- Fig. 2 zeigt das Prinzip der Erfindung mit den drei Grundfunktionen zur Anforderung und Freigabe der Puffersegmente;
- Fig. 3 zeigt die Formate der drei Grundfunktionen und des Lokalisierers, der im erfindungsgemäßen Verfahren benutzt wird;
- Fig. 4 ist ein Beispiel für eine Pufferzuweisungstabelle;
- Fig. 5 ist ein Diagramm eines detaillierteren Beispiels einer Pufferzuweisungs- und Segmentierungssequenz mit drei Nutzern;
- Fig. 6 stellt eine alternative Lösung zur Pufferadressierung durch einen Zeiger und zur Speicherung der gemeinsamen Referenzzählung dar.
- In Fig. 2 ist das Prinzip der Pufferzuweisung und des Segmentations/Replikationsverfahrens dargestellt. Es basiert auf drei einfachen Funktionen: GET, REPLICATE, und RETURN.
- Als eine Grundvoraussetzung wird angenommen, daß in dem Datenverarbeitungssystem, in dem die Erfindung ausgeführt wird, ein Mechanismus existiert, der den Speichervorrat (Memory) des Systems managt. Dieser Mechanismus wird im folgenden als "Speichermanagement" bezeichnet. Dieser Mechanismus unterhält eine Aufzeichnung des gesamten verfügbaren Speicherraums und jener Sektionen oder Bereiche eines Speichers, die einem Programm oder Prozeß zugewiesen sind. Bei Anforderung durch einen Prozeß, der Speicherplatz benötigt, bestimmt das Speichermanagement aus seinen Aufzeichnungen, wo eine Speichersektion der erforderlichen Größe noch frei (unbenutzt) ist, und weist diese Sektion dem Prozeß, entsprechend Anforderung, zu und ändert seine Aufzeichnungen entsprechend. Sobald der Prozeß, dem die Sektion zugewiesen wurde, dem Speichermanagement meldet, daß er den zugewiesenen Raum nicht länger benötigt, nimmt ihn das Speichermanagement zurück, z. B. indem sie die betreffende Sektion dem "freien" Speicherraum durch Änderung seiner Aufzeichnungen zurückführt. Solche Techniken zum Speichermanagement sind wohlbekannt, beispielsweise aus dem Buch von P.A. Janson "Operating Systems - Structures and Mechanisms", Academic Press 1985 (Chapter V.2: Main Memory Management - Space Allocation, S. 110-116).
- Wenn ein Prozeß anfangs einen Puffer einer gegebenen Größe benötigt, sendet er eine GET Anforderung an das Speichermanagement des Hauptspeichers. Das Format der GET Anforderung (sowie andere Formate) ist in Fig. 3 dargestellt. Das einzige Argument ist ein einfacher Wert (z. B. 2 Bytes), der die Länge des angeforderten Puffers in der Anzahl der Bytes angibt.
- Das Speichermanagement sucht dann im Hauptspeicher nach einem freien Speicherbereich der vorgegebenen Länge und weist diesen Raum zu, indem es den Startadressenzeiger und den Längenwert in eine Zuweisungstabelle (wie gewöhnlich) aufnimmt, s. Fig. 4. Es öffnet auch einen Zähler für eine Referenzzählung, der als zusätzlicher Eintrag (wie in Fig. 4 dargestellt) in der Zuweisungstabelle angeordnet, aber auch ein Teil des Puffers selbst sein kann, z. B. sein erstes Byte, oder eine Präambel zum Puffer (wie in Fig. 2 und 5 dargestellt). Die Referenzzählung gibt an, wieviele Zugriffsrechte für den betreffenden Puffer oder einen Teil von ihm existieren und ist anfangs auf 1 gestellt.
- Nun gibt das Speichermanagement einen Lokalisierer an den anfordernden Prozeß zurück, dessen Format in Fig. 3B dargestellt ist. Der Lokalisierer enthält einen Zeiger PTR, durch den die Startadresse des zugewiesenen Puffers identifiziert ist (es kann aber die Startadresse auch selbst sein), sowie einen Offsetwert und einen Längenwert. Am Anfang oder beim ersten Lokalisierer ist der Ausgleichswert Null und der Längenwert hängt von der vollen Länge des zugewiesenen Puffers ab. Dieser Lokalisierer gibt dem anfordernden Prozeß das Recht, den identifizierten Puffer zu benutzen, aber auch den ganzen Puffer oder irgendeinen Teil (Subsektion) davon auf einen anderen Prozeß zu übertragen.
- Es sollte bemerkt werden, daß eine Speicherzuweisungstabelle nur eine Möglichkeit für das Speichermanagementprogramm ist, um über den zugewiesenen Speicherraum auf dem Laufenden zu bleiben. Eine andere Möglichkeit ist z. B. die Verkettung der zugewiesenen Speicher, wobei die Zuweisungsinformation in einem Feld vor jedem Puffer gespeichert wird, wo auch das Feld für die erfindungsgemäße Gebrauchszählung angeordnet werden kann.
- Wenn irgendeinem Prozeß das Zugriffsrecht auf einen Teil eines Puffers gegeben werden soll, der bereits einem anderen Prozeß zugewiesen ist, wird eine REPLICATE-Anforderung an das Speichermanagement gesendet. Das Format ist in Fig. 3C dargestellt. Die REPLICATE-Anforderung enthält den Lokalisierer, der den Grundpuffer identifiziert plus einen zusätzlichen Offsetwert und einen zusätzlichen Längenwert, um die Länge des angeforderten Segments sowie seine Lokalisierung innerhalb des Grundpuffers (s. Fig. 2) anzugeben.
- Bei Erhalt der REPLICATE Anforderung macht das Speichermanagement zumindest folgendes:
- (a) Erhöhung der Referenzzählung im Zähler, der dem Grundpuffer (der durch den Zeiger identifiziert wird) durch eine Einheit zugeordnet ist;
- (b) Rückgabe eines anderen Lokalisierers (im Format wie in Fig.
- 3B dargestellt), der zusammengesetzt ist aus: Dem (Basiszeiger, dem zweiten Ausgleich, und der zweiten Länge, die in der REPLI- CATE-Anforderung gegeben waren. Mit diesem Lokalisierer wird zuerst der Prozeß ausgestattet, der die REPLICATE-Anforderung herausgegeben hat, kann dann aber an den Prozeß gesendet werden, der das "replizierte" Puffersegment nutzen sollte. Jeder infolge einer REPLICATE-Anforderung erzeugte/zurückgegebene Lokalisierer gibt seinem Halter dasselbe Recht wie der erste Lokalisierer, der infolge der anfänglichen GET-Anforderung erzeugt wurde: der innehabende Prozeß kann das identifizierte Puffersegment nutzen, er kann aber auch das Recht zur Nutzung jenes Untersegments oder eines Teils davon auf einen anderen Prozeß übertragen.
- Es sollte bemerkt werden, daß ein Puffersegment, das infolge einer REPLICATE-Anforderung zugewiesen ist, ein anderes Segment im selben Puffer überlappen kann. Es kann auch die gleiche Größe wie der gesamte Puffer haben (wenn der Lokalisierer in der RE- PLICATE-Anforderung der anfängliche Lokalisierer des Puffers war, und die Offset- und Längenwerte, die zusätzlich in der RE- PLICATE-Anforderung angegeben sind, identisch mit jenen des anfänglichen Lokalisierers sind).
- Zusätzlich zur Ausgabe eines Lokalisierers an den anfordernden Prozeß kann das Speichermanagement auch einige Kontrollen durchführen, um eine zuverlässige Funktion sicherzustellen: Es kann prüfen, ob der Lokalisierer, der in der REPLICATE-Anforderung enthalten ist, einen Pufferraum identifiziert, der zugewiesen ist, es kann prüfen, ob der Offset und die Länge des angeforderten Puffersegments innerhalb des Bereichs des ursprünglichen (Basis-)Puffers liegen, und es kann auch eine Tabelle mit zusätzlichen Informationen für jeden Puffer aufstellen, so daß weitere Tests oder Funktionen in Verbindung mit jeder Änderung des Zugriffsrechts auf einen zugewiesenen Puffer ausgeführt werden können. Es muß jedoch keine dieser Zusatzfunktionen in einem System, das die Erfindung nutzt, ausgeführt sein. Es ist lediglich notwendig für das Speichermanagement eine Aufzeichnung der Grundpufferzuweisung und einen Referenzzähler zu haben, der damit in Verbindung steht, einen Lokalisierer infolge einer GEToder REPLICATE- Anforderung aus zugeben und den Referenzzähler zu identifizieren, seinen Inhalt zu ändern und seine neuen Inhalte auf den Erhalt eines Lokalisierers zu prüfen.
- Zur Zusammenfassung: Jeder Prozeß, der ein Zugriffsrecht auf einen Puffer oder ein Puffersegment hat, z. B. irgendein Prozeß, der einen Lokalisierer besitzt, kann sein Zugriffsrecht (für den ganzen oder für einen Teil "seines" Segments) auf einen anderen Prozeß weiterdelegieren; der dem Puffer (Zeiger) zugeordnete Referenzzähler gibt die Anzahl der ausgegebenen Lokalisierer wieder und auf diese Weise die Anzahl der existierenden Zugriffsrechte auf den gesamten Puffer oder irgendeinen Teil davon.
- Wenn ein Prozeß den Puffer oder ein ihm durch einen Lokalisierer zugewiesenes Segment nicht mehr länger benötigt, sendet er eine RETURN-Nachricht an das Speichermanagement, das gerade den betreffenden Lokalisierer enthält (s. Fig. 3D).
- Bei Erhalt der RETURN-Nachricht greift das Speichermanagement auf den durch den Zeiger identifizierten Referenzzähler zu und reduziert seinen Inhalt um eins. Weiterhin prüft es, ob die Referenzzählung null geworden ist. Wenn dies der Fall ist, weist das Speichermanagement den gesamten Puffer zurück, indem es die Aufnahme in die Zuweisungstabelle löscht (und andere gewöhnliche Schritte ausführt, die mit einer Zurückweisungsprozedur verbunden sind), weil kein Prozeß mehr den gesamten Puffer oder einen Teil davon nutzt. Der Referenzzähler wird ebenfalls gestrichen (wenn er in einer anderen Position lag als die Zuweisungstabelle oder der Puffer selbst).
- Es ist wichtig zu bemerken, daß die letzte RETURN-Anwendung auf einen zugewiesenen Puffer nicht von dem Prozeß hervorgerufen werden muß, der anfangs den gesamten Puffer angefordert hat.
- Sobald dieser erste (anfordernde) Prozeß den Puffer nicht mehr benötigt, kann er sich durch Rückgabe des Lokalisierers an das Speichermanagement in einer RETURN-Nachricht "verabschieden", und es braucht nicht irgendwo aufgezeichnet zu werden. Die anderen Prozesse, die später in dem Puffer "eingeschrieben" werden, können ihn weiterhin unabhängig nutzen ohne irgendeine Beteiligung des ersten anfordernden Prozesses.
- Es sollte bemerkt werden, daß ein Prozeß eine Mehrzahl von Lokalisierern innehaben (halten) kann, die mit demselben physikalischen Puffer B in Verbindung stehen. Ein erster Prozeß P1, der einen ganzen Puffer B "innehat", könnte z. B. einen Lokalisierer L1 für das erste Viertel der Pufferlänge und einen anderen Lokalisierer L2 für das letzte Drittel der Pufferlänge erhalten, und könnte beide Lokalisierer an denselben Prozeß P2 weiterreichen, der sie dann unabhängig zum Zugriff auf die betreffenden Puffersegmente nutzen würde.
- Formal können die drei Operationen, die das erfindungsgemäße Verfahren zur Pufferzuweisung und -segmentation darstellen, folgendermaßen beschrieben werden (Vorgang-Aufruf-Notation):
- * Locator: = GET (Länge) *
- * Locator: = REP (Lokalisierer, Offset, Länge) *
- * RET (Lokalisierer) Ein wichtiges Merkmal der vorliegenden Erfindung ist der Umstand, daß eine einzige Referenzzählung (CNT) für einen ganzen Puffer und seine Subsektionen (Segmente) bereitgestellt ist. Auf diese Weise ist es nicht notwendig, für jeden Teil eines Puffers, für den ein separates Zugriffsrecht gegeben ist, eine separate Referenzzählung einzurichten. Dies vereinfacht die Verwaltungsoperationen wesentlich und erlaubt im speziellen, daß der anfängliche Anforderer des Puffers sich "verabschieden" kann (RETURN seines Lokalisierers), bevor der gesamte Puffer zurückgenommen ist, und daß ein Prozeß, der nur für ein Teilsegment des Puffers ein Zugriffsrecht (Lokalisierer) hält, der abschließende Prozeß sein kann, der den gesamten Puffer für die Zurücknahme freigibt.
- In Verbindung mit Fig. 5 wird nun ein detaillierteres Beispiel des Pufferzuweisungs- und Segmentierungsverfahrens der vorliegenden Erfindung erklärt. Für das Beispiel wird angenommen, daß drei Prozesse P0, P1 und P2 beteiligt sind; daß P0 anfangs einen Puffer B anfordert und dem Prozeß P1 das Recht gibt, Segment S1 zu nutzen; und daß P1 dem Prozeß P2 das Recht gibt, das Segment S1 zu nutzen.
- Die Felder in Fig. 5 repräsentieren die drei Prozesse, das Speichermanagement, beziehungsweise den Speicher selbst.
- Die numerierten Pfeile zwischen den Feldern stellen den Informationstransfer dar; und die Kreise mit den Großbuchstaben repräsentieren Aktionen des Speichermanagements.
- Im folgenden ist das Speichermanagement als MM bezeichnet und der Basispuffer beziehungsweise anfangs zugewiesene Puffer ist mit B bezeichnet.
- Folge von Ereignissen eines vollständigen Pufferzuweisungs-, Segmentierungsund Rücknahmezyklus:
- 1) P0 sendet eine GET Anforderung an MM, wobei die Anfangs- oder Basislänge LENG&submin;0 des erwünschten Puffers übertragen wird.
- A) MM sucht nach einem freien Speicherbereich der Größe LENG&submin;0 und weist ihn zu; eröffnet einen Zähler und setzt seinen Inhalt CNT = 1; und erzeugt einen Lokalisierer L0, der die Pufferstartadresse PTR, einen anfänglichen Offset OFFS&submin;0 des Wertes Null und die anfängliche Länge LENG&submin;0 enthält.
- 2) Der Lokalisierer L0 wird auf P0 übertragen, der ihn dann besitzt.
- * P0 arbeitet jetzt mit Puffer B. In der Folge entsteht * ein Bedarf, dem Prozeß P1 ein Zugriffsrecht für * einen spezifischen Anteil S1 des Puffers zu geben.
- 3) P0 sendet eine REPLICATE-Anforderung an MM, bestehend aus: Lokalisierer L0 (= PTR; OFFS&submin;0; LENG&submin;0), Offsetwert OFFS&submin;1 (= der erwünschte Abstand zwischen dem Beginn des Puffer B und dem Beginn des Segments S1), und dem Längenwert LENG&submin;1 (= die gewünschte Größe des Segments S1).
- B) Unter Anwendung des PTR von L0 findet das MM den mit Puffer B (z. B. mit PTR) verbundenen Zähler, und erhöht seinen Inhalt um 1, so daß der Neue CNT = 2 enthält; als Option überprüft es, ob, wie von L0 spezifiziert, ein Puffer B verfügbar (zugewiesen) ist, und ob das Segment, das durch OFFS&submin;1 und LENG&submin;1 spezifiziert ist, in jenen Puffer B paßt; und schließlich erzeugt das MM einen anderen Lokalisierer L1 mit folgendem Inhalt: PTR (demselben Zeiger wie in L0) OFFS&submin;1 und LENG&submin;1.
- 4) Der Lokalisierer L1, der das Puffersegment S1 vollständig spezifiziert, wird auf den anfordernden Prozeß P0 übertragen.
- 5) P0 stattet P1 mit dem Lokalisierer L1 aus, der ihn dann besitzt. P0 ist nicht länger verantwortlich für L1 und behält auch keine Aufzeichnungen über ihn.
- * P1 arbeitet nun mit Puffersegment S1. In der Folge * entsteht eine Notwendigkeit, dem Prozeß P2 ein * Zugriffsrecht für einen bestimmten Anteil des * Puffersegments S1 zu geben.
- 6) P2 sendet eine REPLICATE-Anforderung an das MM mit folgendem Inhalt: Lokalisierer L1 (= PTR; OFFS&submin;1; LENG&submin;1), Offsetwert OFFS&submin;2 (= der erwünschte Abstand zwischen dem Beginn des Puffers B und dem Beginn des Segments S2) und dem Längenwert LENG&submin;2 (= die erwünschte Größe des Segments S2).
- C) Unter Verwendung des PTR von L1 findet das MM den Zähler, der mit dem Puffer B (z. B. mit PTR) verbunden ist und erhöht seinen Inhalt um 1, so daß der Neue CNT = 3 enthält; optional überprüft es, ob ein Puffer B verfügbar ist, der ein Puffersegment, wie durch L1 spezifiziert, enthält, und ob das Segment, das durch OFFS&submin;2 und LENG&submin;2 spezifiziert ist, in jenen Puffer B paßt; und schließlich erzeugt das MM einen weiteren Lokalisierer L2 mit folgendem Inhalt: PTR (derselbe Zeiger wie in L0 und L1), OFFS&submin;2 und LENG&submin;2.
- 7) Der Lokalisierer L2, der das Puffersegment S2 vollständig spezifiziert, wird auf den anfordernden Prozeß P1 übertragen.
- 8) P1 stattet P2 mit dem Lokalisierer L2 aus, der ihn dann besitzt. P2 ist nicht länger verantwortlich für L1 und behält auch keine Aufzeichnungen über ihn.
- * P2 arbeitet nun mit dem Puffersegment S2. Sobald er * S2 nicht mehr benötigt, gibt er das Zugriffsrecht auf.
- 9) P2 sendet eine RETURN-Nachricht, die den Lokalisierer L2 enthält an das MM.
- D) Unter Verwendung des PTR von L2 findet das MM den Zähler, der mit dem Puffer B (z. B. mit PTR) verbunden ist und verringert seinen Inhalt um 1, so daß der Neue CNT = 2 enthält; es überprüft auch, ob der neue Inhalt Null ist. Wenn das Testergebnis negativ ist, geschieht keine weitere Aktion.
- * Während P1 noch mit dem Puffersegment S1 arbeitet, * bestimmt P0, daß er nicht länger Zugriff auf den * Puffer benötigt, * und gibt das Zugriffsrecht auf.
- 10) P0 sendet eine RETURN-Nachricht an das MM, die den Lokalisierer L0 enthält.
- E) Unter Verwendung des PTR von L0 findet das MM den Zähler, der mit dem Puffer B (z. B. mit PTR) verbunden ist und verringert seinen Inhalt um 1, so daß der Neue CNT = 1 enthält; es überprüft auch, ob der neue Inhalt Null ist. Wenn das Testergebnis negativ ist, geschieht keine weitere Aktion.
- * P1 ist der letzte Prozeß, der ein Zugriffsrecht auf * irgendeinen Anteil des Puffers B hat (jedoch ist * diese Tatsache dem P1 nicht bekannt).
- * Sobald er keinen Zugriff mehr auf sein Puffersegment * benötigt, sendet er eine Aufgabennachricht an das * Speichermanagement, wie es die anderen Prozesse getan * haben.
- 11) P1 sendet eine RETURN-Nachricht an das MM, die den Lokalisierer L1 enthält.
- F) Unter Verwendung des PTR von L1 findet das MM den Zähler, der mit Puffer B (z. B. mit PTR) verbunden ist und verringert seinen Inhalt um 1, so daß der Neue CNT = 0 enthält; es überprüft auch, ob der neue Inhalt Null ist. Das Testergebnis ist jetzt positiv und zeigt damit an, daß kein Prozeß mehr den Puffer benötigt.
- G) Das MM nimmt jetzt den Puffer B zurück, und fügt ihn z. B. zum freien Speicherbereich zu.
- Die allgemeinen Funktionen des Speichermanagements wie das Finden einer freien Pufferbereich der gewünschten Größe und ihre Zuweisung und später die Zurücknahme jenes Speicherbereichs und dessen Rückgabe an die freie Seicherreserve sind wohlbekannt, denn sie wurden bereits oben erwähnt und müssen deshalb nicht im Detail beschrieben werden.
- Im folgenden werden numerische Musterwerte für das obige Beispiel eines Pufferzuweisungs- und Segmentierungs-Verfahrens gegeben. Es wird auf die Zuweisungstabelle, die in Fig. 4 dargestellt ist Bezug genommen in der der Längenwert als Anzahl von Bytes gegeben ist. Der verwendete Zeiger kann entweder die Startadresse des betreffenden Puffers oder eine Hilfsadresse sein (wie auf der linken Seite der Zuweisungstabelle in Klammern angegeben), die eine Speicherlokalisierung identifiziert, wo die Startadresse gefunden wurde (wie im nächsten Abschnitt ausgeführt wird).
- Annahme: Der Grundpuffer B beginnt beim Speicherstelle Nummer 16.824, die Länge beträgt 512 Bytes; Segment 1 beginnt mit einem Offset von 128 Bytes, die Länge beträgt 256 Bytes; und Segment S2 beginnt mit einem Offset von 192 Bytes, die Länge beträgt 64 Bytes.
- GET-Anforderung: GET/152
- Lokalisierer L0: 16.824/000/512
- REPLICATE-Anforderung: REP/16.824/000/512/128/256
- Lokalisator L1: 16.824/128/256
- REPLICATE-Anforderung: REP/16.824/128/256/192/064
- Lokalisator L2: 16.824/192/064
- RETURN-Nachricht: RET/16.824/192/064 (L2) RETURN-Nachricht: RET/16.824/000/512 (L0) RETURN-Nachricht: RET/16.824/128/256 (L1)
- Der vollständige Transfer eines Puffers oder Segments von einem Prozeß zu einem anderen erfordert weder eine REPLICATE-Anforderung noch eine RETURN-Funktion. Nur der betreffende Lokalisierer würde von Prozeß A zu Prozeß B übertragen werden, und es sind keine anderen Verwaltungsoperationen erforderlich.
- Wie oben beschrieben, kann der Zeiger PTR in einem Lokalisierer die Startadresse des betreffenden Puffers im Speicher sein; der Zähler könnte ein 1 Byte großes Feld innerhalb des Puffers sein oder dem Puffer unmittelbar vorangehen.
- Es sind jedoch auch andere Lösungen möglich. Eine alternative Möglichkeit ist in Fig. 6 dargestellt. Der Zeiger PTR in jedem Lokalisierer würde auf eine Hilfsspeicherposition deuten, die einen Zähler (CNT, 1 Byte) enthält und die Startadresse des Puffers, der mit dem Zeiger in Verbindung steht. Offsetwert und Längenwert des Lokalisierers wurden die Position und die Größe des betreffenden Puffersegments auf dieselbe Art und Weise bestimmen, wie bereits beschrieben.
Claims (5)
1. Verfahren zum Ermöglichen eines gemeinsamen Zugriffs von
mehreren Benutzern auf einen Puffer in einem Speicherraum, wobei
nach diesem Verfahren ein Benutzer eine Zuweisung eines
Speicherraums von einer Speicherverwaltung anfordern kann und bei
welchem eine Referenzzählung für einen zugewiesenen Speicherraum
aufrechterhalten wird, um seine aktuelle Nummer von Benutzern
anzuzeigen,
gekennzeichnet durch die folgenden, von einer Speicherverwaltung
ausgeführten Schritte:
(a) nach dem Empfangen einer Anfangsanforderung (GET) von einem
ersten Benutzer, Anzeigen der Größe (Leng&submin;0) des erforderlichen
Puffers,
Zuweisen eines Basispuffers (B) erforderlicher Größe,
Rückführen eines ersten Lokalisierers (L0), welcher mittels
eines Zeigers (PTR) den Basispuffer (B) identifiziert, eines
Abweichungswertes (OFFS&submin;0) und eines Längenwertes (LENG&submin;0) zu dem
ersten Benutzer, wodurch ein Benutzer, der einen Lokalisierer
(Li) empfangen hat, berechtigt ist, unter Verwendung einer
Wiederholungsanforderung (REP) die Zuweisung irgendeines Teils des
entsprechenden Puffers anzufordern,
Beginnen einer Referenzzählung (CNT) für den Basispuffer (B),
die ursprünglich auf 1 gesetzt ist;
(b) nach dem Empfangen einer Wiederholungsanforderung (REP)
eines berechtigten Benutzers für den ganzen Basispuffer (B) oder
einen Teil desselben, wie von dem ersten Lokalisierer (L0)
identifiziert, und mit einem anderen Abweichungswert (OFF&submin;i) und
einem anderen Längenwert (LENG&submin;i):
Rückführen eines anderen Lokalisierers (Li), der ein
Puffersegment identifiziert, das gleich ist dem Basispuffer (B) oder
einem erforderlichen Teil desselben, zu dem anfordernden Benutzer,
wobei der andere Lokalisierer (Li), der zu einem anderen
Benutzer
übertragen werden könnte, den Zeiger (PTR) des ersten
Lokalisierers (L0) enthält und der andere Abweichungswert (OFFS&submin;i)
und der andere Längenwert (LENG&submin;i) die Position und die Länge
des Puffersegments definieren,
Erhöhen des Wertes der Referenzzählung, welche dem Basispuffer
(B) zugeordnet ist, um eine Einheit;
(c) Behandeln aller weiteren Anforderungen von Benutzern für
irgendein ganzes Puffersegment oder einen Teil desselben, das
von einem Lokalisierer mit Bezug auf den Basispuffer (B)
identifiziert ist, auf dieselbe Weise, wie beim Schritt b;
(d) nach dem Empfangen einer Freigabe (RET)-Nachricht für ein
von irgendeinem Lokalisierer (Li) identifiziertes Puffersegment:
Bestimmen des zugeordneten Basispuffers (B),
Verringern der entsprechenden Referenzzählung um eine Einheit,
(e) wenn die Referenzzählung (CNT) den Zählwert Null erreicht;
Freigeben des entsprechenden Basispuffers (B);
wodurch eine Puffersegmentierung und eine teilweise Zuweisung
möglich ist, ohne daß es für eine Speicherverwaltung notwendig
ist, über Benutzer und Segmente des Basispuffers (B) Buch zu
führen,
und wodurch der erste Benutzer des Basispuffers (B) über andere
Benutzer desselben Puffers oder irgendein Segment desselben kein
Buch führen muß und vor einem anderen Benutzer eines Segments
des Basispuffers durch eine Freigabe (RET)-Nachricht seinem
Lokalisierer zu einer Speicherverwaltung so rückführen kann, daß
eine Endfreigabe des Basispuffers von einem solchen anderen
Benutzer veranlaßt werden kann, wenn er durch eine Freigabe (RET)-
Nachricht seinen Lokalisierer zu einer Speicherverwaltung
rückführt.
2. Verfahren nach Anspruch 1, gekennzeichnet durch den folgenden
zusätzlichen Schritt:
Vorsehen eines Speicherfeldes für die Referenzzählung (CNT)
innerhalb des Basispuffers (B)
3. Verfahren nach Anspruch 1, gekennzeichnet durch den folgenden
zusätzlichen Schritt:
Vorsehen eines der Ausgansposition des Basispuffers (B)
benachbarten Speicherfeldes für die Referenzzählung (CNT).
4. Verfahren nach Anspruch 1, gekennzeichnet durch den folgenden
zusätzlichen Schritt:
Vorsehen einer Zwischenspeicherstelle mit einem Feld zum
Speichern der Ausgangsadresse des Basispuffers (B) und mit einem
anderen Feld zum Speichern der Referenzzählung (CNT), wobei der
Zeiger die Adresse der Zwischenspeicherstelle bestimmt.
5. Verfahren nach Anspruch 1, dadurch gekennzeichnet, daß der
Abweichungswert (OFFS&submin;0) in dem ersten Lokalisierer (L0) gleich
Null ist.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP19870108300 EP0294499B1 (de) | 1987-06-09 | 1987-06-09 | Steuerungsschema für segmentierte Puffer, gegründet auf gemeinsam genutzter Referenzzählung |
Publications (2)
Publication Number | Publication Date |
---|---|
DE3781406D1 DE3781406D1 (de) | 1992-10-01 |
DE3781406T2 true DE3781406T2 (de) | 1993-04-01 |
Family
ID=8197057
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE19873781406 Expired - Fee Related DE3781406T2 (de) | 1987-06-09 | 1987-06-09 | Steuerungsschema fuer segmentierte puffer, gegruendet auf gemeinsam genutzter referenzzaehlung. |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP0294499B1 (de) |
JP (1) | JPS63311556A (de) |
DE (1) | DE3781406T2 (de) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5852719A (en) * | 1995-12-20 | 1998-12-22 | Tandem Computers Incorporated | System for transferring data over a network in which a data source sends only a descriptor which a data sink uses to retrieve data |
FR2829848A1 (fr) * | 2001-09-20 | 2003-03-21 | Cp8 | Procede de gestion d'acces a des ressources partagees dans un systeme embarque et systeme embarque pour la mise en oeuvre d'un tel procede |
JP2005100262A (ja) | 2003-09-26 | 2005-04-14 | Seiko Epson Corp | メモリ管理装置およびメモリ管理プログラム、並びにメモリ管理方法 |
DE102004042172A1 (de) * | 2004-08-31 | 2006-03-09 | Advanced Micro Devices, Inc., Sunnyvale | Segmentierter chipinterner Speicher und Arbitrierung anfordernder Einrichtungen |
FR2937755B1 (fr) | 2008-10-24 | 2010-12-31 | Commissariat Energie Atomique | Dispositif pour gerer des tampons de donnees dans un espace memoire reparti sur une pluralite d'elements de memoire |
CN103838679B (zh) | 2012-11-22 | 2017-08-04 | 中兴通讯股份有限公司 | 一种缓存处理方法及装置 |
WO2017056132A1 (ja) * | 2015-10-01 | 2017-04-06 | ルネサスエレクトロニクス株式会社 | 半導体装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3839706A (en) * | 1973-07-02 | 1974-10-01 | Ibm | Input/output channel relocation storage protect mechanism |
-
1987
- 1987-06-09 DE DE19873781406 patent/DE3781406T2/de not_active Expired - Fee Related
- 1987-06-09 EP EP19870108300 patent/EP0294499B1/de not_active Expired
-
1988
- 1988-04-28 JP JP10446888A patent/JPS63311556A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
JPS63311556A (ja) | 1988-12-20 |
EP0294499B1 (de) | 1992-08-26 |
DE3781406D1 (de) | 1992-10-01 |
EP0294499A1 (de) | 1988-12-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69802437T2 (de) | Feinkörniger übereinstimmungsmechanismus für optimistische parallelsteuerung mit verriegelungsgruppen | |
DE69803924T2 (de) | Mappedvirtuelsystem(mvs)-vorrichtungssicherung für einen datenprozessor unter verwendung einer datenspeicherungsuntersystemschnappschussmöglichkeit | |
DE69230462T2 (de) | Arbitrierung des Multiprozessorzugriffs zu gemeinsamen Mitteln | |
DE68927375T2 (de) | Arbitrierung von Übertragungsanforderungen in einem Multiprozessor-Rechnersystem | |
EP0635792B1 (de) | Verfahren zur Koordination von parallelen Zugriffen mehrerer Prozessoren auf Resourcenkonfigurationen | |
DE2645537C2 (de) | ||
DE3689664T2 (de) | Verfahren und Gerät zur Verwaltung von veralteten Datenobjekten. | |
DE69403192T2 (de) | Vorrichtung und verfahren zur datensicherung von speichereinheiten in einem rechnernetzwerk | |
DE69128367T2 (de) | System und Verfahren zur Transaktionsbearbeitung mit verminderter Verriegelung | |
DE3338345C2 (de) | ||
DE2828731C2 (de) | Adapter | |
DE69308032T2 (de) | Verfahren und system zum verbinden von objekten in einem rechnersystem | |
DE2912738A1 (de) | System mit direkter uebertragung zwischen subsystemen | |
DE4033336A1 (de) | Verfahren zum erzeugen einer ausfallmeldung und mechanismus fuer ausfallmeldung | |
DE3439302A1 (de) | Speichersteuerungsvorrichtung | |
CH619309A5 (de) | ||
CH615521A5 (de) | ||
DE68924992T2 (de) | Symmetrische Steuerungsanordnung für Multiverarbeitung. | |
DE69432064T2 (de) | Dateidaten-Speicherung auf Festplatte in vielfacher Darstellung | |
DE3781406T2 (de) | Steuerungsschema fuer segmentierte puffer, gegruendet auf gemeinsam genutzter referenzzaehlung. | |
DE1499206B2 (de) | Rechenanlage | |
DE69617604T2 (de) | Interobjekt-Datenaustausch | |
DE69617709T2 (de) | Steuerung von gemeinsamen plattendaten in einer duplex-rechnereinheit | |
DE3689991T2 (de) | Verteilter Datenverwaltungsmechanismus. | |
DE68925064T2 (de) | Taskausführungssteuerverfahren für ein Multiprozessorsystem mit Post/Warte-Prozedur |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8339 | Ceased/non-payment of the annual fee |