2017-02-15 4 views
0

Kürzlich wurde ich in einem der Interviews gefragt, ob mmap das Mapping des Programms im binären Modus direkt vornehmen kann; ohne Seitenverweis.mmap Dateien können auf andere Weise als auf Seitenebene Mapping getan werden?

Ich denke, das ist nicht möglich, da es

eine Anwendung ermöglicht eine Datei in den Speicher auf der Karte, was bedeutet, dass es eine Eins-zu-Eins-Entsprechung zwischen einer Speicheradresse und ein Wort in der Datei. Der Programmierer kann dann Zugriff auf die Datei direkt über Speicher, identisch zu jedem anderen Stück speicherresidenten Daten es ist sogar möglich schreibt transparent in den Speicherbereich zu ermöglichen zur Karte zurück in die Datei auf der Festplatte

Zugriff auf eine Datei ohne Paging beteiligt klingt falsch.

immer noch ich möchte wissen, ob es irgendeine Möglichkeit gibt mmap kann Datei im Speicher auf eine andere Weise als die Seitenweise zuordnen.

===== 
the page way 
===== 

Die Seite ist die kleinste Speichereinheit, die unterschiedlichen Berechtigungen und Verhalten haben kann. Folglich ist die Seite der Baustein der Speicherzuordnungen, die wiederum die Bausteine ​​des Prozessadressraums sind. Der Systemaufruf mmap() funktioniert auf Seiten. Sowohl als auch die Adress- und Offset-Parameter müssen auf einer Seitenlänge von ausgerichtet werden. Das heißt, sie müssen ganzzahlige Vielfache der Seitengröße sein.

Zuordnungen sind daher ganzzahlige Vielfache von Seiten. Wenn der Parameter LEN vom Anrufer zur Verfügung gestellt wird, nicht auf einer Seite Grenz vielleicht ausgerichtet, da die Größe des zugrunde liegenden Datei ist nicht ein Vielfaches der Seitengröße der Zuordnung wird auf die nächste volle Seite aufzurunden

+0

Was ist die Seitenweise der Zuordnungsdatei? – Marian

+0

@Marian in Frage gestellt. –

+2

Zu mir dieses 'Mapping des Programms im binären Modus direkt; ohne Seitenangabe "ist sehr unklar. – 4386427

Antwort

1

Alle Speicherkarten beinhalten Seite Ebene Mapping, wenn wir die Wikipedia-Definition von page verwenden:

Einer Seite, Speicherseite oder virtuelle Seite ist ein fester Länge zusammenhängender Block des virtuellen Speichers durch eine beschrieben Einzeleintrag in der Seitentabelle Es ist die kleinste Dateneinheit für die Speicherverwaltung in einem virtuellen Speicherbetriebssystem.

Wie in der man 2 mmap Manpage beschrieben,

mmap() erzeugt eine neue Zuordnung in dem virtuellen Adressraum des aufrufenden Prozesses.

Das Mapping wird durch Einträge in der Seitentabelle definiert.

Im Wesentlichen ist mmap() also ein Tool zum Verwalten von virtuellem Speicher in der Seitenebene.


Der Interviewer versucht, wahrscheinlich, um herauszufinden, ob Sie den Unterschied zwischen Low-Level-I/O verstanden (read(), write()) und-Datei gesichert Speicherabbildungsverhalten.

Wenn Sie eine Datei mit dem Flag O_DIRECT öffnen, versucht der Kernel, die Daten unter Umgehung des Seitencache direkt in die Userspace-Puffer zu übertragen.

Aufgrund der Funktionsweise von Speicherzuordnungen hat die Sicherungsdatei open() ed mit oder ohne das Flag O_DIRECT keine Auswirkung auf die Speicherzuordnung. .

(The MAP_SHARED/MAP_PRIVATE Flag einen Effekt hat, ob der Speicher für den Zugriff auf Teile des Mappings Aufenthalts in der Seite Cache oder nicht typischerweise verwendet, das Linux-Kernel verwendet einen copy-on-write-Ansatz: die Seiten bleiben schreibgeschützt im Seitencache bis zum ersten Schreibzugriff, dann werden private Mappings auf neue Seiten kopiert (oder entfernt) und das Shared Mapping wird als Read-Write markiert, etwas kompliziert, aber ziemlich Dies ist jedoch auch auf das Paging virtueller Speicher angewiesen.)

Es ist sogar möglich, eine Speicherzuordnung ohne Unterstützung zu erstellen (eine PROT_NONE Zuordnung). Jeder Zugriff auf das Mapping führt dazu, dass der Kernel ein Signal SIGBUS generiert (an den Thread, der den Zugriff versucht), der vom Prozess erfasst werden kann. Der Signal-Handler kann den Befehl decodieren und überspringen und somit Speicherzugriffe emulieren. Es kann sogar ein oder mehrere Bytes aus der Datei mit O_DIRECT lesen. Auch hier basiert das Mapping auf virtuellem Speicher und somit auf Seiten; Es wird einfach kein RAM für das Mapping verwendet, stattdessen werden alle Zugriffe emuliert. Dies wird selten verwendet, weil es unvorstellbar langsam ist.

0

Paging ist (zumindest auf modernen Betriebssystemen und Architekturen) der Mechanismus durch mit dem physischen Speicher verwaltet wird.

Ich schlage vor, Sie read more zu diesem Thema, aber im Grunde die physischen Speicher (adressierte mit physikalischen Adressen) aus dem Kernel und Userspace zugegriffen wird virtuelle Adressen.

Die Zuordnung zwischen physischen und virtuellen Adressen in der Regel in der Hardware mit den MMU getan wird, und organisiert Seiten verwenden. Unter Verwendung dieses Konzepts definiert eine Speicherseite eine Zuordnung zwischen einer Reihe von physikalischen und virtuellen Adressen.

Das Betriebssystem fügt auch mehrere Ebenen über die untergeordnete Seitenverwaltung hinzu. mmap ist eine Benutzeroberfläche für das Paging-System, mit der Sie Seiten bearbeiten können. Insbesondere können Sie eine Speicherseite (erinnern Sie sich an eine Reihe von virtuellen Adressen) an etwas anderes als physischen Speicher, zum Beispiel eine Datei auf Ihrer Festplatte gespeichert.

nur Weise, die Sie Speicher durch dieses Paging-System verwenden können, um Ihre Frage zu beantworten, macht es keinen Sinn, auf etwas zuzugreifen (eine Datei, physischen Speicher oder irgendetwas anderes) "in jedem anders als der Seitenweg ".

Verwandte Themen