Operációs rendszerek 2 Bátfai Norbert Debreceni Egyetem Informatikai Kar (DE IK), Információ Technológia Tanszék egyetemi tanársegéd Dokumentum verzió: 0.0.3, DEIK_MIPPOS2_BN_2.odp Debrecen, szeptember 22. A 2. előadás és labor anyaga – a MINIX 3 kernelfa Programozó Páternoszter DE IK mérnök informatikus szak előadás és labor
Operációs rendszerek előadás Bátfai, Norbert Debreceni Egyetem, Informatikai Kar, Információ Technológia Tanszék Copyright © 2008 Bátfai Norbert E közlemény felhatalmazást ad önnek jelen dokumentum sokszorosítására, terjesztésére és/vagy módosítására a Szabad Szoftver Alapítvány által kiadott GNU Szabad Dokumentációs Licenc 1.2-es, vagy bármely azt követő verziójának feltételei alapján. Nem változtatható szakaszok: A szerzőről. Címlap szövegek: Programozó Páternoszter, Bátfai Norbert, Gép melletti fogyasztásra. Hátlap szövegek: Belépés a gépek mesés birodalmába. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being: A szerzőről, with the Front- Cover Texts being: Programozó Páternoszter, Bátfai Norbert, Gép melletti fogyasztásra, and with the Back-Cover Texts being: Belépés a gépek mesés birodalmába. Felhasználási engedély A GNU Free Documentation License nem hivatalos magyar fordítása:
A második előadás vázlata Bevezetés és elmélet ● MINIX 3 források szervezése ● A MINIX 3 PCB Példák ● Processztábla méretének növelése 200-ra. ● Ütemezési sorok 16-ról 32-re. Gyakorlat ● MINIX 3 kernel módosításai és fordítások
A MINIX3 kernelfa / /usr /usr/src/ Időzít ő taszk Ethernet taszk Lemez taszk Terminál taszk Processzuskezelé s Megszak., IPC stb. Rendsz er taszk PMFSIS /usr/src/servers /usr/src/driver s /usr/src/kerne l
Időzít ő taszk Ethernet taszk Lemez taszk Terminál taszk Felhasználói programokInit Processzuskezelé s Megszak., IPC stb. Rendsz er taszk PMFSIS MINIX3 mikrokernel arch Például /usr/src/commands/simple/top.c Például /usr/src/servers/pm /usr/src/kerne l Forráskód böngésző: vagy mazohistáknak: find. -name '*.h'|xargs grep ”\/\* process table \*\/”
A MINIX3 betöltési memóriaképe 0x x K Kernel 0x = 1M 0xFEC0000 ~254M PM OR3 146 /usr/src/kernel /usr/src/servers/pm FS RS
A MINIX3 PCB A Minix3 PCB három részre van osztva: − a kernel/proc.h-beli a proc nevű struktúra (kernel) kernel/proc.h − a PM mproc struktúrája (memóriakezelés) servers/pm/mproc.h − az FS fproc struktúrája (fájlkezelés) írja le. servers/fs/fproc.h OR
F1 – a kernel processz tábla nyomkövetési listája /usr/src/servers/is/dmp_kernel. c
Shift-F1 – a PM processz tábla nyomkövetési listája /usr/src/servers/is/dmp_pm. c
Shift-F3 – a FS processz tábla nyomkövetési listája
A kernel PCB
A kernel processz tábla
Processztábla méretének növelése Miért lehet rá szükség? Hogyan csináljuk: mi a jó ötlet, mi a rossz? include/minix/sys_config.h
Processztábla méretének növelése
Bootoláskor :
Processztábla méretének növelése Vagy a kernelüzenetek nyomköv. listájában:
Ütemezési sorok 16-ról 32-re Ütemezési sorok nyomkövetési listája: (F9)
Ütemezési sorok 16-ról 32-re
Ütemezési sorok nyomkövetési listája: (F9)
Az Információs szerver Időzít ő taszk Mikrokernel Ethernet taszk Lemez taszk Terminál taszk DD taszkok (B/K) Felhasználói programok Szerver processzusok User processzusok Init Processzuskezelé s Megszak., IPC stb. Rendsz er taszk PMFSIS servers/is/main.c /* System Information Service. * This service handles the various debugging dumps, such as the process * table, so that these no longer directly touch kernel memory. Instead, the * system task is asked to copy some table in local memory. *... message m_in; /* the input message itself */ message m_out; /* the output message used for reply */ int who_e; /* caller's proc number */ int callnr; /* system call number */... /* Main loop - get work and do it, forever. */ while (TRUE) { /* Wait for incoming message, sets 'callnr' and 'who'. */ get_work();... servers/is/main.c... PRIVATE void get_work() { int status = 0; status = receive(ANY, &m_in); /* this blocks until message arrives */ if (OK != status) panic("IS","failed to receive message!", status); who_e = m_in.m_source; /* message arrived! set sender */ callnr = m_in.m_type; /* set function call number */ }... i
Az Információs szerver servers/is/main.c /* System Information Service. * This service handles the various debugging dumps, such as the process * table, so that these no longer directly touch kernel memory. Instead, the * system task is asked to copy some table in local memory. *... message m_in; /* the input message itself */ message m_out; /* the output message used for reply */ int who_e; /* caller's proc number */ int callnr; /* system call number */... /* Main loop - get work and do it, forever. */ while (TRUE) { /* Wait for incoming message, sets 'callnr' and 'who'. */ get_work();... switch (callnr) { case FKEY_PRESSED: result = do_fkey_pressed(&m_in); break;... servers/is/dmp.c... struct hook_entry { int key; void (*function)(void); char *name; } hooks[NHOOKS] = { { F1, proctab_dmp, "Kernel process table" }, { F2, memmap_dmp, "Process memory maps" }, { F3, image_dmp, "System image" }, { F4, privileges_dmp, "Process privileges" },... PUBLIC int do_fkey_pressed(m) {... /* Now check which keys were pressed: F1-F12, SF1-SF12. */ for(h=0; h < NHOOKS; h++) if(pressed(hooks[h].key)) hooks[h].function();... i
Nyomkövetési infók nyomtatása
Miközben Alt+F2-vel egy másik konzolra és ls -lR párszor
Otthoni feladat: módosítsd úgy a MINIX 3 kernelt, hogy 150 processzes legyen a processztábla és 32 ütemezési sort használjon! „Bizonyítékul” néhány képet küldj el az címemre, az „OS-OTTHONI-MINIX150_32” tárggyal. Feladatok Otthoni feladat: módosítsd úgy a MINIX 3 kernelt, hogy az F1 lenyomására írja ki a processztáblából a nem üres slotokat ! „Bizonyítékul” néhány képet küldj el az címemre, az „OS- OTTHONI-MINIXF1” tárggyal.
Tesztelés
Köszönöm a figyelmet Az előadások és a gyakorlatok kölcsönösen, oda-vissza építenek egymásra. Skype: batfai.norbert MSN: Az óra fóruma: