8 - פרויקט מסכם - פרויקט
פרויקט מסכם - מנוע אירועים עם שני מנגנוני המתנה¶
בפרויקט נבנה מנוע קטן שמנהל כמה פעולות קריאה מוגבלות בגודלן. שכבת הבעלות והביטול תהיה משותפת לשני מנגנוני המתנה: רישום מוכנות באמצעות epoll, והגשת פעולת מוכנות דרך io_uring. הבחירה בפעולת מוכנות בטבעת מכוונת: היא מאפשרת להשוות את שני המנגנונים על אותו חוזה, לפני החלפת הקריאה עצמה בפעולת השלמה שמחזיקה באפר.
המנוע אינו צריך לממש שפת תכנות או את כל תכונות טוקיו. הוא צריך להיות קטן מספיק כדי שתוכלו להסביר כל מעבר מצב וכל בלוק לא בטוח. נשתמש בזוגות סוקטים מקומיים כדי לשלוט במפיקים בלי להקים שרת רשת מלא, שנבנה בפרק הבא.
הדרישות¶
ממשו ארבע פעולות במקביל, עם מזהה משבצת ודור לכל פעולה. כל פעולה קוראת עד סוף זרם ושומרת לכל היותר שישה עשר בתים. קלט גדול יותר חייב להידחות באופן מפורש. הגדירו ביטול לוגי שמפסיק למסור תוצאה למתקשר, אך אינו משחרר משאבים שעוד דרושים לצריכת אירוע מאוחר.
ממשו רישום, המתנה, חימוש מחדש וסיום עבור שני מנגנוני ההמתנה. במנגנון הטבעת השתמשו בפעולת מוכנות חד־פעמית, ורשמו מחדש רק אחרי שצרכתם את ההשלמה הקודמת. במנגנון מבוסס הרמה שמרו את הרישום עד סוף הפעולה והסירו אותו לפני סגירת המתאר המתאים.
ממשו מפיקים ששולחים נתונים ואז סוגרים את צד הכתיבה שלהם. בטלו אחת הפעולות לפני הגעת הנתונים, והוכיחו שהשלמתה המאוחרת אינה נמסרת כהצלחה. הציגו בנפרד את מועד בחירת התוצאה ואת מועד סיום השימוש במשאבים.
בדיקות שחייבות להופיע¶
בדקו קלט ריק, קלט תקין, קלט המגיע בכמה מקטעים, קלט גדול מהמגבלה וביטול לפני הגעת נתונים. הוסיפו בדיקת מודל שמזריקה אירוע מדור ישן לאחר מחזור משבצת. בדקו גם שכשל ביצירת מנגנון ההמתנה מדווח כשגיאת סביבה ואינו גורם לדוח הצלחה מזויף.
הריצו את הבדיקות עם מגבלת זמן חיצונית כדי שתקלה במקור יקיצה לא תתקע את כל הבדיקה. מדדו זמן מעבד בזמן שהמפיקים מושהים, ובדקו שאין לולאת בדיקה פעילה. תעדו מספר מתארים לפני ואחרי סדרת הרצות באותו תהליך, אם אתם מרחיבים את ממשק ההרצה מעבר לדוגמת הפתרון.
הרחבת הבעלות¶
לאחר שמנוע המוכנות עובד, החליפו בניסוי נפרד את קריאת הקובץ בממשק בעל באפר בבעלות מהרצאה 8.9. כתבו את ההבדל בחוזה: במנוע המוכנות הבאפר מושאל רק למשך קריאה סינכרונית; במנוע ההשלמה הוא נשאר בבעלות הפעולה עד חזרתה. נתחו את שני סדרי ההגעה של בקשת ביטול והשלמה מקורית באמצעות המודל מהרצאה 8.9, ואל תציגו אישור ביטול כהוכחת שחרור של הבאפר.
תוצר ההגשה¶
הגישו קוד, קובץ נעילה, פקודות בנייה, גרסת קרנל ותוצאות שנמדדו בפועל. צרפו תרשים מצבים קצר שמסביר רישום, המתנה, מוכנות, ביטול לוגי וסיום. עבור כל בלוק לא בטוח כתבו איזה אחסון חי בזמן הקריאה ומי מחזיק את אחריות הסגירה. צרפו גם תרחיש כשל אחד שתיקנתם, עם עקבה לפני התיקון ואחריו.