[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [tyndur-devel] [PATCH] kernel2: Memory consumption for 'ps'



On Mon, Dec 27, 2010 at 11:14:09PM +0100, Patrick Pokatilo wrote:
> + 'ps' now shows the memory consumed by each process
> 
> Signed-off-by: Patrick Pokatilo <shyxormz@xxxxxxxxxx>

Mach die Commit-Nachricht bitte auf deutsch.

> ---
>  src/kernel2/include/tasks.h     |    3 +++
>  src/kernel2/src/syscalls/mem.c  |    6 ++++++
>  src/kernel2/src/syscalls/pm.c   |    4 +++-
>  src/kernel2/src/tasks/modules.c |    1 +
>  src/kernel2/src/tasks/pm.c      |    2 ++
>  5 files changed, 15 insertions(+), 1 deletions(-)
> 
> diff --git a/src/kernel2/include/tasks.h b/src/kernel2/include/tasks.h
> index fc0bc88..df73e1d 100644
> --- a/src/kernel2/include/tasks.h
> +++ b/src/kernel2/include/tasks.h
> @@ -99,6 +99,9 @@ typedef struct pm_process {
>       * aufgerufen werden
>       */
>      list_t* on_destroy;
> +
> +    /// Speicherverbrauch des Prozesses
> +    uintmax_t memory_used;
>  } pm_process_t;
>  
>  typedef struct {
> diff --git a/src/kernel2/src/syscalls/mem.c b/src/kernel2/src/syscalls/mem.c
> index 20f9e73..4126fdf 100644
> --- a/src/kernel2/src/syscalls/mem.c
> +++ b/src/kernel2/src/syscalls/mem.c
> @@ -54,6 +54,8 @@ vaddr_t syscall_mem_allocate(size_t bytes, syscall_arg_t flags, paddr_t* phys)
>      vaddr_t address = NULL;
>      size_t page_count = NUM_PAGES(PAGE_ALIGN_ROUND_UP(bytes));
>  
> +    current_process->memory_used += page_count << PAGE_SHIFT;
> +
>      if (flags & 0x80) {
>          // ISA-DMA-Speicher
>          // Physisch zusammenhaengend und nur in den ersten 16 MB
> @@ -100,6 +102,8 @@ vaddr_t syscall_mem_allocate_physical(
>      size_t bytes, paddr_t position, syscall_arg_t flags)
>  {
>      size_t page_count = NUM_PAGES(PAGE_ALIGN_ROUND_UP(bytes));
> +    
> +    current_process->memory_used += page_count << PAGE_SHIFT;
>  
>      return mmc_automap(&mmc_current_context(), position, page_count,
>          USER_MEM_START, USER_MEM_END, MM_FLAGS_USER_DATA);
> @@ -117,6 +121,8 @@ void syscall_mem_free(vaddr_t start, size_t bytes)
>      start = (vaddr_t) PAGE_ALIGN_ROUND_DOWN((uintptr_t) start);
>      size_t num_pages = NUM_PAGES(bytes);
>  
> +    current_process->memory_used -= num_pages << PAGE_SHIFT;
> +
>      // Jetzt werden die Seiten freigegeben
>      while (num_pages-- != 0) {
>          // Physische Adresse ausfindig machen und Page in der
> diff --git a/src/kernel2/src/syscalls/pm.c b/src/kernel2/src/syscalls/pm.c
> index 0b36df3..33cd7bc 100644
> --- a/src/kernel2/src/syscalls/pm.c
> +++ b/src/kernel2/src/syscalls/pm.c
> @@ -172,6 +172,8 @@ void syscall_init_child_page(pid_t pid, vaddr_t dest, vaddr_t src, size_t size)
>  
>      // Anzahl der Seiten berechnen
>      size_t num_pages = NUM_PAGES(size);
> +    current_proccess->memory_used -= num_pages << PAGE_SHIFT;
> +    process->memory_used += num_pages << PAGE_SHIFT;
>  
>      // Adressen kopieren damit sie veraendert werden koennen
>      // Sie duerfen nicht ueberschrieben werden, weil sie am Schluss noch
> @@ -298,7 +300,7 @@ void* syscall_pm_enumerate_tasks(void)
>          // hinter die aktuelle setzen.
>          cmdlines += cmdline_size;
>  
> -        task_info->tasks[i].memory_used = 0; // TODO
> +        task_info->tasks[i].memory_used = task->memory_used; // TODO

Hm, wieso immer noch TODO?

Sollte man Shared Memory auch noch berücksichtigen? Wobei natürlich die
Frage wäre, ob der nur für einen Prozess oder für alle zählen sollte.

Kevin