একটি এক্সিকিউটেবল চালনার জন্য একটি ওএস কার্নেল প্রয়োজন?


53

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

সুতরাং যখন আমরা কিছু সাধারণ উত্স কোডটি printf()সংকলন করি, কেবল একটি ফাংশন দিয়ে বলি এবং সংকলনটি এক্সিকিউটেবল মেশিন কোড তৈরি করে, এই মেশিন কোডের প্রতিটি নির্দেশ সরাসরি মেমরি থেকে কার্যকর করা হবে (একবার ওএস দ্বারা কোড মেমরিতে লোড হয়ে যাবে) বা হবে মেশিন কোডের প্রতিটি কমান্ডের এখনও ওএস (কার্নেল) সম্পাদন করতে হবে?

আমি একটি অনুরূপ প্রশ্ন পড়েছি । সংকলনের পরে উত্পন্ন মেশিন কোডটি সরাসরি সিপিইউয়ের নির্দেশনা কিনা বা সিপিইউয়ের জন্য সঠিক নির্দেশিকা তৈরি করতে আবার কার্নেলের মধ্য দিয়ে যেতে হবে কিনা তা এটি ব্যাখ্যা করে না। অর্থাৎ, মেশিন কোডটি মেমরিতে লোড হওয়ার পরে কী ঘটে? এটি কার্নেলের মধ্য দিয়ে যাবে বা সরাসরি প্রসেসরের সাথে কথা বলবে?


29
আপনি যদি আরডুইনোর জন্য কোড লিখছেন তবে আপনার কোনও ওএসের দরকার নেই।
স্টিবি করুন

12
printfএকটি দুর্দান্ত উদাহরণ নয়। এটি স্পষ্টভাবে সি স্পেক দ্বারা একটি ফাংশন হিসাবে সংজ্ঞায়িত করা হয়েছে যা কেবলমাত্র "হোস্টেড" বাস্তবায়নে উপলব্ধ (যার অর্থ কার্নেলের উপর দিয়ে চলছে "ফ্রিস্ট্যান্ডিং" এর বিপরীতে, যার প্রয়োজন নেই)। এবং বেশিরভাগ প্ল্যাটফর্মগুলিতে, printfআপনার দ্বারা সরবরাহ করা একটি ফাংশন libcযা আপনার পক্ষ থেকে একগুচ্ছ স্টাফ করে (যা অবশেষে স্টাডাউট প্রিন্ট করার জন্য একটি সিস্কেল অন্তর্ভুক্ত করে)। এটি কল করা থেকে সত্যই ভিন্ন নয় libvlc_media_list_add_mediaবা PyObject_GetAttrকিছু printfবাস্তবায়ন অতিরিক্ত অ-স্ট্যান্ডার্ড -lগুলি যুক্ত না করে লিংকেবলের গ্যারান্টিযুক্ত except
28:48 '

1
এটি বিদ্যমান! (না সম্বন্ধযুক্ত শুধু ভেবেছিলাম এটা ছিল শান্ত) erikyyy.de/invaders
Nonny আমেরিকার হরিণবিশেষ

9
এটি "এক্সিকিউটেবল", "কার্নেল", "রান", "দরকার", "টক টু" এবং "এড়িয়ে চলুন" পদগুলির আপনার সুনির্দিষ্ট সংজ্ঞা উপর নির্ভর করে। এই শর্তগুলির একটি সুনির্দিষ্ট সংজ্ঞা ব্যতীত প্রশ্নটি উত্তর-উত্তরযোগ্য নয়।
জার্গ ডব্লু মিট্টাগ

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

উত্তর:


86

যে কেউ এমন কোনও প্রোগ্রাম লিখেছেন যা কোনও ওএস ছাড়াই কার্যকর করে, আমি একটি নির্দিষ্ট উত্তর প্রদান করি।

একটি এক্সিকিউটেবল চালনার জন্য একটি ওএস কার্নেল প্রয়োজন?

এটি সেই প্রোগ্রামটি কীভাবে রচিত এবং নির্মিত হয়েছিল তার উপর নির্ভর করে।
আপনি এমন একটি প্রোগ্রাম লিখতে পারেন (ধরে নিবেন যে আপনার জ্ঞান আছে) যার জন্য কোনও OS এর প্রয়োজন হয় না।
এই জাতীয় প্রোগ্রামটি স্বতন্ত্র হিসাবে বর্ণনা করা হয় ।
বুট লোডার এবং ডায়াগনস্টিক প্রোগ্রামগুলি স্বতন্ত্র প্রোগ্রামগুলির জন্য সাধারণ ব্যবহার।

তবে কিছু হোস্ট ওএস এনভায়রনমেন্টে রচিত এবং নির্মিত সাধারণ প্রোগ্রামটি একই হোস্ট ওএস পরিবেশে নির্বাহ করতে ডিফল্ট হবে।
একটি স্বতন্ত্র প্রোগ্রাম লিখতে ও বানাতে খুব সুস্পষ্ট সিদ্ধান্ত এবং ক্রিয়াগুলির প্রয়োজন।


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

