অপারেটিং সিস্টেমগুলি কীভাবে চালিত হয় ... কোনও ওএস চালু না করে চালানো হয়?


167

আমি এখনই সত্যিই কৌতূহলী। আমি পাইথন প্রোগ্রামার, এবং এই প্রশ্নটি আমাকে কেবল বিচলিত করে: আপনি একটি ওএস লেখেন। কীভাবে চালাবেন? এটি কোনওভাবে চালাতে হবে, এবং সেই পথটি অন্য কোনও ওএসের মধ্যেই আছে?

কোনও ওএসে না রেখে কোনও অ্যাপ্লিকেশন কীভাবে চলতে পারে? আপনি কম্পিউটারকে কীভাবে চালাতে, বলুন, সি বলতে, এবং স্ক্রিনে এই আদেশগুলি কার্যকর করতে বলুন, যদি এতে কোনও ওএস চালু না থাকে?

এটির কি কোনও ইউএনআইএক্স কার্নেলের সাথে সম্পর্ক রয়েছে? যদি তা হয় তবে ইউনিক্স কার্নেল, বা সাধারণভাবে কার্নেলটি কী?

আমি নিশ্চিত ওএস এর চেয়ে জটিল, তবে এটি কীভাবে কাজ করবে?


14
আমি মোটামুটি নিশ্চিত যে এটি বায়োস এর জন্য যা - এটি একটি খুব ছোট ওএস যা বড় ওএসের বুটস্ট্র্যাপগুলি চালায়।
সেভেনসিট

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

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

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

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

উত্তর:


263

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

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

এটি বেশ অবিশ্বাস্য যে এটি আদৌ কার্যকর হয়!


108
চূড়ান্ত বাক্যটির জন্য +1।
একটি সিভিএন

39
একে "বুটিং" বলে একটি কারণ রয়েছে; শব্দটি "বুটস্ট্র্যাপিং" এর জন্য সংক্ষিপ্ত, যেমন "নিজের বুটস্ট্র্যাপ দ্বারা নিজেকে টেনে তোলা"।
কিথস

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


15
@ বিল্টহোর: যেখানে "অনেক সরল" দ্বারা আপনি অবশ্যই অবশ্যই বোঝাচ্ছেন "আরও জটিল"। এগুলি ব্যবহার করা সহজ
রাফেল শোয়েকার্ট

173

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

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

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

কোনও ওএসে না রেখে কোনও অ্যাপ্লিকেশন কীভাবে চলতে পারে?

এটি একটি বিশেষ ধরণের অ্যাপ্লিকেশন হওয়া প্রয়োজন (যেমন একটি অপারেটিং সিস্টেম) যা সরাসরি আই / ও হার্ডওয়্যার ইত্যাদির সাথে কীভাবে ইন্টারঅ্যাক্ট করতে হয় তা জানে etc.

আপনি কম্পিউটারকে কীভাবে চালাতে, বলুন, সি বলতে, এবং স্ক্রিনে এই আদেশগুলি কার্যকর করতে বলুন, যদি এতে কোনও ওএস চালু না থাকে?

আপনি না।

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

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

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

এটির কি কোনও ইউএনআইএক্স কার্নেলের সাথে সম্পর্ক রয়েছে? যদি তা হয় তবে ইউনিক্স কার্নেল, বা সাধারণভাবে কার্নেলটি কী?

হ্যাঁ এটা করে.

ইউএনআইএক্স কার্নেল ইউএনআইএক্স অপারেটিং সিস্টেমের মূল বিষয়। এটি ইউনিক্সের অংশ যা উপরে বর্ণিত সমস্ত "বেয়ার ধাতু" স্টাফ করে।

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

বাস্তবে কার্নেল / কোর এবং নন-কার্নেল / নন-কোরের মধ্যে পার্থক্য তার চেয়ে জটিল। কার্নেলের মধ্যে আসলে কী রয়েছে এবং কী হয় না তা নিয়ে অনেক বিতর্ক হয়েছে। (উদাহরণস্বরূপ মাইক্রো-কার্নেলটি দেখুন))


6
সংক্ষিপ্ত উত্তর। সম্ভব হলে আমি আপনাকে আরও বেশ কিছু আপোভটি দেব।
weberc2

7
এখানে প্রচুর ভাল উত্তর, তাই আমি এটি একটি মন্তব্য হিসাবে যুক্ত করব, যেহেতু এখন পর্যন্ত এটির কথা কেউ উল্লেখ করেনি: একটি ওএসের মূল বৈশিষ্ট্যগুলির মধ্যে একটি হ'ল একাধিক অ্যাপ্লিকেশনকে "একই সাথে" ব্যবহারকারীর দৃষ্টিকোণ থেকে চালিয়ে দেওয়া। প্রক্রিয়াগুলির সময়সূচী করার ক্ষমতা এবং প্রক্রিয়াগুলি একে অপরের আচরণের পরিবর্তন থেকে রক্ষা করার ক্ষমতা সাধারণত বৈশিষ্ট্যগুলি কেবলমাত্র একটি OS এ পাওয়া যায়, এবং ফার্মওয়্যার বা BIOS নয়।
শান বারবেউ

2
The idea of a "kernel" is that you try to separate the system software into core stuffএই শব্দটি kernelজার্মান থেকে Kernযার অর্থ কোর / নিউক্লিয়াস যার অর্থ ing
deed02392

1
এই উত্তরটি এখানে পছন্দ করুন কারণ এটি উল্লেখ করেছে যে এটি সংকলিত এবং লিঙ্কযুক্ত বাইনারি কোড সি নয় যা চলছে
ট্র্যাভিস পেসেটো

3
"সেই থেকে দূরে চলে যাওয়া পিসি ব্যবহারকারীদের কম স্মার্ট করে তোলে।" - কম স্মার্ট নয় ... কম কম্পিউটার শিক্ষিত। আপনি এটিও বলতে পারেন যে এটি পিসি ব্যবহারকারীর সংখ্যা বাড়িয়েছে।
স্টিফেন সি

62

শুরুতে সিপিইউতে কোনও শক্তি ছিল না।

এবং ম্যান বলেছিল "শক্তি থাকুক", এবং সিপিইউ প্রদত্ত ঠিকানা থেকে স্মৃতিতে পড়তে শুরু করেছিল এবং সেখানে উপস্থিত নির্দেশাবলী কার্যকর করেছিল। তারপরে পরেরটি এবং তারপরে শক্তি শেষ হওয়া পর্যন্ত।

এই বুট আপ ছিল। এর কাজটি ছিল পরিবেশটিতে অ্যাক্সেস পাওয়ার জন্য অন্য একটি সফ্টওয়্যার লোড করা, যেখানে মূল সফ্টওয়্যার ছিল এবং এটি লোড করা।

অবশেষে, একটি বন্ধুত্বপূর্ণ স্ক্রিন আপনাকে লগ ইন করার জন্য আমন্ত্রণ জানিয়েছে।


58
এই উত্তরটি christianity.stackexchange.com
Coomie

6
"প্রদত্ত ঠিকানা" কী তা কোথা থেকে আসে। এখানে চার্লস ডারউইন খেলার জন্য দুঃখিত।
মিডহাট

7
@ মিঃহাট - সিপিইউতে প্রথম ঠিকানাটি এনে দেওয়া হয় এটির ভিতরে হার্ডওয়ার্ড থাকে। সাধারণত এটি 0 হয়
মউভিচিয়েল

17
... এবং সপ্তম দিনে, লোকটি তার গেমগুলির সাথে বিশ্রাম নিয়েছে
কানাডিয়ান লুক

9
@ মউভিচিয়েল মেমরির ঠিকানাটি 0x7C00কোনও x86সামঞ্জস্যপূর্ণ আর্কিটেকচারের জন্য এবং প্রথমে বিআইওএস দ্বারা পূরণ করতে হয় যা সাধারণত যে কোনও বুটযোগ্য ডিভাইস পছন্দ করে তার প্রথম সেক্টরটি লোড করে দেয় ... চমৎকার উত্তর যদিও: -7
টোবিয়াস কেইনজলার

29

দেরি হওয়ার জন্য দুঃখিত, তবে আমি এটিকে বর্ণনা করব:

  • মাদারবোর্ড শক্তি পায়।

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

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

    - 25 অক্টোবর 5:20জেকারিয়ান

  • পাওয়ার সিপিইউ এবং র‍্যামকে দেওয়া হয়।

  • সিপিইউ লোড করে (এর অভ্যন্তরীণ তারের ভিত্তিতে) বিআইওএস থেকে ডেটা। কিছু মেশিনে, বিআইওএস র‌্যামের সাথে মিরর করা যেতে পারে এবং সেখান থেকে মৃত্যুদন্ড কার্যকর করা যেতে পারে তবে এটি বিরল আইআইআরসি।

    চালু করা হলে, x86- সামঞ্জস্যপূর্ণ সিপিইউগুলি ঠিকানা স্পেসে 0xFFFFFFF0 ঠিকানায় শুরু হয় ...

    -মিচিয়াল স্টিল, এক্সবক্স সুরক্ষা সিস্টেমে মাইক্রোসফ্ট তৈরি করা 17 টি ভুল ( সংরক্ষণাগার )

  • বিআইওএস হার্ডওয়্যার পোর্ট এবং মাদারবোর্ডের দ্বারা ডিস্ক এবং অন্যান্য হার্ডওয়্যার আইওয়ের জন্য ব্যবহৃত ঠিকানাগুলিতে কল করে এবং ডিস্কগুলি স্পিন আপ করে, অন্যান্য জিনিসগুলির মধ্যে র‌্যামের বাকী কাজ করে।

  • বিআইওএস কোড (সিএমওএস সেটিংসের মাধ্যমে, হার্ডওয়্যারে সঞ্চিত) প্রতিটি ডিস্কের বুট সেক্টরটি পড়ার জন্য নিম্ন-স্তরের আইডিই বা স্যাটা কমান্ড ব্যবহার করে, সিএমওএস দ্বারা নির্দিষ্ট একটি আদেশে বা কোনও ব্যবহারকারী একটি মেনু দিয়ে ওভাররাইড করে।

  • বুট সেক্টর সহ প্রথম ডিস্কটি তার বুট সেক্টরটি কার্যকর করে। এই বুট সেক্টরটি অ্যাসেমব্লিয়ায় ডিস্ক থেকে আরও ডেটা লোড করার, বৃহত্তর লোড করার NTLDR, পরবর্তী পর্যায়ে GRUBইত্যাদির জন্য নির্দেশনা রয়েছে Assembly

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

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


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

@ জেকেরিয়ান আপনার মনে কি আমি আমার মন্তব্যে আপনার মন্তব্যটি উদ্ধৃত করেছি?
ζ--

হেই, মোটেও না
জেকেরিয়ান

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

1
@ হান্নেস কার্পিলা আপডেট হয়েছে; যদিও এটি এখন প্রায় চার বছর পুরানো এবং আমি এই সাইটে আর সক্রিয় নেই।
ζ--

15

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

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

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


6
"interpiled"? আমি এই শব্দটি আগে কখনও শুনিনি।
ব্রায়ান ওকলে

3
বছরগুলি আগে এই শব্দটি প্রচুর 5 বা তার আগে ব্যবহৃত হয়েছিল, "আধুনিক" দোভাষীদের বর্ণনা করতে যাঁর পৃথক সংকলন পর্ব রয়েছে যা কার্যকর করা থেকে পৃথক। এই শব্দটি কোথাও বেঁচে থাকলে কোনও ধারণা নেই ;-)
জোহানেস

1
"ninterpreted"? আমি এই শব্দটি আগে কখনও শুনিনি।
কোল জনসন

12

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

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

সুতরাং, ওএস হ'ল মেশিন কোড যা একটি পরিচিত স্থানে বিদ্যমান এবং যা হার্ডওয়্যারের সাথে সরাসরি ইন্টারেক্ট করতে পারে।


1
+1 আমি মনে করি এটি সেরা উত্তর। বিমূর্ততার ক্ষেত্রে আমি মনে করি আপনি সঠিক স্তরে এটি পেরেক করছেন।
প্রীত সংঘ

6

আপনার প্রশ্নের উত্তরের জন্য দেশীয় (সিপিইউ জন্য) কোডটি কেমন দেখাচ্ছে এবং এটি সিপিইউ দ্বারা কীভাবে ব্যাখ্যা করা হয় তার জ্ঞান প্রয়োজন।

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

এখন এটি সম্পর্কে চিন্তা করুন: আপনার এই নেটিভ কোডটি কার্যকর করতে কোনও OS এর সত্যই দরকার নেই! আপনার যা দরকার তা হ'ল এই কোডটি মেমরিতে লোড করা এবং এটি সেখানে থাকা সিপিইউকে জানান এবং আপনি চান এটি কার্যকর করা হোক। যদিও এর দ্বারা খুব বেশি উদ্বিগ্ন হবেন না। এটিই বিআইওএস-এর কাজ করা উচিত worry তারপরে সিপিইউ আপনার কোডের এই এক সেক্টর (512 বি) চালানো শুরু করবে। এবং আপনি যা কল্পনা করতে পারেন! ওএস থেকে অবশ্যই কোনও সমর্থন ছাড়াই। কারণ আপনি অপারেটিং সিস্টেম। শীতল হাহ? স্ট্যান্ডার্ড লাইব্রেরি নেই, কোনও বুস্ট নেই, অজগর নেই, প্রোগ্রাম নেই, ড্রাইভার নেই! আপনাকে নিজেরাই লিখতে হবে।

এবং আপনি কিভাবে হার্ডওয়ারের সাথে যোগাযোগ করবেন? ভাল, আপনার দুটি পছন্দ আছে:

  1. আপনি "রিয়েল মোড" এর ভিতরে থাকেন - সিপিইউ এক্সিকিউশন মোডটি কেবল 1 এমবি মেমরির (এবং আরও কম) দিয়ে থাকে, সিপিইউ এক্সটেনশন, মেমরি সুরক্ষা, মাল্টিটাস্কিংয়ের মতো কোনও উন্নত সিপিইউ বৈশিষ্ট্য নেই; 16-বিট এক্সিকিউটেবল কোড, প্রাচীন অ্যাড্রেসিং মোড ... তবে সাধারণ স্ক্রিন আউটপুট, কীবোর্ড সমর্থন, ডিস্ক আই / ও এবং পাওয়ার ম্যানেজমেন্ট সহ বিআইওএস দ্বারা সরবরাহ করা কিছু রুটিন রয়েছে। এক কথায়, আপনি এমএস-ডস এবং 16-বিট সিপিইউর সময়ে ফিরে এসেছেন।
  2. আপনার সিপিইউতে থাকা সমস্ত বৈশিষ্ট্য, আপনি ইনস্টল করা সমস্ত মেমরি এবং এগুলি দিয়ে আপনি "সুরক্ষিত মোড" এর নিচে যান। তবে সুরক্ষিত মোডে আপনি সম্পূর্ণ একা এবং আপনাকে নিজের দ্বারা সমস্ত কিছুই করতে হবে (এবং আপনি "ইন" এবং "আউট" নির্দেশাবলী I / O পোর্টগুলিতে ইনপুট / আউটপুট ডেটা এবং বিঘ্ন ব্যবহার করে যোগাযোগ করেন And এবং মেমরি-ম্যাপযুক্ত আই ইনপুট / আউটপুট)। উইন্ডোজ 95 এবং খুব প্রথম লিনাক্স এই বিকল্পটি বেছে নেওয়ার পর থেকে আমাকে কি প্রতিটি ওএস বলতে হবে?

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

আরও ভাল বোঝার জন্য আমি আপনাকে একটি পরামর্শ দিতে পারি: নিজের ওএস লেখার চেষ্টা করুন। এমনকি যদি এটি পর্দায় "হ্যালো ওয়ার্ল্ড" লিখতে চলেছে।


3

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

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

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

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

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

ওএস কোড সাধারণত সি এবং অ্যাসেমব্লির মিশ্রণে লেখা হয়। ওএস কার্নেলের জন্য প্রথম কোডটি সম্ভবত সর্বদা সমাবেশে থাকে এবং স্ট্যাক সেটআপ করার মতো জিনিসগুলি করে, যা সি কোড নির্ভর করে এবং তারপরে একটি সি ফাংশন কল করে। অন্য হাতে লিখিত সমাবেশটিও সেখানে উপস্থিত থাকবে কারণ কোনও অপারেশন যা কোনও ওএসের করা প্রয়োজন তা প্রায়শই সি-তে প্রকাশযোগ্য হয় না (যেমন প্রসঙ্গের স্যুইচিং / অদলবদল স্ট্যাকের মতো)। বেশিরভাগ সি প্রোগ্রামগুলি যে স্ট্যান্ডার্ড লাইব্রেরিগুলি ব্যবহার করে তা নির্ভর করে না এবং এটি প্রত্যাশা না করে যে প্রায়শই নির্দিষ্ট পতাকাগুলি সি সংকলকের কাছে প্রেরণ করতে হয়int main(int argc, char *argv[])প্রোগ্রামে। অতিরিক্ত অ্যাপ্লিকেশন প্রোগ্রামাররা কখনই ব্যবহার করে না এমন অতিরিক্ত লিঙ্কার বিকল্পগুলি ব্যবহার করতে হবে। এগুলি কার্নেল প্রোগ্রামটি কোনও নির্দিষ্ট ঠিকানায় লোড হওয়ার বা কিছু নির্দিষ্ট স্থানে বাহ্যিক ভেরিয়েবলের মতো দেখতে সেট আপ করার আশা করতে পারে যদিও সেই ভেরিয়েবলগুলি কোনও সি কোডে কখনই ঘোষণা করা হয়নি (এটি মেমরিযুক্ত I / O মেমরির জন্য কার্যকর বা অন্যান্য বিশেষ মেমরি অবস্থান)।

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


3

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

পিসি-ডস বা এমএস-ডস চলমান মূল আইবিএম পিসি "ওএস" এর পূর্বের স্টাইলের উদাহরণ হতে পারে। যদি কোনও অ্যাপ্লিকেশন স্ক্রিনে একটি অক্ষর প্রদর্শন করতে চায় তবে এটি করার কয়েকটি উপায় থাকতে পারে। এটি রুটিনকে কল করতে পারে যা এমএস-ডসকে এটি "স্ট্যান্ডার্ড আউটপুট" এ প্রেরণ করতে বলবে। এটি যদি করে, এমএস-ডস আউটপুট পুনঃনির্দেশিত হচ্ছে কিনা তা যাচাই করবে এবং যদি তা না হয় তবে এটি রম-এ সংরক্ষিত একটি রুটিনকে ডাকবে (আইবিএমকে বেসিক ইনপুট / আউটপুট সিস্টেম নামে পরিচিত) যা একটি অক্ষর প্রদর্শন করবে কার্সার অবস্থান এবং কার্সারটি সরান ("টেলি টাইপ লিখুন")। সেই BIOS রুটিনটি 0xB800: 0 থেকে 0xB800: 3999 রেঞ্জের কোথাও কোথাও একজোড়া বাইট সংরক্ষণ করবে; কালার গ্রাফিক্স অ্যাডাপ্টারের হার্ডওয়্যার বারবার সেই ব্যাপ্তির মধ্যে জোড়া বাইট আনবে, অক্ষরের আকৃতি নির্বাচন করতে প্রতিটি জোড়ার প্রথম বাইট ব্যবহার করে এবং দ্বিতীয়টি অগ্রভাগ এবং পটভূমির রঙ নির্বাচন করতে। বাইটগুলি লাল এবং সবুজ এবং নীল সংকেতগুলিতে আনা হয় এবং প্রক্রিয়া করা হয়, এমন একটি ক্রম যা একটি স্পষ্ট পাঠ্য প্রদর্শন প্রদর্শন করে।

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

এখানে একটি মূল বিষয়টি হ'ল ডস এবং বিআইওএস যখন প্রদর্শনে পাঠ্য আউটপুট দেওয়ার একটি মাধ্যম সরবরাহ করেছিল, তেমন দক্ষতা সম্পর্কে বিশেষত "জাদুকরী" কিছুই ছিল না। একটি অ্যাপ্লিকেশন যা ডিসপ্লেতে পাঠ্য লিখতে চেয়েছিল ঠিক তেমন কার্যকরভাবে কার্যকর করতে পারে, অন্তত যদি ডিসপ্লে হার্ডওয়ারটি অ্যাপ্লিকেশন প্রত্যাশার মতো কাজ করে (যদি কেউ মনোক্রোম ডিসপ্লে অ্যাডাপ্টার ইনস্টল করে থাকে, যা সিজিএর মতো ছিল তবে এর চরিত্রের স্মৃতি রয়েছে) 0xB000: 0000-0xB000: 3999) এ অবস্থিত, BIOS স্বয়ংক্রিয়ভাবে অক্ষরগুলি আউটপুট দেয়; এমডিএ বা সিজিএর সাথে কাজ করার জন্য প্রোগ্রাম করা একটি অ্যাপ্লিকেশনও এটি করতে পারে, তবে কেবলমাত্র সিজিএর জন্য প্রোগ্রাম করা একটি অ্যাপ্লিকেশন এমডিএর পক্ষে সম্পূর্ণ অকেজো হবে)।

নতুন সিস্টেমে জিনিসগুলি কিছুটা আলাদা। প্রসেসরের বিভিন্ন "সুবিধার্থে" মোড রয়েছে। এগুলি সর্বাধিক সুবিধাযুক্ত মোডে শুরু হয়, যেখানে কোডটিকে যে কোনও কিছু করার অনুমতি দেওয়া হয়। এরপরে তারা একটি সীমাবদ্ধ মোডে স্যুইচ করতে পারে, যেখানে কেবলমাত্র নির্বাচিত মেমরির রেঞ্জ বা I / O সুবিধা উপলব্ধ। কোডটি কোনও সীমাবদ্ধ মোড থেকে সরাসরি প্রিভিলেজ মোডে ফিরে যেতে পারে না, তবে প্রসেসর সুবিধাযুক্ত-মোড এন্ট্রি পয়েন্টগুলি সংজ্ঞায়িত করেছে এবং সীমাবদ্ধ-মোড কোড প্রসেসরকে সুবিধাবঞ্চিত মোডের এন্ট্রি পয়েন্টগুলির মধ্যে একটিতে চলমান কোড শুরু করতে বলতে পারে। তদতিরিক্ত, বেশ কয়েকটি ক্রিয়াকলাপের সাথে যুক্ত বিশেষাধিকার-মোড এন্ট্রি পয়েন্ট রয়েছে যা সীমাবদ্ধ মোডে নিষিদ্ধ হবে। ধরুন, উদাহরণস্বরূপ, যে কেউ এক সাথে একাধিক এমএস-ডস অ্যাপ্লিকেশন চালাতে চেয়েছিল যার প্রত্যেকটির নিজস্ব স্ক্রিন রয়েছে। যদি অ্যাপ্লিকেশনগুলি 0xB800: 0 তে সরাসরি ডিসপ্লে কন্ট্রোলারে লিখতে পারে তবে কোনও অ্যাপ্লিকেশনটিকে অন্য অ্যাপ্লিকেশনটির স্ক্রিনটি ওভাররাইট করা থেকে বিরত করার কোনও উপায় থাকবে না। অন্যদিকে, কোনও ওএস অ্যাপ্লিকেশনটি সীমাবদ্ধ মোডে চালাতে পারে এবং ডিসপ্লে মেমোরিতে যে কোনও অ্যাক্সেসে আটকাতে পারে; যদি এটি আবিষ্কার করে যে একটি অ্যাপ্লিকেশন যা "ব্যাকগ্রাউন্ডে" থাকার কথা ছিল 0xB800: 160 লেখার চেষ্টা করছে, এটি ডেটাটিকে কিছু স্মৃতিতে সঞ্চয় করতে পারে যা এটি ব্যাকগ্রাউন্ড-অ্যাপ্লিকেশন স্ক্রিন বাফার হিসাবে আলাদা করে রেখেছিল। যদি সেই অ্যাপ্লিকেশনটি পরে ফোরগ্রাউন্ডে স্যুইচ করা হয়, তবে বাফারটি আসল পর্দায় অনুলিপি করা যেতে পারে। কোনও ওএস অ্যাপ্লিকেশনটি সীমাবদ্ধ মোডে চালাতে পারে এবং ডিসপ্লে মেমোরিতে যে কোনও অ্যাক্সেসে আটকাতে পারে; যদি এটি আবিষ্কার করে যে একটি অ্যাপ্লিকেশন যা "ব্যাকগ্রাউন্ডে" থাকার কথা ছিল 0xB800: 160 লেখার চেষ্টা করছে, এটি ডেটাটিকে কিছু স্মৃতিতে সঞ্চয় করতে পারে যা এটি ব্যাকগ্রাউন্ড-অ্যাপ্লিকেশন স্ক্রিন বাফার হিসাবে আলাদা করে রেখেছিল। যদি সেই অ্যাপ্লিকেশনটি পরে ফোরগ্রাউন্ডে স্যুইচ করা হয়, তবে বাফারটি আসল পর্দায় অনুলিপি করা যেতে পারে। কোনও ওএস অ্যাপ্লিকেশনটি সীমাবদ্ধ মোডে চালাতে পারে এবং ডিসপ্লে মেমোরিতে যে কোনও অ্যাক্সেসে আটকাতে পারে; যদি এটি আবিষ্কার করে যে একটি অ্যাপ্লিকেশন যা "ব্যাকগ্রাউন্ডে" থাকার কথা ছিল 0xB800: 160 লেখার চেষ্টা করছে, এটি ডেটাটিকে কিছু স্মৃতিতে সঞ্চয় করতে পারে যা এটি ব্যাকগ্রাউন্ড-অ্যাপ্লিকেশন স্ক্রিন বাফার হিসাবে আলাদা করে রেখেছিল। যদি সেই অ্যাপ্লিকেশনটি পরে ফোরগ্রাউন্ডে স্যুইচ করা হয়, তবে বাফারটি আসল পর্দায় অনুলিপি করা যেতে পারে।

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


2

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

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

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


1

আপনি একটি ওএস লিখুন। এটি কোনওভাবে চালাতে হবে, এবং সেই পথটি অন্য কোনও ওএসের মধ্যেই আছে?

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

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


এটি কীভাবে কাজ করে তার খুব সরল উদাহরণ দেওয়া:

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

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

অপারেটিং সিস্টেমটি হার্ডওয়্যারকে যেভাবে করতে বলে, সেটি অনেকটাই পরিবর্তিত হয়। অপারেটিং সিস্টেমের একটি কাজ হ'ল এই পার্থক্যগুলি থেকে অ্যাপ্লিকেশনগুলি রক্ষা করা। ডিস্ক উদাহরণস্বরূপ, এক ধরণের হার্ডওয়্যারে, অপারেটিং সিস্টেমকে ডিস্ক এবং সেক্টর নম্বরটি I / O পোর্টে লিখতে হবে এবং তারপরে বাইটগুলি একে একে পৃথক I / O পোর্টে লিখতে হবে। অন্য ধরণের হার্ডওয়্যারে, অপারেটিং সিস্টেমটিকে একটি সেক্টরের পুরো 512 বাইট মেমরির একটি অঞ্চলে অনুলিপি করতে হবে, মেমরির সেই জায়গার অবস্থানটি একটি বিশেষ মেমরির স্থানে লিখতে হবে এবং ডিস্ক এবং সেক্টরের নম্বরটি অন্য কোনওটিতে লিখতে হবে বিশেষ মেমরি অবস্থান।


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

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


1

চলমান উদাহরণ

প্রযুক্তিগতভাবে, একটি প্রোগ্রাম যা ওএস ছাড়াই চলে, একটি ওএস। সুতরাং আসুন দেখুন কীভাবে কিছু বিয়োগী হ্যালো ওয়ার্ল্ড ওএস তৈরি এবং পরিচালনা করতে হয়।

নীচের সমস্ত উদাহরণের কোডটি এই গিটহাব রেপোতে উপস্থিত রয়েছে ।

বুট সেক্টর

X86-এ, আপনি যে সহজ এবং নিম্নতম স্তরের কাজটি করতে পারেন তা হ'ল মাস্টার বুট সেক্টর (এমবিআর) তৈরি করা , যা এক ধরণের বুট সেক্টর , এবং তারপরে এটিকে একটি ডিস্কে ইনস্টল করা।

এখানে আমরা একটি printfকল দিয়ে একটি তৈরি করি :

printf '\364%509s\125\252' > main.img
sudo apt-get install qemu-system-x86
qemu-system-x86_64 -hda main.img

ফলাফল:

এখানে চিত্র বর্ণনা লিখুন

উবুন্টু 18.04, কিউএমইউ 2.11.1 এ পরীক্ষিত।

main.img নিম্নলিখিত রয়েছে:

  • \364অক্টাল == 0xf4হেক্সে: একটি hltনির্দেশিকার জন্য এনকোডিং , যা সিপিইউকে কাজ বন্ধ করতে বলে।

    অতএব আমাদের প্রোগ্রামটি কিছু করবে না: কেবল শুরু করুন এবং বন্ধ করুন।

    আমরা অষ্টাল ব্যবহার করি কারণ \xহেক্স নম্বরগুলি পসিক্স দ্বারা নির্দিষ্ট করা হয়নি।

    আমরা সহজেই এই এনকোডিংটি পেতে পারি:

    echo hlt > a.asm
    nasm -f bin a.asm
    hd a
    

    তবে 0xf4এনকোডিং অবশ্যই ইন্টেল ম্যানুয়ালটিতে নথিভুক্ত করা হয়।

  • %509s509 স্পেস উত্পাদন। 510 বাইট না হওয়া পর্যন্ত ফাইলটি পূরণ করা দরকার।

  • \125\252ইন অষ্টাল == এর 0x55পরে 0xaa: হার্ডওয়্যার দ্বারা প্রয়োজনীয় ম্যাজিক বাইট। সেগুলি অবশ্যই 511 এবং 512 বাইট হতে হবে।

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

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

আসল হার্ডওয়্যার চালান

অনুকরণকারী মজাদার, তবে হার্ডওয়্যারই আসল চুক্তি।

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

সাধারণ ল্যাপটপের জন্য আপনাকে এমন কিছু করতে হবে:

  • ছবিটি একটি ইউএসবি স্টিকে পোড়াও (আপনার ডেটা ধ্বংস করবে!):

    sudo dd if=main.img of=/dev/sdX
    
  • একটি কম্পিউটারে ইউএসবি প্লাগ করুন

  • এটি চালু কর

  • এটি ইউএসবি থেকে বুট করতে বলুন।

    এর অর্থ হার্ডডিস্কের আগে ফার্মওয়্যারটিকে ইউএসবি বাছাই করা।

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

    প্রায়শই এই মেনুগুলিতে অনুসন্ধানের অর্ডারটি কনফিগার করা সম্ভব।

উদাহরণস্বরূপ, আমার পুরানো লেনোভো থিংকপ্যাড টি 430, ইউইএফআই বিআইওএস 1.16 এ, আমি দেখতে পাচ্ছি:

ওহে বিশ্ব

এখন যেহেতু আমরা একটি ন্যূনতম প্রোগ্রাম তৈরি করেছি, আসুন হ্যালো ওয়ার্ল্ডে চলে আসি।

সুস্পষ্ট প্রশ্ন হ'ল আইও কিভাবে করবেন? কয়েকটি বিকল্প:

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

    উত্স

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

    এটি সত্যিই লজ্জাজনক, যেহেতু যেমন ইন্টারফেসগুলি উদাহরণস্বরূপ লিনাক্স কার্নেলটি ডিবাগ করতে সত্যিই দরকারী ।

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

X86 এ এটি সহজ হওয়ায় এখানে আমরা একটি বায়োএস উদাহরণ করব। তবে মনে রাখবেন যে এটি সবচেয়ে শক্তিশালী পদ্ধতি নয়।

main.S

.code16
    mov $msg, %si
    mov $0x0e, %ah
loop:
    lodsb
    or %al, %al
    jz halt
    int $0x10
    jmp loop
halt:
    hlt
msg:
    .asciz "hello world"

link.ld

SECTIONS
{
    . = 0x7c00;
    .text :
    {
        __start = .;
        *(.text)
        . = 0x1FE;
        SHORT(0xAA55)
    }
}

জমা দিন এবং এর সাথে লিঙ্ক করুন:

gcc -c -g -o main.o main.S
ld --oformat binary -o main.img -T linker.ld main.o

ফলাফল:

এখানে চিত্র বর্ণনা লিখুন

পরীক্ষিত: লেনোভো থিঙ্কপ্যাড টি 430, ইউইএফআই বিআইওএস 1.16। একটি উবুন্টু 18.04 হোস্টে ডিস্ক উত্পন্ন।

স্ট্যান্ডার্ড ইউজারল্যান্ড অ্যাসেমব্লিং নির্দেশাবলী ছাড়াও আমাদের রয়েছে:

  • .code16: জিএএসকে 16-বিট কোড আউটপুট করতে বলে

  • cli: সফ্টওয়্যার বাধা অক্ষম করুন। এগুলি প্রসেসরের পরে আবার চালানো শুরু করতে পারেhlt

  • int $0x10: একটি বায়োএস কল করে। একে একে একে অক্ষর মুদ্রণ করে।

গুরুত্বপূর্ণ লিঙ্ক পতাকাগুলি হল:

  • --oformat binary: আউটপুট কাঁচা বাইনারি সমাবেশ কোড, কোনও ELF ফাইলের মধ্যে এটি মোটা করবেন না যেমন নিয়মিত ইউজারল্যান্ড এক্সিকিউটেবলের ক্ষেত্রে হয়।

সমাবেশের পরিবর্তে সি ব্যবহার করুন

যেহেতু সি সমাবেশে কম্পাইল করে, প্রমিত লাইব্রেরি ছাড়া সি ব্যবহার করা বেশ সহজ, আপনার মূলত প্রয়োজন:

  • জিনিসগুলিকে সঠিক জায়গায় রাখার জন্য একটি লিঙ্কার স্ক্রিপ্ট
  • পতাকাগুলি যা জিসিসিকে স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার না করতে বলে tell
  • একটি ক্ষুদ্র সমাবেশে প্রবেশের বিন্দু যা প্রয়োজনীয় সি রাজ্যের জন্য নির্দিষ্ট mainকরে:
    • স্ট্যাক
    • শূন্য আউট বিএসএস

টোডো: লিট করুন তাই গিটহাবের কিছু x86 উদাহরণ। আমি তৈরি করেছি এমন একটি আর্ম এখানে

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

লিনাক্সের মতো একটি পূর্ণ বর্ধিত ওএসে না গিয়ে কয়েকটি সম্ভাবনার মধ্যে রয়েছে:

  • Newlib

    বিস্তারিত উদাহরণ এখানে: https : // elect इलेक्ट्रॉनिक्स. stackexchange.com/questions/223929/c-standard-libraries-on-bare-metal/223931

    নিউলিবে আপনাকে নিজেরাই সিস্কলগুলি প্রয়োগ করতে হবে তবে আপনি একটি খুব ন্যূনতম সিস্টেম পেয়েছেন এবং সেগুলি কার্যকর করা খুব সহজ।

    উদাহরণস্বরূপ, আপনি printfইউআরটি বা এআরএম সিস্টেমে পুনর্নির্দেশ করতে পারেন , বা সেমিহোস্টিংয়ের মাধ্যমে প্রয়োগ exit()করতে পারেন

  • এম্বেড করা অপারেটিং সিস্টেমগুলি যেমন ফ্রিআরটিওএস এবং জেফির

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

    এগুলি প্রাক-বাস্তবায়িত নিউলিবের এক ধরণের হিসাবে দেখা যেতে পারে।

এআরএম

এআরএম-এ, সাধারণ ধারণাগুলি একই রকম are আমি আপলোড করেছি:

রাস্পবেরি পাই এর জন্য, https://github.com/dwelch67/raspberrypi আজ উপলব্ধ সর্বাধিক জনপ্রিয় টিউটোরিয়াল বলে মনে হচ্ছে।

X86 থেকে কিছু পার্থক্য অন্তর্ভুক্ত:

  • আই সরাসরি যাদু ঠিকানায় লিখে সম্পন্ন করা হয়, কোন inএবং outনির্দেশাবলী।

    একে মেমরি ম্যাপযুক্ত আইও বলে

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

    এটি একটি ভাল জিনিস, কারণ এটি ফার্মওয়্যার আপডেট করা আরও স্বচ্ছ করে তোলে।

ফার্মওয়্যার

সত্যিকার অর্থে, আপনার বুট সেক্টরটি প্রথম সফ্টওয়্যার নয় যা সিস্টেমের সিপিইউতে চলে।

আসলে যা প্রথমে চলে তা হ'ল তথাকথিত ফার্মওয়্যার , যা একটি সফ্টওয়্যার:

  • হার্ডওয়্যার নির্মাতারা তৈরি
  • সাধারণত বন্ধ উত্স তবে সম্ভবত সি-ভিত্তিক
  • কেবল পঠনযোগ্য মেমরির মধ্যে সঞ্চিত এবং তাই বিক্রেতার সম্মতি ছাড়াই সংশোধন করা শক্ত / অসম্ভব।

সুপরিচিত ফার্মওয়্যারগুলির মধ্যে রয়েছে:

  • BIOS : পুরানো সমস্ত-বর্তমান x86 ফার্মওয়্যার। সিবিআইওএস হল কিউইএমইউ দ্বারা ব্যবহৃত ডিফল্ট ওপেন সোর্স বাস্তবায়ন।
  • ইউইএফআই : বিআইওএস উত্তরসূরি, আরও উন্নতমানের, তবে আরও সক্ষম, এবং অবিশ্বাস্যরূপে ফুলে গেছে।
  • কোরবুট : মহৎ ক্রস খিলান উন্মুক্ত উত্স প্রচেষ্টা

