হার্ভার্ড স্থাপত্য কীভাবে সাহায্য করে?


13

আমি আরডুইনো এবং এভিআর আর্কিটেকচার সম্পর্কে পড়ছিলাম এবং এই স্থানে আটকে গেলাম যে কীভাবে পাইপলাইন স্টল বা বুদবুদকে এভিআর-তে হার্ভার্ড আর্কিটেকচার প্রবর্তনের মাধ্যমে সমাধান করা হয় I আমি হার্ভার্ড যা করে তা কেবল ডেটা মেমরি এবং প্রোগ্রামের স্মৃতিতে আলাদা স্টোরেজ অবস্থান সরবরাহ করে যা কোনও অপারেটর ছাড়াই প্রোগ্রামটি লোড করা সম্ভব করে তোলে ut তবে এটি কীভাবে উপরের সমস্যা সমাধানে সহায়তা করে?


2
এটি একটি অনুমানের কিছুটা তাই আমি উত্তর হিসাবে পোস্ট করব না, তবে আমার ধারণা হার্ভার্ড আর্কিটেকচারটি সাহায্য করে কারণ পাইপলাইনে পূর্ববর্তী নির্দেশ অনুসারে স্ব-সংশোধন কোডের সম্ভাবনা নেই।
পিটারজে

1
আমি নিশ্চিত যে আমি আপনাকে পেয়েছি কিনা ... আপনি কি বলতে চাইছেন যে একবার নির্দেশ "আনয়ন" হয়ে গেলে তা সংশোধন বা পিছনে ফেলে দেওয়া যায় না?
আয়ুশ

1
হ্যাঁ এটি ঠিক, অ হার্ভার্ডের জন্য কারণ কোডটি নিজেই পরিবর্তিত হতে পারে কারণ সম্ভবত নির্দেশটি পরবর্তী নির্দেশাবলী অনুসরণকারী নির্দেশকে পরিবর্তন করতে পারে। তবে কিছুক্ষণ অপেক্ষা করুন কারওর কাছে সম্ভবত আরও সুনির্দিষ্ট এবং পরিষ্কার উত্তর হবে।
পিটারজে

উত্তর:


9

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

এই সরল স্তরে হার্ভার্ড আর্কিটেকচারের একটি সীমাবদ্ধতা রয়েছে যা সাধারণত প্রোগ্রামের কোডটি ডেটা মেমরির মধ্যে রাখা সম্ভব হয় না এবং সেখান থেকে এটি কার্যকর করা যায়।

আমি বর্ণিত আর্কিটেকচারের এই সহজতম ফর্মের উপরে অনেকগুলি প্রকরণ এবং জটিলতা যুক্ত করতে পারি। একটি সাধারণ সংযোজন হ'ল প্রোগ্রাম ইনফরমেশন বাসে নির্দেশনা ক্যাচিং যুক্ত করা হচ্ছে যা প্রতিটি সময় প্রয়োজনীয় পদক্ষেপে ধাপে ধাপে ধীরে ধীরে স্মৃতিতে না যাওয়ার জন্য নির্দেশ এক্সিকিউশন ইউনিটকে পরবর্তী প্রোগ্রামের ধাপে দ্রুত অ্যাক্সেসের অনুমতি দেয়।


অনেক অনেক ধন্যবাদ .... সত্যই আমাকে এটি পেতে সাহায্য করেছে, তবে আরও একটি জিনিস ... ক্যান্ট আমাদের কাছে আলাদা বাস আছে তবে একই স্মৃতি এবং একই সাথে কাজ?
আয়ুশ

@ আয়ুষ - আপনার যদি দুটি বাস একই মেমোরি স্পেসে যায় তবে একই সময়ে মেমরিতে উপস্থিত হওয়া দুটি মেমরি লেনদেনের অনুরোধগুলির এখনও স্মৃতি অ্যাক্সেসের পক্ষে লড়াই করতে হবে। একজনের অপরটির সম্পূর্ণ হওয়ার অপেক্ষা করতে হবে !! এখন যা বলেছে যে কিছু ডিজাইনার সাধারণ গতি থেকে দ্বিগুণ সঞ্চালনের জন্য মেমরির নকশা তৈরি করে সেই সমস্যাটিকে "সমাধান করেছেন" এবং তারপরে একটি বাসটিকে অন্য বাসের অ্যাক্সেসের সাথে মেমরিটি পর্যায়ক্রমে অ্যাক্সেস করতে দিন। যেমন জিনিসগুলি এমনভাবে নকশা করা হয়েছে যে প্রথম বাসটি সর্বদা স্মৃতিতে অদ্ভুত অ্যাক্সেস স্লটগুলির সাথে সিঙ্ক হয় এবং (পরবর্তী মন্তব্যে)
মাইকেল কারাস

