slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
VP1 PowerPoint Presentation
Download Presentation
VP1

Loading in 2 Seconds...

play fullscreen
1 / 11

VP1 - PowerPoint PPT Presentation


  • 79 Views
  • Uploaded on

MMU-Konfiguration für Prozess P1. Physical Memory. MMU. Virtual Memory von P1. PP1.3. PP2.3. PP1.2. VP3. PP6. VP3. PP2.2. VP2. PP4. VP2. PP2.1. VP1. PP1. VP1. PP1.1. MMU-Konfiguration für Prozess P2. Physical Memory. MMU. Virtual Memory von P2. PP1.3. PP2.3. PP1.2.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'VP1' - kisha


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

MMU-Konfiguration für Prozess P1

Physical Memory

MMU

Virtual Memory von P1

PP1.3

PP2.3

PP1.2

VP3

PP6

VP3

PP2.2

VP2

PP4

VP2

PP2.1

VP1

PP1

VP1

PP1.1

slide2

MMU-Konfiguration für Prozess P2

Physical Memory

MMU

Virtual Memory von P2

PP1.3

PP2.3

PP1.2

VP3

PP5

VP3

PP2.2

VP2

PP3

VP2

PP2.1

VP1

PP2

VP1

PP1.1

pipe registrieren
Pipe registrieren

P2

Virtual Memory von P1

Kernel

registerPipe(myPipe)

„myPip“

p* (VP1)

VP3

VP2

VP1

MMU-Konfiguration für Prozess P2

PP1.3

MMU

PP2.3

PP1.2

PP5

VP3

PP2.2

PP3

VP2

PP2.1

PP2

VP1

PP1.1

slide5

Kernel

writeToPipe(„myPipe“, *data)

P1

„myPip“

p* (VP1)

VP3

VP2

VP1

data

Physical Memory

MMU-Konfiguration für Prozess P1

PP1.3

MMU

PP2.3

PP1.2

VP3

PP6

PP2.2

VP2

PP4

PP2.1

VP1

PP1

PP1.1

data

slide6

P1

VoidwriteToPipe(String name, byte* data) {

Pipe* curPipe = getPipe(name);

curPipe->write(data);

}

VP3

VP2

VP1

data

P2

Aktuelle MMU-Konfiguration (P1)

PP1.3

VP3

MMU

PP2.3

VP2

PP1.2

VP1

VP3

PP6

PP2.2

VP2

PP4

PP2.1

VP1

PP1

PP1.1

data

slide7

adaptMMU(…):sucht eine leere Page, fügt einen Eintrag in die MMU ein, welcher auf den physischen Speicher der Pipe zeigt. Sie returniert einen Pointer innerhalb der neuen Page mit dem selben page-offset wie der curPipe -pointer hatte.

VoidwriteToPipe(String name, byte* data) {

Pipe* curPipe = getPipe(name);

intownerPID = getOwner(name);

curPipe = adaptMMU(curPipe, owner);

curPipe->write(data);

}

P1

Aktuelle MMU-Konfiguration (P1)

MMU

PP1.3

PP2.3

VP4

VP4

PP2

PP1.2

VP3

VP3

PP6

PP2.2

VP2

VP2

PP4

PP2.1

VP1

VP1

PP1

PP1.1

data

slide8

SonderFall: Pipe erstreckt sich über mehrere Pages

        • die Pipe besteht aus einem zusammenhängenden Array
          •  Array kann sich nur über benachbarte Pages erstrecken???
        • Wo liegen die Read bzw. Write-Pointer (Member-Variablen)???
          • direkt davor?
          • direkt danach?

P2

  • adaptMMU
    • muß nun alle beteiligten Pages eintragen -> wieder relativ zum neuen Basis-PointercurPipe
    • wie stellt adaptMMU fest auf wie vielen Pages die Pipe liegt?
    • [pPage + length*sizeof(char) + 2*sizeof(int)] / PAGE_SIZE
    •  aufrunden ???
    • liegen die Member wirklich unmittelbar vor/nach dem Array?

VP5

VP4

VP3

VP2

VP1

slide9

Neuen Speicher reservieren

Der Kernel verwaltet eine Pyhsical Memory Table in der festgehalten wird, welche physikalischen Pages von welchen Prozessen belegt werden, bzw. welche nicht verwendet werden.

Kernel

Physical Memory Table

PP1

P1

PP2

[free]

PP3

P2

PP4

[free]

PP5

P1

slide10

Neuen Speicher reservieren

  • Allokiert ein Prozess neuen Speicher (new/ malloc), dann wird ihm eine virtuelle Adresse geliefert, welche genug Platz innerhalb des virtuellen Speichers bietet.
    • newlibc verwaltet den virtuellen Speicher
    • newlibc verwendet beim allokieren virtuelle adressen in pages, die möglicherweise noch gar kein mapping zu physikalischen pages haben.

Wird in einer neuen virtuellen Page abgelegt

char* pData = newchar[255];

P1

Aktuelle MMU-Konfiguration (P1)

MMU

PP1.3

PP2.3

???

VP4

PP1.2

VP3

VP3

PP6

PP2.2

VP2

VP2

PP4

PP2.1

VP1

VP1

PP1

PP1.1

slide11

Beim ersten Zugriff auf pData, welcher in einer „neuen“ virtuellen Page liegt, wird das auflösen durch die MMU fehlschlagen (Page-miss).

 Prozess benötigt neue physikalische Page

  • voidreserveNewPage(int PID, intvPage) {
    • intphysPage = getFreePage(); //returniert Index einer nicht // benutzten page
    • markPageReserved(physPage, PID); // markiert PID als besitzer von //physPage (Physical Memory Table)
    • addMMUEntry(PID, vPage, physPage); // fügt einen Eintrag die MMU- //Tabelle von PID ein.
  • }