[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