(পূর্ববর্তী মন্তব্য থেকে বিস্তৃত) দ্বিতীয় বাস মেমরির এমনকি অ্যাক্সেস স্লটে সিঙ্ক করা হয়েছে তবে উভয় বাস মেমরির অ্যাক্সেস যুক্তি ছাড়াই গতিতে চলতে পারে can
মাইকেল কারাস 17

@ মিশেলকারস: কেউ তা করতে পারে। অন্যদিকে, বেশিরভাগ ক্ষেত্রে, সামগ্রিক সিস্টেমের গতির জন্য প্রাথমিক সীমাবদ্ধকরণের কারণটি মেমরির গতি। যদি কারও কাছে এমন একটি মেমরি থাকে যা কেবলমাত্র ডেটা বা কেবল কোডের জন্য প্রয়োজনের দ্বিগুণ গতিতে চলতে পারে তবে ডেটা এবং কোডের জন্য মেমরি সিস্টেমটিকে প্রত্যেকটিতে ভাগ করে নেওয়া জিনিসগুলিকে দ্বিগুণ দ্রুত যেতে দেয়।
সুপারক্যাট

4

মাইকেলস ছাড়াও কিছু নোট উত্তর দেয়:

1) হার্ভার্ড আর্কিটেকচারের প্রয়োজন নেই যে ডেটা এবং কোডের জন্য দুটি পৃথক স্পেস রয়েছে , কেবলমাত্র তারা (বেশিরভাগ) দুটি পৃথক বাসের উপর দিয়ে আসে

২) হার্ভার্ড আর্কিটেকচার দ্বারা যে সমস্যাটি সমাধান করা হয়েছে তা হ'ল বাস কনটেন্টেশন: এমন একটি সিস্টেমের জন্য যেখানে কোড মেমরিটি কেবলমাত্র সিপিইউকে পুরো গতিতে চালিত রাখার জন্য যথেষ্ট দ্রুত নির্দেশাবলী সরবরাহ করতে পারে, ডেটা ফেচ / স্টোরগুলির অতিরিক্ত বোঝা সিপিইউকে ধীর করে দেবে নিচে। হার্ডওয়ার্ড আর্কিটেকচার দ্বারা এই সমস্যাটি সমাধান করা হয়েছে: মেমোরি যা (কিছুটা) সিপিইউর গতির জন্য খুব ধীর।

নোট করুন যে এই সমস্যাটি সমাধানের জন্য ক্যাশিং অন্য একটি উপায়। প্রায়শই হার্ভার্ডিং এবং ক্যাশিং আকর্ষণীয় সংমিশ্রণে ব্যবহৃত হয়।

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

মেমোরি ব্যাংকিং (চিপের বিভিন্ন সেটগুলিতে মেমরি অ্যাক্সেসগুলি বিতরণের অর্থে) মেমরি সিস্টেমের অভ্যন্তরে হার্ভার্ডিংয়ের এক ধরণের হিসাবে দেখা যায়, যা তথ্য / কোডের পার্থক্যের ভিত্তিতে নয়, তবে ঠিকানার নির্দিষ্ট বিটের উপর ভিত্তি করে।


4
আসলে একটি "খাঁটি" হার্ভার্ড আর্কিটেকচারের নির্দেশাবলী এবং ডেটার জন্য পৃথক স্মৃতি (ঠিকানার স্থান) প্রয়োজন হয় না । তবে, যেহেতু এটি কোনও কম্পিউটারকে নিজেই বুট করা থেকে বিরত রাখে, তাই অনেকগুলি মেশিন একটি "সংশোধিত" হার্ভার্ড আর্কিটেকচার প্রয়োগ করে, যাতে নির্দেশ মেমোরিতে লেখার অনুমতি রয়েছে।
ডেভ টুইট করেছেন

