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

Offset & Segment

مغلق
بدأه Firas Sadiyyah في 26 مايو 2002 · 6 رد · 1,065 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم،

ممكن شرح عن الـ offset و Segment وكيف يتم تقسيم الذاكرة بهما؟ حيث أني قرأت عن هذا الموضوع عدة مرات ولكني لم أفهمه. :o

شكراً :)

#2

أي برنامج عندما يتم تشغيلة يقوم نظام التشغيل بحجز ثلاثة أماكن له في الذاكرة وتسمى هذه الأماكن بـ Segment هذه الأماكن يستخدمها البرنامج لأغراض عدة كحجز المتغيرات واستعمال المكدس(Stack )

وهذه الأماكن هي :

1- Data Segment (ويستخدم لحجز المتغيرات التي يحتاجها البرنامج)

2- Code Segment (ويتم فيه تخزين التعليمات للبرنامج المكتوب) مثال

[Code2]

int i ;

print i ;

[/Code2]

فيقوم البرنامج بتخزين هذه السطور في Code Segment (طبعا لا تخزن بهذه الصيغة ولكن بصيغة الأصفار والواحدات)

3- Stack Segment : (وتستخدم لعمليات المكدس) مثل Pop ,Push

4- Extra Segment : وهذا القطاع يستخدمة البرنامج كزيادة في قطاع Data Segment ويستخدم عادة في عمليات النصوص .

ما ذكر يسمى بالـ Segment أما ما يسمى بـ Offset فهو كالعنوان الموجود بداخل الـقطاع .. كيف؟

مثلاً .. خذ قطاع Code Segment .. فهذا القطاع يستخدم دليل داخلي فيه يسمى IP يستطيع من خلاله المعالج تحديد الموقع بالضبط للتعليمة القادمة ..

أي تستطيع تشبيه الـ Segment بالـحي وتشبيه الـ Offset بالبيت الموجود في وسط هذا الحي ..

أرجو أن يكون الأمر واضحا

أخوك أبو فهد :) :)

#3

مشكور أخي أبو فهد،(f)

لكن كيف تغلب معالج 80x86 على مشكلة عنونة ذاكرة بحجم 1 ميغابايت؟ طبعاً باستعمال الـ offset و Segment ! لكن كيف تم ذلك؟ مثلاً بدأ بترقيم الـ Segment بـ 0 وأول offset فيها 0، ثم بدأ بالإزدياد.... (كيف تتم هذه الزيادة؟ وكيف تتم تغطية ذاكرة بحجم 1 ميغابايت؟)

وهل مازالت المشكلة ترافق المعالجات الجديدة، حتى إيتانيوم (طبعاً مع وجود ذواكر بأحجام غيغا بايت)؟

مشكورين جداً:)

#4

المسألة بسيطة جدا .....

مصممين معالج انتل جعلوا عرض الناقل bus الخاص بنقل العناوين ( address bus )

20 بت ..... والمشكلة ان مساحة المسجلات فقط 16 بت .... يعني ما يستطيعون حفظ اي عنوان في احد المسجلات ....

شرح بسيط وسربع .... إذا اردت تفصيل اسأل ..

بس السؤال هذا المفروض ينسأل في منتدى الاسمبلي .

#5

هذي هي المشكلة الي ترافق معالج 68 بس لاحظ أنه معالج قدييم

أما بالنسبة للـ Segment والـ Offset ..

الذاكرة على العموم مقسمة عدة أقسام .. فيه شي خاص بنظام التشغيل وفيه شي خاص بالـ BIOS وفيه شي خاص بالبرامج وهو اللي يهمنا .

القطاع (ٍSegment) في (القسم الخاص بالبرامج) ما فيه أماكن محددة يبدأ منها ، و يكون حجم القطاع 64 كيلوبايت.

يعني لو فرضنا أن بداية القطاع هي(0000 ) تكون بداية الـ Offset هي نفسها( 0000) طبعا يتنقل الـ Offset عشوائيا بداخل القطاع .. ولاحظ انه يمكن أن يكون هناك قطاعين متداخلين .

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

لكن يكفيك أن تعلم أن معالج 286 له قدرة عنونة 2 أس 30 (وعليك الحساب) :)

#6

جزاكم الله عنا كل خير، مشكورين.(f) (f) (*)

#7

للرفع

هذا الموضوع مغلق.

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