[go: up one dir, main page]

DE102017104839B4 - Buffer mapping scheme that involves pre-allocation of memory - Google Patents

Buffer mapping scheme that involves pre-allocation of memory

Info

Publication number
DE102017104839B4
DE102017104839B4 DE102017104839.1A DE102017104839A DE102017104839B4 DE 102017104839 B4 DE102017104839 B4 DE 102017104839B4 DE 102017104839 A DE102017104839 A DE 102017104839A DE 102017104839 B4 DE102017104839 B4 DE 102017104839B4
Authority
DE
Germany
Prior art keywords
application
physical address
address
operating system
virtual
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
DE102017104839.1A
Other languages
German (de)
Other versions
DE102017104839A1 (en
Inventor
Manoj K Guthula
Venkata Bhanu Prakash GOLLAPUDI
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.)
Samsung Electronics Co Ltd
Original Assignee
Samsung Electronics Co Ltd
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
Priority claimed from US15/333,010 external-priority patent/US10380012B2/en
Application filed by Samsung Electronics Co Ltd filed Critical Samsung Electronics Co Ltd
Publication of DE102017104839A1 publication Critical patent/DE102017104839A1/en
Application granted granted Critical
Publication of DE102017104839B4 publication Critical patent/DE102017104839B4/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Bus Control (AREA)

Abstract

Computerimplementiertes Verfahren, durch welches ein Betriebssystem (200) mit einer ersten Anwendung (102) und einer zweiten Anwendung (104) kommuniziert, wobei das Verfahren Folgendes aufweist:
Empfangen einer ersten physikalischen Adresse von der ersten Anwendung (102), wobei die erste Anwendung (102) eine erste Seitentabelle (110) hat und die erste physikalische Adresse durch Abbilden virtueller Seiten der ersten Anwendung in physikalische Seiten eines Speichers unter Verwendung der ersten Seitentabelle (110) bestimmt wird, und Verwenden einer ersten physikalischen Seitenrahmennummer und eines ersten Offsets, um die erste physikalische Adresse zu bestimmen, die der ersten Anwendung entspricht;
Kommunizieren der zweiten Anwendung mit der ersten Anwendung unter Verwendung eines Anwendungsoffsets (106), wobei der Anwendungsoffset (106) auf die erste physikalische Adresse angewendet wird, um eine zweite physikalische Adresse zu bestimmen, die der zweiten Anwendung entspricht; und
Bestimmen einer virtuellen Betriebssystemebenen (OS-Ebenen)-Adresse basierend auf der ersten physikalischen Adresse, um eine Datenübertragung zu erreichen, wobei die virtuelle Betriebssystemebenen (OS-Ebenen)-Adresse durch eine Kernel-Übersetzungstabelle (210) nur auf der Grundlage der ersten physikalischen Adresse bestimmt wird, und wobei das Betriebssystem (200) mit der ersten Anwendung (102) und der zweiten Anwendung (104) nur über die erste physikalische Adresse kommuniziert.
A computer-implemented method by which an operating system (200) communicates with a first application (102) and a second application (104), the method comprising:
Receiving a first physical address from the first application (102), wherein the first application (102) has a first page table (110) and the first physical address is determined by mapping virtual pages of the first application into physical pages of a memory using the first page table (110), and using a first physical page frame number and a first offset to determine the first physical address corresponding to the first application;
communicating the second application with the first application using an application offset (106), wherein the application offset (106) is applied to the first physical address to determine a second physical address corresponding to the second application; and
Determining a virtual operating system (OS) level address based on the first physical address to achieve data transfer, wherein the virtual operating system (OS) level address is determined by a kernel translation table (210) based only on the first physical address, and wherein the operating system (200) communicates with the first application (102) and the second application (104) only via the first physical address.

Description

HINTERGRUNDBACKGROUND

Die vorliegende Offenbarung bezieht sich allgemein auf einen Speicherpuffer und genauer auf ein Puffermappingschema, welches eine Vor-Zuordnung von Speicher beinhaltet.The present disclosure relates generally to a memory buffer and more particularly to a buffer mapping scheme that includes pre-allocation of memory.

In einem UNIX-basierten Speicher-/Server-System gibt es verschiedene Anwendungen und Vorrichtungstreiber, wovon jeder einen spezifischen Task durchführt. Dass die Anwendungen, das Betriebssystem (OS)/Kernel und die Hardware effektiv kommunizieren, reichen sie oftmals einen Speicherpuffer herum. Typischerweise kommuniziert während dieser Kommunikationen eine Anwendung ihre virtuelle Anwendungsebenenadresse zu dem Betriebssystem/Kernel. Der Speicherpuffer ruft den Treiber unter Verwendung der virtuellen Anwendungsebenenadresse, und der Treiber mappt die virtuelle Anwendungsebenenadresse auf die virtuelle Betriebssystem-/ Kernel-Ebenenadresse.In a UNIX-based storage/server system, there are various applications and device drivers, each performing a specific task. To ensure effective communication between the applications, the operating system (OS)/kernel, and the hardware, they often pass a memory buffer. Typically, during these communications, an application communicates its application-level virtual address to the operating system/kernel. The memory buffer calls the driver using the application-level virtual address, and the driver maps the application-level virtual address to the operating system/kernel-level virtual address.

Um diese Übersetzung einfacher zu machen, sind virtueller und physikalischer Speicher in Stücke handlicher Größe unterteilt, genannt Seiten. In diesem Seitenmodell (paged model) ist eine virtuelle Adresse aus einem Offset und einer virtuellen Seitenrahmennummer aufgebaut. Jedes Mal, wenn der Prozessor auf eine virtuelle Adresse trifft, extrahiert der Prozessor den Offset und die virtuelle Seitenrahmennummer aus der virtuellen Adresse. Der Prozessor übersetzt dann die virtuelle Seitenrahmennummer in eine physikalische Seitenrahmennummer, um auf den Ort bei dem korrekten Offset in diese physikalische Seite zuzugreifen. Um eine virtuelle Adresse in eine physikalische Adresse zu übersetzen, arbeitet der Prozessor zuerst die virtuelle Adressseitenrahmennummer und den Offset innerhalb der virtuellen Seite aus. Der Prozessor verwendet die virtuelle Seitenrahmennummer als einen Index in die Prozessseitentabelle, um ihren Seitentabelleneintrag abzurufen. Wenn der Seitentabelleneintrag bei diesem Offset gültig ist, nimmt der Prozessor die physikalische Seitenzahlnummer von diesem Eintrag. Die Tabellen, die der Prozessor verwendet, um die virtuelle Seitenrahmennummer in eine physikalische Rahmennummer umzuwandeln, werden Seitentabellen genannt.To simplify this translation, virtual and physical memory are divided into manageable-sized pieces called pages. In this paged model, a virtual address is made up of an offset and a virtual page frame number. Each time the processor encounters a virtual address, the processor extracts the offset and virtual page frame number from the virtual address. The processor then translates the virtual page frame number to a physical page frame number to access the location at the correct offset within that physical page. To translate a virtual address to a physical address, the processor first works out the virtual address page frame number and the offset within the virtual page. The processor uses the virtual page frame number as an index into the process page table to retrieve its page table entry. If the page table entry at that offset is valid, the processor takes the physical page frame number from that entry. The tables the processor uses to convert the virtual page frame number to a physical frame number are called page tables.

Eine virtuelle Adresse wird durch ein Hinzufügen eines Offset zu der virtuellen Seitennummer berechnet. Um den Schutz weiter durchzuführen, gibt es getrennte Seitentabellen für eine Nutzerraumanwendung und einen Kernel. Um auf eine virtuelle Nutzerraumadresse zuzugreifen, mappt Kernel-Ebenen-Software die Nutzerraumadresse auf einen Kernel-Adressraum. Dieser Vorgang beinhaltet ein Erzeugen von Kernel-Seitentabelleneinträgen für die Nutzerraumadresse.A virtual address is calculated by adding an offset to the virtual page number. To further protect the application, separate page tables exist for the user-space application and the kernel. To access a virtual user-space address, kernel-level software maps the user-space address to a kernel address space. This process involves creating kernel page table entries for the user-space address.

Wie für die Hardware tritt die Verbindung zwischen dem OS/Kernel und der Hardware mittels eines direkten Speicherzugriffs (DMA = Direct Memory Access = Direkter Speicherzugriff) auf. Durch ein Verwenden von DMA kann eine Hardwarevorrichtung Daten von/zu einem Hauptspeicher eines Computers übertragen, ohne eine CPU zu involvieren. Dass der DMA arbeitet, werden Speicherpuffer häufig auf einen Adressbereich gemappt, welcher für die Hardwarevorrichtung sichtbar ist. Dieser Adressbereich wird eine virtuelle IO-Adresse genannt. Abhängig von der Architektur kann dies ein Einrichten einer Übersetzung zwischen einer virtuellen IO-Adresse und einer physikalischen Adresse eines Computerhauptspeichers involvieren. Gewöhnlicherweise geschieht dies unter Verwendung einer IOMMU-Hardware. Auf einigen Architekturen kann die virtuelle IO-Adresse dieselbe sein wie die physikalische Adresse des Computerhauptspeichers.As for the hardware, the connection between the OS/kernel and the hardware occurs via direct memory access (DMA). By using DMA, a hardware device can transfer data to/from a computer's main memory without involving a CPU. For DMA to work, memory buffers are often mapped to an address range visible to the hardware device. This address range is called a virtual IO address. Depending on the architecture, this may involve establishing a translation between a virtual IO address and a physical address of the computer's main memory. Typically, this is done using an IOMMU hardware. On some architectures, the virtual IO address may be the same as the physical address of the computer's main memory.

Das oben beschriebene Mappingschema lädt eine schwere Last auf das OS/den Kernel, welches/welcher zuerst die virtuelle Anwendungsebenenadresse in eine virtuelle OS-Ebenenadresse durch ein Einrichten von Seitentabelleneinträgen übersetzen muss. Ähnlich sollte ein DMA-Mapping für jede DMA-Übertragung etabliert werden. Ein effizienteres Verfahren für das OS, Anwendungen und Hardware zum Kommunizieren ist erwünscht.The mapping scheme described above places a heavy burden on the OS/kernel, which must first translate the application-level virtual address into an OS-level virtual address by setting up page table entries. Similarly, a DMA mapping should be established for each DMA transfer. A more efficient method for the OS, applications, and hardware to communicate is desired.

Aus der Druckschrift US 9 092 426 B1 ist ein Verfahren für einen Network-Attached Storage-Server (NAS) bekannt, um Daten direkt auf eine Festplatte oder ein Blockgerät innerhalb eines Speichersubsystems zu schreiben. Eine Ethernet-Schnittstelle eines NAS-Servers empfängt eine Datei und schreibt die Dateidaten als PDU-Segmente in den Kernelspeicher. Ein TCP/IP-Stapel bildet die Dateidaten im Kernel-Space-RAM als sequenziell geordnete Segmente ab. Die NAS/CIFS-Serveranwendung sendet einen Aufruf mit Angabe der Dateispeicherdaten. Eine Zero-Copy-DMA-Anwendung empfängt den Aufruf, ordnet einen Dateioffset einer logischen Blockadresse (LBA) im Blockgerät zu und fordert die DMA-Anwendung des Blockgeräts auf, die Dateidaten zu übertragen. Ohne die Dateidaten im System-RAM neu zu schreiben, überträgt die Blocktreiber-DMA-Anwendung die Dateidaten in Einheiten von Dateisystemblöcken direkt vom Kernel-Space-RAM auf das Blockgerät, wobei jeder Dateisystemblock in einem einzigen Schreibvorgang geschrieben wird.From the printed matter US 9 092 426 B1 is a method for a network-attached storage (NAS) server to write data directly to a disk or block device within a storage subsystem. An Ethernet interface of a NAS server receives a file and writes the file data into kernel memory as PDU segments. A TCP/IP stack maps the file data into kernel-space RAM as sequentially ordered segments. The NAS/CIFS server application sends a call specifying the file storage data. A zero-copy DMA application receives the call, maps a file offset to a logical block address (LBA) in the block device, and requests the block device's DMA application to transfer the file data. Without rewriting the file data in system RAM, the block-driver DMA application transfers the file data in units of file system blocks directly from the kernel-space RAM to the block device, with each file system block being written in a single write operation.