সঠিক।

সম্প্রতি আমি কার্নেলগুলি পড়ছিলাম এবং আমি জানতে পেরেছিলাম যে প্রোগ্রামগুলি হার্ডওয়্যারটিতে সরাসরি অ্যাক্সেস করতে পারে না তবে কার্নেলটি দিয়ে যেতে হবে।

এটি একটি সিপিইউ মোড দ্বারা আরোপিত একটি বিধিনিষেধ যা ওএস প্রোগ্রামগুলি সম্পাদন করতে ব্যবহার করে এবং সংকলক এবং গ্রন্থাগারগুলির মতো নির্দিষ্ট বিল্ড সরঞ্জামগুলি দ্বারা সুবিধাজনক।
এটি লিখিত প্রতিটি প্রোগ্রামের একটি স্বতন্ত্র সীমাবদ্ধতা নয়।


সুতরাং যখন আমরা কিছু সাধারণ উত্স কোড সংকলন করি, কেবল একটি প্রিন্টফ () ফাংশন দিয়ে বলি এবং সংকলনটি এক্সিকিউটেবল মেশিন কোড তৈরি করে, এই মেশিন কোডের প্রতিটি নির্দেশ সরাসরি মেমরি থেকে কার্যকর করা হবে (একবার ওএস দ্বারা কোড মেমরিতে লোড হয়ে গেলে) will ) বা মেশিন কোডের প্রতিটি কমান্ডের এখনও ওএস (কার্নেল) সম্পাদন করতে হবে?

প্রতিটি নির্দেশ সিপিইউ দ্বারা কার্যকর করা হয়।
অসমর্থিত বা অবৈধ (যেমন প্রক্রিয়াটির অপর্যাপ্ত সুযোগ রয়েছে) এমন একটি নির্দেশ তাত্ক্ষণিকভাবে ব্যতিক্রম ঘটায় এবং সিপিইউ পরিবর্তে এই অস্বাভাবিক অবস্থাটি পরিচালনা করার জন্য একটি রুটিন সম্পাদন করবে।

একটি printf, () ফাংশনের একটি উদাহরণ হিসাবে ব্যবহার করা উচিত নয় "সরল সোর্স কোড"
কোনও বস্তু-ভিত্তিক উচ্চ-স্তরের প্রোগ্রামিং ভাষা থেকে মেশিন কোডে অনুবাদটি আপনার বোঝার মতো তুচ্ছ নয়।
এবং তারপরে আপনি একটি রানটাইম লাইব্রেরি থেকে সবচেয়ে জটিল ফাংশনগুলির একটি চয়ন করেন যা ডেটা রূপান্তর এবং I / O সম্পাদন করে ।

নোট করুন যে আপনার প্রশ্নটি একটি ওএস (এবং একটি রানটাইম লাইব্রেরি) সহ পরিবেশকে স্থির করে।
একবার সিস্টেম বুট হয়ে গেলে, এবং ওএসকে কম্পিউটারের নিয়ন্ত্রণ দেওয়া হয়ে গেলে, কোনও প্রোগ্রাম কী করতে পারে তার উপর বিধিনিষেধ আরোপ করা হয় (উদাহরণস্বরূপ, ওএস দ্বারা I / O অবশ্যই সম্পাদন করা উচিত)।
আপনি যদি স্ট্যান্ডেলোন প্রোগ্রাম কার্যকর করার আশা করেন (অর্থাত্ ওএস ছাড়াই) তবে ওএস চালানোর জন্য আপনাকে অবশ্যই কম্পিউটার বুট করবেন না।


... মেশিন কোডটি মেমরিতে লোড হওয়ার পরে কী ঘটে?

এটি পরিবেশের উপর নির্ভর করে।

একটি স্বতন্ত্র প্রোগ্রামের জন্য, এটি সম্পাদন করা যেতে পারে, অর্থাৎ প্রোগ্রামের প্রারম্ভের ঠিকানায় লাফ দিয়ে নিয়ন্ত্রণ হস্তান্তর করা হয়।

ওএস দ্বারা লোড করা একটি প্রোগ্রামের জন্য, প্রোগ্রামটি নির্ভরশীল ভাগ করে নেওয়া লাইব্রেরিগুলির সাথে গতিশীলভাবে যুক্ত করতে হবে যা এটি নির্ভর করে। ওএসকে এই প্রক্রিয়াটি কার্যকর করার জন্য একটি নির্বাহের স্থান তৈরি করতে হবে।

এটি কার্নেলের মধ্য দিয়ে যাবে বা সরাসরি প্রসেসরের সাথে কথা বলবে?

