The Foundation of Processor-Peripheral Communications

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

מיקרו-ארכיטקטורה של CPU Registers

המרשם מייצג את הרמה הגבוהה ביותר של זיכרון בהיררכיה של האחסון, הממוקם ישירות בתוך הליבה CPU. הם זיכרון העבודה של המעבד, מחזיק בנתונים המיידיים, כתובות ומידע בקרה הנדרשים לביצוע הוראות.בניגוד לסוגים זיכרון איטי יותר כגון DRAM או NAND Flash, רישומים בנויים באמצעות תאי זיכרון סטטי מהיר (SRAM) או כפכפים ומתכננים עבור גישה אחת בתדירות ה-CPU.

כללי-לחוץ מרישום ודרכי ביצוע

(הרשימה הבולטת ביותר של רישום למתכנת הרכב היא המרשם הכללי-המינון (GPRs) באדריכלות כמו ARM64 (AArch64), למתכנתים יש גישה ל-31 רישומים למטרות כלליות (X0-X30).הרישום הזה הוא המקור הבלעדי והמטרה של יחידה לוגיקה ⁇ (ALU) כאשר המעבדים מבצעים הוראה כמוLTF:0, הערכים המאוחסנים ב-X1 ו-X1 ל-X1, כדי לרשום את המעבדים, כדי לרשום את ה-X1, כדי לתקן את המעבדים, ו-X1, כדי לתקן את ה- XF.

רישום מיוחד ובקרת מערכת

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

  • (FLT:0)Program Counter (PC): FLT:1 הרישום הזה מחזיק בכתובת הזיכרון של ההוראה המבצעת כיום.זה מואץ באופן אוטומטי ויכול להשתנות על ידי הוראות סניף.
  • (FLT:0)Stack Pointer (SP):FLT:1 שימש לניהול ערימה השיחה, המכיל את הכתובת של החלק העליון של מסגרת הערימה הנוכחית.זה קריטי עבור שיחות פונקציה ואחסון משתנה מקומי.
  • (ב) [15] ,0) רשם (PSR / FLAGSRE): אספקת 1:1 מחסנים קודים מצב הנובעים מפעילות אל-U, כגון אפס, לשאת, מעל פניות ושליליות.הדגלים האלה שולטים בהוראות ענף תנאי והם חיוניים ליישום לולאות והצהרות FLT:1.
  • (FLT:0)Link Register (LR) / X30:03:031) באדריכלות ARM, GPR מיוחד זה מחזיק את כתובת החזרה עבור שיחת פונקציה, המאפשרת ייעוד תת-קרקעי יעיל מבלי צורך לדחוף את כתובת ההחזרה לערימה מיד.

ניהול רישום מודרני: RANAMING ו- Speculation

במעבדים מודרניים מחוץ לזמין, קובץ הרישום הפיזי גדול משמעותית מהרישום האדריכלי שנקבע על ידי ארכיטקטורת סט ההוראה (ISA) CPU משתמש בטכניקה הנקראת FLT:0register renamingFLT:1 כדי להתגבר על סכנות נתונים.לדוגמה, אם מארגן מחדש מעבד את ה- X0 לערכים שאינם קשורים, החומרה תמפה את ההתייחסות הלוגית הזו לרישום הפיזי, בעוד שהיא מאפשרת את הפונקציה CSA באופן ישיר.

יסודות הזיכרון-פאונדים I/O (MMIO)

I/O הוא מתודולוגיה חומרה שבה הבקרה והמידע של מכשירים היקפיים מוקצה כתובות בתוך מפת הזיכרון הסטנדרטית של המעבד, במקום להשתמש בהוראות I/O ייעודיות (כמו ב- x86 ב- / ללא אדריכלות), MMIO מאפשר ל- CPU לתקשר עם מכשירים באמצעות עומס סטנדרטי (LDR) וחנות (STR) הוראות.

אדריכלות החלל הבלתי מזוהה