Aus der Druckschrift US 2015 / 0 095 610 A1 ist eine Adressübersetzung in einer virtualisierten Systemumgebung bekannt. Beispielsweise wird eine Speicherverwaltungsvorrichtung beschrieben, die einen gemeinsam genutzten Translation Look-Aside Buffer (TLB) umfasst, der eine Vielzahl von Übersetzungstypen enthält, die jeweils eine Vielzahl von Seitengrößen unterstützen, einen oder mehrere Prozessoren und einen Speicherverwaltungscontroller, der für die Arbeit mit dem einen oder den mehreren Prozessoren konfiguriert ist. Der Speicherverwaltungscontroller umfasst eine Logik, die zum Zwischenspeichern von Übersetzungen von virtuellen Adressen in physische Adressen und von Zwischenübersetzungen von physischen Adressen in physische Adressen im gemeinsam genutzten TLB konfiguriert ist, eine Logik, die zum Empfangen einer virtuellen Adresse zur Übersetzung von einem Anforderer konfiguriert ist, eine Logik, die zum Durchführen eines Tabellendurchlaufs einer Übersetzungstabelle im gemeinsam genutzten TLB konfiguriert ist, um eine übersetzte physische Adresse in Übereinstimmung mit der virtuellen Adresse zu bestimmen, und eine Logik, die zum Übertragen der übersetzten physischen Adresse an den Anforderer konfiguriert ist.From the printed matter US 2015 / 0 095 610 A1 An address translation in a virtualized system environment is known. For example, A memory management apparatus is described that includes a shared translation look-aside buffer (TLB) containing a plurality of translation types, each supporting a plurality of page sizes, one or more processors, and a memory management controller configured to operate with the one or more processors. The memory management controller includes logic configured to cache virtual address-to-physical address translations and intermediate physical address-to-physical address translations in the shared TLB, logic configured to receive a virtual address for translation from a requestor, logic configured to perform a table walk of a translation table in the shared TLB to determine a translated physical address corresponding to the virtual address, and logic configured to transmit the translated physical address to the requestor.

KURZFASSUNGSUMMARY

Aufgabe der Erfindung ist es, ein computerimplementiertes Verfahren, durch welches ein Betriebssystem mit einer ersten Anwendung und einer zweiten Anwendung kommuniziert, ein computerimplementiertes Verfahren, durch welches eine erste Anwendung, eine zweite Anwendung, ein Betriebssystem und Hardware in einem einzelnen Knoten miteinander durch Verwenden eines Puffers kommunizieren, sowie eine Vorrichtung zum Steuern einer Datenübertragung bereitzustellen, mit denen eine Effizienzsteigerung gegenüber den oben beschriebenen bekannten Verfahren und Vorrichtungen erzielt wird. Die Aufgabe der Erfindung wird gelöst durch ein computerimplementiertes Verfahren nach dem Hauptanspruch. Die Aufgabe wird auch gelöst durch ein computerimplementiertes Verfahren nach dem Nebenanspruch 4 und durch eine Vorrichtung nach dem Nebenanspruch 9. Weiterbildungen der Erfindung sind in den Unteransprüchen angegeben.The object of the invention is to provide a computer-implemented method by which an operating system communicates with a first application and a second application, a computer-implemented method by which a first application, a second application, an operating system, and hardware in a single node communicate with each other using a buffer, and a device for controlling data transmission, with which an increase in efficiency is achieved compared to the known methods and devices described above. The object of the invention is achieved by a computer-implemented method according to the main claim. The object is also achieved by a computer-implemented method according to the independent claim 4 and by a device according to the independent claim 9. Further developments of the invention are specified in the subclaims.

KURZE BESCHREIBUNG DER ZEICHNUNGENBRIEF DESCRIPTION OF THE DRAWINGS

  • 1 ist eine Konzeptveranschaulichung des Nutzerraums, Kernel-Raums und Hardware in einem einzelnen Knoten, welche eine mögliche Umgebung gemäß einer Ausführungsform vorsehen. 1 is a conceptual illustration of user space, kernel space, and hardware in a single node, providing a possible environment according to one embodiment.
  • 2A ist ein schematisches Diagramm, welches eine Kommunikation zwischen Anwendungen, einem Betriebssystem und Hardware gemäß einer Ausführungsform zeigt. 2A is a schematic diagram illustrating communication between applications, an operating system, and hardware according to one embodiment.
  • 2B ist ein anderes schematisches Diagramm, welches die mehreren Anwendungen in dem Nutzerraum und verschiedene virtuelle Adressen in dem Kernel, welche auf eine gemeinsame physikalische Adresse zeigen, zeigt, die eine gemeinsame Verwendung des Puffers gemäß einer Ausführungsform ermöglichen. 2B is another schematic diagram showing the multiple applications in user space and various virtual addresses in the kernel pointing to a common physical address that enable buffer sharing according to one embodiment.
  • 3 ist ein Diagramm, welches Kommunikationsverfahren zwischen einer Anwendung, einem Betriebssystem und Hardware gemäß einer Ausführungsform veranschaulicht. 3 is a diagram illustrating communication methods between an application, an operating system, and hardware according to one embodiment.

DETAILLIERTE BESCHREIBUNGDETAILED DESCRIPTION

Das vorliegende System erspart es dem OS, dass es Kernel-Ebenen-Seitentabellenbasierte Übersetzungen einrichten muss, jedes Mal, wenn der Speicherpuffer verbreitet wird. In der Offenbarung kommuniziert die Anwendung die physikalische Adresse zu dem Kernel. Gemäß einer Ausführungsform hat der Kernel das benötigte Mapping für diesen Puffer. Demnach kann der Kernel die virtuelle Adresse berechnen und muss nicht jedes Mal eine Mappingoperation durchführen. Da alle Kernel-Module denselben virtuellen Adressraum gemeinsam verwenden, kann jedes beliebige OS-Modul (nicht nur das OS-Modul, welches den Speicher zuordnete) die virtuelle Adresse unter Verwendung der physikalischen Adresse erlangen und auf dem Puffer arbeiten.The present system eliminates the need for the OS to perform kernel-level page table-based translations each time the memory buffer is allocated. In the disclosure, the application communicates the physical address to the kernel. According to one embodiment, the kernel has the required mapping for this buffer. Thus, the kernel can calculate the virtual address and does not need to perform a mapping operation each time. Since all kernel modules share the same virtual address space, any OS module (not just the OS module that allocated the memory) can obtain the virtual address using the physical address and operate on the buffer.

