PCIe এ ঠিকানা স্পেসস


19

পিসিআই এক্সপ্রেসে চারটি ঠিকানা স্পেস রয়েছে:

  • মেমরি ম্যাপ করা হয়েছে
  • আমি / হে ম্যাপযুক্ত
  • কনফিগারেশন স্পেস
  • বার্তা

যে কেউ দয়া করে প্রতিটি ঠিকানার জায়গার তাত্পর্য বর্ণনা করতে পারেন এবং এটির সংক্ষেপে উদ্দেশ্য?

আমার উপলব্ধি অনুসারে, এই সমস্ত স্পেসগুলি র‍্যামে (অর্থাত্ প্রসেসরের স্মৃতি) এ বরাদ্দ করা হয়েছে। কনফিগারেশন স্পেস হল নিবন্ধগুলির সাধারণ সেটগুলির জন্য বরাদ্দ করা স্থান (সমস্ত পিসিআই ডিভাইসে উপস্থিত)। এই স্থানটি কি সমস্ত পিসিআই ডিভাইসের মধ্যে সাধারণ? এবং এটি পিসিআই ক্রিয়ামূলক অপারেশনের জন্য কীভাবে কার্যকর?

এই স্থানটিতে বার (বেস ঠিকানা রেজিস্টার) রয়েছে। এই রেজিস্টারটি পিসিআই শেষ পয়েন্টে উপলব্ধ ঠিকানা নির্দিষ্ট করতে ব্যবহৃত হয়?

আমি পিসিআই তে নতুন এবং এটি শেখার চেষ্টা করছি। আমি বেস স্পেসিফিকেশন উল্লেখ করছি, তবে আমি মনে করি এটি পিসিআই এবং পিসিআই সম্পর্কে কিছু পূর্ব জ্ঞান থাকা পাঠকদের জন্য লেখা হয়েছে।

এছাড়াও বেস স্পেসিফিকেশন বোঝার গতি বাড়ানোর জন্য দরকারী কিছু বিনামূল্যে অনলাইন রেফারেন্স উল্লেখ করুন। আমি বুঝতে পারি যে যখনই কোনও পিসিআই ডিভাইস রুট কমপ্লেক্সের সাথে সংযুক্ত থাকে তখন এটি কিছু মেমরি অঞ্চলের সাথে নির্ধারিত হবে।

উত্তর:


31

এটি জিজ্ঞাসা করার পরে কিছুক্ষণ হয়েছে, তবে আমি অনাথ প্রশ্নগুলি ঘৃণা করি :)

প্রথমে একটি আধুনিক x86 প্ল্যাটফর্মটিকে ওভার-সরল করুন এবং ভান করুন এতে 0x00000000 থেকে 0xFFFFFFFF এর 32-বিট ঠিকানার স্থান রয়েছে। আমরা সমস্ত বিশেষ / সংরক্ষিত অঞ্চল, টোলড (নিম্ন ব্যবহারযোগ্য ডিআরএএম এর শীর্ষস্থানীয়, ইন্টেল পার্লেন্সের শীর্ষ) গর্ত ইত্যাদি উপেক্ষা করব We আমরা এই সিস্টেমটিকে মেমরির মানচিত্র বলব ।

দ্বিতীয়ত, পিসিআই এক্সপ্রেস পিসিআই প্রসারিত করে । একটি সফ্টওয়্যার দৃষ্টিকোণ থেকে, তারা খুব, খুব অনুরূপ।

আমি আপনার তৃতীয় স্থানে যাব - কনফিগারেশন স্পেস - প্রথমে। কনফিগারেশন স্পেসের দিকে নির্দেশ করে এমন কোনও ঠিকানা সিস্টেম মেমরি মানচিত্র থেকে বরাদ্দ করা হয় । একটি পিসিআই ডিভাইসে 256 বাইট কনফিগারেশন স্পেস ছিল - এটি পিসিআই এক্সপ্রেসের জন্য 4KB পর্যন্ত বাড়ানো হয়েছে। এই 4KB স্পেসটি সিস্টেমের মেমরি মানচিত্র থেকে মেমরি ঠিকানাগুলি গ্রাস করে তবে প্রকৃত মান / বিট / সামগ্রীগুলি পেরিফেরিয়াল ডিভাইসে নিবন্ধগুলিতে সাধারণত প্রয়োগ করা হয়। উদাহরণস্বরূপ, আপনি যখন ভেন্ডর আইডি বা ডিভাইস আইডিটি পড়েন তখন লক্ষ্য পেরিফেরিয়াল ডিভাইসটি ডেটা ফেরত দেয় যদিও ব্যবহৃত মেমরি ঠিকানাটি সিস্টেমের মেমরি মানচিত্র থেকে আসে।