সিপিইউ এবং প্রতিটি মেমোরি ব্যাংকের মধ্যে দুটি (বা আরও বেশি) বাস না থাকলে মেমোরি ব্যাংকিং সহায়তা করে না।
ডেভ টুইট করেছেন

@ ডেভ ২: ব্যাংকিং নির্দিষ্ট পরিস্থিতিতে সহায়তা করে, উদাহরণস্বরূপ যদি সমস্যা হয় মেমরির সময় এবং মেমরির বাসটি অবরুদ্ধ হয় না (একাধিক লেনদেনের ক্ষেত্রে ব্যয় থাকতে পারে)।
ওয়াউটার ভ্যান ওইজেন

@ ডেভ 1: আপনি একটি রেফারেন্স দিতে পারেন?
ওয়াউটার ভ্যান ওইজেন

উইকিপিডিয়া , এছাড়াও প্রিন্সটন বিশ্ববিদ্যালয় (যা সত্যই উইকিপিডিয়া পৃষ্ঠার একটি অনুলিপি)। এছাড়াও, বেশিরভাগ একক-চিপ মাইক্রোকন্ট্রোলার হলেন হার্ভার্ড আর্কিটেকচার, এবং অনেকগুলি ডেটাশিট আসলে কীভাবে কোড ফ্ল্যাশ মেমরির স্ব-রচনার জন্য একটি ব্যবস্থা সরবরাহ করে একটি পরিবর্তিত হার্ভার্ড আর্কিটেকচার তৈরি করে তা নিয়ে আলোচনা করে।
ডেভ টুইট করেছেন

2

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

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

কিছু সিস্টেমে পৃথক কোড এবং মেমরির ক্ষেত্র রয়েছে, তবে বিশেষ হার্ডওয়্যার সরবরাহ করে যা সংক্ষেপে কোড বাসটি গ্রহণ করতে, কিছু অপারেশন করতে এবং এই জাতীয় ক্রিয়াকলাপটি শেষ হয়ে গেলে সিপিইউতে নিয়ন্ত্রণ ফিরিয়ে আনতে বলা যেতে পারে। এই জাতীয় কিছু সিস্টেমে এ জাতীয় ক্রিয়াকলাপ পরিচালনার জন্য মোটামুটি বিস্তৃত প্রোটোকল প্রয়োজন, কারও কারও কাছে এ জাতীয় কার্য সম্পাদনের জন্য বিশেষ নির্দেশনা রয়েছে এবং কিছু কিছু এমনকি "ডেটা মেমরি" ঠিকানাগুলির জন্য নজর রাখে এবং সেগুলি অ্যাক্সেস করার চেষ্টা করা হলে টেকওভার / রিলিজ ট্রিগার করে some । এই জাতীয় সিস্টেমগুলির একটি মূল দিক হ'ল "কোড" এবং "ডেটা" এর জন্য মেমরির স্পষ্টভাবে সংজ্ঞায়িত ক্ষেত্র রয়েছে; এমনকি সিপিইউতে "কোড" স্পেস পড়া এবং লেখা সম্ভব হলেও এটি ডেটা স্পেস থেকে শব্দার্থগতভাবে আলাদা বলে স্বীকৃত ''

একটি বিকল্প পদ্ধতির যা কিছু উচ্চ-শেষ সিস্টেমে ব্যবহৃত হয়, তা হল দুটি মেমরি বাস সহ একটি কন্ট্রোলার, একটি কোডের জন্য এবং একটি ডেটার জন্য, যা উভয়ই একটি মেমরি আরবিট্রেশন ইউনিটের সাথে সংযুক্ত থাকে। সেই ইউনিটটি প্রতিটি জন্য পৃথক মেমরি বাস ব্যবহার করে বিভিন্ন মেমরি সাবসিস্টেমের সাথে সংযুক্ত হয়ে থাকে। একটি মেমরি সাবসিস্টেমের একটি কোড অ্যাক্সেস অন্যটিতে অ্যাক্সেসের সাথে একই সাথে প্রক্রিয়া করা যেতে পারে; যদি কোড এবং ডেটা একই সাবসিস্টেমটি একই সাথে অ্যাক্সেস করার চেষ্টা করে তবেই একজনকে অপেক্ষা করতে হবে।