Zwischen unterschiedlichen Anwendungen geschieht eine Kommunikation unter Verwendung eines Puffer-Offsets. Eine Anwendung verwendet eine virtuelle Adresse, um auf dem Puffer zu arbeiten. Die Anwendung kann ihre eigene virtuelle Adresse durch ein einfaches Addieren des Offsets zu der virtuellen Adresse des Starts des Puffers berechnen.Communication between different applications occurs using a buffer offset. An application uses a virtual address to operate on the buffer. The application can calculate its own virtual address by simply adding the offset to the virtual address of the buffer's start.

Eine Anwendung kann die DMA-Adresse eines Offsets durch einfach ein Hinzufügen des Offsets zu einer DMA-Adresse an dem Start des Puffers bestimmen. Anwendungen können die Pufferadresse direkt zu einer Hardwarevorrichtung ohne Involvierung des Kernels verbreiten.An application can determine the DMA address of an offset by simply adding the offset to a DMA address at the start of the buffer. Applications can propagate the buffer address directly to a hardware device without kernel involvement.

Während die Offenbarung in dem Kontext eines einzelnen Knoten geschrieben ist, ist dies nicht eine Beschränkung der vorliegenden Offenbarung.While the disclosure is written in the context of a single node, this is not a limitation of the present disclosure.

1 ist eine Konzeptveranschaulichung des Nutzerraums, Kernel-Raums und Hardware in einem einzelnen Knoten, welche gemäß einer Ausführungsform eine mögliche Umgebung vorsehen. Wie gezeigt, kommunizieren Anwendungen 100, welche den Nutzerraum bilden, ein Betriebssystem (OS)/Kernel 200 und Hardware 300 miteinander, um Nutzeranforderungen zu empfangen und auszuführen. Die Hardware 300 weist verschiedene Vorrichtungen, die zentrale Verarbeitungseinheit und einen Systemspeicher auf. Das Betriebssystem 200 koppelt zwischen dem Nutzerraum und Hardware 300 und erlaubt es Anwendungen 100 unter anderem auf den Systemspeicher zuzugreifen. Vorrichtungstreiber sind gewöhnlicherweise Teil des OS 200. Ein Speichermapper mappt Bild- und Daten-Dateien in Anwendungen in dem Nutzerraum. Bei einem Speichermapping werden die Inhalte einer Datei mit der virtuellen Adresse verlinkt. 1 Figure 1 is a conceptual illustration of user space, kernel space, and hardware in a single node, providing a possible environment according to one embodiment. As shown, applications 100, which form the user space, an operating system (OS)/kernel 200, and hardware 300 communicate with each other. to receive and execute user requests. Hardware 300 includes various devices, the central processing unit, and system memory. Operating system 200 interfaces between user space and hardware 300 and allows applications 100, among other things, to access system memory. Device drivers are typically part of OS 200. A memory mapper maps image and data files to applications in user space. Memory mapping links the contents of a file to its virtual address.

2A ist ein schematisches Diagramm, welches eine Kommunikation zwischen Anwendungen, einem Betriebssystem und Hardware gemäß einer Ausführungsform zeigt. Betreffend Anwendungen 100 sind zwei Anwendungen, Anwendung X und Anwendung Y gezeigt. Jede der zwei Anwendungen hat ihren eigenen virtuellen Speicher mit seinem eigenen Satz von virtuellen Adressen, welche in 2A als VM-X und VM-Y gezeigt sind. Jede Anwendung hat ebenso ihre eigene Seitentabelle 110, welche ihre eigenen jeweiligen virtuellen Seiten in physikalische Seiten des Speichers mappt. Beispielsweise wird, wie dargestellt ist, die virtuelle Seitenrahmennummer 0 (VPFN 0) der Anwendung X in einen Speicher in einer physikalischen Seitenrahmennummer 1 (PFN 1) gemappt, und die virtuelle Seitenrahmennummer 1 (VPFN 1) der Anwendung Y wird in den Speicher der physikalischen Seitenrahmennummer 4 (PFN 4) gemappt. 2A is a schematic diagram showing communication between applications, an operating system, and hardware according to one embodiment. Regarding applications 100, two applications, Application X and Application Y, are shown. Each of the two applications has its own virtual memory with its own set of virtual addresses, which are 2A shown as VM-X and VM-Y. Each application also has its own page table 110, which maps its respective virtual pages into physical pages of memory. For example, as shown, application X's virtual page frame number 0 (VPFN 0) is mapped into memory at physical page frame number 1 (PFN 1), and application Y's virtual page frame number 1 (VPFN 1) is mapped into memory at physical page frame number 4 (PFN 4).

Auf die Seitentabelle 110 wird unter Verwendung der virtuellen Seitenrahmennummer als einem Offset zugegriffen. Um eine virtuelle Adresse in eine physikalische Adresse zu übersetzen, werden zuerst die virtuelle Adressseitenrahmennummer und der Offset innerhalb dieser virtuellen Seite bestimmt. Wenn eine virtuelle Speicheradresse gültig ist und der Tabelleneintrag gültig ist, nimmt der Prozessor die physikalische Seitenrahmennummer und multipliziert sie mit der Seitengröße, um die Adresse der Basis der Seite im physikalischen Speicher zu erhalten. Dann wird der Offset hinzugefügt.The page table 110 is accessed using the virtual page frame number as an offset. To translate a virtual address into a physical address, the virtual address page frame number and the offset within that virtual page are first determined. If a virtual memory address is valid and the table entry is valid, the processor takes the physical page frame number and multiplies it by the page size to obtain the address of the page's base in physical memory. The offset is then added.

