240 likes | 400 Vues
Albert Aixendri Morales Francesc Guim Bernat Albert Riera i Poblet. Gestió De Processos En El Linux Kernel 2.4. Contingut. Introducció El task_struct i les taules de processos Creació i destrucció de processos La política de planificació de processos Cues de processos
E N D
Albert Aixendri Morales Francesc Guim Bernat Albert Riera i Poblet Gestió De Processos En El Linux Kernel 2.4
Contingut • Introducció • El task_struct i les taules de processos • Creació i destrucció de processos • La política de planificació de processos • Cues de processos • Implementacions internes
Introducció • El kernel de Linux està format per cinc subsistemes: • L’ scheduler de processos (SCHED): responsable de controlar l’accés dels processos a la CPU. • Memory Manager (MM): • Permet que els processos accedeixin i comparteixin de forma segura la memòria principal. • Permet que els processos ocupin més espai lògic que el físic disponible (Memòria Virtual)
Introducció (cont.) • Virtual File System (VFS): agrupa les característiques de la varietat de dispositius físics permetent treballar amb dispositius lògics. • Network interface (NI): facilita mitjans per accedir als diferents protocols i recursos de la xarxa. • Comunicació entre processos (IPC): ofereix mecanismes de comunicació procés-a-procés dins d’un mateix sistema.
El task_struct i les taules de processos • Linux guarda la informació d’un procés en l’estructura struct task_struct • Cada task_struct ocupa 1.680 bytes • El nombre de processos està limitat per la memòria max_threads = mempages / (THREAD_SIZE/PAGE_SIZE) / 2;
El task_struct i les taules de processos (cont.) Mètodes d’accés al task_struct: • una taula de hash per pid. pid_hashfn(x) ((((x) >> 8) ^ (x)) & ((4096 >> 2) - 1)) static inline struct task_struct *find_task_by_pid(int pid) • una llista circular doblement encadenada per poder fer un recorregut de tots els processos: #define for_each_task(p) \ for (p = &init_task ; (p = p->next_task) != &init_task ; )
El task_struct i les taules de processos (cont.) • Estats d’un procés: volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ #define TASK_RUNNING 0 #define TASK_INTERRUPTIBLE 1 #define TASK_UNINTERRUPTIBLE 2 #define TASK_ZOMBIE 4 #define TASK_STOPPED 8 #define TASK_EXCLUSIVE 32
El task_struct i les taules de processos (cont.) • Els flags contenen informació d’un procés que no té perquè ser independent unsigned long flags; /* per process flags, defined below */ #define PF_ALIGNWARN 0x00000001 /* Print alignment warning msgs */ /* Not implemented yet, only 486*/ #define PF_STARTING 0x00000002 /* being created */ #define PF_EXITING 0x00000004 /* getting shut down */ #define PF_FORKNOEXEC 0x00000040 /* forked but didn't exec */ #define PF_SUPERPRIV 0x00000100 /* used super-user privileges */ #define PF_DUMPCORE 0x00000200 /* dumped core */ #define PF_SIGNALED 0x00000400 /* killed by a signal */ #define PF_MEMALLOC 0x00000800 /* Allocating memory */ #define PF_VFORK 0x00001000 /* Wake up parent in mm_release */ #define PF_USEDFPU 0x00100000 /* task used FPU quantum (SMP) */
Creació i destrucció de processos • Tipus de processos: • threads idle • threads de sistema • tasks d’usuari • Un procés d’usuari es pot crear amb les crides clone() i fork().
Creació i destrucció de processos (cont.) • Creació d’un procés: • Buscar memòria per alocatar el procés • Es copia el task_struct del pare al fill • Comprovacions més importants: • màxim processos d’usuari • Es modifiquen els paràmetres no hereditaris del nou procés. • Assignació del nou pid. • S’introdueix el procés a pidhash[ ]i a la llista. • Estat a TASK_RUNNING. • Introducció a la cua d’execució.
Creació i destrucció de processos (cont.) • Com es pot matar un procés: • Amb la crida exit(). • Enviant un signal que mati el procés. • Que el procés produeixi una excepció. • Amb la crida bdflush(). (antigues versions del kernel)
Creació i destrucció de processos (cont.) • Destrucció d’un procés: • Es bloqueja el procés • Estat a TASK_ZOMBIE. • S’envia el signal rebut a tots els fills (sempre que no sigui 0) • S’avisa al pare amb un signal SIGCHLD. • S’alliberen els recursos, es tanquen els fitxers...
La política de planificació de processos • L’scheduler està dividit en quatre mòduls: • La política de planificació Escull el següent procés a executar en funció de la política. • Les funcions específiques de l’arquitectura Codi assembler que manipula els registres i instruccions específics a la CPU. • Les funcions independents de l’arquitectura Realitza la gestió global de la planificació. • La interfície de crides a sistema L’interfície a través de la qual un procés pot accedir al kernel. En particular, el SO per executar l’scheduler.
La política de planificació de processos (cont.) • Polítiques de planificació de procés: • SCHED_FIFO • SCHED_RR • SCHED_OTHER
La política de planificació de processos (cont.) • La funció goodness() retorna el pes que té cada procés, en funció de la prioritat i de si és real time. • Els processos real time s’executen abans. • si és un procés real time: weigth = counter + 1000 • sino: weigth = weigth + prioritat
La política de planificació de processos (cont.) • En plataformes SMP, un procés és penalitzat si s’ha de passar a executar a una altra CPU que l’anterior on s’estava executant.
Cues de processos: Task Queues • Són mecanismes del kernel per a executar tasques més tard. En el kernel 1.x s’anomenaven Bottom Halves i eren més limitades • N’hi ha quatre de predefinides: • tq_timer • tq_scheduler • tq_immediate • tq_disk • Se’n poden crear de pròpies
Cues de processos: Wait Queues • Aquestes cues serveixen per guardar els processos que no poden ser atesos pel Kernel. • Els processos es queden en estat “sleep” i es desperten quan poder ser atesos. • Podem definir cues pròpies.
Cues de processos: Kernel Timer • Es tracta d’un llista de funcions particulars a executar en un temps especificat en el futur. • L’estructura de cada node de la llista es: struct timer_list { struct list_head list; unsigned long expires; unsigned long data; void (*function)(unsigned long); volatile int running; };
Implementacions Internes • Linked List. • Es tracta d’una llista doblement encadenada. • Algunes operacions estan definides amb macros • Task Queues
Implementacions Internes (cont.) • Kernel timers
Bibliografia • http://www.moses.uklinux.net/patches/lki-2.html • http://iamexwiwww.unibe.ch/studenten/schlpbch/linuxScheduling/LinuxScheduling.html