মেশিন কোড সিপিইউ দ্বারা কার্যকর করা হয়।
তারা "কার্নেলের মধ্য দিয়ে যায় না " , তবে তারা "প্রসেসরের সাথে কথা বলে না"
মেশিন কোড (ওপ কোড এবং অপারেন্ডস সমন্বিত) সিপিইউ-র একটি নির্দেশ যা ডিকোড করা হয় এবং অপারেশন করা হয়।

সম্ভবত আপনার পরবর্তী বিষয়টি সিপিইউ মোডগুলি অনুসন্ধান করা উচিত ।


2
"আপনি যদি স্ট্যান্ডেলোন প্রোগ্রাম (যেমন কোনও ওএস ছাড়াই) চালানোর আশা করেন, তবে আপনাকে ওএস চালানোর জন্য কম্পিউটারটি বুট করতে হবে না।" পুরোপুরি সঠিক নয়। ডসের পরে অনেকগুলি ডস প্রোগ্রাম লোড করা হয়েছিল এবং তারপরে ডস পরিষেবাদিগুলি সম্পূর্ণ উপেক্ষা করা হয়েছিল (সরাসরি বিট-ব্যাং বা সম্ভবত সরাসরি বিআইওএস কল করে)। উইন 3.x একটি দুর্দান্ত উদাহরণ যা (কিছু আকর্ষণীয় কোণার ব্যতীত) ডস উপস্থিত ছিল তা উপেক্ষা করেছিল। Win95 / 98 / আমার পাশাপাশি এটি করেছে। ওএসগুলির অনেকগুলি উদাহরণ রয়েছে যা একক প্রোগ্রামগুলিকে সমর্থন করে, অনেকগুলি 8- / 16-বিট যুগের।
এরিক টাওয়ার 21

8
@ এরিক টাওয়ারস - "ডস" দ্বারা সম্ভবত আপনি এমএস-ডস বোঝাচ্ছেন (যেহেতু আমি ডস এমএস বা ইন্টেলের সাথে সম্পর্কিত নই)? আপনি এমন একটি "ওএস" উদ্ধৃত করছেন যা ওএস ধারণা এবং ডিজাইনে আমার 1970 এর কলেজ পাঠ্যপুস্তকের মানদণ্ডের সাথেও মেলে না। এমএস-ডস-এর উত্স সিপ / এম-তে সিয়াটল কম্পিউটার প্রোডাক্টগুলির মাধ্যমে খুঁজে পাওয়া যায়, যা এর লেখক গ্যারি কিল্ডাল স্পষ্টভাবে কোনও ওএস নামে অভিহিত হন না। FWIW একটি ওএস যা কোনও প্রোগ্রামকে সিস্টেমটি নিয়ন্ত্রণের অনুমতি দেয় সিস্টেম সংস্থান পরিচালনার প্রাথমিক কাজটিতে ব্যর্থ হয়েছে। "ওএস এর অনেকগুলি উদাহরণ রয়েছে যা স্ট্যান্ডেলোন প্রোগ্রামগুলিকে সমর্থন করে" - "সমর্থন" বা প্রতিরোধ করতে অক্ষম?
কাঠের


3
আমি জিসিসির "ফ্রিস্ট্যান্ডিং" পরিভাষা পছন্দ করি। ইংরেজি শব্দের কোডের জন্য সমস্ত সঠিক সংযোগ রয়েছে যা কোনও ওএস ছাড়াই চলে, সম্ভবত "স্ট্যান্ডেলোন" এর চেয়েও ভাল। উদাহরণস্বরূপ, আপনি gcc -O2 -ffreestanding my_kernel.c special_sauce.Sএমন একটি নির্বাহযোগ্য করতে সংকলন করতে পারেন যা কোনও সাধারণ লাইব্রেরি বা ওএস স্টাফ উপস্থিত থাকবে না। (অবশ্যই কোনও বুটলোডার লোড করতে চাইবে এমন কোনও ফাইলের ফর্ম্যাটে এটি কার্যকরভাবে লিঙ্ক করার জন্য আপনার একটি লিঙ্কার স্ক্রিপ্টের প্রয়োজন হবে!)
পিটার কর্ডেস

4
@ পিটারকর্ডস "স্ট্যান্ডলোন" হ'ল সি স্ট্যান্ডার্ডে ব্যবহৃত শব্দটি যা আইএমওকে কিছুটা অনুমোদনযোগ্য হিসাবে বিবেচনা করা যেতে পারে। বিকল্পভাবে একটি ভাল শব্দটিও "অ-হোস্টেড" (যেমন ওএস দ্বারা হোস্ট করা হয়েছে)
জান দর্নিয়াক

38

কার্নেলটি "কেবল" আরও কোড। এটি ঠিক যে কোডটি এমন একটি স্তর যা আপনার সিস্টেমের সর্বনিম্ন অংশ এবং প্রকৃত হার্ডওয়্যারের মধ্যে বাস করে।