আপনি বলেছেন যে এগুলি "র‍্যামে বরাদ্দ করা হয়েছে" - সত্য নয়, আসল বিট / রাষ্ট্রীয় উপাদান পেরিফেরিয়াল ডিভাইসে রয়েছে। যাইহোক, তারা সিস্টেম মেমরি মানচিত্রে ম্যাপ করা হয়। এরপরে, আপনি জিজ্ঞাসা করেছিলেন যে এটি সমস্ত পিসিআই ডিভাইস জুড়ে নিবন্ধগুলির একটি সাধারণ সেট - হ্যাঁ এবং না। পিসিআই কনফিগারেশন স্থানটি যেভাবে কাজ করে, প্রতিটি বিভাগের শেষে একটি পয়েন্টার রয়েছে যা নির্দেশ করে যে আরও "স্টাফ" পড়তে হবে কিনা। সমস্ত পিসিআই ডিভাইসগুলি প্রয়োগ করতে হবে এবং তারপরে আরও উন্নত ডিভাইসগুলি আরও কার্যকর করতে পারে a এটি কার্যকরী অপারেশনের জন্য কতটা দরকারী, ঠিক আছে, এটি বাধ্যতামূলক এবং ভারীভাবে ব্যবহার করা হয়েছে। :)

এখন, বার্স (আপনার ঠিকানা ঠিকানা রেজিস্টার) সম্পর্কে আপনার প্রশ্ন মেমরি স্পেস এবং আই / ও স্পেসে বিভক্ত করার জন্য একটি ভাল জায়গা। কিছুটা x86 কেন্দ্রীক হওয়ায় স্পেসিফিকেশনটি টাইপ ছাড়াও একটি বার আকারের স্পেসিফিকেশনকে অনুমতি দেয়। এটি কোনও ডিভাইসকে নিয়মিত মেমরি-ম্যাপযুক্ত বার, বা আইও স্পেস বারের জন্য অনুরোধ করতে অনুমতি দেয়, যা একটি x86 মেশিনের I / O স্পেসের 4K কিছু খায়। আপনি লক্ষ্য করবেন যে পাওয়ারপিসি মেশিনে, I / O স্পেস বারগুলি মূল্যহীন।

একটি বার মূলত ডিভাইসটির হোস্টকে তার কতটা স্মৃতি প্রয়োজন এবং কী ধরণের (উপরে আলোচনা করা হয়েছে) তা জানার উপায়। আমি যদি মেমরি-ম্যাপযুক্ত স্থানের 1MB বলার জন্য জিজ্ঞাসা করি, BIOS আমাকে 0x10000000 থেকে 0x10100000 ঠিকানা নির্ধারণ করতে পারে। এটি শারীরিক র‍্যাম গ্রাস করছে না , কেবল জায়গার ঠিকানা দেবে (আপনি কি এখন দেখতে পাচ্ছেন যে 32-বিট সিস্টেমগুলি উচ্চ-প্রান্তের জিপিইউ যেমন জিবি র‌্যামের মতো এক্সপেনশন কার্ডগুলি কেন ইস্যুতে চালিত হয়?)। এখন 0x10000004 বলতে একটি মেমরি রাইটিং / পিসিআই এক্সপ্রেস ডিভাইসে প্রেরণ করা হবে এবং এটি বাইট-ওয়াইড রেজিস্টার হতে পারে যা এলইডিতে সংযুক্ত থাকে। সুতরাং আমি যদি দৈহিক মেমরি 0x10000004 এ 0xFF লিখি তবে এটি 8 টি LED চালিত হবে। এটি মেমরি-ম্যাপ করা I / O এর প্রাথমিক ভিত্তি ।

I / O স্পেসটি একইভাবে আচরণ করে, এটি পৃথক মেমরির জায়গায়, x86 I / O স্পেসে কাজ করে। ঠিকানা 0x3F8 (COM1) I / O স্থান এবং মেমরির উভয় জায়গাতেই বিদ্যমান এবং দুটি ভিন্ন জিনিস।

আপনার শেষ প্রশ্ন, বার্তাগুলি একটি নতুন ধরণের বিঘ্নিত প্রক্রিয়া, বার্তার সংকেতযুক্ত বাধা বা এমএসআই সংক্ষেপে উল্লেখ করে। লিগ্যাসি পিসিআই ডিভাইসগুলির মধ্যে চারটি বাধা পিন রয়েছে, আইএনটিএ, আইএনটিবি, আইএনটিসি, আইএনটিডি। এগুলি সাধারণত স্লটগুলির মধ্যে স্ফীত হয়ে যায় যে আইএনটিএ স্লট 0 তে আইএনটিএ গিয়েছিল, তারপরে স্লট 1 এ আইএনটিবি, তারপরে স্লট 2 তে আইএনটিসি, স্লট 3 এ আইএনটিডি এবং তারপরে আইএনটিএতে ফিরে স্লট 4 on এর কারণটি হ'ল বেশিরভাগ পিসিআই ডিভাইসগুলি কেবল আইএনটিএ প্রয়োগ করেছে এবং তিনটি ডিভাইস বলার সাথে সাথে এটি সাঁতার কাটার মাধ্যমে প্রতিটি বাধা নিয়ন্ত্রণকারীকে তাদের নিজস্ব বাধা সংকেত দিয়ে শেষ করবে। এমএসআই হ'ল পিসিআই এক্সপ্রেস প্রোটোকল স্তরটি ব্যবহার করে বিঘ্নিত সংকেতের একটি উপায় এবং পিসিআই রুট কমপ্লেক্স (হোস্ট) সিপিইউতে বাধা দেওয়ার জন্য যত্ন নেয়।

