מערך שיעור: מערכת הפעלה ו-Terminal
משך: יום לימוד מלא — 6 שעות אקדמיות (270 דקות).
מטרת השיעור: הסטודנטים יבינו מה מערכת ההפעלה עושה עבורם בכל שורת קוד, ויצאו מהיום בנוח עם Terminal כדרך עבודה יומיומית.
בסוף השיעור הסטודנטים צריכים:
- להסביר את חמשת התפקידים של מערכת ההפעלה ואת ההבדל בין Program ל-Process.
- להבחין בין נתיב מלא לנתיב יחסי, ולהסביר למה
FileNotFoundErrorקורה כשמריצים מהתיקייה הלא נכונה. - לנווט, ליצור, להעתיק, להעביר ולמחוק קבצים מה-Terminal בלי עכבר.
דגש קריטי: Current Working Directory. זה המושג שימנע הכי הרבה תקלות בשבועות הבאים (קבצים, JSON, Database). כל הדגמה ביום הזה צריכה לחזור אליו.
מהלך השיעור
| חלק בשיעור | משך | הערות ודגשים |
|---|---|---|
| חזרה קצרה על נושא המחשב ומערכת ההפעלה | 15 דק' | 3 שאלות לכיתה: RAM מול Storage, מהו PID, Syntax מול Runtime. |
| מהי מערכת הפעלה + Kernel | 40 דק' | אנלוגיית מנהל הבניין. ציור שכבות: Hardware → Kernel → Programs. להדגים PermissionError אמיתי. |
| Program מול Process + Scheduling + זיכרון | 45 דק' | worker.py בשני Terminals במקביל. לראות PID שונים ו-counter נפרד. Task Manager / Get-Process. |
| הפסקה | 15 דק' | |
| File System, נתיבים, משתמשים והרשאות | 50 דק' | לצייר עץ תיקיות על הלוח. paths_lab.py: להריץ משתי תיקיות שונות ולתת לכיתה לנחש. |
| הפסקה | 15 דק' | |
| Terminal ו-Shell | 55 דק' | טבלת PowerShell/Bash על הלוח. “מרוץ תיקיות” בזוגות. להדגיש Tab ו-↑ מההתחלה. |
| תרגול עצמאי + בדוק את עצמך | 35 דק' | Mini Project: project_check.py. לשים לב לחזרות בקוד, זה גשר ל-DRY בנושא Python. |
דגשים להעברת השיעור
- לא להפוך את היום להרצאה תיאורטית. כל מושג (Process, זיכרון, הרשאה) מקבל הדגמה חיה של דקה-שתיים.
- Terminal = שריר. הסטודנטים צריכים להקליד הרבה. עדיף פחות פקודות שכל אחד הריץ חמש פעמים מאשר טבלה ענקית שרק הוצגה.
- אזהרת
rmבקול ובבירור: אין סל מחזור. להראות את ההרגל “ls לפני rm”. - Windows/Mac: חשוב שכל סטודנט ידע מה ה-Shell שלו. ב-Windows לוודא שה-Terminal של VS Code פותח PowerShell ולא cmd.
- לא להעמיק ב-ACL של Windows או ב-chmod. המטרה היא הבנת הרעיון של Read/Write/Execute ובעלים, לא ניהול הרשאות.
- לחזור על ה"למה": כל פעם ש-Python “מבקשת” משהו מה-OS, להשתמש במילה System Call, כדי שתתקבע.
- Mini Project מכוון לחזרתיות. כשמישהו מתלונן “זה ארוך ומשעמם”, להגיד: “בדיוק! בשבוע הבא נלמד איך לא לכתוב ככה”.
מושגים
| מושג | הסבר קצר |
|---|---|
| Operating System | התוכנה שמנהלת את משאבי המחשב ומספקת שירותים לתוכנות. |
| Kernel | הליבה המוגנת של ה-OS. רצה ב-Kernel Mode. |
| User Mode / Kernel Mode | הרשאות מוגבלות לתוכנות / גישה מלאה לחומרה. |
| System Call | בקשה של תוכנה מה-Kernel לבצע פעולה מוגנת. |
| Program / Process | קובץ סטטי / מופע רץ עם PID, זיכרון ומצב. |
| Scheduler | רכיב ב-Kernel שמחלק זמן CPU בין תהליכים. |
| Memory Isolation | כל תהליך ניגש רק לזיכרון שלו. |
| Swap / Page File | שימוש בדיסק כהמשך ל-RAM כשהוא מתמלא. איטי. |
| File System | ארגון הדיסק כעץ של תיקיות וקבצים, עם Metadata. |
| Absolute / Relative Path | נתיב מהשורש / נתיב מהתיקייה הנוכחית. |
| Current Working Directory | התיקייה ש-Process “עומד” בה. נתיבים יחסיים נמדדים ממנה. |
| Permissions (r/w/x) | קריאה, כתיבה, הרצה. לפי בעלים, קבוצה ואחרים. |
| Terminal / Shell / Prompt | חלון / מפרש פקודות / הטקסט שמחכה לפקודה. |
תרגיל חשיבה
שאלת פתיחה (לפני חלק File System): “יש לי קובץ data.txt ליד הסקריפט שלי. כשאני מריץ עם כפתור Run ב-VS Code, הסקריפט אומר שהקובץ לא קיים. כשאני מריץ מה-Terminal, הוא מוצא אותו. איך ייתכן שאותו קוד מתנהג אחרת?”
מהלך:
- לאסוף השערות (באג ב-VS Code? הקובץ לא נשמר?).
- להריץ מול הכיתה את שתי הדרכים עם
print(os.getcwd())בתחילת הקוד. - לגלות יחד שכפתור Run מריץ לפעמים מתיקיית הפרויקט הראשית (
kodkod6), ולא מתיקיית הקובץ. - לשאול: “אז ממה נמדד נתיב יחסי?” ולהגיע ל-Current Working Directory.
מה המרצה מראה בסוף: ציור של עץ התיקיות, עם חץ “אני עומד כאן” שזז בין kodkod6 ל-week-1, ואיך אותו נתיב יחסי data.txt מצביע פעם על קובץ קיים ופעם על כלום. משפט סיום: “כשקובץ ‘לא נמצא’, השאלה הראשונה היא: מאיפה הרצתי?”