الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما هو العنوان A20 ؟

بدأه MohamedIBrahim في 3 سبتمبر 2011 · 2 رد · 806 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

استكمالا لسلسلة اسئلة واجوبة حول تصميم انظمة التشغيل وعفوا للتأخير (نسيت اني بدأتها اساساlaugh.gif)

سأضع اليوم معلومات عن السطر (احيانا يطلق عليها البوابة) A20

ما هى البوابة (العنوان / السطر) A20 ؟

عندما تم صناعة AT وتقديمها للسوق كانت قادرة وقتها على الوصول الى 16 ميجا بايت من الذاكرة ولكن من اجل ان تظل متوافقة مع IBM - XT بسبب ثغرة فى بنية XT وكانت عبارة عن memory wraparound فكان لابد ايضا من تكرار هذا الامر مع AT لكي تعمل الاشياء نفسها في AT لتطبيق مفهوم التوافق بين الاثنين وتحويل الخط 20 الى الناقل (A20) وهكذا استمر الامر فى العمل مع نفس الالتفافية (wraparound )

ويتم التحكم في البوابة A20 بواسطة وحدة التحكم (لوحة المفاتيح) . التي عادة ما تكون مشتقة من رقاقة 8042.

لماذا لا يمكنني الوصول إلى كل ما عندي من الذاكرة! لدي 128MB ويمكنني استخدام 1MB فقط ؟

السبب الرئيسي لعدم امكاننا الولوج (الوصول ) الى كل الذاكرة المتاحة لدينا هو اننا بحاجة الى تفعيل البوابة A20 ليتم هذا الامر بنجاح (راجع ما هو البوابة A20)

كيف يمكنني تفعيل البوابة A20 ؟

لتفعيل تلك البوابة علينا استخدام بعض اجهزة I/O باستخدام لوحة المفاتيح (8042 chip) وتفعيله ولفعل ذلك راجع بلغة السي انظر الكود التالي

باستخدام لغة C