במערכת MMIO, מרחב הכתובת הפיזי משותף בין מערכת RAM, ROM / flash, ורישום היקפי. טווח מסוים של כתובות שמורה עבור רישום מכשירים. כאשר CPU נושא עומס או לאחסן הוראה לכתובת בתוך טווח שמור זה, אוטובוס הזיכרון מפענח את הכתובת ואת המסלול העסקה עבור אוטובוס היקפי המתאים (כגון AMBA AXI או PCI) במקום לקריט.

לדוגמה, על ARM Cortex-M microcontroller טיפוסי, מפת הזיכרון נאכף לחלוטין: כתובות מ-FLT:2 ל-FLT 3 הן קוד, FLT:4 כדי ל-FLT:5 עבור SRAM, ו-FLT:6 ל-FLT 7 שמורות אך ורק עבור היקפים.

השוואת MMIO ו-Port-Mapped I/O (PMIO)

האלטרנטיבה ל-MMIO מבודדת I/O, או נמל ממופה I/O (PMIO), המשמשה היסטורית על ידי ארכיטקטורת x86.PMO משתמשת בערכת חומרה ייעודית והוראות מיוחדות (IN/Out) כדי לגשת לחלל כתובת I/O נפרד.

  • (FLT:0)MMIO יתרונות:FLT:1 הוא מיישם את מלוא העוצמה של מערכת ההוראה של CPU.You יכול להשתמש ב- Pointer derefering in C/C++, ליישם פעילות bit-field, ומנף את כל מצבי הטיפול. MMIO אינו דורש מנגנוני הגנה מיוחדים I/O מעבר ליחידת ניהול הזיכרון הקיימת (MMU).
  • (FLT:0.PMIO Advantages:FLT:1) הוא אינו צור מרחב כתובת יקר ממפת הזיכרון.מרחב I / O ייעודי מספק הפרדה נקייה בין זיכרון נתונים ורשומות בקרה, אשר יכול לפשט את עיצוב החומרה במערכות מורשת מסוימות.

מערכות x86 מודרניות עדיין משתמשות ב-PMO עבור תאימות למכשיר מורשת (למשל, בקר מקלדת PS/2), אך מכשירים בעלי ביצועים גבוהים כמו GPUs ו- NVMe SSDs מסתמכים אך ורק על MMIO באמצעות אוטובוס PCI Express.

גישה למרשם התקנים מקודמת High-Level Code

כאשר כותבים מנהלי ההתקן ב C או C++, גישה לרישום MMIO דורשת סמנטיה מסוימת למנוע אופטימיזציה של חומרים ממריצים מפעולת שוברת חומרה.המילה של FLT:8 היא חיונית.זה אומר למדור כי הערך בכתובת עשוי להשתנות ללא ידיעתו של המפיץ (למשל, בשל שינויים ממלכתיים) וכותב את הכתובת לא צריך להיות מותאם לאופטימיזציה עבור דוגמה: LT 9.

ההשפעה של רשומות ו-MMIO

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

טעינה / Store Semantics on Device Memory

ביצוע הוראה כגון FLT:11, שבו X1 מכיל את הכתובת של רישום נתונים משדר של המכשיר, גורם רצף מסוים.הערך של ה- CPU של רישום מטרות כלליות (W0) ממוקם על אוטובוס הנתונים.המרקו אוטובוס מקודש את כתובת היעד ומזהה אותו כאזור MMIOCT.

פולינג, אינטרפוגות ודגלי סטטוס רישום

דפוס האינטראקציה הבסיסי ביותר הוא סקר.ה-CPU קורא רישום מצב של המכשיר (כתובת MMIO) לתוך GPR, בודק קצת ספציפי באמצעות bitmask, ו לולאות עד החומרה קובעת את הדגל המציין נתונים מוכן.זהו הצורה הפשוטה ביותר של מחזורי הבין-שיח אבל פסולת CPU.המודל המונע הוא הרבה יותר יעיל. כאשר מכשיר יש לו נתונים, הוא קובע קו של תיקון CPU אחר, ואז פותר את המיקום הנוכחי.

