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? > + 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? > + 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. ;-) -- Antoine Kaufmann <toni@xxxxxxxxxxxxxxxx>
Attachment:
pgpOnkwkcXrp9.pgp
Description: PGP signature