Es sei beispielsweise in dem Fall, welcher in 2A veranschaulicht ist, eine Seitengröße von 0 x 2000 angenommen. Für eine Adresse von 0 x 2194 in VM-Y würde der Prozessor diese Adresse in einen Offset von 0 x 194 in eine virtuelle Seitenrahmennummer 1 übersetzen. Diese virtuelle Seitenrahmennummer 1 wird auf die physikalische Seitenrahmennummer 4 gemappt, welche bei 0 x 8000 (4 x 2000) beginnt. Ein Hinzufügen des 0 x 194-Offset zu der physikalischen Seitenrahmennummer erzeugt eine letztendliche physikalische Adresse von 0 x 8194. Während Anwendungen miteinander nur unter Verwendung von virtuellen Adressen und Offsets zu den virtuellen Adressen der Basis kommunizieren, erlaubt es das vorliegende System Anwendungen mit dem Kernel unter Verwendung einer physikalischen Adresse zu kommunizieren. Wie gezeigt ist, wird eine Kernel-Übersetzungstabelle 210 verwendet, um die physikalische Adresse in eine virtuelle OS-Ebenenadresse zu übersetzen. Die Kernel-Übersetzungstabelle 210 erlaubt eine Übersetzung von einer physikalischen zu einer virtuellen Adresse und kann OS-spezifisch sein.For example, in the case which is 2A As illustrated, a page size of 0 x 2000 is assumed. For an address of 0 x 2194 in VM-Y, the processor would translate this address into an offset of 0 x 194 into a virtual page frame number 1. This virtual page frame number 1 is mapped to the physical page frame number 4, which starts at 0 x 8000 (4 x 2000). Adding the 0 x 194 offset to the physical page frame number creates a final physical address of 0 x 8194. While applications communicate with each other only using virtual addresses and offsets to the base virtual addresses, the present system allows applications to communicate with the kernel using a physical address. As shown, a kernel translation table 210 is used to translate the physical address into an OS-level virtual address. The kernel translation table 210 allows a translation from a physical to a virtual address and can be OS-specific.

Gemäß einer Ausführungsform ist der Speicher vor-zugeordnet und mit den Anwendungen 100 geteilt, so dass die Anwendungen 100 und das Betriebssystem 200 beide auf die physikalische Adresstabelle zugreifen können. „Vor-Zuordnung“ wenn hierein verwendet, bedeutet eine Zuordnung vor einer beliebigen Nutzung des Puffers, um Daten zwischen Anwendung/Kernel/Hardware-Domains zu übertragen. Darüber hinaus wandeln unterschiedliche Module in dem Betriebssystem 200, wobei alle Module denselben virtuellen Adressraum gemeinsam nutzen, eine physikalische Adresse in ihre eigene virtuelle OS-Ebenenadresse um. Das Verfahren, welches jedes OS nutzt, um eine physikalische Adresse in eine virtuelle Adresse umzuwandeln, hängt von der Architektur jedes OS ab. Beispielsweise kann das Linux-OS eine physikalische Adresse in eine virtuelle Adresse unter Verwendung einer einfachen Arithmetik für einen bestimmten Bereich von Adressen übersetzen. Wenn in Linux implementiert, fallen die vorzugeordneten Puffer des vorliegenden Systems in diesen Bereich von Adressen, wo eine einfache Arithmetik genutzt wird, um bei einer physikalischen Adresse anzukommen. Einige andere OS können einen unterschiedlichen Mechanismus haben, um dies zu tun.According to one embodiment, the memory is pre-allocated and shared with applications 100 so that applications 100 and operating system 200 can both access the physical address table. "Pre-allocation," as used herein, means allocation prior to any use of the buffer to transfer data between application/kernel/hardware domains. Furthermore, different modules in operating system 200, all of which share the same virtual address space, convert a physical address into their own OS-level virtual address. The method each OS uses to convert a physical address to a virtual address depends on the architecture of each OS. For example, the Linux OS may translate a physical address to a virtual address using simple arithmetic for a specific range of addresses. When implemented in Linux, the present system's pre-allocated buffers fall within this range of addresses, where simple arithmetic is used to arrive at a physical address. Some other OS may have a different mechanism to do this.

Eine Anwendung kann die DMA-Adresse eines Offset durch einfach ein Hinzufügen des Offsets zu der DMA-Adresse des Starts des Puffers berechnen. Auf diese Art und Weise kann eine Anwendung die Pufferadresse direkt zu einer Hardware 300-Vorrichtung ohne eine Involvierung des Betriebssystems 200 verbreiten. An application can calculate the DMA address of an offset by simply adding the offset to the DMA address of the buffer's start point. In this way, an application can propagate the buffer address directly to a hardware 300 device without involving the operating system 200.

2B ist ein anderes schematisches Diagramm, welches die mehreren Anwendungen in dem Nutzerraum und unterschiedliche virtuelle Adressen in dem Kernel, welche auf dieselbe physikalische Adresse zeigen, was die gemeinsame Verwendung des Puffers gemäß einer Ausführungsform ermöglicht, zeigt. 2B zeigt eine Anwendung X und eine Anwendung Y in dem Anwendungsnutzerraum 100. In Anwendung X werden die Daten, welche „Puffer-1“ benannt sind, bei 0 x 3000 im Adressraum der Anwendung X gespeichert. Diese Daten übersetzen zu einem Kernel-Adressraum 0 x 5000 beispielsweise durch ein Verwenden des Vorgangs, welcher in 2A abgebildet ist. Dieselben Daten (Puffer-1) entsprechen den Daten bei der Adresse 0 x 1000 im Adressraum der Anwendung Y, es sind aber beide Anwendungen X und Y in der Lage, auf dieselben Daten unter Verwendung einer physikalischen Adresse zu zeigen. Die Daten, welche „Puffer-2“ benannt sind, werden an der virtuellen Adresse der Anwendung Y 0 x 4000 gespeichert, welche dem Kernel-Adressraum 0 x 7000 entspricht. Aufgrund der Tatsache, dass Kernel-Module denselben virtuellen Adressraum gemeinsam verwenden, kann ein beliebiges OS-Modul die virtuelle Adresse unter Verwendung der Kernel-Adresse, welche in 2B gezeigt ist, erlangen. 2B is another schematic diagram showing the multiple applications in user space and different virtual addresses in the kernel pointing to the same physical address, enabling buffer sharing according to one embodiment. 2B shows an application X and an application Y in the application user space 100. In application X, the data named “Buffer-1” is stored at 0 x 3000 in the address space of application X. This data translates to a kernel address space 0 x 5000, for example, by using the operation described in 2A The same data (buffer 1) corresponds to the data at address 0 x 1000 in the address space of application Y, but both applications X and Y are able to point to the same data using a physical address. The data, named "Buffer-2", is stored at the virtual address of application Y 0 x 4000, which corresponds to the kernel address space 0 x 7000. Due to the fact that kernel modules share the same virtual address space, any OS module can point to the virtual address using the kernel address, which is 2B shown.