যে পদ্ধতিগুলিতে এই পদ্ধতির ব্যবহার রয়েছে, কোনও প্রোগ্রামের অ-কর্মক্ষমতা-সমালোচনামূলক অংশগুলি মেমরির সাবসিস্টেমগুলির মধ্যে সীমাটি উপেক্ষা করতে পারে। যদি কোড এবং ডেটা একই মেমরি সাবসিস্টেমের মধ্যে থাকতে পারে তবে জিনিসগুলি তত দ্রুত চলবে না যেমন তারা পৃথক সাবসিস্টিমে রয়েছে, তবে একটি সাধারণ প্রোগ্রামের অনেক অংশের জন্য এটি গুরুত্বপূর্ণ নয়। একটি সাধারণ সিস্টেমে কোডের একটি ছোট্ট অংশ থাকবে যেখানে কার্য সম্পাদন সত্যিই গুরুত্বপূর্ণ, এবং এটি কেবলমাত্র সিস্টেমের হাতে থাকা ডেটার একটি ছোট অংশে কাজ করবে। যদি কারও কাছে 16K র‌্যামের একটি সিস্টেম থাকে যা দুটি 8 কে পার্টিশনে বিভক্ত ছিল, কেউ লিঙ্কার নির্দেশাবলী ব্যবহার করে তা নিশ্চিত করতে পারফরম্যান্স-ক্রিটিকাল কোডটি সামগ্রিক মেমরি স্পেসের শুরুর কাছাকাছি ছিল এবং পারফরম্যান্স-সমালোচনামূলক ডেটা নিকটে ছিল শেষ. যদি সামগ্রিক কোডের আকারটি 9K তে বৃদ্ধি পায়, শেষ 1K এর মধ্যে কোডটি অন্য কোথাও রাখা কোডের চেয়ে ধীরে চলবে, তবে সেই কোডটি পারফরম্যান্সের সমালোচনা নয়। তেমনিভাবে, যদি কোডটি কেবলমাত্র 6K হয় তবে ডেটা 9K-তে বৃদ্ধি পেয়েছে, সর্বনিম্ন 1K ডেটাতে অ্যাক্সেসটি ধীর হবে তবে যদি পারফরম্যান্স-সমালোচনামূলক ডেটা অন্য কোথাও অবস্থিত হয়, তবে এটি কোনও সমস্যা সৃষ্টি করবে না।

নোট করুন যে কোডটি 8K এর নিচে এবং ডেটা 8K এর নিচে থাকলে কর্মক্ষমতা সর্বোত্তম হবে, উল্লিখিত মেমরি-সিস্টেম ডিজাইন কোড এবং ডেটা স্পেসের মধ্যে কোনও কঠোর বিভাজন চাপিয়ে দেবে না। যদি কোনও প্রোগ্রামের কেবল 1K ডেটা প্রয়োজন হয় তবে কোডটি 15K পর্যন্ত বাড়তে পারে। যদি কেবলমাত্র 2K কোডের প্রয়োজন হয় তবে ডেটা 14 কেতে বাড়তে পারে। কেবল কোডের জন্য একটি 8 কে অঞ্চল এবং কেবলমাত্র ডেটার জন্য একটি 8 কে অঞ্চল থাকার চেয়ে অনেক বেশি বহুমুখী।


2

একটি দিক যা নিয়ে আলোচনা করা হয়নি তা হ'ল ছোট মাইক্রোকন্ট্রোলারদের জন্য, সাধারণত একটি 16-বিট অ্যাড্রেস বাসের সাথে একটি হার্ভার্ড আর্কিটেকচার কার্যকরভাবে ঠিকানার জায়গাকে দ্বিগুণ করে (বা ট্রিপল) করে। আপনার কাছে কোডের K৪ কে, র‌্যামের K৪ কে এবং মেমরি-ম্যাপযুক্ত আই / ও k৪ কে (সিস্টেম যদি পোর্ট সংখ্যার পরিবর্তে মেমরি-ম্যাপযুক্ত I / O ব্যবহার করে থাকে তবে পরবর্তীটি ইতিমধ্যে কোড / এবং ঠিকানা থেকে আই / ও ঠিকানা পৃথক করে) র‌্যাম স্পেস)।

অন্যথায় আপনাকে কোড, র‌্যাম এবং allyচ্ছিকভাবে I / O ঠিকানা একই 64K ঠিকানা জায়গার মধ্যে ক্র্যাম করতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.