ফ্ল্যাশ এবং র‌্যাম: কোড এক্সিকিউশন


13

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

আমি বর্তমানে যা বুঝেছি তার অনুসারে, সমস্ত কোড এবং ডেটা কোনও প্রসেসরের বাইনারিটি 'বার্ন' করার ঠিক পরে-অ-উদ্বায়ী মেমরির উপরে থাকে - র‌্যামটি অস্থির হওয়ার কারণে পুনরায় সেট করার পরে কিছুই থাকে না। প্রোগ্রামটি 'এক্সিকিউটিভ' শুরু করলে এটি 0x0000 ঠিকানা থেকে এটি করে যা প্রায় সবসময় (এএফআইকে) ফ্ল্যাশের সর্বনিম্ন ঠিকানা। সুতরাং, সিপিইউ কোরের সাথে ফ্ল্যাশ সংযোগকারী বাসের দিকে নির্দেশিকা ল্যাচ করা হয়েছে এবং সেখানেই প্রকৃত বাস্তবায়ন ঘটে। যাইহোক, আমরা যখন মেমরি থেকে সিপিইউ পুনরুদ্ধার বা সঞ্চয় করার বিষয়ে কথা বলি, আমরা সাধারণত র‌্যামের কথা বলি - আমি সচেতন যে আমরা প্রোগ্রামের মেমোরি থেকেও ডেটা পড়তে / লিখতে পারি (আমি এটিআরআইতে দেখেছি) তবে এটি কি সাধারণ নয়? এটি কি কারণ র‌্যাম রমের চেয়ে দ্রুততর যে আমরা সেখানে ডেটা সঞ্চয় করতে পছন্দ করি?

এই প্রশ্নের গৃহীত উত্তর বলে যে বেশিরভাগ কোডের টুকরো র‌্যামের বাইরে চলে।

এর অর্থ কি এই যে স্টার্ট-আপ রানটাইম কোড (যা নিজেই ফ্ল্যাশ থেকে চালায়) সমস্ত প্রোগ্রামের অপকডগুলি ফ্ল্যাশ থেকে র‍্যামে অনুলিপি করতে হয় এবং কোনওভাবে ফ্ল্যাশের ঠিকানাগুলিকে র‌্যামের দিকে নির্দেশ করে ম্যাপ করে যাতে সিপিইউ সেখান থেকে অপকডগুলি নিয়ে আসে? এটি কি সেই প্রক্রিয়াটির মতো যা আমরা শুরুতে ROM থেকে র‌্যামে .Data বিভাগগুলিতে স্থানান্তরিত করি?

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

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


2
সাধারণ মাইক্রোকন্ট্রোলারগুলিতে এক্সিকিউট করার জন্য প্রোগ্রাম মেমোরি থেকে (প্রায়শই আজকাল ফ্ল্যাশ করা হয়) র‌্যামে অনুলিপি করার দরকার নেই।
ডেভিড

সব কিছুই কারণ একটি র‌্যাম ফ্ল্যাশের চেয়ে দ্রুত, তবে বিদ্যুৎ হ্রাসের পরে এটি ডেটা হারায়, অ-উদ্বায়ী মেমরি ফ্ল্যাশ আসে। যখন পাওয়ার চালু থাকে, তখন ডেটা ফ্ল্যাশ থেকে র‍্যামে লোড হয় এবং সিপিইউ কাজ শুরু করে, যা পুনরাবৃত্তি করে।
লাজার

উত্তর:


14

এটি ডিভাইসের উপর নির্ভর করে।

ফ্ল্যাশের চেয়ে র‌্যাম দ্রুত তৈরি করা যায়; এটি প্রায় 100MHz পরিসরে গুরুত্বপূর্ণ হয়ে উঠতে শুরু করে।

সাধারণ মাইক্রোকন্ট্রোলার

ছোট ধীর মাইক্রোকন্ট্রোলাররা সরাসরি ফ্ল্যাশের বাইরে কার্যকর করে। এই সিস্টেমে সাধারণত এসআরএএম এর চেয়ে বেশি ফ্ল্যাশ থাকে।

মিডরেঞ্জ সিস্টেম