3 ist ein Diagramm, welches Kommunikationsverfahren zwischen einer Anwendung, einem Betriebssystem und Hardware gemäß einer Ausführungsform veranschaulicht. Genauer zeigt die Ausführungsform der 3 eine Anwendung-1 102 und eine Anwendung-2 104 in dem Nutzerraum (Anwendungen 100), welche miteinander durch ein Verwenden eines Offset 106 kommunizieren, und Anwendung-2 104, welche mit einem Kernel-Modul 202 durch ein Verwenden einer physikalischen Adresse 204 kommuniziert. Die Anwendungen (Anwendung-2 104 in diesem Beispiel) können ebenso direkt mit Hardwarevorrichtungen 302 unter Verwendung einer DMA-Adresse, welche durch ein Verwenden des Offset erzeugt wird, kommunizieren. 3 is a diagram illustrating communication methods between an application, an operating system, and hardware according to one embodiment. More specifically, the embodiment of the 3 an application-1 102 and an application-2 104 in user space (applications 100) that communicate with each other using an offset 106, and application-2 104 that communicates with a kernel module 202 using a physical address 204. The applications (application-2 104 in this example) can also communicate directly with hardware devices 302 using a DMA address generated using the offset.

Gemäß einer Ausführungsform weist das vorliegende System einen maschinenlesbaren Speicher auf, welcher darauf ein Computerprogramm gespeichert hat, welches wenigstens eine Codesektion hat, welche durch eine Maschine ausführbar ist, wodurch die Maschine veranlasst wird, die Schritte wie obenstehend beschrieben durchzuführen.According to one embodiment, the present system comprises a machine-readable memory having stored thereon a computer program having at least one section of code executable by a machine, causing the machine to perform the steps as described above.

Gemäß einer Ausführungsform kann das vorliegende System in Hardware, Software oder einer Kombination von Software und Software realisiert sein. Während die Offenbarung sich auf eine Einzelknotenimplementierung, welche ein Computersystem involviert, fokussiert, kann sie für eine Verwendung in einer verteilten Art und Weise angepasst werden, wo unterschiedliche Elemente über verschiedene verbundene Computersysteme verteilt sind. Eine beliebige Art von Computersystem oder Vorrichtung, welche angepasst ist zum Ausführen der Verfahren, welche hierin beschrieben sind, ist geeignet. Eine typische Kombination von Hardware und Software kann ein Allgemeinzweck-Computersystem mit einem Computerprogramm sein, das, wenn es geladen und ausgeführt wird, das Computersystem derart steuert, dass es die Verfahren, welche hierin beschrieben sind, ausführt.According to one embodiment, the present system may be implemented in hardware, software, or a combination of software and software. While the disclosure focuses on a single-node implementation involving a computer system, it may be adapted for use in a distributed manner where different elements are distributed across various connected computer systems. Any type of computer system or device adapted to perform the methods described herein is suitable. A typical combination of hardware and software may be a general-purpose computer system with a computer program that, when loaded and executed, controls the computer system to perform the methods described herein.

Das vorliegende System kann in einem Computerprogrammprodukt eingebettet sein, welches all die Merkmale aufweist, welche die Implementierung der Verfahren, welche obenstehend beschrieben sind, ermöglicht, und welche, wenn sie in ein Computersystem geladen sind, in der Lage sind, diese Verfahren auszuführen. „Computerprogramm“ bedeutet in dem vorliegenden Zusammenhang einen beliebigen Ausdruck in einer beliebigen Sprache, Code oder Notifizierung eines Satzes von Befehlen, welcher vorgesehen ist, um ein System zu veranlassen, eine Informationsverarbeitungsfähigkeit zu haben, um eine bestimmte Funktion entweder direkt oder nach einem oder beiden der folgenden durchzuführen: Umwandlung in eine andere Sprache, Code oder Notation; Reproduktion in einer unterschiedlichen Materialform.The present system may be embedded in a computer program product having all the features enabling the implementation of the methods described above, and which, when loaded into a computer system, is capable of executing those methods. "Computer program" in the present context means any expression in any language, code, or notation of a set of instructions intended to cause a system to have information processing capability to perform a particular function, either directly or after one or both of the following: conversion into another language, code, or notation; reproduction in a different material form.

Claims (10)