ফার্মওয়্যার এর মতো কাজ করে:

  • প্রতিটি হার্ড ডিস্ক, ইউএসবি, নেটওয়ার্ক ইত্যাদি লুপ করুন যতক্ষণ না আপনি বুটযোগ্য কিছু খুঁজে পান something

    যখন আমরা কিউইইএমইউ পরিচালনা করি তখন -hdaবলে যে main.imgএটি একটি হার্ডডিস্কটি হার্ডওয়ারের সাথে যুক্ত এবং

    hda প্রথম চেষ্টা করা হয় এবং এটি ব্যবহার করা হয়।

  • প্রথম 512 বাইটটি র‌্যামের মেমরি ঠিকানায় লোড করুন 0x7c00, সিপিইউর আরআইপি রাখুন, এবং এটি চালিয়ে দিন

  • ডিসপ্লেতে বুট মেনু বা BIOS মুদ্রণ কলগুলির মতো জিনিসগুলি দেখান

ফার্মওয়্যার ওএস-এর মতো কার্যকারিতা দেয় যা বেশিরভাগ ওএস-এস নির্ভর করে। উদাহরণস্বরূপ, পাইথন সাবসেটটি BIOS / UEFI- তে চালিত করার জন্য পোর্ট করা হয়েছে: https://www.youtube.com/watch?v=bYQ_lq5dcvM

এটি যুক্তিযুক্ত হতে পারে যে ফার্মওয়্যারগুলি ওএস থেকে পৃথকযোগ্য, এবং সেই ফার্মওয়্যারই কেবল "সত্য" বেয়ার মেটাল প্রোগ্রামিং যা করতে পারে।

এই CoreOS দেব হিসাবে এটি রাখে :

শক্ত অংশ

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

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

বিআইওএসের প্রাথমিক অবস্থা পোস্ট করুন

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

সুতরাং নিজের পক্ষে একটি সুবিধা করুন এবং নীচের মত কিছু সূচনা কোড ব্যবহার করুন: https://stackoverflow.com/a/32509555/895245

নিবন্ধগুলি গুরুত্বপূর্ণ পার্শ্ব প্রতিক্রিয়াগুলি পছন্দ করে %dsএবং %esসেগুলিও রয়েছে, তাই আপনি এগুলি স্পষ্টভাবে ব্যবহার না করেও আপনার এগুলি শূন্য করা উচিত।

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

GNU GRUB মাল্টি বুট oot

বুট সেক্টরগুলি সহজ, তবে সেগুলি খুব সুবিধাজনক নয়:

  • আপনার প্রতি ডিস্কে একটি ওএস থাকতে পারে
  • লোড কোডটি সত্যই ছোট হতে হবে এবং 512 বাইটে ফিট করতে হবে। এটি 0x13 বিআইওএস কল দিয়ে সমাধান করা যেতে পারে ।
  • সুরক্ষিত মোডে যাওয়ার মতো আপনাকে নিজেকে প্রচুর স্টার্টআপ করতে হবে

এই কারণগুলির জন্যই জিএনইউ গ্রুব মাল্টি বুট নামে একটি আরও সুবিধাজনক ফাইল ফর্ম্যাট তৈরি করেছে।

সর্বনিম্ন কাজের উদাহরণ: https://github.com/cirosantilli/x86-bare-metal-example/tree/d217b180be4220a0b4a453f31275d38e697a99e0/multboot/hello-world

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

এখানে চিত্র বর্ণনা লিখুন

আপনি যদি ওএসটিকে মাল্টি বুট ফাইল হিসাবে প্রস্তুত করেন, তবে GRUB এটি একটি নিয়মিত ফাইল সিস্টেমের মধ্যে এটি সন্ধান করতে সক্ষম হয়।

এটি বেশিরভাগ ডিস্ট্রোজই করে যা ওএস চিত্রগুলি নীচে রাখে /boot

মাল্টিবুট ফাইলগুলি মূলত একটি বিশেষ শিরোনামযুক্ত একটি ELF ফাইল। এগুলি GRUB দ্বারা এখানে নির্দিষ্ট করা হয়েছে: https://www.gnu.org/software/grub/manual/multboot/m Multiboot.html

আপনি একটি মাল্টি বুট ফাইল বুটযোগ্য ডিস্কে রূপান্তর করতে পারেন grub-mkrescue

এল টরিটো

ফর্ম্যাট যা সিডিতে পোড়া যায়: https://en.wikedia.org/wiki/El_Torito_%28CD-ROM_standard%29

আইএসও বা ইউএসবি উভয় ক্ষেত্রেই কাজ করে এমন একটি হাইব্রিড চিত্র তৈরি করা সম্ভব। এটি grub-mkrescue( উদাহরণস্বরূপ ) দিয়ে করা যায় এবং লিনাক্স কার্নেল make isoimageব্যবহার করেও এটি করা যায় isohybrid

সম্পদ

  • http://wiki.osdev.org এই বিষয়গুলির জন্য একটি দুর্দান্ত উত্স।
  • https://github.com/scanlime/metalkit একটি আরও স্বয়ংক্রিয় / সাধারণ বেয়ার ধাতব সংকলন সিস্টেম যা একটি ছোট্ট কাস্টম এপিআই সরবরাহ করে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.