Der "verfügbare Speicher", den ein Betriebssystem an ein untergeordnetes System sendet

619
Lance Pollard

Ich frage mich, wie Betriebssysteme untergeordnete Prozesse wissen lassen, wie viel Speicher verfügbar ist.

Angenommen, der gesamte Computer verfügt über 1 GB RAM-Speicher. Der Betrieb läuft und verwendet 100 MB (ich habe keine Ahnung, wie viel ein Betriebssystem tatsächlich benötigt). Es sind also noch 900 MB übrig.

Dann führen Sie 10 Programme aus. Jedes Programm erstellt 10 untergeordnete Prozesse. Die Frage ist, was diese übergeordneten und untergeordneten Prozesse als den für sie verfügbaren Gesamtspeicher betrachten.

Als zweiten Teil der Frage, um es etwas komplexer zu gestalten, sagen Sie, dass die Anwendungen schon eine Weile laufen und jetzt 500 MB auf dem Computer verfügbar sind (sagen Sie, das Betriebssystem verwendete 100 MB mehr und die Anwendungen 300 MB mehr.) um auf dieses Niveau von 500 MB zu gelangen). Die Frage ist nun, was diese übergeordneten und untergeordneten Prozesse an diesem Punkt als verfügbarer Speicher betrachten. Ob es das gleiche wie vorher ist oder anders ist und wie es anders ist.

Der Grund für die Frage ist, dass ich über virtuellen Speicher gelesen habe, der besagt:

Virtueller Speicher [ist eine] Technik, die eine "idealisierte Abstraktion der Speicherressourcen bietet, die tatsächlich auf einer bestimmten Maschine verfügbar sind", die "den Benutzern die Illusion eines sehr großen (Haupt-) Speichers vermittelt."

Im Grunde klingt es so, als würde jeder Prozess für den Fall (1) entweder "Sie haben 1 GB freien Speicher" oder "Sie haben 900 MB freien Speicher" erhalten. Ich bin nicht sicher, was es tatsächlich sagen würde, wenn es die Summe auf dem gesamten Computer oder die Summe - die Nutzung des Betriebssystems - angibt.

Dann würde für den Fall (2) entweder "1 GB verfügbar", "900 MB verfügbar", "600 MB verfügbar" oder "500 MB verfügbar" gelesen. Gleiche Situation, ich bin nicht sicher, was es sagen würde.

Es kann sich auch von diesen Werten unterscheiden. Das Betriebssystem könnte den verfügbaren Speicher für jeden der 100 untergeordneten Prozesse annähern und diesen möglicherweise gleichmäßig aufteilen. Wenn also noch 500 MB auf dem Computer vorhanden sind, würde dies bedeuten, dass für jeden Prozess "Sie haben 500/100 == 5 MB verfügbarer Speicherplatz" erhalten. Wenn dies jedoch der Fall ist, wenn ein Prozess 5 MB verbraucht und noch 495 MB übrig sind, wird gefragt, ob er damit arbeiten darf und eine neue Anzahl der verfügbaren Daten angezeigt wird. Aus diesem Grund glaube ich nicht, dass dies normalerweise der Fall ist, und es scheint, als würde das Betriebssystem wahrscheinlich sagen, was auf dem gesamten Computer verfügbar ist (also 1 GB).

Der Grund, warum ich denke, es würde immer "1 GB" sagen, liegt auch daran, dass ich nicht sicher bin, ob es eine Möglichkeit gibt, zu ermitteln, wie viel Speicher ein einzelner Prozess verwendet (oder ob das Betriebssystem weiß, wie viel Speicher es verwendet). Wenn das Betriebssystem weiß, wie viel es selbst verwendet, werden 900 MB angezeigt.

Ein weiterer Teil der Verwirrung ist, dass, wenn sich die Speichernutzung ständig ändert, und das Betriebssystem jedem Prozess den gesamten Speicherplatz - den verwendeten Speicher - angibt, dann müssten Sie ständig überprüfen, wie viel Speicher verfügbar ist, wenn Sie versuchen, darauf zuzugreifen Mehr Speicherplatz. Das heißt, Sie konnten die Speicherbelegung beim Programmstart nicht zwischenspeichern. Es könnte sein, dass das Programm, das einige Stunden im Leerlauf ist, mit 100 MB Arbeitsspeicher "auf dem Computer" beginnt, danach aber noch einmal überprüft wird, "oh, da sind nur 5 MB verfügbar". Aus irgendeinem Grund scheint das unerwünschtes Verhalten zu sein, aber ich bin mir nicht sicher.

Jede Hilfe, um zu verstehen, wie ein Betriebssystem dem Kind mitteilt, wie viel Speicher zu unterschiedlichen Zeitpunkten zur Verfügung steht, wäre hilfreich. Vielen Dank.

1
Das Betriebssystem würde nur virtuelle Speichergrößen für "Speicherberichte" an einen Prozess melden, da auf den physischen Speicher nicht direkt zugegriffen werden kann. sawdust vor 5 Jahren 0

2 Antworten auf die Frage