Computerimplementiertes Verfahren, durch welches ein Betriebssystem (200) mit einer ersten Anwendung (102) und einer zweiten Anwendung (104) kommuniziert, wobei das Verfahren Folgendes aufweist: Empfangen einer ersten physikalischen Adresse von der ersten Anwendung (102), wobei die erste Anwendung (102) eine erste Seitentabelle (110) hat und die erste physikalische Adresse durch Abbilden virtueller Seiten der ersten Anwendung in physikalische Seiten eines Speichers unter Verwendung der ersten Seitentabelle (110) bestimmt wird, und Verwenden einer ersten physikalischen Seitenrahmennummer und eines ersten Offsets, um die erste physikalische Adresse zu bestimmen, die der ersten Anwendung entspricht; Kommunizieren der zweiten Anwendung mit der ersten Anwendung unter Verwendung eines Anwendungsoffsets (106), wobei der Anwendungsoffset (106) auf die erste physikalische Adresse angewendet wird, um eine zweite physikalische Adresse zu bestimmen, die der zweiten Anwendung entspricht; und Bestimmen einer virtuellen Betriebssystemebenen (OS-Ebenen)-Adresse basierend auf der ersten physikalischen Adresse, um eine Datenübertragung zu erreichen, wobei die virtuelle Betriebssystemebenen (OS-Ebenen)-Adresse durch eine Kernel-Übersetzungstabelle (210) nur auf der Grundlage der ersten physikalischen Adresse bestimmt wird, und wobei das Betriebssystem (200) mit der ersten Anwendung (102) und der zweiten Anwendung (104) nur über die erste physikalische Adresse kommuniziert.A computer-implemented method by which an operating system (200) communicates with a first application (102) and a second application (104), the method comprising: receiving a first physical address from the first application (102), wherein the first application (102) has a first page table (110), the first physical address being determined by mapping virtual pages of the first application to physical pages of memory using the first page table (110), and using a first physical page frame number and a first offset to determine the first physical address corresponding to the first application; communicating the second application with the first application using an application offset (106), wherein the application offset (106) is applied to the first physical address to determine a second physical address corresponding to the second application; and determining a virtual operating system (OS) level address based on the first physical address to achieve data transfer, wherein the virtual operating system (OS) level address is determined by a kernel translation table (210) based only on the first physical address, and wherein the operating system (200) communicates with the first application (102) and the second application (104) only via the first physical address. Verfahren nach Anspruch 1, ferner aufweisend: Durchführen einer Speicherzuordnung und ein gemeinsames Verwenden der Zuordnung mit der ersten Anwendung (102) und der zweiten Anwendung (104) bevor die erste Anwendung (102) oder die zweite Anwendung (104) eine Nutzereingabe empfängt.Procedure according to Claim 1 , further comprising: performing a memory allocation and sharing the allocation with the first application (102) and the second application (104) before the first application (102) or the second application (104) receives a user input. Verfahren nach Anspruch 1, wobei es mehrere Module in dem Betriebssystem (200) gibt, wobei jedes der Module seinen eigenen virtuellen OS-Ebenenspeicher hat, ferner aufweisend ein Erlauben, dass alle der Module direkt mit der ersten Anwendung (102) unter Verwendung der ersten physikalischen Adresse kommunizieren.Procedure according to Claim 1 wherein there are multiple modules in the operating system (200), each of the modules having its own OS-level virtual memory, further comprising allowing all of the modules to communicate directly with the first application (102) using the first physical address. Computerimplementiertes Verfahren, durch welches eine erste Anwendung (102), eine zweite Anwendung (104), ein Betriebssystem (200) und Hardware (300) in einem einzelnen Knoten miteinander durch Verwenden eines Puffers kommunizieren, wobei das Verfahren Folgendes aufweist: die erste Anwendung (102) wandelt eine virtuelle Anwendungsebenenadresse in eine erste physikalische Adresse um, die der ersten Anwendung (102) entspricht, und kommuniziert die erste physikalische Adresse zu dem Betriebssystem (200); und die erste Anwendung (102) und die zweite Anwendung (104) kommunizieren miteinander unter Verwendung eines Anwendungsoffsets (106), wobei der Anwendungsoffset (106) auf die erste physikalische Adresse angewendet wird, um die zweite physikalische Adresse zu bestimmen, die der zweiten Anwendung entspricht; und das Betriebssystem (200) nutzt die erste physikalische Adresse, um eine virtuelle OS-Ebenenadresse zu bestimmen, wobei die virtuelle OS-Ebenenadresse durch eine Kernel-Übersetzungstabelle (210) nur auf der Grundlage der ersten physikalischen Adresse bestimmt wird, und wobei das Betriebssystem (200) mit der ersten Anwendung (102) und der zweiten Anwendung (104) nur über die erste physikalische Adresse kommuniziert.A computer-implemented method by which a first application (102), a second application (104), an operating system (200), and hardware (300) in a single node communicate with each other using a buffer, the method comprising: the first application (102) converts a virtual application-level address into a first physical address corresponding to the first application (102) and communicates the first physical address to the operating system (200); and the first application (102) and the second application (104) communicate with each other using an application offset (106), wherein the application offset (106) is applied to the first physical address to determine the second physical address corresponding to the second application; and the operating system (200) uses the first physical address to determine a virtual OS-level address, wherein the virtual OS-level address is determined by a kernel translation table (210) based only on the first physical address, and wherein the operating system (200) communicates with the first application (102) and the second application (104) only via the first physical address. Verfahren nach Anspruch 4, wobei die erste Anwendung (102) mit der Hardware (302) unter Verwendung einer Direktspeicherzugriffs(DMA)-Adresse kommuniziert, welche unter Verwendung eines Hardware-Offset ohne eine Involvierung des Betriebssystems (200) berechnet wird.Procedure according to Claim 4 wherein the first application (102) communicates with the hardware (302) using a direct memory access (DMA) address calculated using a hardware offset without involvement of the operating system (200). Verfahren nach Anspruch 4, wobei das Betriebssystem (200) einen Speicherpuffer vor-zuordnet und einen Weg vorsieht, um physikalische Adressen auf Anwendungen (102, 104) vor einem Empfangen einer Nutzereingabe zu mappen.Procedure according to Claim 4 wherein the operating system (200) pre-allocates a memory buffer and provides a way to map physical addresses to applications (102, 104) prior to receiving user input. Verfahren nach Anspruch 4, wobei die erste Anwendung (102) die erste physikalische Adresse und die DMA-Adresse eines Speichers vor dem Übertragen von Daten zwischen der ersten Anwendung (102), dem Betriebssystem (200) und der Hardware (300) durch ein Nutzen eines Puffers erhält.Procedure according to Claim 4 , wherein the first application (102) obtains the first physical address and the DMA address of a memory before transferring data between the first application (102), the operating system (200) and the hardware (300) by using a buffer. Verfahren nach Anspruch 4, wobei es eine Mehrzahl von Modulen in dem Betriebssystem (200) gibt, und wobei jedes der Module direkt mit der ersten Anwendung (102) kommuniziert und seine virtuelle OS-Ebenenadresse unter Verwendung der ersten physikalischen Adresse bestimmt.Procedure according to Claim 4 wherein there are a plurality of modules in the operating system (200), and wherein each of the modules communicates directly with the first application (102) and determines its virtual OS level address using the first physical address. Vorrichtung zum Steuern einer Datenübertragung, wobei die Vorrichtung einen Speichermapper aufweist, welcher es einer ersten Anwendung (102) erlaubt, eine erste virtuelle Anwendungsebenenadresse in eine erste physikalische Adresse umzuwandeln, die der ersten Anwendung (102) entspricht, und die erste physikalische Adresse zu einem Betriebssystem (200) zu kommunizieren, und es einer zweiten Anwendung (104) erlaubt, mit der ersten Anwendung (102) unter Verwendung eines Anwendungsoffsets (106) zu kommunizieren, wobei der Anwendungsoffset (106) auf die erste physikalische Adresse angewendet wird, um eine zweite physikalische Adresse zu bestimmen, die der zweiten Anwendung (104) entspricht, wobei eine Kernel-Übersetzungstabelle verwendet wird, um eine virtuelle Betriebssystemebenen (OS-Ebenen)-Adresse nur auf der Grundlage der ersten physikalischen Adresse zu bestimmen, und wobei das Betriebssystem mit der ersten Anwendung (102) und der zweiten Anwendung (104) nur über die erste physikalische Adresse kommuniziert.An apparatus for controlling data transmission, the apparatus comprising a memory mapper that allows a first application (102) to convert a first application-level virtual address into a first physical address corresponding to the first application (102) and communicate the first physical address to an operating system (200), and allows a second application (104) to communicate with the first application (102) using an application offset (106), wherein the application offset (106) is applied to the first physical address to determine a second physical address corresponding to the second application (104), wherein a kernel translation table is used to determine an operating system (OS) level virtual address based only on the first physical address, and wherein the operating system communicates with the first application (102) and the second application (104) only via the first physical address. Vorrichtung nach Anspruch 9, wobei der Speichermapper es der ersten Anwendung (102) erlaubt, direkt mit Hardware (300) unter Verwendung von einer DMA-Adresse und eines Hardware-Offset zu kommunizieren.Device according to Claim 9 , wherein the memory mapper allows the first application (102) to communicate directly with hardware (300) using a DMA address and a hardware offset.
DE102017104839.1A 2016-04-22 2017-03-08 Buffer mapping scheme that involves pre-allocation of memory Active DE102017104839B4 (en)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201662326537P 2016-04-22 2016-04-22
US62/326,537 2016-04-22
US15/333,010 US10380012B2 (en) 2016-04-22 2016-10-24 Buffer mapping scheme involving pre-allocation of memory
US15/333,010 2016-10-24

