18Aug

מדוע לא קיימים מזהי תהליך של Windows?

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

שאלה של היום &מפגש תשובה מגיע אלינו באדיבות SuperUser - חלוקה של סטאק שערי, קהילה מונחה קיבוץ של Q & אתרי אינטרנט.

השאלה

SuperUser הקורא פיטר Hahndorf רוצה לדעת למה אין מספר משונה של מזהי תהליך Windows:

ישנן דרכים רבות להסתכל על מזהי התהליך ב- Windows.שימוש ב- PowerShell:

אני מקבל תוצאה זו:

כפי שאתם יכולים לראות, כל מזהי התהליך הם ממוספרים אפילו, לא רק זה, הם כולם מכפילים של ארבעה.אתה יכול להיראות קשה כמו שאתה רוצה ואתה לעולם לא תמצא מזהה תהליך ממוספרים, לפחות לא על כל גירסה מבוססת Windows NT.מה הסיבה לכך?

מדוע אין מזהי תהליך של Windows ממוספרים?

תשובה

SuperUser תרומה DavidPostill יש את התשובה עבורנו:

למה אין מזהים תהליך משונה של Windows התהליך?

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

מדוע מכפילי תהליך וחוטים מכפילים ארבעה?

במערכות הפעלה מבוססות Windows NT, מזהי תהליך ומזהי פתיל תמיד יהיו מספר של ארבעה.האם זה רק צירוף מקרים?

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

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

מקור: מדוע מכפילי תהליך וחוטים מכפילים ארבעה?

מדוע הקרנל מטפל תמיד במספר של ארבעה?

משהו שלא ידוע היטב הוא כי שתי חתיכות התחתונה של ידיות הקרנל תמיד אפס;במילים אחרות, הערך המספרי שלהם הוא תמיד מספר של ארבעה.שים לב כי זה חל רק על ידיות ליבה;היא אינה חלה על ידיות פסאודו או על סוג אחר של ידית( ידיות USER, ידיות GDI, ידיות מולטימדיה וכו ').קרנל ידיות הם דברים שאתה יכול להעביר את הפונקציה CloseHandle.

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

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

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

קריאה נוספת

הדבר החדש הישן: פיתוח מעשי לאורך כל האבולוציה של Windows על ידי ריימונד חן( מנהל תוכנה ראשי מהנדס תוכנה ב- Microsoft )

האם יש משהו להוסיף להסבר?נשמע את ההערות.רוצה לקרוא תשובות נוספות ממשתמשים אחרים בעלי ידע טכנולוגי?בדוק את נושא הדיון המלא כאן.