Kennt sich jemand mit MCB's bzw. Speicherverwaltung aus?

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Antworten
markusk
Norton Commander
Beiträge: 132
Registriert: Fr 19. Apr 2013, 11:12

Kennt sich jemand mit MCB's bzw. Speicherverwaltung aus?

Beitrag von markusk »

Hallo,

ich beschäftige mich gerade aus gegebenem Anlass mit der DOS-Speicherverwaltung.

Da gibt's ja diese Memory Control Blocks welche DOS jedem Speicherbereich voranstellt.

Frage 1:

Haben auch freie Speicherblöcke einen MCB vorne dran?

Frage 2:

Im Buch PC intern von Michael Tischer ist beschrieben wie man die Kette der MCBs durchlaufen bzw. anhand gewisser Merkmale erkennen kann um welche Art von Speicherbereich es sich handelt den der MCB beschreibt.

Ob der Speicherbereich ein PSP ist kann beispielsweise anhand der ersten beiden Bytes erkannt werden ($cd, $20)

Falls der Speicherbereich mit COMSPEC=<Pfad zum Kommandoprozessor> beginnt ist es ein Block mit Environment-Variablen handeln.

Könnt ihr das bestätigen? Ich hab da nämlich in der Kette einen Speicherblock welcher die Environment-Variablen enthält, da steht am Anfang jedoch PATH=<Pfad> und erst dannach kommt COMSPEC=....

Jetzt bin ich etwas verunsichert was das betrifft.....

lg, Markus
mkarcher
LAN Manager
Beiträge: 204
Registriert: Fr 5. Jun 2020, 19:38

Re: Kennt sich jemand mit MCB's bzw. Speicherverwaltung aus?

Beitrag von mkarcher »

Ja. Auch freie Speicherblöcke haben einen MCB vorne dran, denn irgendwo muss ja die Größe des freien Speichers verzeichnet sein. Sonst würde der darauf folgende belegte Speicherbereich nicht identifiziert werden können.

Die Identifikation der Art des Speicherblocks ist immer eine Art Heuristik. Das PSP sollte man auch daran erkennen können, dass die im MCB verzeichnete PSP-Adresse des besizenden Programms gleich der Startadresse des Speicherblocks ist. Die Identifikation über CD 20 ist aber sehr üblich. Es gibt meines Wissens nach keinen Zwang, dass die Environmentvariablen in einem Environmentblock immer mit COMSPEC beginnen müssen - es kann aber je nach DOS-Version in der Tat so sein, dass es immer so ist. Sofern das PSP eines Programms nicht korrumpiert wurde (es könnte zum minimieren der residenten Größe eines TSRs mit TSR-Code überschrieben worden sein), steht dort auf Offset 2E die Segmentadresse des zugehörigen Environment. Eine alternative Strategie um Environmentblöcke zu erkennen, wäre also, in das im MCB verzeichnete PSP zu schauen, und die Adresse des potentiellen Environmentblocks mit dem Wert an Offset 2E im PSP zu vergleichen.
markusk
Norton Commander
Beiträge: 132
Registriert: Fr 19. Apr 2013, 11:12

Re: Kennt sich jemand mit MCB's bzw. Speicherverwaltung aus?

Beitrag von markusk »

Hallo!

Super, danke für die Antwort :)

lg, Markus
Antworten