এই উত্তরটি আপনাকে সাহায্য করতে খুব দেরী হতে পারে তবে এটি ভবিষ্যতের কিছু গুগল / বিঞ্জারকে সহায়তা করবে।

অবশেষে, আমি আরও কিছু যাওয়ার আগে পিসিআইয়ের একটি ভাল, বিস্তারিত পরিচিতি পেতে ইন্টেল থেকে এই বইটি পড়ার পরামর্শ দিচ্ছি । অন্য উল্লেখটি হ'ল লিনাক্স ডিভাইস ড্রাইভারস, এলডাব্লুএন থেকে একটি অনলাইন ইবুক


পোস্টটি বেশ সহায়ক ছিল। আমি পিসিআই-তে খুব নতুন, গণনার প্রক্রিয়াটি সংঘটিত হওয়ার জন্য (সংযুক্তি স্থান বরাদ্দ এবং ম্যাপিং) এর জন্য আমাদের ড্রাইভার সমর্থন প্রয়োজন, বা এটি ওস দ্বারা শুরু করা যেতে পারে।
কমলেন্দ্র

ধন্যবাদ, খুশী এটি সহায়ক ছিল! সাধারণত, x86 প্ল্যাটফর্মগুলিতে, বিআইওএস সফ্টওয়্যারটি পিসিআই ডিভাইসগুলি থেকে কনফিগারেশন স্পেস তথ্যের উপর নির্ভর করে কিছু পরিমাণ মেমরি বরাদ্দ করে। আধুনিক ওএসগুলি সাধারণত এএফআইকে এই মেমরি মানচিত্রটিকে গ্রহণ করে, যদিও তারাও যথাযথ ড্রাইভারগুলি লোড করার জন্য ডিভাইসগুলি গণনা করবে। আমার মনে আছে লিনাক্সে এমন কিছু আকর্ষণীয় নিম্ন-স্তরের স্টাফ দেখে যা আপনাকে BIOS দ্বারা নির্ধারিত যা পরিবর্তন করতে পারে।
ক্রুনাল দেশাই

লক্ষ্য করুন শুধুমাত্র মেমরির যেমন প্রাক fetchable চিহ্নিত লেনদেন প্রতি একটি একক DWORD চেয়ে বেশি হস্তান্তর করতে পারেন; অন্যান্য সমস্ত স্পেস প্রতি লেনদেনের জন্য কেবল একটি একক DWORD স্থানান্তর করতে পারে । বিস্ফোরণের আকারটি MAX_PAYLOAD_SIZE (গণনার সময় আবিষ্কার করা) এর মধ্যে সীমাবদ্ধ।
পিটার স্মিথ

হ্যালো. আমি পিসিআই-তে নতুন এবং আপনার উত্তর সম্পর্কে কিছুটা ব্যাখ্যা চাই। আপনি বলেছেন যে কনফিগারেশন স্পেসের 256b / 4k বাইট সিস্টেম মেমোরিতে ম্যাপ করা আছে। আমার স্ব-টিউটরিং থেকে, আমি ভেবেছিলাম কনফিগারেশন স্পেসে অ্যাক্সেস একটি পিসিআই নিয়ন্ত্রকের মাধ্যমে পরিচালিত হয় যা সিস্টেম মেমোরিতে স্থিরভাবে ম্যাপ করা হয়। এই নিয়ামকটি কয়েকটি নিবন্ধ সরবরাহ করে (ডিভাইস / ফাংশন সনাক্তকরণের জন্য, ঠিকানা স্থানে অফসেট, ফলাফলের ঠিকানা) যা কনফিগারেশন স্পেসে একটি ছোট ইন্টারফেস হিসাবে পরিবেশন করে। সুতরাং বাস্তবে, প্রায় 5 - 10 বাইট স্ট্যাটিকালি পিসিআই নিয়ামকের জন্য সংরক্ষিত। এটা কী ঠিক ???
সেরেজো

সুতরাং, হোস্ট যখন (সিপিইউ) 0x10000004 ঠিকানায় 0xFF ঠিকানায় কোনও নিবন্ধককে লিখবে, পিসিআই রুট কমপ্লেক্স এই ডেটাটি আনবে (সম্ভবত এটি 0x10000000 থেকে 0x10100000 থেকে কোনও ঠিকানার জন্য কোনও ডেটার জন্য পোলিং ছিল) এবং ঠিকানায় এটি লিখবে শেষ পয়েন্টে 0x04 (পিসিআই ডিভাইস)? এই বোঝাপড়াটি কি সঠিক?
আলফাগোকু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.