এগুলির সবগুলি সরাসরি সিপিইউতে চলে আসে, আপনি কিছু করার জন্য কেবল এটির স্তরগুলির মাধ্যমে স্থানান্তরিত হন।

printfকমান্ডটি প্রথম স্থানে ব্যবহার করার জন্য আপনার প্রোগ্রামটির ঠিক একইভাবে কার্নেলের "প্রয়োজনীয়" প্রয়োজন হয় ।

আপনার প্রোগ্রামের আসল কোডটি সিপিইউতে চলে, তবে যে শাখাগুলি স্ক্রিনে কিছু মুদ্রণ করে তা যে শাখাগুলি সি printfফাংশনের কোড দিয়ে যায় বিভিন্ন অন্যান্য সিস্টেম এবং দোভাষী দ্বারা, যার প্রতিটি তাদের নিজস্ব প্রসেসিং ঠিক কীভাবে কাজ করে তা সম্পাদন করে hello world!আসলে আপনার পর্দায় মুদ্রিত হয়।

বলুন যে ডেস্কটপ উইন্ডো ম্যানেজারে আপনার একটি টার্মিনাল প্রোগ্রাম চলছে, আপনার কার্নেলটিতে চলছে যা আপনার হার্ডওয়্যারে চলছে।

আরও অনেক কিছু চলছে যা এটিকে সহজ রাখতে দেয় ...

  1. আপনার টার্মিনাল প্রোগ্রামে আপনি মুদ্রণের জন্য আপনার প্রোগ্রামটি চালান hello world!
  2. টার্মিনালটি দেখে যে প্রোগ্রামটি hello world!কনসোলে (সি আউটপুট রুটিনের মাধ্যমে) লিখেছিল
  3. টার্মিনাল প্রোগ্রামটি ডেস্কটপ উইন্ডো ম্যানেজারের কাছে গিয়ে বলেছিল যে "আমি আমার কাছে hello world!লেখা হয়েছি, আপনি কি এটি অবস্থানে রাখতে পারবেন x, yদয়া করে?"
  4. ডেস্কটপ উইন্ডো ম্যানেজারটি "আমার একটি প্রোগ্রাম আপনার গ্রাফিক্স ডিভাইসটিকে এই অবস্থানটিতে কিছু পাঠ্য স্থাপন করতে চায়, ডুডে পেতে চায়!" এর সাথে কার্নেল পর্যন্ত যায়!
  5. কার্নেলটি অনুরোধটি গ্রাফিক্স ডিভাইস ড্রাইভারের কাছে প্রেরণ করে যা গ্রাফিক্স কার্ডটি বুঝতে পারে এমনভাবে এটি বিন্যাস করে
  6. গ্রাফিক্স কার্ডটি কীভাবে সংযুক্ত রয়েছে তার উপর নির্ভর করে অন্যান্য কার্নেল ডিভাইস ড্রাইভারদের পিসিআই, যেমন সঠিক ডিভাইসটি নির্বাচিত হয়েছে তা নিশ্চিত করার মতো জিনিসগুলি পরিচালনা করা, এবং ডেটা প্রাসঙ্গিক সেতুর মধ্য দিয়ে যেতে পারে বা এমন তথ্য নিশ্চিত করার মতো শারীরিক ডিভাইস বাসগুলিতে ডেটা ধাক্কা দিতে বলা উচিত need পরিবর্তক
  7. হার্ডওয়্যার স্টাফ প্রদর্শন করে।

এটি কেবলমাত্র বিবরণের জন্য একটি বৃহত্তর ওভারসিম্প্লিফিকেশন। এখানে ড্রাগন হতে পারে।

কার্যকরীভাবে সবকিছু আপনি যে হার্ডওয়্যার অ্যাক্সেস প্রয়োজন না, এটা প্রদর্শন, ফাইল বা কিছু মেমরি ব্লক, বিট যে মত হতে হয়েছে কার্নেল মধ্যে কিছু ডিভাইস ড্রাইভার মধ্য দিয়ে যেতে কাজ করার ঠিক কিভাবে প্রাসঙ্গিক ডিভাইস সাথে কথা বলতে। এটি কোনও পিসিআই ব্রিজ ডিভাইসের শীর্ষে বসে থাকা স্যাটা হার্ড ডিস্ক নিয়ন্ত্রক ড্রাইভারের শীর্ষে থাকা একটি ফাইল সিস্টেম ড্রাইভার হোন।

কার্নেল এই সমস্ত ডিভাইসকে কীভাবে একসাথে বেঁধে রাখতে জানে এবং প্রোগ্রামগুলির জন্য কীভাবে এই সমস্ত জিনিস নিজেই করা যায় তা সম্পর্কে না জেনে কিছু করার জন্য তুলনামূলক সহজ ইন্টারফেস উপস্থাপন করে।

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

