לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 13-01-2009, 20:52
  משתמש זכר eXtruct eXtruct אינו מחובר  
 
חבר מתאריך: 27.10.05
הודעות: 1,067
מידע על GDT/IDT/LDT בכתיבת ליבה של מערכת

שלום לכולם.
בתור תחביב התחלטתי לממש מיני מערכת הפעלה משלי. נכון לעכשיו קיים bootloader stage 1 שטוען את bootloader stage 2 והוא אמור להיכנס ל PMODE ולהעביר שליטה לקרנל.
אבל אני נתקלתי במס' בעיות:
בשביל למפה (מהמילה מפה to map) יותר מ 1MB (עד 4GB) של זכרון עלי להגדיר GDT או Global Descriptor Table, אני יודע שהוא מורכב מ selectorים שכל אחד בגודל של 8בית (כלומר כל סלקטור בגודל של 64ביט) והראשון הוא NULL SELECTOR, כמו כן אני יודע שיש צורך להגדיר CODE ו DATA סלקטורים. הבעיה שאני לא יודע מה בדיוק המשמעות של כל ביט בסלקטור ודיי קשה למצוא על זה מידע, אני בספק אם קיים ידע על זה בעיברית אז מידע באנגלית יספיק לי, אם מישהוא מכיר כמובן.
הבעיה אחרת היא ה IDT (Interrupt Descriptor Table) אני יודע שב PMODE קריאה לפסיקה כאשר IDT לא קיים מביא ל triple fault של המעבד ולכן הבנתי שיש צורך להגדיר IDT, אבל שוב לא הצלחתי למצוא עליו מידע.
אותו דבר לגבי LDT שעליו בכלל מידע (האם הוא הכרחי בכלל)?
שאלה נוספת: מה הדרך המקובלת להיכנס ל PMODE, נניח בוט לואדר 1 מעביר שליטה ל 2 עכשיו דרך אחת היא לממש הכל באסמבלי (כולל המבנה של IDT/GDT/LDT) לפתוח את A20 ולשים את הביט של PMODE ב CR0 ואז להבעיר שליטה לקרנל, דרך נוספת היא ישר להעביר שליטה לקרנל והוא יעשה את כל העבודה הזאתי. מה שתי אלה יותר מקובל?
ושאלה אחרונה בשביל להיות בטוח: אחרי ה POST הכתובות 0x00000500 עד 0x00007BFF וכתובות 0x00007E00 עד 0x0009FFFF פנויות וניתן לטעון את הקרנל לשם?
תודה רבה רבה מראש!
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 13-01-2009, 23:45
  Incred2 Incred2 אינו מחובר  
 
חבר מתאריך: 03.01.09
הודעות: 239
בתגובה להודעה מספר 1 שנכתבה על ידי eXtruct שמתחילה ב "מידע על GDT/IDT/LDT בכתיבת ליבה של מערכת"

קצת תשובות :

ניהול זיכרון :

* סלקטורים זה לא מאוד מעניין .יש 13 ביט של אינדקס ,ביט אחד שקובע האם זה אינדקס ל- GDT או ל - LDT ושני ביטים של RPL- REQUESTED PRIVILEGE LEVEL.
* דסקריפטורים הם הרשומות שיושבות ב - GDT \ IDT \ LDT .יש עליהם המון מידע באינטרנט באנגלית . האתר של אינטל זה הכי טוב : http://www.intel.com/products/proce...nuals/index.htm החלק משם שמדבר על דסקריפטורים וכו' זה ה - System Programming Guide .
סעיף 3.4.5 Segment Descriptors ב-VOLUME A מסביר בדיוק על המבנה של ה-SEGMENT DESCRIPTORS

בגדול תמצא שם תשובות גם לשאר השאלות שלך אבל אני אגיד עליהן כמה מילים :
* IDT הוא כמו GDT רק שבמקום להכיל TSSים, GATEים וסגמנטים של זיכרון הוא מכיל רק INTERRUPT GATES ו TRAP GATES
*ה- LDT לחלוטין לא הכרחי אבל מספק תפקודיות מסוימת - מאפשר הגנה בין פרוססים . אם לא תשתמש ב-PAGING אין דרך אחרת לעשות את זה .
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 14-01-2009, 16:38
  משתמש זכר eXtruct eXtruct אינו מחובר  
 
חבר מתאריך: 27.10.05
הודעות: 1,067
בתגובה להודעה מספר 4 שנכתבה על ידי eXeCuTeR+ שמתחילה ב "בכללי, עדיף להשתמש בGRUB כדי..."

עזוב זה כל הרעיון לבנות אחד משלי, אפשר להשתמש גם בקרנל של לינוקס אבל זה לא הקטע פה.
בלכ מקרה הסתדרתי עם ה GDT, והבנתי שבשביל קרנל מוד צריך מינימום 3 דסקריפטורים (כמו שאמרת) NULL, CODE ו DATA ואחרי שהוכלם ה RING ביטים עומדים על 00 (RING0) ואחריש אני אוסיף גם USER מוד אני אצטרך עוד שתיים עם RING ביטים ב 11 (RING3).
בכל מקרה אם יהיה צורך אוכל לעלות לפה את המבנה של GDT כמו שאני מבין אותו, יותר מאוחר, עכשיו פשוט אני הולך לאכול כי לא אכלתי מאז שחזרתי הביתה (ישר התחלתי לכתוב את ה GDT )
עכשיו נשאר לממש רק IDT ואפשר להתחיל את הקרנל
ד"א אם יש למישהוא מידע על IDT (עוד לא בדקתי את המדריך של אינטל אז לא לצעוק עלי בבקשה >.<) אז אשמח אם תוכלו לשתף
תודה רבה רבה מראש!
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #8  
ישן 15-01-2009, 23:23
  Incred2 Incred2 אינו מחובר  
 
חבר מתאריך: 03.01.09
הודעות: 239
בתגובה להודעה מספר 3 שנכתבה על ידי eXtruct שמתחילה ב "אחלה תודה רבה, מור שלא שמתי..."

אתה פשוט חייב לקרוא את המדריכים של אינטל או ספר אם תמצא .ספר ממש טוב לנושאים הבסיסיים הוא Microsoft's 80386/80486 Programming Guide של MSPRESS אבל הוא משנת 1991 ולא נראה לי שיש אותו באינטרנט .

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


לגבי השאלה הסציפית : ב-386 ומעלה ב-PM אתה תמיד משתמש בזיכרון וירטואלי .אתה תמיד טוען SELECTOR שמתייחס ל - DESCRIPTOR ב -GDT או ב -LDT לתוך ה-SEGMENT REGISTERS .הזיכרון הוא תמיד וירטואלי והוא תמיד ממופה ל"כתובת לינארית" בעזרת מנגנון ה- SEGMENTATION .
בשלב הזה מנגנון ה- PAGING יכול להיות פעיל או כבוי .אם הוא כבוי אז הכתובת הלינארית היא גם הכתובת הפיזית .אם הוא פעיל את הכתובת הלינארית מפורקת וממופה לכתובת פיזית דרך מנגנון ה- PAGING שגם עליו אתה יכול לקרוא במדריכים של אינטל אני בטוח .
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

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

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 01:05

הדף נוצר ב 0.05 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר