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

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

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

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

    השאלה

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

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

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

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

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

    התשובה

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

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

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

    למה הם תהליך וחוטים מזהים של ארבעה?

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

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

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

    מקור: למה הם תהליך וחוטים מזהים של ארבעה?

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

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

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

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

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

    לקריאה נוספת

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


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