From c894b99170ed6987823c3d9f2d1b4d9d43938844 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Hord=C3=A9?= Date: Tue, 25 Dec 2018 19:22:56 +0100 Subject: [PATCH] =?UTF-8?q?fix:=20pS=20permettant=20de=20visualiser=20l'en?= =?UTF-8?q?semble=20de=20t=C3=A2ches=20et=20processus,=20corrections=20asm?= =?UTF-8?q?.h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/asm.h | 12 ++++++------ lib/cpu.c | 4 ++-- lib/gdt.c | 2 +- lib/interrupts.c | 2 +- lib/memory.c | 1 - lib/process.c | 4 +++- lib/shell.c | 22 ++++++++++++++++++---- 7 files changed, 31 insertions(+), 16 deletions(-) diff --git a/include/asm.h b/include/asm.h index b514eb1..b9eb031 100644 --- a/include/asm.h +++ b/include/asm.h @@ -40,19 +40,19 @@ # define irqendslave() asm("movb $0x20,%al; \ outb %al,$0xA0;") -# define lidt(idtr) asm ("lidtl %0"::"m" (*idtr)) +# define lidt(idtr) asm ("lidtl %0"::"m" (idtr)) -# define lgdt(gdtr) asm ("lgdtl %0"::"m" (*gdtr)) +# define lgdt(gdtr) asm ("lgdtl %0"::"m" (gdtr)) -# define lldt(ldtr) asm ("lldtl %0"::"m" (*ldtr)) +# define lldt(ldtr) asm ("lldtl %0"::"m" (ldtr)) # define ltr(tss) asm volatile ("ltr %%ax":: "a" (tss)) -# define sidt(idtr) asm ("sidtl %0"::"m" (*idtr)) +# define sidt(idtr) asm ("sidtl %0"::"m" (idtr)) -# define sgdt(gdtr) asm ("sgdtl %0"::"m" (*gdtr)) +# define sgdt(gdtr) asm ("sgdtl %0"::"m" (gdtr)) -# define sldt(ldtr) asm ("sldtl %0"::"m" (*ldtr)) +# define sldt(ldtr) asm ("sldtl %0"::"m" (ldtr)) # define str(tss) asm volatile ("str %%ax;\ mov %%ax,%0":: "m" (tss)) diff --git a/lib/cpu.c b/lib/cpu.c index 09f13f6..1df9d15 100644 --- a/lib/cpu.c +++ b/lib/cpu.c @@ -295,10 +295,10 @@ void show_cpu(regs * stack) getdestype(tss), getdessize(tss), getdesbit3(tss), getdesbit2(tss), getdesbit1(tss), getdesalign(tss)); struct gdtr gdtreg; - sgdt(&gdtreg); + sgdt(gdtreg); printf("GDT= %Y %Y\r\n", gdtreg.base, gdtreg.limite); struct idtr idtreg; - sidt(&idtreg); + sidt(idtreg); printf("IDT= %Y %Y\r\n", idtreg.base, idtreg.limite); printf("CR0=%Y CR2=%Y CR3=%Y CR4=%Y\r\n", stack->cr0, stack->cr2, stack->cr3, stack->cr4); diff --git a/lib/gdt.c b/lib/gdt.c index 233e1c4..5ef9389 100644 --- a/lib/gdt.c +++ b/lib/gdt.c @@ -41,7 +41,7 @@ void initgdt(u32 offset) /* recopie de la GDT a son adresse */ memcpy(&gdt, (u8 *) gdtreg.base, gdtreg.limite, 1); /* chargement du registre GDT */ - lgdt(&gdtreg); + lgdt(gdtreg); /* initialisation des segments */ initselectors(offset); } diff --git a/lib/interrupts.c b/lib/interrupts.c index 7839ade..aea64ee 100644 --- a/lib/interrupts.c +++ b/lib/interrupts.c @@ -260,7 +260,7 @@ void initidt(void) /* recopie de la IDT a son adresse */ memcpy(&idt, (u8 *) idtreg.base, idtreg.limite, 1); /* chargement du registre IDTR */ - lidt(&idtreg); + lidt(idtreg); } /******************************************************************************/ diff --git a/lib/memory.c b/lib/memory.c index 0ee275a..574a09a 100644 --- a/lib/memory.c +++ b/lib/memory.c @@ -602,7 +602,6 @@ void malloc_init(void) kernelcurrentheap = KERNEL_HEAP + PAGESIZE; chunk->size = PAGESIZE; chunk->used = 0; - //virtual_range_new_kernel(kernelcurrentheap, chunk->size, PAGE_NOFLAG); } diff --git a/lib/process.c b/lib/process.c index 4cc4ede..ad30dbc 100644 --- a/lib/process.c +++ b/lib/process.c @@ -160,6 +160,7 @@ void initprocesses(void) if (aprocess==NULL) return NULL; aprocess->pid = pid; aprocess->result = 0; + aprocess->pdd = NULL; aprocess->status = PROCESS_STATUS_RUN; aprocess->iskernel = true; TAILQ_INIT(&aprocess->task_head); @@ -487,11 +488,12 @@ pid_t createprocess(u8 *src, bool kerneltask) { cli(); tid_t previous = current; + process* oldprocess=findcurrentprocess(); current.pid = getfreepid(); current.number = 0; process* new=findcurrentprocess(); if (new==NULL) return NULL; - //new->pid = current.pid; + new->parent=oldprocess->pid; new->pdd = virtual_pd_create(); TAILQ_INIT(&new->page_head); TAILQ_INIT(&new->task_head); diff --git a/lib/shell.c b/lib/shell.c index a909024..6b49f0e 100644 --- a/lib/shell.c +++ b/lib/shell.c @@ -92,16 +92,30 @@ int test(void) /*******************************************************************************/ /* Afiche les processus */ +static u8* processstatus[] = {"LIBRE","PRET ","EXEC.","PAUSE"}; +static u8* taskstatus[] = {"PRET ","EXEC.","PAUSE"}; + +/*******************************************************************************/ +/* Affiche les tâches et processus */ + int ps() { - print("Processus en memoire\r\n[ PID | Status |\r\n"); + print("*** Processus en memoire\r\n| PID | Parent|Status|K|P.| Pages|\r\n"); process* aprocess=findprocess((pid_t)1); while(true) { - printf("|%Y|%Y|\r\n",(u32)aprocess->pid,aprocess->status); + printf("|%Y|%Y| %s|%c|%hh u|%Y|\r\n",(u32)aprocess->pid,(u32)aprocess->parent,processstatus[aprocess->status],(aprocess->iskernel?'X':' '),aprocess->priority,(u32)aprocess->pdd); aprocess=getnextprocess(aprocess,PROCESS_STATUS_ALL); if (aprocess==NULL || aprocess->pid==(pid_t)1) break; } + print("\r\n\r\n*** Taches en memoire\r\n| TID | PID |Status| CS | EIP | SS | ESP |\r\n"); + task* atask=findtask(maketid(1,1)); + while(true) + { + printf("|%Y|%Y| %s|%hY|%Y|%hY|%Y|\r\n",(u32)atask->tid.number,(u32)atask->tid.pid,taskstatus[atask->status],atask->dump.cs,atask->dump.eip,atask->dump.ss,atask->dump.esp); + atask=getnexttask(atask,TASK_STATUS_ALL); + if (atask==NULL || atask->tid.number==1) break; + } } /*******************************************************************************/ @@ -649,7 +663,7 @@ int showidt() u32 index, i = 0; idtdes *desc; struct idtr idtreg; - sidt(&idtreg); + sidt(idtreg); printf("Information sur l'IDT\r\nAdresse:%X Limite:%hX\r\n", idtreg.base, (u32) idtreg.limite); desc = idtreg.base; @@ -700,7 +714,7 @@ int showgdt() { u32 index; struct gdtr gdtreg; - sgdt(&gdtreg); + sgdt(gdtreg); printf("Information sur la GDT\r\nAdresse:%X Limite:%hX\r\n", gdtreg.base, gdtreg.limite); for (index = 0; index < gdtreg.limite; index += sizeof(gdtdes))