আমি পিআইসি এবং x86 প্রসেসরের জন্য প্রচুর খালি ধাতব কোড লিখেছি। কেউ আমাকে বলতে পারেন যে কখন এবং কখন আমার একটি অপারেটিং সিস্টেমের প্রয়োজন হবে? বিপরীতে, কোন অ্যাপ্লিকেশন বা পরিস্থিতি অপারেটিং সিস্টেমের পাশাপাশি বা ছাড়া মোকাবেলা করা যেতে পারে?
আমি পিআইসি এবং x86 প্রসেসরের জন্য প্রচুর খালি ধাতব কোড লিখেছি। কেউ আমাকে বলতে পারেন যে কখন এবং কখন আমার একটি অপারেটিং সিস্টেমের প্রয়োজন হবে? বিপরীতে, কোন অ্যাপ্লিকেশন বা পরিস্থিতি অপারেটিং সিস্টেমের পাশাপাশি বা ছাড়া মোকাবেলা করা যেতে পারে?
উত্তর:
আমার থাম্বের নিয়মটি হ'ল যদি পণ্যটির নিম্নলিখিত এক বা একাধিকটির প্রয়োজন হয় তবে আপনার একটি অপারেটিং সিস্টেমটি বিবেচনা করা উচিত: একটি টিসিপি / আইপি স্ট্যাক (বা অন্যান্য জটিল নেটওয়ার্কিং স্ট্যাক), একটি জটিল জিইউআই (সম্ভবত উইন্ডো এবং ইভেন্টের মতো জিইউআই অবজেক্টগুলির সাথে একটি) ) বা একটি ফাইল সিস্টেম
যদি আপনি কিছু খালি ধাতব কোডিং করেন তবে আপনি সম্ভবত সুপার-লুপের সাথে পরিচিত প্রোগ্রামের আর্কিটেকচারের । যদি পণ্যটির ফার্মওয়্যার প্রয়োজনীয়তাগুলি একটি সুপার-লুপকে রক্ষণযোগ্য (এবং আশা করা যায় কিছুটা এক্সটেনসিবল) দিয়ে প্রয়োগ করার জন্য যথেষ্ট সহজ হয় তবে আপনার সম্ভবত কোনও অপারেটিং সিস্টেমের প্রয়োজন হবে না।
সফ্টওয়্যার প্রয়োজনীয়তা বাড়ার সাথে সাথে সুপার-লুপটি আরও জটিল হয়। যখন সফ্টওয়্যার প্রয়োজনীয়তাগুলি এত বেশি হয়ে যায় যে সুপার-লুপটি খুব জটিল হয়ে যায় বা সিস্টেমের রিয়েল-টাইম প্রয়োজনীয়তাগুলি পূরণ করতে পারে না তখন এটি অন্য কোনও স্থাপত্য বিবেচনা করার সময় এসেছে।
একটি আরটিওএস আর্কিটেকচার আপনাকে সফ্টওয়্যার প্রয়োজনীয়তাগুলিকে কার্যগুলিতে বিভক্ত করতে দেয়। যদি সঠিকভাবে সম্পন্ন করা হয় তবে এটি প্রতিটি কাজের প্রয়োগ সহজতর করে। এবং কার্য অগ্রাধিকারের সাথে একটি আরটিওএস রিয়েল-টাইম প্রয়োজনীয়তাগুলি পূরণ করা আরও সহজ করে তুলতে পারে। তবে আরটিওএস কোনও প্যানিসিয়া নয়। একটি আরটিওএস সামগ্রিক সিস্টেমের জটিলতা বাড়ায় এবং আপনাকে নতুন ধরণের বাগ (যেমন ডেডলকস) খুলবে। আরটিওএসের বিকল্প হিসাবে আপনি বিবেচনা করতে পারেন এবং ইভেন্ট-ভিত্তিক স্টেট মেশিন আর্কিটেকচার (যেমন কিউপি )।
যদি আপনার প্রোডাক্টটির নেটওয়ার্কিং, একটি জটিল জিইউআই এবং একটি ফাইল-সিস্টেম রয়েছে তবে আপনি সেই মুহুর্তে থাকতে পারেন যেখানে আপনাকে ভক্স ওয়ার্কস, উইন্ডোজ বা লিনাক্সের মতো পূর্ণ বৈশিষ্ট্যযুক্ত অপারেটিং সিস্টেমগুলি বিবেচনা করা উচিত। সম্পূর্ণ বৈশিষ্ট্যযুক্ত অপারেটিং সিস্টেমগুলিতে নিম্ন-স্তরের বিশদগুলির জন্য ড্রাইভারকে অন্তর্ভুক্ত করা হবে এবং আপনাকে আপনার অ্যাপ্লিকেশনটিতে ফোকাস দেওয়ার অনুমতি দেবে।
এটি সত্যিই আপনার একটি 'এমবেডেড সিস্টেম' সংজ্ঞা সম্পর্কিত উপর নির্ভর করে। এমন কিছু লোক আছেন যারা দাবি করতে পারেন যে এটি যদি খালি-ধাতব প্রোগ্রামিং না হয় তবে এটি এম্বেড করা হয়নি (যা আপনার প্রশ্নকে সামনে রেখে দেয়) তবে আমি তার সাথে একমত নই - আমি যুক্তি দেব যে কোনও সিস্টেম যা কেবল একটি ফাংশন সম্পাদন করার জন্য ডিজাইন করা হয়েছে, উদাহরণস্বরূপ, কেবলমাত্র একটি নির্দিষ্ট 'অ্যাপ্লিকেশন' চালানোর জন্য, এম্বেড হওয়া সিস্টেম বলা যেতে পারে।
এটি বলেছিল, সম্পূর্ণ প্রস্ফুটিত ওএসের পরিষেবাগুলি থেকে উপকৃত হওয়া পরিস্থিতিগুলি কল্পনা করা মোটামুটি সহজ হওয়া উচিত। উদাহরণস্বরূপ, আমি যেখানে কাজ করি সেখানে উইন্ডোজগুলির উপরে চলে এমন একটি উপকরণ ডিজাইন স্যুটের উপরে লোকেরা পরীক্ষা সরঞ্জাম তৈরি করা সন্ধান করা খুব সাধারণ। এই সিস্টেমগুলি পরীক্ষা স্টেশন কনফিগারেশন বুট করার জন্য এবং সাধারণ ব্যবহার লক আউট (স্টেশনের দুর্নীতি রোধ করতে) কনফিগার করা হয়েছে এবং তত যুক্তিযুক্ত এম্বেডড সিস্টেম রয়েছে।
তবে, কেবল অফ-দ্য শেল্ফ আই / ও মডিউলগুলি কিনে, এগুলিকে একটি র্যাক মাউন্ট পিসিতে লাগিয়ে দেওয়া এবং জিইউআই-তে একটি কনফিগারেশন চাবুক দেওয়া কিছুকে এম্বেড থাকা সিস্টেম ডিজাইনের যোগ্যতা অর্জন করতে ব্যর্থ হতে পারে । কিছুটা কম শেল্ফ পরিস্থিতির জন্য, এফপিজিএ সহ একটি কাস্টম প্রক্রিয়া নিয়ন্ত্রক বিবেচনা করুন, যার জন্য আপনি কিছু অভিনব ডেটা লগিং করতে চান। নেটওয়ার্ক স্ট্যাক চালানোর জন্য (আপনার লগিং এবং এনটিপি ইত্যাদির জন্য) রিয়েলটাইম লিনাক্স চালিয়ে আপনি যুক্তিযুক্ত যাবতীয় কাজ করতে পারেন এমন একটি সফট-কোর প্রসেসর সিস্টেম এম্বেড করতে পারেন (একটি বিদ্যমান বিএসপি সহ) and
আমার (খুব অস্পষ্ট) নিয়মের নিয়মটি হল যদি আপনার নিয়ন্ত্রণের একাধিক থ্রেডের প্রয়োজন হয় (কমপক্ষে একটি ডিভাইস যা একটি প্রোটোকল বা স্টেট মেশিনের সাথে জড়িত অন্য কিছু করতে পারে) বলুন তবে ওশিশ সফ্টওয়্যারগুলির জন্য কিছু আপনার জীবনকে সহজ করে দেবে
switch
বেসড স্টেট মেশিনগুলি ব্যবহারের প্রয়াস যদি না বাড়ে, তবে switch
বেসড মেশিনগুলি আরও ভাল হতে পারে। আরও, 8x51 এবং টিএমএস 2000 প্ল্যাটফর্ম উভয়টিতে, আমি একটি সাধারণ স্ট্যাক-ভিত্তিক সমবায় টাস্ক-স্যুইচার বাস্তবায়ন করেছি। কখন স্যুইচ করবেন তা নির্ধারণের জন্য কোনও ওএস যুক্তি নেই - যে কোনও সময় "থ্রেড" অনুভব করেছিল যে এটি বিরতি নিতে পারে, এটি অন্যটিতে স্যুইচ করবে। কিছু তার জন্য ছিল এখনও ঘটেনি অপেক্ষা করছিলেন, তা ফিরে প্রথমে কম সময়ে একটি স্বাভাবিক ওএস চেয়ে সুইচ করতে পারে যে যা অন্য থ্রেড করাত সিদ্ধান্ত ব্যয় করেছেন তাহলে কিনা স্যুইচ।
একটি পুরানো প্রশ্ন কিন্তু আমি যাইহোক মন্তব্য করব।
আপনার এম্বেড থাকা অ্যাপ্লিকেশনটিতে পর্যাপ্ত প্রক্রিয়া হওয়ার কারণে আপনার যদি কোনও টাস্ক শিডিয়ুলারের প্রয়োজন হয় এমন পর্যায়ে আপনার নেটওয়ার্ক স্ট্যাক বা অনুরূপ নাও রয়েছে, আপনি কোনও আরটিওএস বিবেচনা করতে পারেন। একটি সাধারণ টাইমার-ভিত্তিক সমবায় মাল্টিটাস্কিং শিডিয়ুলার লেখা এত কঠিন নয় তবে একটি আটকে থাকা প্রক্রিয়াটি বাকী অ্যাপ্লিকেশনটিকে অবরুদ্ধ করবে না এবং এটি সঠিক হতে সময় নিতে পারে। প্রসেসগুলি যদি তারা সম্পন্ন না করে থাকে তবে কাতারে ডুবিয়ে দেওয়ার জন্য আপনাকে কোনও ধরণের বিধান সহ একটি অগ্রাধিকার সিস্টেম প্রয়োগ করতে হবে।
আরটিওএস আপনাকে মেমরি সুরক্ষা এবং এ জাতীয় জিনিসগুলি দেয় যা সি কোডে কিছু সাধারণ গাফাকে ট্র্যাক করা সহজ করে তোলে তবে সাধারণ মাইক্রোকন্ট্রোলাররা জটিল মেমোরি সুরক্ষা পরিচালনা করতে সক্ষম নাও হতে পারে। উদাহরণস্বরূপ MSP430 আপনাকে উচ্চ স্তরে কোড এবং ডেটা পৃথক করার অনুমতি দেয় তবে কোনও দানাদার মেমরি অ্যাক্সেস নিয়ন্ত্রণ নেই control
একটি অপারেটিং সিস্টেম আসলে হার্ডওয়্যার এবং অ্যাপ্লিকেশন সফ্টওয়্যার (ডিভাইস ড্রাইভারের মাধ্যমে) মধ্যে ব্যবধানটি সরিয়ে দেয়। অন্য কথায়, এটি প্রোগ্রামারকে তুলনামূলকভাবে উচ্চ-স্তরের প্ল্যাটফর্ম সরবরাহ করে যা শেষ পর্যন্ত কোডের জটিলতা হ্রাস করে। এবং আরও, অপারেটিং সিস্টেমটি প্রয়োগের কার্যকর করার জন্য শক্তিশালী এবং নমনীয় প্ল্যাটফর্ম সরবরাহ করে।