مخاطبة الكلمات

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

جداول تعرض نفس البيانات منظمة حسب عناوين البايت والكلمة

الأساسيات

لنفترض حاسوبًا مزودًا بذاكرة سعتها 524,288 بت (2^ 19 ). إذا رُتبت هذه الذاكرة في فضاء عناوين مسطح قابل للعنونة بالبايت باستخدام بايتات طولها 8 بت، فسيكون هناك 65,536 عنوانًا صالحًا (2^ 16 )، من 0 إلى 65,535، يُمثل كل منها 8 بتات مستقلة من الذاكرة. أما إذا رُتبت في فضاء عناوين مسطح قابل للعنونة بالكلمة باستخدام كلمات طولها 32 بت، فسيكون هناك 16,384 عنوانًا صالحًا (2^ 14 )، من 0 إلى 16,383، يُمثل كل منها 32 بتًا مستقلة.

بشكل عام، تُعدّ وحدة العنونة الدنيا (MAU) خاصيةً من خصائص تجريد الذاكرة المُحدد. قد تستخدم التجريدات المختلفة داخل الحاسوب وحدات عنونة دنيا مختلفة، حتى وإن كانت تُمثل نفس الذاكرة الأساسية. على سبيل المثال، قد يستخدم الحاسوب عناوين 32 بت مع عنونة البايت في مجموعة تعليماته ، لكن نظام تماسك ذاكرة التخزين المؤقت لوحدة المعالجة المركزية قد يعمل مع الذاكرة بدقة 64 بايت فقط ، مما يسمح بتحديد أي سطر ذاكرة تخزين مؤقت مُعين بعنوان 26 بت فقط، وبالتالي تقليل الحمل الزائد لذاكرة التخزين المؤقت .

غالباً ما يؤثر ترجمة العناوين التي تقوم بها الذاكرة الافتراضية على بنية وعرض مساحة العناوين، لكنها لا تغير MAU.

المفاضلات بين وحدات العنونة الدنيا المختلفة

قد ينطوي حجم وحدة الذاكرة الدنيا القابلة للعنونة (MAU) على مفاضلات معقدة. فاستخدام وحدة MAU أكبر يسمح بتغطية نفس مقدار الذاكرة بعنوان أصغر، مما قد يقلل بشكل كبير من متطلبات الذاكرة للبرنامج. ومع ذلك، فإن استخدام وحدة MAU أصغر يُسهّل التعامل بكفاءة مع البيانات الصغيرة.

لنفترض أن برنامجًا ما يرغب في تخزين أحد الأبراج الاثني عشر التقليدية في علم التنجيم الغربي . يمكن تخزين البرج الواحد في 4 بتات. إذا تم تخزين البرج في وحدة MAU خاصة به، فسيتم إهدار 4 بتات باستخدام عنونة البايت (بكفاءة 50%)، بينما سيتم إهدار 28 بتًا باستخدام عنونة الكلمة 32 بت (بكفاءة 12.5%). إذا تم "تجميع" البرج في وحدة MAU مع بيانات أخرى، فقد تكون قراءته وكتابته أكثر تكلفة نسبيًا. على سبيل المثال، لكتابة برج جديد في وحدة MAU تم تجميع بيانات أخرى فيها، يجب على الحاسوب قراءة القيمة الحالية لوحدة MAU، واستبدال البتات المناسبة فقط، ثم تخزين القيمة الجديدة مرة أخرى. سيكون هذا مكلفًا بشكل خاص إذا كان من الضروري للبرنامج السماح لخيوط أخرى بتعديل البيانات الأخرى في وحدة MAU في الوقت نفسه.