শেষ অবধি টার্মিনাল প্রোগ্রামটির অর্থ হল যে আপনার প্রোগ্রামটি কীভাবে উইন্ডো আঁকতে হবে, বা কার্নেল গ্রাফিক্স কার্ড ড্রাইভারের সাথে কীভাবে কথা বলতে হবে, বা স্ক্রিন বাফারগুলি প্রদর্শন করার সময় এবং বাস্তবতার সাথে সামঞ্জস্য করার ক্ষেত্রে জটিলতার সমস্ত কিছুই জানতে হবে না that প্রদর্শন করতে তথ্য লাইন।

কোডের স্তরগুলির উপর দিয়ে এটি সমস্ত স্তর দ্বারা পরিচালিত হয়।


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

প্রকৃতপক্ষে, আপনার টার্মিনাল প্রোগ্রামটি একই মেশিনে চালানো হবে না যে প্রোগ্রামটি এতে স্টাফ লিখছে।
জামেস্কেফ

যেহেতু এই প্রশ্নটিতে এটি স্পষ্টভাবে বলা দরকার - আপনি নোট করুন যে আমরা যখন প্রোগ্রামগুলি একে অপরের সাথে "কথা বলি" কথা বলি তখন তা রূপক হয়।
ব্যবহারকারী 253751

21

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

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

এছাড়াও, আধুনিক কম্পিউটারগুলি (বলার অপেক্ষা রাখে না, 1401) আই / ও ডিভাইসগুলির বিস্তৃত বিভিন্ন সংযোগকে সমর্থন করে, কেবলমাত্র আইবিএম আপনাকে পুরানো কালে বিক্রি করবে না। আপনার সংকলক এবং লিঙ্কার সম্ভবত সমস্ত সম্ভাবনার সম্পর্কে জানতে পারে না। উদাহরণস্বরূপ, আপনার কীবোর্ডটি PS / 2, বা USB এর মাধ্যমে ইন্টারফেস করা হতে পারে। ওএস আপনাকে ডিভাইস-নির্দিষ্ট "ডিভাইস ড্রাইভার" ইনস্টল করতে দেয় যা এই ডিভাইসগুলির সাথে কীভাবে কথা বলতে হয় তা জানে তবে ডিভাইস শ্রেণীর জন্য ওএসের কাছে একটি সাধারণ ইন্টারফেস উপস্থাপন করে। সুতরাং আপনার প্রোগ্রাম, এমনকি ওএস, কোনও ইউএসবি বনাম পিএস / 2 কীবোর্ড থেকে কীস্ট্রোক পেতে বা অ্যাক্সেসের জন্য আলাদা কিছু করতে হবে না, বলুন, কোনও স্থানীয় সাটা ডিস্ক বনাম ইউএসবি স্টোরেজ ডিভাইস বনাম স্টোরেজ যা কিছুটা বন্ধ রয়েছে say একটি নাস বা SAN এ। এই বিবরণগুলি ডিভাইস ড্রাইভাররা বিভিন্ন ডিভাইস নিয়ন্ত্রকের জন্য পরিচালনা করে।

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

সুতরাং একটি আধুনিক সাধারণ উদ্দেশ্যে পরিবেশে হ্যাঁ - আপনার সত্যই একটি ওএস দরকার। কিন্তু আজও রিয়েল-টাইম কন্ট্রোলারগুলির মতো কম্পিউটার রয়েছে যা প্রয়োজনের মতো জটিল নয়।

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


10

আমি মনে করি অনেক উত্তর প্রশ্নকে ভুল বোঝে, যা এটিকে ফোটায়:

একটি সংকলক আউটপুট মেশিন কোড। এই মেশিন কোডটি সরাসরি কোনও সিপিইউ দ্বারা কার্যকর করা হয়, বা এটি কার্নেল দ্বারা "ব্যাখ্যা" করা হয়?

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

  1. যখন কোনও ওএস উপস্থিত থাকে, সাধারণত অ্যাপ্লিকেশন প্রোগ্রামগুলি নির্দিষ্ট নির্দেশাবলী কার্যকর করতে বা নির্দিষ্ট সংস্থান অ্যাক্সেস করা থেকে বিরত থাকে। উদাহরণস্বরূপ, যদি কোনও অ্যাপ্লিকেশন কোনও নির্দেশনা কার্যকর করে যা সিস্টেম বিঘ্নিত টেবিলটি সংশোধন করে, সিপিইউ পরিবর্তে একটি ওএস ব্যতিক্রম হ্যান্ডলারের কাছে চলে যাবে যাতে আপত্তিজনক অ্যাপ্লিকেশনটি সমাপ্ত হয়। এছাড়াও, ডিভাইস মেমোরিতে সাধারণত অ্যাপ্লিকেশনগুলিকে পড়ার / লেখার অনুমতি নেই। (অর্থাৎ "হার্ডওয়্যারের সাথে কথা বলা"।) এই বিশেষ মেমরি অঞ্চলগুলিতে অ্যাক্সেস হ'ল গ্রাফিক্স কার্ড, নেটওয়ার্ক ইন্টারফেস, সিস্টেম ঘড়ি ইত্যাদির মতো ডিভাইসগুলির সাথে ওএস কীভাবে যোগাযোগ করে ic

  2. অ্যাপ্লিকেশনগুলিতে কোনও ওএসের যে সীমাবদ্ধতা রয়েছে সেগুলি সিপিইউর বিশেষ বৈশিষ্ট্যগুলি যেমন সুবিধাগুলি মোড, মেমরি সুরক্ষা, এবং বাধা দ্বারা অর্জন করা হয়। যদিও আপনি কোনও স্মার্টফোন বা পিসিতে যে কোনও সিপিইউ পাবেন এই বৈশিষ্ট্যগুলি রয়েছে, কিছু নির্দিষ্ট সিপিইউ থাকে না। এই সিপিইউগুলির সত্যিকারের বিশেষ কার্নেলগুলির প্রয়োজন রয়েছে যা পছন্দসই বৈশিষ্ট্যগুলি অর্জন করতে অ্যাপ্লিকেশন কোডটির "ব্যাখ্যা" করে। একটি খুব আকর্ষণীয় উদাহরণ হ'ল গিগাট্রন , এটি একটি 8-নির্দেশের কম্পিউটার যা আপনি চিপগুলি তৈরি করতে পারেন যা একটি 34-নির্দেশক কম্পিউটারকে অনুকরণ করে।

  3. কিছু ভাষা জাভা বাইকোড নামক কিছুতে "সংকলন" করে, যা আসলে মেশিন কোড নয়। যদিও অতীতে তাদের প্রোগ্রামগুলি চালনার জন্য ব্যাখ্যা করা হত, আজকাল জাস্ট-ইন-টাইম সংকলন বলে কিছু ব্যবহৃত হয় যা তারা সিপিইউতে সরাসরি মেশিন কোড হিসাবে চলতে পারে।

  4. ভার্চুয়াল মেশিনে চালিত সফ্টওয়্যারটির জন্য একটি হাইপারভাইজার নামে পরিচিত একটি প্রোগ্রাম দ্বারা এর মেশিন কোডটির "ব্যাখ্যা" করা দরকার । ভিএমগুলির বিপুল শিল্প চাহিদার কারণে, সিপিইউ নির্মাতারা অতিথি সিস্টেমের বেশিরভাগ নির্দেশকে সরাসরি সিপিইউ দ্বারা সম্পাদন করার জন্য তাদের সিপিইউগুলিতে ভিটিএক্সের মতো বৈশিষ্ট্য যুক্ত করেছে। যাইহোক, যখন ভার্চুয়াল মেশিনে একটি বেমানান সিপিইউ জন্য নকশা করা সফ্টওয়্যার চালনা করা হয় (উদাহরণস্বরূপ, একটি এনইএস অনুকরণকারী), মেশিন কোডটি ব্যাখ্যা করা দরকার।


1
যদিও জাভার বাইকোড সাধারণত মেশিন কোড নয়, এখনও জাভা প্রসেসরগুলির উপস্থিতি রয়েছে
রসান

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

5

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

সম্প্রতি আমি কার্নেলগুলি পড়ছিলাম এবং আমি জানতে পেরেছিলাম যে প্রোগ্রামগুলি সরাসরি হার্ডওয়্যার অ্যাক্সেস করতে পারে না তবে কার্নেলটি দিয়ে যেতে হবে।

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

এই মেশিন কোডে প্রতিটি নির্দেশ সরাসরি মেমরি থেকে কার্যকর করা হবে (একবার ওএসের মাধ্যমে মেমরিতে লোড হয়ে গেলে) বা মেশিন কোডের প্রতিটি কমান্ডের এখনও ওএস (কার্নেল) চালানো উচিত?

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

এটি ব্যাখ্যা করে না যে সংকলনের পরে উত্পন্ন মেশিন কোডটি সরাসরি সিপিইউয়ের নির্দেশনা বা সিপিইউয়ের সঠিক নির্দেশিকা তৈরি করতে আবার কার্নেলের মধ্য দিয়ে যেতে হবে?

সংকলনের পরে উত্পন্ন মেশিন কোডটি সরাসরি সিপিইউয়ের নির্দেশ an তাতে কোনও সন্দেহ নেই। আপনার কেবলমাত্র মনে রাখতে হবে, সংকলিত ফাইলের সমস্ত কোডই প্রকৃত মেশিনের / সিপিইউ কোড নয়। লিঙ্কার আপনার প্রোগ্রামটিকে এমন কিছু মেটা ডেটা দিয়ে জড়িয়ে রেখেছে যা কেবল কার্নেল ব্যাখ্যা করতে পারে, একটি সূত্র হিসাবে - আপনার প্রোগ্রামের সাথে কী করবেন।

মেশিন কোডটি মেমরিতে লোড হওয়ার পরে কী ঘটে? এটি কার্নেলের মধ্য দিয়ে যাবে বা সরাসরি প্রসেসরের সাথে কথা বলবে।

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

ঠিক আছে, মন্তব্যে শিখা রোধ করার জন্য - এটি সত্যই প্রশংসিত মডেল যা আমি আশা করি ওপিকে বেস বিষয়গুলি বুঝতে সহায়তা করবে, তবে এই উত্তরটির উন্নতি করার জন্য ভাল পরামর্শ স্বাগত suggestions


3

সুতরাং যখন আমরা একটি সাধারণ উত্স কোডটি কম্পাইল করি, কেবল একটি প্রিন্টফ () ফাংশন দিয়ে বলি এবং সংকলনটি এক্সিকিউটেবল মেশিন কোড তৈরি করে, এই মেশিন কোডটিতে প্রতিটি নির্দেশ সরাসরি মেমরি থেকে কার্যকর করা হবে (একবার কোড মেমরিতে লোড হয়ে গেলে) ওএস দ্বারা) বা মেশিন কোডের প্রতিটি কমান্ডের এখনও ওএস (কার্নেল) চালানো দরকার?

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

কার্নেল একটি প্রোগ্রামে প্রতিটি নির্দেশ প্রক্রিয়া করে না। এটি কেবল সিপিইউ ভাগ করে নেওয়ার জন্য চলমান প্রোগ্রামগুলির মধ্যে সিস্টেম কল করে এবং স্যুইচ করে।

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

ব্যবহারকারী-মোডে (কর্নেল ছাড়া) I / O করা সম্ভব নয়, আপনি যদি I / O পোর্টগুলি বা ডিভাইসগুলির জন্য নিবন্ধগুলি, বা ডিভাইসগুলির সাথে সংযুক্ত ঠিকানাগুলি (যে কোনও I / O সঞ্চালনের জন্য প্রয়োজনীয় উভয়) ব্যবহার করেন তবে এগুলি ট্রিগার করে ব্যতিক্রম একইভাবে।


এক্সিকিউটেবলের চালনার জন্য কোনও ওএস কার্নেলের দরকার?

এক্সিকিউটেবলের ধরণের উপর নির্ভর করে।

কার্নেলগুলি, র‌্যাম এবং হার্ডওয়্যারে ভাগ করে নেওয়া অ্যাক্সেসের মধ্যস্থতা ছাড়াও একটি লোডার ফাংশন সম্পাদন করে।

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

এই এক্সিকিউটেবলগুলি গ্রন্থাগারগুলিকেও উল্লেখ করে (উইন্ডোজ .dllবা লিনাক্স শেয়ার করা অবজেক্ট .soফাইলগুলি) - তাদের কোড অন্তর্ভুক্ত করতে হবে।

যদি আপনার সংকলকটি এমন কোনও ফাইল তৈরি করে যা বোঝায় কোনও অপারেটিং সিস্টেম লোডার দ্বারা প্রক্রিয়া করা হয় এবং সেই লোডারটি সেখানে না থাকে, এটি কাজ করবে না।

  • আপনি কি এমন কোড অন্তর্ভুক্ত করতে পারবেন যা লোডারটির কাজ করে?

অবশ্যই। কোনও মেটাডেটা প্রক্রিয়াজাত না করে আপনার কাঁচা কোডটি কোনওভাবে চালাতে আপনাকে ওএসকে বোঝাতে হবে। যদি আপনার কোড কার্নেল এপিআইগুলিতে কল করে তবে এটি কার্যকর হবে না।

  • যদি এটি কার্নেল এপিআইগুলিকে না কল করে?

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

  • যদি আপনি এটি কার্নেল মোড থেকে চালান।

তাহলে এটা কাজ করবে।



এটি পুরোপুরি সঠিক নয়। প্রয়োজন যে হার্ডওয়্যার এক্সেস কার্নেল মধ্য দিয়ে যেতে, বা যে এমনকি হতে একটি কার্নেল, একটি নকশা সিদ্ধান্ত অনেক সিস্টেমে আজ সম্মতিসূচক তৈরি করা হয় না, বরং অনেক সহজ সিস্টেমে নেতিবাচক (এমনকি আজও) তৈরি।
ক্রিস স্ট্রাটন

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

1
ম্যাকিনটোস সিস্টেম, ম্যাকোস এক্স এর আগে, একটি সাধারণ উদ্দেশ্য কম্পিউটারের একটি ওএস ছিল , সাধারণ উদ্দেশ্য সিপিইউতে চলত (68000 পরিবার, পাওয়ারপিসি) কয়েক দশক ধরে স্মৃতি সুরক্ষার জন্য সমর্থন করে (প্রথম 68000 ভিত্তিক কম্পিউটারগুলি বাদে) যা স্মরণ সুরক্ষা কখনও ব্যবহার করেনি : কোনও প্রোগ্রাম মেমরিতে যে কোনও কিছু অ্যাক্সেস করতে পারে।
কৌতূহলী

3

টিএল; ডিআর নং

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

তেমনি, সেগা জেনেসিসের জন্য গেমগুলির কাছে কল করার জন্য সেগা দ্বারা কোনও OS সরবরাহ করা হয়নি। আপনি খালি 68 টি এসেম্বলারের মধ্যে আপনার খেলাটি তৈরি করেছিলেন, সরাসরি খালি ধাতুতে লিখেছিলেন।

বা যেখানে আমি দাঁত কাটা, ইন্টেল 8051 এ এমবেডেড কাজ করে যাচ্ছি Again আবার আপনার যখন সমস্ত কিছু 27k ইপ্রম 2k * 8 পদচিহ্ন সহ থাকবে তখন আপনার অপারেটিং সিস্টেমের জন্য জায়গা নেই।

অবশ্যই এটি শব্দের প্রয়োগের খুব বিস্তৃত ব্যবহার অনুমান করে। একটি অলঙ্কৃত প্রশ্ন হিসাবে, নিজেকে জিজ্ঞাসা করা মূল্যবান যে কোনও আরডুইনো স্কেচ আসলে কোনও অ্যাপ্লিকেশন কিনা।


3

যদিও আমি বোঝাতে চাই না যে অন্যান্য উত্তরগুলি নিজেরাই সঠিক নয়, তারা অনেক বেশি বিবরণ সরবরাহ করে যা, আমি ভীত, এখনও আপনার কাছে খুব অস্পষ্ট।

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

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

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


2

পাওয়ারে আপ করার জন্য আপনার কম্পিউটারে চালিত BIOS হ'ল ROM এ এক্সিকিউটেবল কোড। এটিতে মেশিনের নির্দেশাবলী এবং ডেটা রয়েছে। এমন একটি সংকলক রয়েছে (বা এসেম্বলার) যা সোর্স কোড থেকে এই বিআইওএসকে একত্রিত করে। এটি একটি বিশেষ ক্ষেত্রে।

অন্যান্য বিশেষ ক্ষেত্রে বুটস্ট্র্যাপ প্রোগ্রাম অন্তর্ভুক্ত থাকে যা কার্নেল এবং কার্নেল নিজেই লোড করে। এই বিশেষ কেসগুলি সাধারণত সি ++ ব্যতীত অন্য কোনও ভাষায় কোড করা হয়।

সাধারণ ক্ষেত্রে, সংকলকটি এমন কোনও নির্দেশিকা তৈরি করিয়েছিল যা কার্নেল দ্বারা বা লাইব্রেরির রুটিন দ্বারা সরবরাহিত সিস্টেম পরিষেবাগুলি আহ্বান করে have এটি সংকলকটিকে অনেক বেশি হালকা করে তোলে। এটি সংকলিত কোডটিকে আরও হালকা করে তোলে।

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


2

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

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

এগুলির ফলে ব্যবহারকারী প্রোগ্রামগুলির সাহায্যকারী কোডটি প্রেরণের মানক পদ্ধতিতে পৃথক প্রোগ্রামগুলি থেকে এবং "অপারেটিং সিস্টেম" এ প্রচুর পরিমাণে সহায়ক কোডটি সরানো হয়েছিল।

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

মাইক্রোকার্নেলগুলি লিখিত হয়েছে যা একটি সম্পূর্ণ অপারেটিং সিস্টেম ব্যতীত প্রদত্ত প্রোগ্রামের জন্য প্রয়োজনীয় যা সরবরাহ করে তা সরবরাহ করে। বেশিরভাগ অন্যকে দেওয়ার সময় অভিজ্ঞ ব্যবহারকারীদের জন্য এর কিছু সুবিধা রয়েছে। আপনি এটি সম্পর্কে উইকিপিডিয়া পৃষ্ঠাটি পড়তে চাইতে পারেন - https://en.wikedia.org/wiki/Microkernel - আপনি যদি আরও জানতে চান।

আমি জাভা ভার্চুয়াল মেশিন চালাতে সক্ষম এমন একটি মাইক্রোকার্নেল নিয়ে পরীক্ষা-নিরীক্ষা করেছি, তবে পরে পেয়েছি যে এর মিষ্টি স্পটটি ডকার।


1

সাধারণ ডেস্কটপ ওএসে, কার্নেলটি নিজেই একটি এক্সিকিউটেবল। (উইন্ডোজ রয়েছে ntoskrnl.exe; লিনাক্স রয়েছে vmlinuxইত্যাদি) যদি কোন এক্সিকিউটেবল চালনার জন্য আপনার যদি কার্নেলের প্রয়োজন হয় তবে সেই ওএসগুলির অস্তিত্ব থাকতে পারে না।

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

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