void init_A20(void) { 	UCHAR	a;  	disable_ints();  	kyb_wait_until_done(); 	kyb_send_command(0xAD);		// disable keyboard  	kyb_wait_until_done(); 	kyb_send_command(0xD0);		// Read from input  	kyb_wait_until_done(); 	a=kyb_get_data();  	kyb_wait_until_done(); 	kyb_send_command(0xD1);		// Write to output  	kyb_wait_until_done(); 	kyb_send_data(a|2);  	kyb_wait_until_done(); 	kyb_send_command(0xAE);		// enable keyboard  	enable_ints(); }

باستخدام لغة الاسمبلي

;; ;; NASM 32bit assembler ;;  [bits 32] [section .text]  enable_A20: 	cli  	call    a20wait 	mov 	al,0xAD 	out 	0x64,al  	call    a20wait 	mov 	al,0xD0 	out 	0x64,al  	call    a20wait2 	in      al,0x60 	push    eax  	call    a20wait 	mov 	al,0xD1 	out 	0x64,al  	call    a20wait 	pop 	eax 	or      al,2 	out 	0x60,al          call    a20wait 	mov 	al,0xAE 	out 	0x64,al  	call    a20wait 	ret  a20wait: .l0:	mov 	ecx,65536 .l1:	in      al,0x64 	test    al,2 	jz      .l2 	loop    .l1 	jmp 	.l0 .l2:	ret   a20wait2: .l0:	mov 	ecx,65536 .l1:	in      al,0x64 	test    al,1 	jnz 	.l2 		loop    .l1 	jmp 	.l0 .l2:	ret

كيف يمكنني تحديد حجم الذاكرة RAM ؟

تحديد مقدار حجم ذاكرة الوصول العشوائي هى واحدة من اهم المهام التي علينا القيام بها اثناء تصميم النواة

وفى السابق فى تطوير انظمة التشغيل كان هذا سهل جدا لكن حاليا الامور اصعب قليلا

لماذا لم أذكر 64MB من الذاكرة؟ لأن هذا يمكن لجميع CMOS ان تصل الى ما يصل إلى 99mb ما قيمته . و عندما تواجه اجهزة مع 128MB ماذا ستفعل؟ وهناك بعض الوظائف والمقاطعات فى BIOS للتعامل مع الذاكرة واول مجموعة من النداءات (CALLS) التي تدعمها جميع انظمة BIOS تقوم بارجاع الموجود فى CMOS وذلك يجعلها غير ذات صلة وليست مضمونة ولكن هناك بعض Calls متقدمة لكن ليست كل Machines تدعمها كما انه ليس ما نريده والطريقة الاخري التي يستخدمها المبرمجين لفعل هذا

هي الوصول الى الذاكرة مباشرة واستخدام مسجلات الMiotherBoard لتحديد سجلات الذاكرة والعيب فى هذه الطريقة هى أنك يجب ان تعرف نوع المسجلات التي تدعمها الة المستخدم وماذا لو كانت متغيرة (laugh.gif)

أنا افضل طريقة الوصول المباشرة مع فاصل لدي كل 1MB

هنا يمكن ملاحظة شئ ولا يجب معرفته لكن قد يفيد هو ان الاجهزة القديمة وربما حتي بعض الاجهزة حتي الان لكنها نادرة من الممكن ان تكون الذاكرة اقل من 64KB والتي لا تزال خارج اطار الذاكرة الموسعة 1MB لكن معظم اجهزة اليوم تدعم الذاكرة الموسعة باغلبية كبيرة جدا وعندما ستتعمق في مثل هذه الامور ستعرف المزيد والمزيد

وان شاء الله سنتكلم لاحقا عن تحديد الذاكرة العشوائية (RAM) باستخدام BIOS

تحياتي للجميع

والله ولى التوفيق

GoodBye

#2

اولا مشكور اخ محمد على الموضوع

ثانيا اذا ممكن سؤال:؟

اقتباس

لماذا لا يمكنني الوصول إلى كل ما عندي من الذاكرة! لدي 128MB ويمكنني استخدام 1MB فقط ؟

السبب الرئيسي لعدم امكاننا الولوج (الوصول ) الى كل الذاكرة المتاحة لدينا هو اننا بحاجة الى تفعيل البوابة A20 ليتم هذا الامر بنجاح (راجع ما هو البوابة A20)

هل هذا الكلام له تدخل في انها انظمة 32 bit

لا تقدر من استوعاب مثلا ram 4GH

لانه يوجد عندي جهاز عليه RAM 4GH

والنظام عليه 32BIT

في الخصائص يوجد انه االنظام فقط يستعمل 2GH فقط

هل كلامك له شئ في هذا الموضوع ام انا فهمت الموضوع خطا

وشكرا

291964_260506123967115_206850989332629_1001538_45132_n.jpg

اللهم إني أعوذ بك من علم لا ينفع ، ومن قلب لا يخشع ، ومن نفس لا تشبع ، ومن دعوة لا يستجاب لها

#3

هذا الامر له علاقة مباشرة بarchitecture

فبداية عندما كان هناك IBM-AT (Intel 286) كان قادرا على الوصول الى 16 ميجا من الذاكرة وهذا بالنسبة لامكانية الوصول للذاكرة والمسماة فى المصطلح العلمي ستجدها كثيرا

memory access

وكان ذلك بالرغم من ان معمارية 8086 كان لديها القدرة على الوصول الى 1ميجا فقط من الذاكرة

هذا الامر معقد الى حد ما لكن الهدف من الدرس اذا كنت تقصد فالنسبة لمطور انظمة التشغيل فهذه البوابة بالنسبة له هى الطريق الاول الى الوضع المحمي والتجهيز لهذه الامور المتقدمة بعدها

لكن الامر ليس له علاقة الا ب architecture والتوافقية فستجد عموما فى معظم معماريات الحاسب مثل هذه الامور

GoodBye

مواضيع مشابهة