גישה ישירה לזיכרון (DMA) ותיאום הרישום

עבור מכשירים גבוהים פסווידנטים כמו כרטיסי רשת או בקרי אחסון, העברת נתונים דרך ה- CPU הוא איטי ללא הגבלה. Direct Memory Access (DMA) פותר את זה על ידי מתן הפריפריה להעביר נתונים ישירות למערכת RAM ללא מעורבים CPU עבור כל מילה.עם זאת, DMA עדיין מסתמכת במידה רבה על CPU רישומים ו-MMIO עבור התצורה שלה.

  • ה- CPU כותב ל-MMIO לרשום את בקר DMA כדי להגדיר את כתובת המקור, כתובת היעד ואורך ההעברה.
  • ה- CPU כותב לרישום נפרד של MMIO כדי לבעוט מההעברה.
  • בעוד DMA הוא התקדמות, ה- CPU חופשי לבצע קוד אחר.
  • לאחר השלמת ההעברה, בקר DMA כותב לרישום סטטוס משלו מעלה הפרעה.ה-CPU חייב לקרוא את הרשומות האלה כדי לאמת את העסקה היה מוצלח.

לחיצת יד זו, שבה CPU נרשם להגדיר את המערכת, מנועי DMA מבצעים את המריבה הכבדה, ו- MMIO רושם את סטטוס הדו"ח, היא עמוד השדרה של ביצועים גבוהים I/O.

שיקולים מתקדמים בהליכים מודרניים

ככל שמורכבות המערכת גדלה, כמה תכונות מתוחכמות יצאו לנהל את המוזרות של MMIO ואת האינטראקציה שלה עם מדינת הרישום של CPU.

שקיפות וזיכרון

רישום מכשירים אינו ניתן למניעה; קריאה של רישום עשויה להבהיר דגל להפריע, וכתיבה של רישום עשויה להתחיל מנוע, לכן אזורי MMIO כמעט תמיד מסומנים כמו FLT:0 UncacheableFLT 1:1 או FLT:2Device-nRnEFLT 3 בטבלאות MMUs, כל כוחות אלה או כלי רכב, במיוחד כדי להיות חלש על ידי CLC (L2, במיוחד, כלומר, כלומר, יש צורך) כדי ל-LICE.

MMIO ב- PCI Express

תקן PCI Express (PCIe) הוא הקישור המהיר הדומיננטי במחשבים, שרתים ומערכות משובצות.מחשבים חושפים את הרשומות שלהם באמצעות MMIO. במהלך ה-Windows, הקושחה או מערכת ההפעלה לסרוק את אוטובוס PCIe ומקצה אזורי זיכרון לכל מכשיר של PC- PC-CBT (BARs) מגדיר את הגודל והסוג של חלון MM דורש כתובת זיכרון נמוכה (CIp) באמצעות מכשיר CIp) באמצעות מחשב ניידת זיכרון CHD (קיצור של CRAT) ו-Ip) באמצעות מחשבי תיבות של CRACV (BART) ו- PC CRACVT) באמצעות מחשבי תיבות של CRAC.

אתגרים וירטואליים ו- IOMMU

בסביבה וירטואלית, מערכת הפעלה אורח לא ניתן גישה פיזית ישירה לרישום MMIO, שכן זה ישבור בידוד.היפרביטור חייב מלכודות וחיקוי של אורח MMIO גישה, אשר איטי.חומרה מודרנית פותרת זאת עם כתובת FLT:0 Input-Out Memory Management Unit (IO)FLT:1MMU) יושב בין המכשיר ל-OL, מאפשר כעת ל- CMAOS כדי להעביר את הכתובת של מכשיר וירטואלית ל-IO.

יישומים מעשיים של רשומות ו-MMIO

הבנת המושגים האלה אינה רק אקדמית.כל נהג היקפי שנכתב עבור לינוקס, Windows, או RTOS בנוי על בסיס זה.

Universal Asynchronous Acceptr/Transmitter (UART)

UART הוא פריפריה פשוטה שמדגימה את הממשק.לשדר דמות, נהג חייב לבדוק רישום סטטוס (MMIO) לבדוק אם השידור רישום (THR) ריק.זה קורא ערך זה לתוך GPR, לבחון את bit, ואת לולאות. ברגע שה-THR ריק, הנהג כותב את הדמות לכתובת THR (IO) הוא קורא את הערך הזה מקבל גישה לנתונים, ו- Gbute ברגע שהנהגים שלו יהיה ריק, כאשר הוא מגיע ל- GART, אונקן על גבי ה- GRETCOTCOTCOTCOTCOTCOTCOTCOTCOTCOTCOTCOT הוא מופיע בצד שלו.

יחידות עיבוד גרפיות (GPUs)

GPUs הם מעבדים מקבילים מסיבית כי מסתמכים מאוד על MMIO. ה CPU אינטראקציה עם הנהג GPU באמצעות buffer טבעת פיקוד ומערך של MMIO לרשום עבודה, CPU כותב פקודות לתוך טבעת buffer בזיכרון המערכת. ואז הוא כותב ל- MMIO ספציפי "פעמון" לרשום על GPU.

מפקחי רשת (NICs)

NICs מודרניים משתמשים בעיקרון דומה.יש להם קבוצה של MMIO רישומים לשליטה וקבוצה של טבעות תיאוריות בזיכרון הראשי. כאשר החבילה מגיעה, NIC משתמש DMA כדי להציב את נתוני החבילה לתוך זיכרון מבוזר מראש buffer וכותב את ה-buffer descriptor לתוך הטבעת.

הערכת זיכרון-הופנה I/O

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

יתרונות בעיצוב מערכת

MMIO מפשט את מודל התכנות על ידי ביטול מערך הוראות I / O נפרד.זה מאפשר שילוב קל עם יחידת הגנת הזיכרון של CPU (MMU) ומאפשר שימוש בקוד C סטנדרטי לפיתוח הנהג.זה בקנה מידה טוב למכשירים בעלי פרופיל גבוה, כמו DMA ניתן לתאם בקלות באמצעות טבעות נגד זיכרון מבוסס זיכרון.

חסרונות פוטנציאליים ומלכודות

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

הקשר הסימביוטי באדריכלות מערכת

הממשק בין CPU רישומים וזיכרון ממופה I / O הוא ההזדהות המכנית שמניעה את כל המחשוב.מרשם לספק את המהירות המבוללת ומניפולציה מיידית של נתונים הנדרשים על ידי המעבד, בעוד MMIO מספק את הממשק הסטנדרטי, גמיש הדרוש כדי אינטראקציה עם העולם הפיזי של חומרים היקפיים.אם מפתח כותב מערכת פשוטה של MasterFLT:13 ל- UART, ראשונית מורכבת, או מנפח של מערכת חיסונית, הוא ממין, אשר הוא ממין, אשר הוא ממין, אשר הוא מתווך של מערכת יחסים יעילה, או מקודמתאמת, אשר הוא מערכי מערכת יחסים של מערכת חיסונית, אשר מקודמתאמת, או מערכי מערכת יחסים יעילה, או מקודמתאמת, או מקודמתאמת, או מקודמתאמת, או ממין זה, בין אם מפתח, או מקודמת, אם מפתח, אשר מקודמת, אשר מקודמת, אשר ממין זה, אשר ממין זה, בין אם מפתח הוא מערכת יחסים יעילה, אשר מקודמת, בין אם הוא מערכת יחסים יעילה, בין אם מפתח הוא מקודמת, בין אם מפתח הוא מערכת יחסים יעילה, אשר מקודמת, אשר הוא מערכת יחסים יעילה, אשר מקודמת,