Modified Harvard architecture
একটি পরিবর্তিত হার্ভার্ড স্থাপত্য হল হার্ভার্ড কম্পিউটার স্থাপত্যের একটি বৈচিত্র্য, যা বিশুদ্ধ হার্ভার্ড স্থাপত্যের বিপরীতে, নির্দেশাবলী ধারণকারী স্মৃতিকে তথ্য হিসাবে অ্যাক্সেস করার অনুমতি দেয়। বেশিরভাগ আধুনিক কম্পিউটার যা হার্ভার্ড স্থাপত্য হিসাবে নথিভুক্ত করা হয়েছে, প্রকৃতপক্ষে, পরিবর্তিত হার্ভার্ড স্থাপত্য। হার্ভার্ড স্থাপত্য মূল হার্ভার্ড স্থাপত্য কম্পিউটার, হার্ভার্ড মার্ক 1, নির্দেশাবলী এবং তথ্য সংরক্ষণের জন্য সম্পূর্ণ পৃথক মেমরি সিস্টেম নিযুক্ত করে। সিপিইউ পরবর্তী নির্দেশ নিয়ে আসে এবং একই সাথে এবং স্বাধীনভাবে ডেটা লোড বা সংরক্ষণ করে। এটি একটি ভন নিউম্যান স্থাপত্য কম্পিউটারের বিপরীতে, যেখানে নির্দেশাবলী এবং তথ্য উভয়ই একই মেমরি সিস্টেমে সংরক্ষণ করা হয় এবং (সিপিইউ ক্যাশের জটিলতা ছাড়াই) পালাক্রমে অ্যাক্সেস করা আবশ্যক। নির্দেশ এবং ডেটা মেমরির শারীরিক পৃথকীকরণকে কখনও কখনও আধুনিক হার্ভার্ড স্থাপত্য কম্পিউটারের স্বতন্ত্র বৈশিষ্ট্য হিসাবে ধরা হয়। মাইক্রোকন্ট্রোলারগুলির সাথে (সম্পূর্ণ কম্পিউটার সিস্টেমগুলি একক চিপের সাথে একীভূত), নির্দেশাবলীর জন্য বিভিন্ন মেমরি প্রযুক্তির ব্যবহার (যেমন। ভন নিউম্যান মেশিনে ফ্ল্যাশ মেমরি) এবং ডেটা (সাধারণত রিড/রাইট মেমরি) জনপ্রিয় হয়ে উঠছে। হার্ভার্ড মেশিনের আসল পার্থক্য হল নির্দেশ এবং ডেটা মেমরি বিভিন্ন ঠিকানা স্থান দখল করে। অন্য কথায়, একটি মেমরি ঠিকানা অনন্যভাবে একটি স্টোরেজ অবস্থান সনাক্ত করে না (যেমন এটি একটি ভন নিউম্যান মেশিনে করে); মেমরি স্পেস (নির্দেশ বা ডেটা) জানাও প্রয়োজন যার সাথে ঠিকানাটি সম্পর্কিত। ভন নিউম্যান স্থাপত্য একটি ভন নিউম্যান স্থাপত্য সহ একটি কম্পিউটারের হার্ভার্ড মেশিনের তুলনায় সুবিধা রয়েছে যা সেই কোডে উপরে বর্ণিত হয়েছে এবং ডেটা হিসাবে একইভাবে অ্যাক্সেস এবং চিকিত্সা করা যেতে পারে এবং তদ্বিপরীত। উদাহরণস্বরূপ, এটি ডিস্ক স্টোরেজ থেকে ডেটাকে মেমরিতে পড়ার এবং তারপর কোড হিসাবে কার্যকর করার অনুমতি দেয়, অথবা জাস্ট-ইন-টাইম সংকলনের মতো প্রযুক্তি ব্যবহার করে স্ব-অপ্টিমাইজিং সফ্টওয়্যার সিস্টেমগুলিকে তাদের নিজস্ব মেমরিতে মেশিন কোড লেখার এবং পরে কার্যকর করার অনুমতি দেয়। আরেকটি উদাহরণ হল স্ব-পরিবর্তনকারী কোড, যা একটি প্রোগ্রামকে নিজেকে সংশোধন করার অনুমতি দেয়। এই পদ্ধতিগুলির একটি অসুবিধা হল এক্সিকিউটেবল স্পেস সুরক্ষার সমস্যা, যা ম্যালওয়্যার এবং সফ্টওয়্যার ত্রুটি থেকে ঝুঁকি বাড়ায়। পরিবর্তিত হার্ভার্ড স্থাপত্য তদনুসারে, কিছু বিশুদ্ধ হার্ভার্ড মেশিন বিশেষ পণ্য। বেশিরভাগ আধুনিক কম্পিউটার পরিবর্তে একটি পরিবর্তিত হার্ভার্ড স্থাপত্য প্রয়োগ করে। এই পরিবর্তনগুলি কোড এবং ডেটার মধ্যে কঠোর পৃথকীকরণকে শিথিল করার বিভিন্ন উপায়, যদিও এখনও হার্ভার্ড স্থাপত্যের উচ্চতর কার্যকারিতা সমবর্তী ডেটা এবং নির্দেশ অ্যাক্সেসকে সমর্থন করে। স্প্লিট-ক্যাশে (বা প্রায়-ভন-নিউম্যান) স্থাপত্য সবচেয়ে সাধারণ পরিবর্তনটি শ্রেণিবিন্যাসের নিম্ন স্তরে নির্দেশাবলী এবং ডেটার জন্য পৃথক সিপিইউ ক্যাশে সহ একটি মেমরি শ্রেণিবিন্যাস তৈরি করে। নির্দেশাবলী এবং তথ্যের জন্য একটি একক ঠিকানা স্থান রয়েছে, যা ভন নিউম্যান মডেল সরবরাহ করে, তবে সিপিইউ নির্দেশ ক্যাশে থেকে নির্দেশাবলী নিয়ে আসে এবং ডেটা ক্যাশে থেকে তথ্য নিয়ে আসে। বেশিরভাগ প্রোগ্রামারদের কখনই এই বিষয়ে সচেতন হওয়ার প্রয়োজন হয় না যে প্রসেসর কোর একটি (পরিবর্তিত) হার্ভার্ড স্থাপত্য প্রয়োগ করে, যদিও তারা এর গতির সুবিধা থেকে উপকৃত হয়। শুধুমাত্র প্রোগ্রামাররা যারা নির্দেশাবলী তৈরি করে এবং মেমরিতে সংরক্ষণ করে তাদের ক্যাশে কোহেরেন্সির মতো সমস্যা সম্পর্কে সচেতন হতে হবে, যদি দোকান কোনও নির্দেশ ক্যাশে নির্দেশের ক্যাশে করা অনুলিপি সংশোধন বা অকার্যকর না করে। আরেকটি পরিবর্তন হার্ভার্ড মেশিনের "পৃথক ঠিকানা স্থান" প্রকৃতি সংরক্ষণ করে, তবে তথ্য হিসাবে নির্দেশ স্মৃতির বিষয়বস্তু অ্যাক্সেস করার জন্য বিশেষ মেশিন অপারেশন সরবরাহ করে। যেহেতু তথ্য সরাসরি নির্দেশ হিসাবে কার্যকর করা যায় না, তাই এই ধরনের যন্ত্রগুলিকে সর্বদা "পরিবর্তিত" হার্ভার্ড স্থাপত্য হিসাবে দেখা হয় নাঃ পঠন অ্যাক্সেসঃ প্রোগ্রামটি শুরু হওয়ার সময় প্রাথমিক ডেটা মানগুলি নির্দেশ মেমরি থেকে ডেটা মেমরিতে অনুলিপি করা যেতে পারে। অথবা, যদি ডেটা পরিবর্তন না করা হয় (এটি একটি ধ্রুবক মান হতে পারে, যেমন পাই, বা একটি টেক্সট স্ট্রিং), এটি ডেটা মেমরিতে স্থান না নিয়ে সরাসরি নির্দেশ মেমরি থেকে চলমান প্রোগ্রাম দ্বারা অ্যাক্সেস করা যেতে পারে (যা প্রায়শই একটি প্রিমিয়ামে থাকে)। রাইট অ্যাক্সেসঃ রিপ্রোগ্রামিংয়ের জন্য সাধারণত একটি ক্ষমতা প্রয়োজন; কয়েকটি কম্পিউটার সম্পূর্ণরূপে রম-ভিত্তিক। উদাহরণস্বরূপ, একটি মাইক্রোকন্ট্রোলার সাধারণত তার নির্দেশাবলী ধরে রাখতে ব্যবহৃত ফ্ল্যাশ মেমরিতে লেখার জন্য অপারেশন করে। এই ক্ষমতাটি সফ্টওয়্যার আপডেট সহ উদ্দেশ্যে ব্যবহার করা যেতে পারে। EEPROM/PROM প্রতিস্থাপন একটি বিকল্প পদ্ধতি। কয়েকটি হার্ভার্ড স্থাপত্য প্রসেসর, যেমন ম্যাক্সিম ইন্টিগ্রেটেড ম্যাক্সকিউ, যে কোনও মেমরি বিভাগ থেকে প্রাপ্ত নির্দেশাবলী কার্যকর করতে পারে-মূল হার্ভার্ড প্রসেসরের বিপরীতে, যা শুধুমাত্র প্রোগ্রাম মেমরি বিভাগ থেকে প্রাপ্ত নির্দেশাবলী কার্যকর করতে পারে। অন্যান্য হার্ভার্ড আর্কিটেকচার প্রসেসরের মতো এই ধরনের প্রসেসরগুলি-এবং বিশুদ্ধ ভন নিউম্যান আর্কিটেকচারের বিপরীতে-একটি নির্দেশ পড়তে পারে এবং একই সাথে একটি ডেটা মান পড়তে পারে, যদি তারা পৃথক মেমরি বিভাগে থাকে, যেহেতু প্রসেসরের (কমপক্ষে) স্বাধীন ডেটা বাসের সাথে দুটি পৃথক মেমরি বিভাগ থাকে। এই ধরনের পরিবর্তিত হার্ভার্ড স্থাপত্য এবং বিশুদ্ধ ভন নিউম্যান স্থাপত্যের মধ্যে সবচেয়ে সুস্পষ্ট প্রোগ্রামার-দৃশ্যমান পার্থক্য হল-একটি মেমরি বিভাগ থেকে একটি নির্দেশ কার্যকর করার সময়-একই মেমরি বিভাগটি একই সাথে ডেটা হিসাবে অ্যাক্সেস করা যায় না। তুলনা বিশুদ্ধ হার্ভার্ড এবং ভন নিউম্যান মেশিন থেকে পরিবর্তিত হার্ভার্ড মেশিনগুলিকে আলাদা করার জন্য তিনটি বৈশিষ্ট্য ব্যবহার করা যেতে পারেঃ নির্দেশ এবং ডেটা মেমোরিগুলি বিভিন্ন ঠিকানার স্থান দখল করে বিশুদ্ধ হার্ভার্ড মেশিনের জন্য, নির্দেশের জায়গায় একটি ঠিকানা "শূন্য" থাকে যা একটি নির্দেশ সংরক্ষণের অবস্থানকে বোঝায় এবং ডেটা স্পেসে একটি পৃথক ঠিকানা "শূন্য" থাকে যা একটি স্বতন্ত্র ডেটা সংরক্ষণের অবস্থানকে বোঝায়। বিপরীতে, ভন নিউম্যান এবং স্প্লিট-ক্যাশে পরিবর্তিত হার্ভার্ড মেশিনগুলি নির্দেশাবলী এবং ডেটা উভয়ই একটি একক ঠিকানা স্থানে সঞ্চয় করে, তাই ঠিকানা "শূন্য" শুধুমাত্র একটি অবস্থানকে বোঝায় এবং সেই অবস্থানের বাইনারি প্যাটার্নটি একটি নির্দেশ হিসাবে ব্যাখ্যা করা হয় কিনা বা ডেটা দ্বারা সংজ্ঞায়িত করা হয় কিভাবে প্রোগ্রামটি লেখা হয়। যাইহোক, বিশুদ্ধ হার্ভার্ড মেশিনের মতো, নির্দেশ-স্মৃতি-হিসাবে-ডেটা পরিবর্তিত হার্ভার্ড মেশিনের পৃথক ঠিকানা স্থান রয়েছে, তাই নির্দেশ এবং ডেটা স্থানের জন্য পৃথক ঠিকানা "শূন্য" রয়েছে, তাই এটি সেই ধরনের পরিবর্তিত হার্ভার্ড মেশিনগুলিকে বিশুদ্ধ হার্ভার্ড মেশিন থেকে আলাদা করে না। নির্দেশ এবং তথ্য স্মৃতির কেন্দ্রীয় প্রক্রিয়াকরণ ইউনিটের (সিপিইউ) জন্য পৃথক হার্ডওয়্যার পথ রয়েছে এটি বিশুদ্ধ বা পরিবর্তিত হার্ভার্ড মেশিনের বিন্দু, এবং কেন তারা আরও নমনীয় এবং সাধারণ ভন নিউম্যান স্থাপত্যের সাথে সহাবস্থান করেঃ সিপিইউতে পৃথক মেমরি পথ নির্দেশাবলী আনতে এবং একই সময়ে ডেটা অ্যাক্সেস করার অনুমতি দেয়, থ্রুপুট উন্নত করে। বিশুদ্ধ হার্ভার্ড যন্ত্রগুলির পৃথক ঠিকানা স্থান সহ পৃথক পথ রয়েছে। স্প্লিট-ক্যাশে পরিবর্তিত হার্ভার্ড মেশিনে সিপিইউ ক্যাশে বা অন্যান্য শক্তভাবে সংযুক্ত স্মৃতির জন্য এই ধরনের পৃথক প্রবেশাধিকার পথ রয়েছে, তবে একটি একীভূত প্রবেশাধিকার পথ বাকি মেমরি শ্রেণিবিন্যাসকে অন্তর্ভুক্ত করে। একটি ভন নিউম্যান প্রসেসরের কেবল সেই একীভূত প্রবেশাধিকার পথ রয়েছে। একজন প্রোগ্রামারের দৃষ্টিকোণ থেকে, একটি পরিবর্তিত হার্ভার্ড প্রসেসর যেখানে নির্দেশ এবং ডেটা মেমোরিগুলি একটি ঠিকানা স্থান ভাগ করে নেয় সাধারণত একটি ভন নিউম্যান মেশিন হিসাবে বিবেচিত হয় যতক্ষণ না ক্যাশে কোহেরেন্সি একটি সমস্যা হয়ে ওঠে, যেমন স্ব-পরিবর্তনকারী কোড এবং প্রোগ্রাম লোডিংয়ের ক্ষেত্রে। এটি বিভ্রান্তিকর হতে পারে, তবে এই জাতীয় সমস্যাগুলি সাধারণত শুধুমাত্র সিস্টেম প্রোগ্রামার এবং ইন্টিগ্রেটরদের কাছে দৃশ্যমান হয়। অন্যান্য পরিবর্তিত হার্ভার্ড মেশিনগুলি এই ক্ষেত্রে বিশুদ্ধ হার্ভার্ড মেশিনের মতো। মূল হার্ভার্ড মেশিন, মার্ক I, একটি ঘুষি দেওয়া কাগজের টেপে নির্দেশাবলী এবং বৈদ্যুতিন-যান্ত্রিক কাউন্টারে ডেটা সংরক্ষণ করে। তবে, এটি সম্পূর্ণরূপে সেই সময়ে উপলব্ধ প্রযুক্তির সীমাবদ্ধতার কারণে হয়েছিল। বর্তমানে পিআইসি মাইক্রোকন্ট্রোলারের মতো একটি হার্ভার্ড মেশিন নির্দেশাবলীর জন্য 12-বিট প্রশস্ত ফ্ল্যাশ মেমরি এবং তথ্যের জন্য 8-বিট প্রশস্ত এসআরএএম ব্যবহার করতে পারে। এর বিপরীতে, একটি ভন নিউম্যান মাইক্রোকন্ট্রোলার যেমন একটি এআরএম7টিডিএমআই, বা একটি পরিবর্তিত হার্ভার্ড এআরএম9 কোর, অগত্যা ফ্ল্যাশ মেমরি এবং এসআরএএম-এ অভিন্ন প্রবেশাধিকার প্রদান করে (সেই ক্ষেত্রে 8 বিট বাইট হিসাবে)। পরিবর্তিত হার্ভার্ড স্থাপত্যের আধুনিক ব্যবহার অ্যাপ্লিকেশনের বাইরে যেখানে ক্যাশলেস ডিএসপি বা মাইক্রোকন্ট্রোলারের প্রয়োজন হয়, বেশিরভাগ আধুনিক প্রসেসরের একটি সিপিইউ ক্যাশ থাকে যা নির্দেশ এবং ডেটা বিভাজন করে। এমন প্রসেসরও রয়েছে যা সবচেয়ে কঠোর সংজ্ঞা অনুসারে হার্ভার্ড মেশিন (যে প্রোগ্রাম এবং ডেটা মেমরি বিভিন্ন ঠিকানা স্থান দখল করে), এবং শুধুমাত্র দুর্বল অর্থে পরিবর্তিত হয় যে প্রোগ্রাম মেমরি ডেটা হিসাবে পড়তে এবং/অথবা লেখার জন্য ক্রিয়াকলাপ রয়েছে। উদাহরণস্বরূপ, অ্যাটমেল এ. ভি. আর-এ এল. পি. এম (লোড প্রোগ্রাম মেমরি) এবং এস. পি. এম (স্টোর প্রোগ্রাম মেমরি) নির্দেশাবলী এই ধরনের একটি পরিবর্তন বাস্তবায়ন করে। অনুরূপ সমাধান অন্যান্য মাইক্রোকন্ট্রোলার যেমন পিআইসি এবং জেড8এনকোর!, ডিজিটাল সিগন্যাল প্রসেসরের অনেক পরিবার যেমন টিআই সি55এক্স কোর এবং আরও অনেক কিছুতে পাওয়া যায়। যেহেতু নির্দেশ কার্যকর করা এখনও প্রোগ্রাম অ্যাড্রেস স্পেসে সীমাবদ্ধ, তাই এই প্রসেসরগুলি ভন নিউম্যান মেশিনের থেকে খুব আলাদা। বাহ্যিক তারগুলি কঠোরভাবে হার্ভার্ড সিপিইউ কোরকে একটি পরিবর্তিত হার্ভার্ড কোর-এ রূপান্তরিত করতে পারে, উদাহরণস্বরূপ একটি ইন্টেল 8051 পারিবারিক মাইক্রোকন্ট্রোলারের একটি এ. এন. ডি গেটের মাধ্যমে বাহ্যিকভাবে 'পি. এস. ই. এন #' (প্রোগ্রাম স্পেস রিড) এবং 'আর. ডি #' (বাহ্যিক ডেটা স্পেস রিড) সংকেতগুলিকে একত্রিত করে, মাইক্রোকন্ট্রোলারকে "ভন নিউম্যান সংযুক্ত" বলা হয়, কারণ বাহ্যিক ডেটা এবং প্রোগ্রাম অ্যাড্রেস স্পেসগুলি একীভূত হয়ে যায়। পৃথক অ্যাড্রেস স্পেস থাকা উচ্চ-স্তরের ভাষাগুলির সাথে প্রোগ্রামিংয়ে কিছু অসুবিধা তৈরি করে যা সরাসরি এই ধারণাকে সমর্থন করে না যে কেবল-পঠনযোগ্য ডেটার টেবিলগুলি সাধারণ লিখনযোগ্য ডেটা থেকে আলাদা অ্যাড্রেস স্পেসে থাকতে পারে (এবং তাই বিভিন্ন নির্দেশাবলী ব্যবহার করে পড়া প্রয়োজন)। সি প্রোগ্রামিং ভাষা একাধিক অ্যাড্রেস স্পেস সমর্থন করতে পারে অ-মানক এক্সটেনশনের মাধ্যমে বা এমবেডেড প্রসেসরগুলিকে সমর্থন করার জন্য এখন প্রমিত এক্সটেনশনের মাধ্যমে। আরও দেখুন হার্ভার্ড আর্কিটেকচার ভন নিউম্যান আর্কিটেকচার নোট রেফারেন্স কম্পিউটার আর্কিটেকচার ক্লাস অফ কম্পিউটার