আপনার ডিভাইসটি দ্রুত হয়ে গেলে পরিস্থিতি কিছুটা আলাদা। মিডরেঞ্জ এআরএম সিস্টেমগুলি এটিও করতে পারে বা তাদের কাছে একটি মাস্ক রম বুটলোডার থাকতে পারে যা কিছু স্মার্ট করে: সম্ভবত ইউএসবি বা বহিরাগত EEPROM গুলি থেকে অভ্যন্তরীণ এসআরএমে কোড ডাউনলোড করা।

বড় সিস্টেম

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

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


1

র্যামটি সাধারণত ফ্ল্যাশের চেয়ে দ্রুত হয় তবে আপনি 80-100 মেগাহার্টজ বা তার বেশি ঘড়ির গতি স্পর্শ না করা অবধি সত্য নয় - যতক্ষণ কোনও ফ্ল্যাশ অ্যাক্সেসের সময় কোনও নির্দেশিকা চালাতে সময় লাগে তার চেয়ে বেশি দ্রুত হয়, কোন ব্যাপার না।

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

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

অগত্যা। এই স্থানে ভার্চুয়াল ঠিকানা আসবে the কাঁচা হার্ডওয়্যার র‍্যাম ঠিকানাগুলিকে উল্লেখ করে প্রোগ্রাম কোডের পরিবর্তে এটি প্রকৃতপক্ষে একটি ভার্চুয়াল ঠিকানার স্থান উল্লেখ করে। ভার্চুয়াল ঠিকানা স্পেসের ব্লকগুলি দৈহিক মেমরি ডিভাইসে ম্যাপ করা হয় যা র‌্যাম, রম, ফ্ল্যাশ বা ডিভাইস বাফার হতে পারে।

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

যেমন, আপনি যখন বলেন যে "প্রোগ্রামটি 0x0000 ঠিকানা থেকে কার্যকর করা শুরু করে [...] যা প্রায়শই ফ্ল্যাশের সর্বনিম্ন ঠিকানা", আপনি সঠিক হওয়ার গ্যারান্টি নেই। আসলে, অনেক মাইক্রোকন্ট্রোলার 0x1000 থেকে শুরু হয়।


3
আমি বলতাম যে পার্থক্যটি 100- মেগাহার্জ নয়, 20-40MHz এর আশেপাশে প্রাসঙ্গিক হয়ে ওঠে, যেহেতু আমি দেখেছি বেশিরভাগ ফ্ল্যাশ ডিভাইসগুলি সেই বিন্দুর আশেপাশে অপেক্ষা করার রাজ্যের প্রয়োজন শুরু করে। অনেক ক্ষেত্রে কোড ফ্ল্যাশটিতে সার্কিটরি অন্তর্ভুক্ত থাকে যাতে প্রতিটি আনতে গিয়ে একাধিক নির্দেশের শব্দকে ধরে ফেলবে, যাতে অনেক ধরণের কোডের জন্য ফ্ল্যাশ থেকে চলার জন্য "পেনাল্টি" প্রায় 5-10% হয়ে থাকে তবে অন্য কয়েকটি ধরণের ক্ষেত্রে কোড (যেমন প্রচুর লাফ সহ) পেনাল্টিটি আরও বেশি তীব্র হতে পারে।
সুপারক্যাট

এটি ভার্চুয়াল অ্যাড্রেসিং নয়, এটি মেমরি-ম্যাপযুক্ত আই / ও (মেমরি অঞ্চলটি পেরিফেরাল ব্যবহার করে I / O তে ম্যাপ করে, অনেক MCU- এর নাম "স্ট্যাটিক মেমরি কন্ট্রোলার")। অবশ্যই, I / O অন্য স্মৃতিতে পৌঁছে যায়, তাই আমরা মাঝে মাঝে এটিকে I / O হিসাবে ভাবি না। তবে এটি অবশ্যই ভার্চুয়াল মেমরি ম্যাপিং নয়।
বেন ভয়েগট

1

আপনি যা বলছেন তা সম্পূর্ণ সত্য বা মিথ্যা নয়। এর জন্য বিভিন্ন পরিস্থিতিতে রয়েছে are

এটি নির্ভর করে আপনি কাঁচা হার্ডওয়্যার বা ওএসের সাথে ইনস্টল হওয়া হার্ডওয়্যারে প্রোগ্রামিং করছেন কিনা তার উপর depends

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

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

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

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