פרויקט תור אירועים בקרנל¶
המערכת שנבנה¶
נבנה מודול שמפרסם התקן תווים בשם amit_events ותוכנת ראסט שמשתמשת בו. כתיבה של מספר בן שמונה בתים יוצרת אירוע בן שישה עשר בתים המכיל מספר רצף ואת הערך שנשלח. כל המספרים מועברים בסדר בתים קטן, בלי תלות בפריסת מבנה של מהדר. התור משותף לכל הפתיחות ומכיל לכל היותר שלושים ושניים אירועים.
נדרוש סמנטיקה מדויקת: קריאה קטנה מדי אינה צורכת אירוע, תור מלא מחזיר שגיאת מוכנות למתאר לא חוסם, והפסקה לוגית מונעת כתיבות חדשות אך מאפשרת לרוקן אירועים קיימים. לאחר הריקון נקבל סוף זרם. פעולת ההפסקה תהיה בלתי הפיכה עד לפריקה ולטעינה מחדש של המודול.
שלבי המימוש¶
תחילה כתבו את פעולות התור כלוגיקה שנבדקת באמצעות בדיקות היחידה מהשיעור האחרון. אחר כך חברו נעילה, תור המתנה, פעולות קובץ וממשק מוכנות. לבסוף כתבו לקוח שממלא, מרוקן, מפסיק ומוודא שאי אפשר להוסיף אירוע לאחר ההפסקה.
לכל שדה במצב הגלובלי רשמו איזה מנגנון מגן עליו. לכל פעולה רשמו מהו רגע השינוי המחייב שלה. הגדירו מה קורה כאשר העתקה למרחב משתמש נכשלת, כאשר תהליך מקבל אות בזמן המתנה וכאשר שני קוראים מתחרים על אותו אירוע.
תנאי קבלה¶
בדקו סדר רצף תחת שני כותבים, שמירת אירוע לאחר קריאה עם באפר קטן, חסימה והתעוררות, התנהגות לא חוסמת, הפסקה כשהתור ריק והפסקה כשהוא מלא. הוסיפו בדיקת העתקה לכתובת לא תקינה בתוכנית מעבדה נפרדת והוכיחו שאירוע לא נצרך בעקבותיה.
הריצו באורח המבודד תצורת בדיקת נעילות ותצורת בדיקת זיכרון. שמרו את התצורה ואת הפלט האמיתי. הציגו גם מגבלה ידועה של המימוש ודרך לשפרה בלי לשבור בעלות. בצעו את כל טעינות המודולים באורח בלבד.