שְׁאֵלָה:
מעקב אחר העברת הודעות במקום ערימת שיחות
Daniel W. Steinbrook
2013-03-22 07:12:30 UTC
view on stackexchange narkive permalink

במיקרו-קרנל, חלק ניכר מהפונקציונליות המעניינת מתרחשת לא בשיחות פונקציות מסורתיות, אלא במקום דרך העברת הודעות בין ישויות נפרדות.

האם יש מבנה שארכיטקטורות מערכת הפעלה כאלה בדרך כלל משתמשות בו כדי ליישם העברת מסרים. ? והאם יש דרך מתודית לתייג זאת תוך כדי פירוק, כדי להקל על מסלולי ההודעות כמו לעקוב אחר ערימת השיחות?

אחד תשובה:
Igor Skochinsky
2013-03-22 23:52:19 UTC
view on stackexchange narkive permalink

אני לא חושב שפירקתי מיקרו-לייטים כלשהם, אך "העברת הודעות" נפוצה לפחות בשתי קטגוריות של תוכניות: Win32 GUI (שניהם גלם מבוסס Win32 ו- MFC) והפעלה של Objective-C.

בשני המקרים יש לך איזושהי שגרת שולח מרכזית (או שגרות) שמקבלת הודעות ומעבירה אותם ל נמענים כלשהם, שעשויים להיות בתוך או מחוץ התוכנית הנוכחית.

ניתן לרשום את הנמענים באופן דינמי ( RegisterClass ב- Win32) או שניתן לציין אותם בצורה סטטית כלשהי (מטא נתונים מסוג Objective-C או טבלאות המטפל בהודעות MFC).

באשר לשולחים, נבחן את SendMessage של Win32. יש בו ארגומנטים hWnd ו- Msg (ופרמטרים נוספים). הראשון מציין את הנמען. יתכן שתוכל לאתר מאיפה זה הגיע ואז פשוט לחפש את רישום הכיתה המתאים לחלון ולבדוק אם נוהל החלון שלו מטפל בהודעה הספציפית הזו. אני מניח שתוכל לסמן את השיחה בתגובה "עובר להליך חלון 0x35345800" או דומה בכדי לעקוב אחריו. עם MFC תצטרך למצוא את טבלת ההודעות של הכיתה ולחפש את המטפל המתאים.

עם Objective-C, objc_msgSend מקבל את האובייקט המקבל ואת ה בורר להופיע. אם אתה יכול לעקוב אחר האובייקט, תוכל לבדוק אם יש לו הבורר בשם זה. לחלופין, בדוק את כל הסלקטורים עם שם זה בתוכנית. שוב, ברגע שמצאת אותה, הגיב הערה.

אז, גישה דומה ככל הנראה יכולה להיות מורחבת לכל שאר מערכות העברת ההודעות - מצא נמענים, ואז במקום השיחה המשגר ​​בדוק אילו יכולים לעשות יכול להתמודד עם זה ולבדוק את המטפלים. לפעמים אתה אפילו לא צריך לעשות את החלק הראשון בפועל - אם מזהה / שם ההודעה הוא ייחודי מספיק, ייתכן שתוכל למצוא את המטפל רק על ידי חיפוש אותו.

בעיה קשורה במקצת היא עבודה עם C ++ ופונקציות וירטואליות, אך היא נכללה ב שאלה אחרת.


רק זכרתי עוד סוג של תוכניות שאינם משתמשים בערמת השיחות. אלה המשתמשים ב סגנון מעבר המשך, בדרך כלל כתוב בשפה פונקציונאלית כלשהי. גרג סינקלייר כתב מאמר נחמד ומשעשע מאוד על זוועות פירוק צ'יקן - יישום של תוכנית השפה. האתר שלו אינו פעיל אך למרבה המזל Archive.org שמר עותק. ציטוט אחד ממנו:

עבור מהנדס הפוך, המשך סגנון מעבר המשמעות היא סוף הציוויליזציה כפי שאנו מכירים אותה.

כל מיני סוגי IPC במערכות הפעלה שונות משתמשים גם בשיטה דומה. לְמָשָׁל. RPC ו- LPC ב- Windows. לעזאזל, לא ניתן היה לסווג כאן גם IRPs במצב ליבת חלונות?
ואכן, IRP הם אפשרות אחרת!


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...