Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: JG 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?
-
Und auf http://pronix.de/pronix-757.html sind verschiedene Verfahren, wie man nach freien Pages sucht. Wie macht ihr das?
-
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?
-
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.
-
hast du keine header vor einer page?
-
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!
-
stimmt, aber wie machst du das dann? wenn das programm 4kb haben will, aber dann an die adresse was mit 8kb schreibt?
-
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...
-
aber es könnte doch trotzdem den Zeiger manipulieren, ohne das es der Kernel merkt
-
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.