6.1 הקדמה לקרנל תרגול
תרגול - הקדמה לקרנל¶
תרגיל 1 - מידע על הקרנל¶
השתמשו בפקודות שורת הפקודה כדי לענות על השאלות הבאות:
- מהי גרסת הקרנל המותקנת? (רמז:
uname) - מתי הקרנל קומפל? (רמז:
/proc/version) - מהי הארכיטקטורה של המעבד? (רמז:
uname -m) - כמה זמן המערכת רצה ללא אתחול? (רמז:
/proc/uptime)
תרגיל 2 - חקירת מודולים¶
- הריצו
lsmodוספרו כמה מודולים טעונים כרגע. - בחרו מודול אחד מהרשימה והשתמשו ב-
modinfoכדי לגלות מידע עליו - מהו התיאור שלו? מהו הרישיון? מה הנתיב לקובץ הko? - חפשו ב-
lsmodמודולים שקשורים לרשת (חפשו את שם כרטיס הרשת שלכם). האם תוכלו לזהות את הדרייבר של כרטיס הרשת?
תרגיל 3 - חקירת sys¶
חקרו את מערכת הקבצים /sys:
- כמה ליבות מעבד (CPU cores) יש לכם? (חפשו ב-
/sys/devices/system/cpu/) - מצאו את רשימת כל התקני הבלוק (דיסקים) במערכת דרך
/sys/block/. מה ההבדל בין מה שנמצא כאן לבין מה שנמצא ב-/proc/partitions? - בחרו התקן בלוק אחד (למשל
sda) והציגו את הגודל שלו דרך/sys/block/sda/size.
תרגיל 4 - כתיבת מודול קרנל (רעיוני)¶
תרגיל זה הוא רעיוני - אם יש לכם VM של לינוקס עם kernel headers מותקנים, תוכלו גם לבצע אותו בפועל.
כתבו מודול קרנל שעושה את הדברים הבאים:
1. כשנטען - מדפיס (עם printk) את שם המודול ואת ה-PID של התהליך שטען אותו (רמז: current->pid הוא הPID של התהליך הנוכחי בקרנל)
2. כשמוסר - מדפיס הודעת פרידה עם מספר השניות שהמודול היה טעון (רמז: שמרו את הזמן בטעינה עם jiffies)
כתבו גם את הMakefile המתאים.
תרגיל 5 - שאלה תיאורטית¶
הסבירו: למה הקרנל ממופה בטבלאות הpaging של כל תהליך? מה היה קורה אם הקרנל היה ממופה רק בטבלת paging נפרדת משלו, ובכל syscall היינו צריכים להחליף את ה-CR3?