לדלג לתוכן

6.1 הקדמה לקרנל תרגול

תרגול - הקדמה לקרנל

תרגיל 1 - מידע על הקרנל

השתמשו בפקודות שורת הפקודה כדי לענות על השאלות הבאות:

  1. מהי גרסת הקרנל המותקנת? (רמז: uname)
  2. מתי הקרנל קומפל? (רמז: /proc/version)
  3. מהי הארכיטקטורה של המעבד? (רמז: uname -m)
  4. כמה זמן המערכת רצה ללא אתחול? (רמז: /proc/uptime)

תרגיל 2 - חקירת מודולים

  1. הריצו lsmod וספרו כמה מודולים טעונים כרגע.
  2. בחרו מודול אחד מהרשימה והשתמשו ב-modinfo כדי לגלות מידע עליו - מהו התיאור שלו? מהו הרישיון? מה הנתיב לקובץ הko?
  3. חפשו ב-lsmod מודולים שקשורים לרשת (חפשו את שם כרטיס הרשת שלכם). האם תוכלו לזהות את הדרייבר של כרטיס הרשת?

תרגיל 3 - חקירת sys

חקרו את מערכת הקבצים /sys:

  1. כמה ליבות מעבד (CPU cores) יש לכם? (חפשו ב-/sys/devices/system/cpu/)
  2. מצאו את רשימת כל התקני הבלוק (דיסקים) במערכת דרך /sys/block/. מה ההבדל בין מה שנמצא כאן לבין מה שנמצא ב-/proc/partitions?
  3. בחרו התקן בלוק אחד (למשל sda) והציגו את הגודל שלו דרך /sys/block/sda/size.

תרגיל 4 - כתיבת מודול קרנל (רעיוני)

תרגיל זה הוא רעיוני - אם יש לכם VM של לינוקס עם kernel headers מותקנים, תוכלו גם לבצע אותו בפועל.

כתבו מודול קרנל שעושה את הדברים הבאים:
1. כשנטען - מדפיס (עם printk) את שם המודול ואת ה-PID של התהליך שטען אותו (רמז: current->pid הוא הPID של התהליך הנוכחי בקרנל)
2. כשמוסר - מדפיס הודעת פרידה עם מספר השניות שהמודול היה טעון (רמז: שמרו את הזמן בטעינה עם jiffies)

כתבו גם את הMakefile המתאים.


תרגיל 5 - שאלה תיאורטית

הסבירו: למה הקרנל ממופה בטבלאות הpaging של כל תהליך? מה היה קורה אם הקרנל היה ממופה רק בטבלת paging נפרדת משלו, ובכל syscall היינו צריכים להחליף את ה-CR3?