Autor Thema: Speicher Verwaltung  (Gelesen 6560 mal)

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« am: 13. March 2005, 18:59 »
Hallo,
nun hab ich endlich verstanden, was malloc() is und hab nun ein paar fragen dazu.
Wie groß sind eure Pages? In "C von A bis Z" steht, dass die 512-1024kb grob sein sollen? ist das nich einwenig groß? ich hätte mein 4kb gemacht... und was ist, wenn ein Programm 8kb braucht, aber eine Page nur 4kb groß ist?
Und wie unterteil ich den Ram so? Mach ich da 1000 int variablen rein und übergebe dann einen pointer auf die variable? Oder wie?

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 13. March 2005, 19:14 »
Und auf http://pronix.de/pronix-757.html sind verschiedene Verfahren, wie man nach freien Pages sucht. Wie macht ihr das?

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 15. March 2005, 16:52 »
So, ich hab mich nun noch etwas schlau gemacht. Also, ich hab eine Strucktur:
struct header
{
   struct header *next;
   unsigned int free;
   struct header struct header
        struct header *previous;
}

*next verweißt auf den nächste Header und *previous auf den davor nach den Header kommt ein 8kb großer freier Platz. Nur wie mach ich das mit dem Platz zwischendrin?

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #3 am: 15. March 2005, 16:58 »
ich machs ganz anderst. bei mir hat jedes programm, bzw jeder thread ein eingenes PD und dann kann er auf ne page zugreifen und das system stellt ihm die dann zur verfügung, alles andere entfällt. ein proggy holt sich einfach den speicher und fertig.
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 15. March 2005, 17:05 »
hast du keine header vor einer page?

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #5 am: 15. March 2005, 17:47 »
nö,wozu? nur son tipp: wenn du einen header in die page machst, und einfach sagst, ein programm bekommt hat den pointer ein paar bytes nach pagebeginn ist das unsicher, dann kann ein proggy das einfach manipulieren... musst es in gesichertem bereich halten!
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 15. March 2005, 18:31 »
stimmt, aber wie machst du das dann? wenn das programm 4kb haben will, aber dann an die adresse was mit 8kb schreibt?

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #7 am: 15. March 2005, 18:45 »
dann erkennt der kernel bei der enstehenden exception, dass die page nicht ausgelagert ist, aber auf present=0, sucht sich ne freie page und baut die ein, bzw., wenn keine mehr da ist, lagert eine von dem task selber aus und gibt sie ihm an anderer stelle wieder. damit werde ich das problem los, dass ein programm dann alle pages reservieren könnte...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 15. March 2005, 18:46 »
aber es könnte doch trotzdem den Zeiger manipulieren, ohne das es der Kernel merkt

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #9 am: 15. March 2005, 18:58 »
und? es hat ja seinen eigenen raum und schreibt nur in dem rum. und das soll mich net kratzen... kann ja machen, was es will.
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

 

Einloggen