Publications (2)

Publication Number Publication Date
DE102017104839A1 DE102017104839A1 (en) 2017-10-26
DE102017104839B4 true DE102017104839B4 (en) 2025-10-16

Family

ID=60020917

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102017104839.1A Active DE102017104839B4 (en) 2016-04-22 2017-03-08 Buffer mapping scheme that involves pre-allocation of memory

Country Status (1)

Country Link
DE (1) DE102017104839B4 (en)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118035992B (en) * 2024-04-12 2024-07-23 浪潮云信息技术股份公司 Memory security scanning method based on credit operation system, electronic equipment and storage medium

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150095610A1 (en) 2013-10-01 2015-04-02 Applied Micro Circuits Corporation Multi-stage address translation for a computing device
US9092426B1 (en) 2011-01-03 2015-07-28 Applied Micro Circuts Corporation Zero-copy direct memory access (DMA) network-attached storage (NAS) file system block writing

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9092426B1 (en) 2011-01-03 2015-07-28 Applied Micro Circuts Corporation Zero-copy direct memory access (DMA) network-attached storage (NAS) file system block writing
US20150095610A1 (en) 2013-10-01 2015-04-02 Applied Micro Circuits Corporation Multi-stage address translation for a computing device

Also Published As

Publication number Publication date
DE102017104839A1 (en) 2017-10-26

Similar Documents

Publication Publication Date Title
DE112012004550B4 (en) State migration method, system and apparatus for a remote direct memory access adapter in a virtual environment
DE112005002405B4 (en) Error processing for direct memory access address translation
DE69526751T2 (en) Multiprocessor system for the local administration of address translation tables
DE3586389T2 (en) DYNAMICALLY ASSIGNED LOCAL / GLOBAL STORAGE ARRANGEMENT.
DE112005002298B4 (en) Increasing the performance of an address translation using translation tables comprising large address spaces
DE112010003554B4 (en) Symmetrical direct migration of virtual machines
DE69701078T2 (en) Microprocessor architecture with the ability to support multiple different processors
DE602004012106T2 (en) Multi-channel DMA with shared FIFO buffer
DE112010001467B4 (en) Control of blocks of an on-die-system structure
DE202013012483U1 (en) Use of a table to convert virtual memory addresses into physical memory addresses for direct user-space communication with a data carrier
DE69524916T2 (en) Method and device for data transmission in the field of computer systems
DE202013012484U1 (en) Use of a logical-to-physical card for direct user-space communication with a data storage device
DE202014011596U1 (en) System for extending peripheral component interconnect express fabrics
DE112020005106B4 (en) METHOD AND SYSTEMS FOR IMPLEMENTING VIRTUAL ADDRESSES IN A VIRTUAL STORAGE-BASED SYSTEM
WO2008006622A1 (en) Network system and method for controlling address spaces existing in parallel
DE112008002019T5 (en) Offload input / output (I / O) virtualization operations to a processor
DE112012006665T5 (en) Selectable graphics controller for output display
DE102018209205A1 (en) Data storage with intelligent storage or charging method and device
DE112018006068B4 (en) DYNAMIC ADDRESS TRANSLATION FOR A VIRTUAL MACHINE
DE102022204514A1 (en) MULTI-SOCKET NETWORK INTERFACE CONTROLLER WITH CONSISTENT ORDER OF TRANSACTIONS
DE112017001654B4 (en) TECHNOLOGIES FOR REGION-BASED CACHING MANAGEMENT
DE102013209643A1 (en) Mechanism for optimized message exchange data transfer between nodelets within a tile
DE112012004926B4 (en) Memory sharing among processors
DE112011100825B4 (en) Assigning memory to on-chip coherence domains
DE102017124078B4 (en) ORDINAL MODIFICATION OF SERVICE QUALITY

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R018 Grant decision by examination section/examining division