অন্যান্য উত্তরের জন্য কিছুটা ভিন্ন দৃষ্টিভঙ্গি দেওয়ার প্রয়াসে আমি এর মতো উত্তর দেব।
(অস্বীকৃতি: আমি জিনিসগুলিকে কিছুটা সরল করছি, আমি যে পরিস্থিতি দিচ্ছি তা নিখুঁত অনুমানমূলক এবং জীবনের 100% সত্য হওয়ার চেয়ে ধারণাগুলি প্রদর্শনের মাধ্যম হিসাবে লেখা হয়েছে)।
অন্যান্য দৃষ্টিকোণ থেকে জিনিস সম্পর্কে চিন্তা করুন, কল্পনা করুন যে আপনি স্রেফ বেসিক থ্রেডিং, উইন্ডোটিং এবং মেমরি পরিচালনার ক্ষমতা সহ একটি সাধারণ অপারেটিং সিস্টেম লিখেছেন। আপনি ব্যবহারকারীদের সি ++ তে প্রোগ্রাম করতে দিন এবং একটি উইন্ডো তৈরি করা, উইন্ডোতে আঁকানো ইত্যাদির মতো কাজ করতে একটি সি ++ গ্রন্থাগার বাস্তবায়ন করতে চান প্রশ্নটি হল কীভাবে এটি করা যায়।
প্রথমত, যেহেতু সি ++ মেশিন কোডে সংকলিত হয়, আপনাকে সি ++ এর সাথে ইন্টারফেস করতে মেশিন কোড ব্যবহারের একটি উপায় নির্ধারণ করতে হবে। এটি এখানে ফাংশন আসে, ফাংশনগুলি আর্গুমেন্ট গ্রহণ করে এবং ফেরতের মান দেয়, এইভাবে তারা কোডের বিভিন্ন বিভাগের মধ্যে ডেটা স্থানান্তর করার একটি মানক উপায় সরবরাহ করে। কলিং কনভেনশন হিসাবে পরিচিত এমন কিছু প্রতিষ্ঠা করে তারা এটি করে ।
একটি কলিং কনভেনশনে বলা হয় যে কোথায় এবং কীভাবে আর্গুমেন্টগুলি মেমোরিতে রাখা উচিত যাতে কোনও ক্রিয়াকলাপ সম্পাদিত হওয়ার পরে এটি খুঁজে পেতে পারে। যখন কোনও ফাংশন ডাকা হয়, কলিং ফাংশনটি আর্গুমেন্টগুলিকে মেমোরিতে রাখে এবং তারপরে সিপিইউকে অন্য ফাংশনটিতে ঝাঁপিয়ে পড়তে বলে, যেখানে এটি ডেকে আনা হয়েছিল সেখানে ফিরে যাওয়ার আগে এটি যা করে তা করে। এর অর্থ হ'ল কোডটি একেবারে যে কোনও কিছু হতে পারে এবং এটি কীভাবে ফাংশন বলা হয় তা পরিবর্তিত হবে না। তবে এই ক্ষেত্রে, ফাংশনের পিছনে কোড অপারেটিং সিস্টেমের সাথে প্রাসঙ্গিক হবে এবং অপারেটিং সিস্টেমের অভ্যন্তরীণ অবস্থানে কাজ করবে।
সুতরাং, অনেক মাস পরে এবং আপনি আপনার সমস্ত ওএস ফাংশনগুলি সাজিয়ে ফেলেছেন। আপনার ব্যবহারকারী উইন্ডোজ তৈরি করতে এবং সেগুলি আঁকতে ফাংশনগুলিতে কল করতে পারেন, তারা থ্রেড এবং সমস্ত ধরণের দুর্দান্ত জিনিস তৈরি করতে পারে। যদিও এখানে সমস্যাটি রয়েছে, আপনার ওএসের ফাংশনগুলি লিনাক্সের ফাংশন বা উইন্ডোজের ফাংশন থেকে আলাদা হতে চলেছে। সুতরাং আপনি সিদ্ধান্ত নিতে পারেন যে আপনাকে ব্যবহারকারীকে একটি স্ট্যান্ডার্ড ইন্টারফেস দেওয়া দরকার যাতে তারা পোর্টেবল কোড লিখতে পারে। এখানেই কিউটি আসে।
যেমন আপনি প্রায় নিশ্চিতভাবেই জানেন, কিউটি-তে অপারেটিং সিস্টেমগুলি বিভিন্ন ধরণের কাজ করার জন্য প্রচুর উপযোগী ক্লাস এবং ফাংশন রয়েছে তবে অন্তর্নিহিত অপারেটিং সিস্টেমের বাইরে এমন একটি উপায়ে প্রদর্শিত হবে। এটি যেভাবে কাজ করে তা হ'ল কিউটি ক্লাস এবং ফাংশনগুলি সরবরাহ করে যা তারা ব্যবহারকারীর কাছে উপস্থিত হওয়ার মতো করে থাকে তবে একইভাবে প্রতিটি অপারেটিং সিস্টেমের জন্য ফাংশনের পিছনে কোডটি আলাদা is উদাহরণস্বরূপ কিউটির কিউপ্লিকেশন :: ক্লোজআল উইন্ডোজ () আসলে প্রতিটি অপারেটিং সিস্টেমের বিশেষায়িত উইন্ডো ক্লোজিং ফাংশনটি ব্যবহৃত সংস্করণের উপর নির্ভর করে কল করবে। উইন্ডোজ এটি সম্ভবত ক্লোজ উইন্ডো (hwnd) ডাকবে যখন এক্স উইন্ডো সিস্টেম ব্যবহার করে কোনও OS এ এটি সম্ভাব্যভাবে XDestroyWindow (প্রদর্শন, উইন্ডো) কল করবে।
যেমনটি স্পষ্ট যে, একটি অপারেটিং সিস্টেমের অনেক স্তর রয়েছে, যার সবকটিই বিভিন্ন জাতের ইন্টারফেসের মাধ্যমে ইন্টারঅ্যাক্ট করতে হয়। এমন অনেকগুলি দিক রয়েছে যা আমি এমনকি স্পর্শ করি নি, তবে সেগুলি ব্যাখ্যা করতে খুব দীর্ঘ সময় লাগবে। আপনি যদি অপারেটিং সিস্টেমের অভ্যন্তরীণ কাজগুলিতে আরও আগ্রহী হন তবে আমি ওএস দেব উইকিটি পরীক্ষা করে দেখার পরামর্শ দিই ।
যদিও মনে রাখবেন যে অনেক অপারেটিং সিস্টেমগুলি সি / সি ++ এর সাথে ইন্টারফেস প্রকাশ করার জন্য যে কারণটি বেছে নিয়েছিল তা হ'ল তারা মেশিন কোডটি সংকলন করে, তারা সমাবেশের নির্দেশাবলীকে তাদের নিজস্ব কোডের সাথে মিশ্রিত করতে দেয় এবং তারা প্রোগ্রামারকে একটি দুর্দান্ত ডিগ্রি প্রদান করে।
আবার এখানে অনেক কিছুই চলছে। আমি ব্যাখ্যা করতে চাই যে লাইব্রেরিগুলি কীভাবে .so এবং .dll ফাইলগুলি সি / সি ++ তে লিখতে হয় না এবং সমাবেশ বা অন্যান্য ভাষায়ও লিখতে পারে তবে আমি মনে করি আমি যদি আরও যুক্ত করি তবে আমিও সম্ভবত একটি সম্পূর্ণ নিবন্ধ লিখুন, এবং আমি যতটা করতে চাই তা করতে এটির হোস্ট করার মতো আমার কোনও সাইট নেই।