1
Mokubai

Das Betriebssystem "sagt" dem Programm nichts über den freien Speicher.

Jedes Programm arbeitet in einem eigenen virtuellen Speicherbereich, in dem es Zugriff auf den gesamten möglichen zulässigen Speicheradressenbereich hat. Für einen 32-Bit-Prozess sind die gesamten 4 GB des adressierbaren Speichers als "der Speicher" bekannt. Bei 64-Bit ist der Speicherplatz viel größer. Der Prozess kann Speicher aus diesem Bereich zuordnen, der dann dem Betriebssystem mitteilt, dass es Bereiche dieses Adressraums mit physischem Speicher hinterlegen muss, damit er gelesen und beschrieben werden kann. Das Programm hat jedoch (theoretisch) so viel Speicher wie es will.

Bei einem System mit nur 1 GB RAM bedeutet dies, dass das Betriebssystem, wenn der physische Speicher voll ist, Daten an die Auslagerungsdatei oder -partition überträgt. Dies geschieht ohne Einbeziehung des tatsächlichen Prozesses, dessen Speicher ausgelagert wird. Wenn der Prozess versucht, auf den ausgelagerten Speicher zuzugreifen, hält das Betriebssystem den Prozess an, zieht die Daten von der Festplatte zurück und setzt den Prozess fort.

Ein Programm kann abfragen, wie viel physischer Arbeitsspeicher frei ist, so dass es sich in Situationen mit wenig Arbeitsspeicher beschränken kann. Das Betriebssystem stellt jedoch keine künstlichen Beschränkungen dar, es sei denn, es verfügt nicht mehr über ausreichend Arbeitsspeicher und Speicherplatz. In diesem Fall wird das Programm lediglich verwendet ein Fehler beim Versuch, Speicher zuzuordnen.

1
LMiller7

Das Beste an einem modernen Betriebssystem ist, dass Anwendungen nicht wissen müssen, wie viel RAM im System vorhanden ist oder wie viel verfügbar ist. Tatsächlich kennen die meisten Anwendungen die RAM-Details nicht, die Anzahl der Kerne der CPU, die Größe und Anzahl der physischen Laufwerke, ob der Computer an ein Netzwerk oder das Internet angeschlossen ist, und vieles mehr. Das ist so, wie es sein sollte. Das Betriebssystem wurde so konzipiert, dass es auf diese Weise verwendet werden kann.

Das Betriebssystem bietet Anwendungen eine standardisierte virtualisierte Umgebung, die von der Hardware unabhängig ist. Anstatt direkt auf den RAM zuzugreifen, greifen Anwendungen nur auf einen virtuellen Adressraum zu, der von der RAM-Größe unabhängig ist. Für eine Anwendung ist dies die Erinnerung. RAM ist nur eine Leistungsoptimierung (mit aktueller Technologie erforderlich) und ein Implementierungsdetail. Teile des Anwendungscodes und der Daten befinden sich im RAM, in der Auslagerungsdatei oder in den Originaldateien. Dies kann sich je nach den Anforderungen der Anwendung und der Verfügbarkeit von Ressourcen ändern. Diese Details werden vom Betriebssystem verwaltet und sind für die Anwendung nicht sichtbar, die nicht einmal herausfinden konnte, ob sie dies wollte.

Für Anwendungen, die diese Informationen benötigen, können Hardwaredetails vom Betriebssystem angefordert werden. In den meisten Fällen benötigen nur Systemdienstprogramme diese Informationen. Die meisten Anwendungen benötigen dies so wenig, wie der durchschnittliche Fahrer über den Zündzeitpunkt oder die Kraftstoffmischung wissen muss.

All dies ist zum Guten. Dies bedeutet, dass Anwendungsentwickler ihre Zeit den Anforderungen der Anwendung widmen können, ohne sich mit den unordentlichen Details der Hardware beschäftigen zu müssen, auf der sie ausgeführt wird. Dafür ist das Betriebssystem gedacht. Dies bedeutet, dass eine ordnungsgemäß geschriebene Anwendung für Windows 95 mit 4 MB RAM auf einem modernen Windows 10-System mit vielen GB RAM ausgeführt werden kann. Und die Anwendung arbeitet gleich und weiß den Unterschied nicht. Nicht alle Anwendungen sind so gut geschrieben. Natürlich ist das moderne System besser und bietet dem Benutzer viele weitere Funktionen, aber die Anwendung weiß nichts davon.

Dies bedeutet viel Arbeit für Entwickler und Entwickler von Betriebssystemen, aber viele Millionen Benutzer profitieren davon.

Das alles macht Sinn. In Bezug auf "Die meisten Anwendungen benötigen dies so wenig wie der durchschnittliche Fahrer über den Zündzeitpunkt oder Kraftstoffgemische Bescheid wissen muss." Ich denke darüber nach, wie ein Debugger funktioniert, beispielsweise ein [Debugging eines Betriebssystems] (https://stackoverflow.com/questions/2029639/debugging-an-operating-system). Lance Pollard vor 5 Jahren 0