• 0
faisal_01

ماهي بنية الرام؟ كم عامود فيها هل هي عنوان وبياناته أم أنها عدت أعمدة؟

سؤال

السلام عليكم ورحمة الله وبركاته

أحبتي ماهي بنية الرام كم عامود فيها بالضبط بالضبط؟

هل هي عنوان أو مقبض أو (address) وبايت أم أنها عدت أعمدة وبايت؟ 

إن كانت عدت أعمده وهذا ما أظنه -خزن فيها البرنامج الذي أنشأ هذا السجل ونوع البايت char,int,وغيرها والمحارف الخاصه بها وغيرها من المعلومات التي يحتاجها البرنامج لفهم البايت- فما هي هذه الأعمده وكيف أصل لهذه الأعمدة بـc/c++؟

هل يوجد برنامج يقرأ الأعمده والسجلات لحظياً؟

ماهو رقم أول عنوان في الرام لو أردت أن أقرأ محتوى الرام من أول سجل؟

طبعاً قرائة السجلات والتنقل بينها باستخدام المؤشرات ولكن لم يتوضح لي فيها بقية سوى عامودين فقط العنوان وقيمة البايت.

تم تعديل بواسطه faisal_01
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

4 إجابة على هذا السؤال .

  • 0

بالتأكيد بحسب ما (أظن) أن للشاشة سلسلة سجلات تبدأ من العنوان كذا للعنوان كذا وعند التعديل في هذه السجلات تتغير واجهة الشاشة (هل هذا الظن صحيح؟ وإن كان صحيح من أين أحصل على سجلات الأجهزه في الرام؟)

 

تم تعديل بواسطه faisal_01
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

صورة الرام ذات الأعمدة صورة تجريدية خلف عدة مستويات من التجريد، ليست الرام الحقيقية بل غرضها التبسيط، لكن البرامج لاتعرف هذه التفاصيل ولايهمها وتتعامل معها كما لو كانت فعلاً تشبه تلك الصور.

فيزيائياً، تختلف الرام بحسب نوعها، مثلاً الـDRAM الأرخص والشائعة في الذواكر تستخدم مكثف لتخزين البت، والـSRAM تستخدم inverters، هذه الأخيرة سريعة ولكنها غالية ولاتستخدم حالياً للذاكرة الرئيسية، بل يقتصر استخدامها تقريباً على الذواكر الصغيرة والسريعة ككاش المعالج، كلها تكون على شكل مصفوفة N×M من البتات مع decoder يحدد مكان البيانات.

الطريقة والنمط الذي يقرأ به المعالج الذاكرة يختلف حسب المعالج، لكن المعالج عندما يقرأ من الذاكرة فإنه يقرأها بحجم ثابت، اقرأ هنا عن محاذاة البيانات في الذاكرة.

معظم الأنظمة الحديثة تستخدم الذاكرة التخيلية (عدى الأنظمة القديمة مثل دوس)، فالعنوان رقم صفر لايشترط أن يكون العنوان صفر في الذاكرة الفيزيائية، لكن برنامجك لن يعرف الفرق والفضل عائد لوحدة في المعالج تسمى وحدة إدارة الذاكرة MMU تقوم بتحويل تلك العناوين التخيلية لمايقابلها في الذاكرة الفيزيائية (يوفر المعالج دعم الذاكرة التخيلية ويتولى نظام التشغيل إدارتها).

لها عدة فوائد، منها أنها تسمح بالوصول لعناوين أكبر من عناوين الذاكرة الفيزيائية، ذاكرتي الفيزيائية مثلاً 32GB، أي أن أقصى عنوان حقيقي هو 0x7ffffffff، لكن عند عرض ذاكرة برنامج باستخدام VMMap أرى عناوين أكبر بكثير:

Capture.PNG.a3284bbd1c7409175b18a34dd18f

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

#include <stdio.h>

int main() {
  int n = 111;
  printf("%p = %d\n", (void*)&n, n);
  (void)getc(stdin);
  return 0;
}

في أحدهما n=111 والثانية n=222 وتركتهما يعملان في نفس الوقت دون إغلاق أي منهما، سترى شيء مثل:

