[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Lost] [PATCH 2/2] kernel2: Shared Memory
Am Samstag, 1. November 2008 22:56:03 schrieb Antoine Kaufmann:
> On Sat, Oct 25 23:05, Kevin Wolf wrote:
> > + kernel2: Shared Memory
> > diff --git a/src/kernel2/src/mm/shm.c b/src/kernel2/src/mm/shm.c
> > new file mode 100644
> > index 0000000..b48defc
> > --- /dev/null
> > +++ b/src/kernel2/src/mm/shm.c
> > @@ -0,0 +1,171 @@
> > ...
> > +struct shm_desc {
> > + uint64_t id;
>
> Aber unten werden immer nur 32-Bit Ids verwendet, oder sehe ich das
> falsch?
Der Schlüssel ist bei AVL-Bäumen per definitionem 64 Bit lang. Es gab sogar
irgendeinen Grund, warum ich hier trotzdem nur 32 Bit davon verwende, aber er
fällt mir gerade nicht mehr ein...
>
> > + struct tree_item tree_item;
> > +
> > + paddr_t paddr;
> > + size_t num_pages;
> > + list_t* processes;
> > +};
> > ...
> > +uint32_t shm_create(size_t size)
> > +{
> > + // FIXME Die Pages muessen nicht physisch zusammenhaengend sein
> > + paddr_t shm_phys = pmm_alloc(NUM_PAGES(size));
> > + uint32_t id = ++shm_last_id;
> > + struct shm_desc* shm;
> > +
> > + while (tree_search(shms, id)) {
> > + id++;
> > + }
>
> Warum ist das denn notwendig? Müsste ++shm_last_id nicht sowieso noch
> frei sein?
Außer nach einem Overflow ja.
> > + shm = calloc(1, sizeof(*shm));
> > + shm->id = id;
> > + shm->num_pages = NUM_PAGES(size);
> > + shm->paddr = shm_phys;
> > + shm->processes = list_create();
> > +
> > + tree_insert(shms, shm);
> > +
> > + return id;
> > +}
> >...
> > diff --git a/src/kernel2/src/tasks/pm.c b/src/kernel2/src/tasks/pm.c
> > index e47a11c..64a814c 100644
> > --- a/src/kernel2/src/tasks/pm.c
> > +++ b/src/kernel2/src/tasks/pm.c
> > @@ -166,6 +166,8 @@ void pm_destroy(pm_process_t* process)
> > // TODO Die einzelnen Listenglieder freigeben
> > list_destroy(process->rpcs);
> >
> > + // TODO Alle SHMs freigeben
> > +
> > // Den Prozess aus der Liste entfernen
> > pm_process_t* _proc;
> > int i = 0;
>
> Das TODO ist aber nicht gerade schön... ;-) Aber jo wenn es tut, dann
> kann es zumindest mal rein. ;-)
Tasks beenden ist in kernel2 sowieso noch total kaputt, glaube ich.