من الأمثلة الشائعة سلسلة نصية . تخزن تنسيقات السلاسل الشائعة، مثل UTF-8 و ASCII، السلاسل كسلسلة من نقاط الترميز ذات 8 بت. باستخدام عنونة البايت، يمكن وضع كل نقطة ترميز في وحدة معالجة ذاكرة مستقلة (MAU) دون أي تكلفة إضافية. أما باستخدام عنونة الكلمة ذات 32 بت، فإن وضع كل نقطة ترميز في وحدة معالجة ذاكرة منفصلة سيزيد من استخدام الذاكرة بنسبة 300%، وهو أمر غير عملي للبرامج التي تتعامل مع كميات كبيرة من النصوص. يتجنب تجميع نقاط الترميز المتجاورة في كلمة واحدة هذه التكلفة. مع ذلك، تفضل العديد من خوارزميات التعامل مع النصوص القدرة على عنونة نقاط الترميز بشكل مستقل؛ وللقيام بذلك مع نقاط الترميز المجمعة، يجب على الخوارزمية استخدام عنوان "واسع" يخزن أيضًا إزاحة الحرف داخل الكلمة. إذا كان هذا العنوان الواسع بحاجة إلى التخزين في مكان آخر داخل ذاكرة البرنامج، فقد يتطلب ذاكرة أكبر من العنوان العادي.

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

لنفترض أنه إذا كانت جميع العناوين في البرنامج 32 بت، فإن صفحة الويب هذه ستشغل حوالي 10 جيجابايت من الذاكرة.

  • إذا كان متصفح الويب يعمل على جهاز كمبيوتر ذي عناوين 32 بت وذاكرة قابلة للعنونة بالبايت، فإن مساحة العناوين ستشغل 4 غيغابايت من الذاكرة، وهو حجم غير كافٍ. لن يتمكن المتصفح من عرض هذه الصفحة، أو سيضطر إلى نقل بعض البيانات إلى وحدة تخزين أبطأ، مما سيؤثر سلبًا على أدائه بشكل كبير.
  • إذا كان متصفح الويب يعمل على جهاز كمبيوتر ذي عناوين 64 بت وذاكرة قابلة للعنونة بالبايت، فسيحتاج إلى ذاكرة أكبر بكثير لتخزين العناوين الأكبر. يعتمد الحجم الدقيق للذاكرة الإضافية على نسبة البيانات البسيطة من إجمالي الـ 10 جيجابايت، ونسبة البيانات الشبيهة بالكائنات والمليئة بالمراجع، ولكن نسبة 40% ليست مستبعدة، أي ما مجموعه 14 جيجابايت مطلوبة. وهذا، بالطبع، ضمن إمكانيات مساحة عناوين 64 بت. مع ذلك، سيُظهر المتصفح عمومًا أداءً أقل في الوصول إلى البيانات واستخدامًا أسوأ لذاكرة التخزين المؤقت للكمبيوتر، بافتراض تساوي الموارد مع البدائل.
  • إذا كان متصفح الويب يعمل على جهاز كمبيوتر ذي عناوين 32 بت وذاكرة قابلة للعنونة بكلمات 32 بت، فمن المرجح أن يحتاج إلى ذاكرة إضافية بسبب عدم كفاءة التعبئة والحاجة إلى عدد قليل من العناوين العريضة. من المتوقع أن يكون هذا التأثير ضئيلاً نسبيًا، حيث سيستخدم المتصفح التعبئة والعناوين غير العريضة لمعظم الأغراض المهمة، وسيتناسب المتصفح بشكل مريح مع الحد الأقصى لنطاق العنونة البالغ 16 جيجابايت. مع ذلك، قد يكون هناك عبء إضافي كبير على وقت التشغيل بسبب الاستخدام الواسع للبيانات المعبأة للصور والنصوص. والأهم من ذلك، أن 16 جيجابايت حد منخفض نسبيًا، وإذا زاد حجم صفحة الويب بشكل كبير، فسوف يستنفد هذا الكمبيوتر مساحة عناوينِه ويبدأ في مواجهة بعض الصعوبات نفسها التي يواجهها الكمبيوتر ذو عناوين البايت.
  • إذا كان متصفح الويب يعمل على جهاز كمبيوتر ذي عناوين 64 بت وذاكرة قابلة للعنونة بكلمات 32 بت، فسيعاني من العبءين الإضافيين المذكورين أعلاه: سيحتاج إلى ذاكرة أكبر بكثير لاستيعاب عناوين 64 بت الأكبر، مما يؤثر سلبًا على موضع البيانات، بالإضافة إلى عبء إضافي ناتج عن التعامل مع ضغط مكثف لبيانات النصوص والصور. يعني استخدام عنونة الكلمات أن البرنامج نظريًا يمكنه الوصول إلى 64 إكسابايت من الذاكرة بدلًا من 16 إكسابايت فقط، ولكن نظرًا لأن البرنامج لا يحتاج إلى هذا القدر من الذاكرة (ولا يوجد عمليًا أي جهاز كمبيوتر قادر على توفيره)، فإن هذا لا يُحقق أي فائدة.

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

الوصول إلى الكلمات الفرعية والعناوين الواسعة

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

لنفترض أننا نريد تجميع أربع نقاط ترميز متتالية من سلسلة UTF-8 في كلمة واحدة بحجم 32 بت. قد تشغل نقطة الترميز الأولى البتات من 0 إلى 7، والثانية من 8 إلى 15، والثالثة من 16 إلى 23، والرابعة من 24 إلى 31. (إذا كانت الذاكرة قابلة للعنونة بالبايت، فسيكون هذا ترتيب البايتات الصغير ).

لتوضيح الشيفرة اللازمة للوصول إلى أجزاء الكلمات دون ربط المثال بشكل وثيق بأي بنية معينة تعتمد على عناوين الكلمات، تستخدم الأمثلة التالية لغة تجميع MIPS . في الواقع، MIPS هي بنية تعتمد على عناوين البايتات وتدعم تحميل وتخزين قيم 8 بت و16 بت بشكل مباشر، ولكن سيفترض المثال أنها تدعم فقط عمليات تحميل وتخزين 32 بت، وأن الإزاحات داخل كلمة 32 بت يجب تخزينها بشكل منفصل عن العنوان. تم اختيار MIPS لأنها لغة تجميع بسيطة لا تحتوي على ميزات متخصصة تجعل هذه العمليات أكثر سهولة.

لنفترض أن برنامجًا ما يرغب في قراءة نقطة الترميز الثالثة إلى المسجل r1من الكلمة الموجودة في عنوان في المسجل r2. في حالة عدم وجود أي دعم آخر من مجموعة التعليمات، يجب على البرنامج تحميل الكلمة كاملة، ثم إزاحتها إلى اليمين بمقدار 16 لحذف أول نقطتي ترميز، ثم إخفاء نقطة الترميز الرابعة.

 ldw $r1, 0($r2) # تحميل الكلمة كاملة srl $r1, $r1, 16 # إزاحة لليمين بمقدار 16 andi $r1, $r1, 0xFF # إخفاء نقاط التعليمات البرمجية الأخرى

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

 ldw $r1, 0($r2) # تحميل الكلمة كاملة srlv $r1, $r1, $r3 # إزاحة إلى اليمين بمقدار إزاحة البت andi $r1, $r1, 0xFF # إخفاء نقاط التعليمات البرمجية الأخرى

لنفترض بدلاً من ذلك أن البرنامج يرغب في تعيين نقطة الترميز في المسجل r1إلى نقطة الترميز الثالثة في الكلمة الموجودة في العنوان في r2. في حالة عدم وجود أي دعم آخر من مجموعة التعليمات، يجب على البرنامج تحميل الكلمة كاملة، وإخفاء القيمة القديمة لتلك النقطة، ونقل القيمة الجديدة إلى مكانها، ودمج القيم، وتخزين الكلمة كاملة مرة أخرى:

 sll $r1, $r1, 16 # إزاحة القيمة الجديدة إلى اليسار بمقدار 16 lhi $r5, 0x00FF # إنشاء قناع ثابت لتحديد البايت الثالث ولا $r5، $r5، $zero # اقلب القناع بحيث يمسح البايت الثالث ldw $r4, 0($r2) # تحميل الكلمة كاملة و $r4، $r5، $r4 # امسح البايت الثالث من الكلمة أو $r4، $r4، $r1 ادمج القيمة الجديدة في الكلمة stw $r4, 0($r2) # تخزين النتيجة ككلمة كاملة

ومرة أخرى، إذا تم تخزين الإزاحة بدلاً من ذلك في r3، فسيلزم اتباع نهج أكثر تعقيدًا:

 sllv $r1, $r1, $r3 # إزاحة القيمة الجديدة إلى اليسار بمقدار إزاحة البت llo $r5, 0x00FF # إنشاء قناع ثابت لتحديد بايت sllv $r5, $r5, $r3 # إزاحة القناع إلى اليسار بمقدار إزاحة البت ولا $r5، $r5، $zero # اقلب القناع بحيث يمسح البايت المحدد ldw $r4, 0($r2) # تحميل الكلمة كاملة و $r4، $r5، $r4 # امسح البايت المحدد من الكلمة أو $r4، $r4، $r1 ادمج القيمة الجديدة في الكلمة stw $r4, 0($r2) # تخزين النتيجة ككلمة كاملة

يفترض تسلسل التعليمات البرمجية هذا أن أي خيط آخر لا يمكنه تعديل بايتات أخرى في الكلمة بشكل متزامن. إذا كان التعديل المتزامن ممكنًا، فقد يُفقد أحد التعديلات. لحل هذه المشكلة، يجب تحويل التعليمات القليلة الأخيرة إلى حلقة مقارنة وتبادل ذرية، بحيث يؤدي أي تعديل متزامن إلى تكرار العملية بالقيمة الجديدة. لا حاجة إلى حواجز ذاكرة في هذه الحالة.

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

في هذه التسلسلات البرمجية، يجب تخزين الإزاحة الإضافية بجانب العنوان الأساسي ، مما يضاعف فعليًا متطلبات التخزين الإجمالية للعنوان. لا ينطبق هذا دائمًا على أجهزة الكلمات، ويرجع ذلك أساسًا إلى أن العناوين نفسها غالبًا لا تُحزم مع بيانات أخرى لتحسين كفاءة الوصول. على سبيل المثال، يستخدم جهاز Cray X1 كلمات 64 بت، بينما العناوين 32 بت فقط؛ فعند تخزين عنوان في الذاكرة، يُخزن في كلمة مستقلة، وبالتالي يمكن وضع إزاحة البايت في أعلى 32 بت من الكلمة. يكمن عدم كفاءة استخدام العناوين العريضة في هذا النظام في كل المنطق الإضافي اللازم لمعالجة هذه الإزاحة واستخراج البايتات وإدراجها داخل الكلمات؛ وليس له أي تأثير على استخدام الذاكرة.

لا يتطابق الحد الأدنى لوحدة العنونة في الحاسوب بالضرورة مع الحد الأدنى لحجم الوصول إلى الذاكرة في مجموعة تعليمات الحاسوب. على سبيل المثال، قد يستخدم الحاسوب عنونة البايت دون توفير أي تعليمات لقراءة أو كتابة بايت واحد مباشرةً. في هذه الحالة، يُتوقع من البرامج محاكاة هذه العمليات برمجياً باستخدام معالجة البتات، كما هو موضح في تسلسلات التعليمات البرمجية المذكورة أعلاه. يُعد هذا شائعاً نسبياً في بنى الحواسيب ذات 64 بت المصممة كخلفٍ للحواسيب العملاقة أو الصغيرة ذات 32 بت، مثل DEC Alpha و Cray X1 .

ينص معيار لغة C على أن المؤشر يُفترض أن يكون له التمثيل المعتاد للعنوان. كما تسمح لغة C بتكوين مؤشر لأي كائن باستثناء حقل البتات؛ وهذا يشمل كل عنصر من عناصر مصفوفة البايتات. غالبًا ما تستخدم مُجمِّعات لغة C للحواسيب التي تستخدم عنونة الكلمات تمثيلات مختلفة للمؤشرات لأنواع مختلفة اعتمادًا على حجمها. سيكون المؤشر إلى نوع كبير بما يكفي لملء كلمة عنوانًا بسيطًا، بينما سيكون مؤشر مثل `<T>` char*أو ` void*<T>` مؤشرًا عريضًا: وهو عبارة عن زوج من عنوان الكلمة وإزاحة بايت داخل تلك الكلمة. لذلك، فإن التحويل بين أنواع المؤشرات ليس بالضرورة عملية بسيطة، وقد يؤدي إلى فقدان معلومات إذا تم بشكل غير صحيح.

نظرًا لأن حجم المتغير C structليس معروفًا دائمًا عند تحديد تمثيل المؤشر إليه struct، فإنه لا يمكن تطبيق القاعدة المذكورة أعلاه بشكل موثوق. قد تحتاج المترجمات إلى محاذاة بداية المؤشر structبحيث يمكنها استخدام تمثيل مؤشر أكثر كفاءة.

أمثلة

  • يستخدم جهاز ERA 1103 نظام عنونة الكلمات بكلمات طولها 36 بت. تشير العناوين من 0 إلى 1023 فقط إلى ذاكرة الوصول العشوائي ؛ أما العناوين الأخرى فهي إما غير مُخصصة أو تشير إلى ذاكرة الأسطوانة .
  • يستخدم جهاز PDP-10 عنونة الكلمات بكلمات 36 بت وعناوين 18 بت.
  • تستخدم معظم الحواسيب العملاقة من طراز كراي، التي ظهرت في ثمانينيات وتسعينيات القرن الماضي، نظام عنونة الكلمات بكلمات طولها 64 بت. بينما يستخدم كل من كراي-1 وكراي إكس-إم بي عناوين طولها 24 بت، في حين تستخدم معظم الحواسيب الأخرى عناوين طولها 32 بت.
  • يستخدم معالج Cray X1 نظام عنونة البايت مع عناوين 64 بت. ولا يدعم الوصول المباشر إلى الذاكرة التي تقل عن 64 بت، ويجب محاكاة هذه الوصولات برمجياً. وكان مُصرّف لغة C الخاص بمعالج X1 أول مُصرّف من Cray يدعم محاكاة الوصول إلى 16 بت. [ 1 ]
  • يستخدم معالج DEC Alpha عنونة البايت مع عناوين 64 بت. لا توفر معالجات Alpha المبكرة أي دعم مباشر للوصول إلى الذاكرة 8 بت و16 بت، وتتطلب البرامج، على سبيل المثال، تحميل بايت عن طريق تحميل الكلمة الحاوية له (64 بت) ثم استخراج البايت بشكل منفصل. ولأن Alpha يستخدم عنونة البايت، فإن هذا الإزاحة لا تزال ممثلة في البتات الأقل أهمية من العنوان (بدلاً من تمثيلها بشكل منفصل كعنوان واسع)، ويوفر Alpha تعليمات تحميل وتخزين غير محاذية ( ldq_uو stq_u) تتجاهل تلك البتات وتقوم ببساطة بتحميل وتخزين الكلمة الحاوية لها. [ 2 ] أضافت امتدادات البايت-وورد اللاحقة للبنية (BWX) عمليات تحميل وتخزين 8 بت و16 بت، بدءًا من Alpha 21164a. [ 3 ] مرة أخرى، كان هذا الامتداد ممكنًا دون حدوث مشاكل خطيرة في توافق البرامج لأن Alpha كان يستخدم دائمًا عنونة البايت.

انظر أيضاً

مراجع

  1. غريزك، تيري. تحديات مُجمِّع كراي إكس 1 (وكيف حللناها) (ملف PDF) . مجموعة مستخدمي كراي ، مؤتمر CUG 2005. تم الاطلاع عليه بتاريخ 14 أبريل 2025 .
  2. تشين، ريموند (16 أغسطس 2017). "ألفا AXP، الجزء 8: الوصول إلى الذاكرة، وتخزين البايتات والكلمات والبيانات غير المحاذية" .
  3. بول ف. بولوتوف (22 أبريل 2007). "ألفا: التاريخ في حقائق وتعليقات - ألفا 21164 (EV5، EV56) و21164PC (PCA56، PCA57)" . مؤرشف من الأصل في 7 يونيو 2023. تم الاطلاع عليه في 14 أبريل 2025 .