Capture2.PNG.a30788027e8d1889af1c26b8aa4

كلا البرنامجين يشيران لنفس العنوان 0x000000000062fe4c ولكن بقيم مختلفة وهذا مستحيل لو كانا فعلاً يشيران لنفس العنوان الفيزيائي، السبب عائد للذاكرة التخيلية، فقد لايكون أيهما يشير حتى للعنوان 0x000000000062fe4c الفيزيائي.

هناك تفاصيل أخرى أهملتها توضيحها يأخذ وقت، لكن هذه التفاصيل لاتهم البرامج كما قلت، ولن يعرف البرنامج بوجودها أصلاً.

تم تعديل بواسطه Mr.B
2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

إذا كان الرام عبارة عن عامود للمفتاح وعامود للبيانات سيكون بحسب (ظني) على الشكل التالي:

مفتاح رئيسي ابتدائي(عند تشغيل الكمبيوتر الذي يحمل أكثر من نظام):مفتاح النظام الذي تختار الدخول إليه:مفتاح النافذه:مفتاح متغيرات النافذه ونوافذها الفرعيه ومصفوفاتها وأدواتها طبعاً هذا بحسب ما تدعه شاغراً بين الأرقام فمثلا نبدأ من الرقم 0001 والتسلسل التالي 1000 هذا مساحه الف بايت يستخدمها البرنامح الذي يحمل الأول.

وكل مقبض أو مفتاح بحسب ما نسميه له قاعدة في توليده يُستمد توليده من المقبض الأب الذي يتفرع منه وبناء على قاعده التوليد تستطيع التأكد من وجود فروع للنافذ أو البرنامج كما أسلفت انت والمفتاح الابتدائي يندرج تحته كل منافذ الجهاز التي يتصل بها الرام.

المفتاح عند تحويله من الستا عشرى إلى الباينري يجب أن لا يتعدى 64 بت وعند تحويله إلى الأرقام العادية(العشري) يجب أن لا يتعدى 9223372036854775807 ومن هذا الباب لك حدود في زيادة الرام لأن المفتاح لا يستوعب صفوف جديده -أي بايتات جديده- أكبر من الأرقام المذكوره ولن يتعرف الكمبيوتر الذي يعمل على 64بت على أكثر من 8589934592 جيجا بايت.

من هذا نستنتج:

  1. أن أول صف في الرام بالعشري هو 0000000000000000001 وآخر صف في الرام يحمل المفتاح 9223372036854775807 على نظام 64بت. 
  2. أن أول صف في الرام بالعشري هو 0000000001 وآخر صف في الرام يحمل المفتاح 4294967295 على نظام 32بت ولن يتعرف الكمبيوتر إلا على 4جيجا بايت.
  3. النهاية في الأرقام السابقه في حال كان الجهاز بكامل راماته القصوى والنهايه هنا صحيحه 100% ولكن البدايه أتوقع أنه رقم غير صحيح.
  4. هناك قطاعات يمكن الوصول إليها وقرائتها وهناك قطاعات لا يمكن قرائتها والوصول إليها وقد أخذت تراخيص والموضوع بحاجه إلى مرجع عربي كامل يشرح الرام بوضوح وبساطه ولكي يجد مبرمجيننا الفرصه الكامله لانتاج برامج((prog(ram) عملاقه سواء كانت أنظمه أو برامج حماية أو برامج رسومية فائقة الجوده

وكل عام والجميع بألف خير وشراً لك أخي للمساعده ولازال الموضوع مفتوح لأي تهميش أو تعقيب أو إضافة والأسئلة التي مطروحة للبحث:

  • كيف استطيع ان أتعرف على البت من أي قطاع إن كان الرام مقسمه لقطاعات لكل بايتات من هذه القطاعات اسلوب تعامل مستقل من حيث القرائة والكتابه والعرض؟
  • كيف أتجنب الأخطاء في حال كنت استعلم عن بايت غير مجود في الرام؟
  • كيف اعرف هذا البايت تابع لأي ملف تابع لأي برنامج ومن أي نوع هو ومن أي قطاع؟
  • طريقة الفهرسه في الرام؟

 

 

 

تم تعديل بواسطه faisal_01
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .