অপারেটিং সিস্টেমটি বিধ্বস্ত হওয়া থেকে কোন অ্যাসেমব্লি প্রোগ্রামটি থামায়? [বন্ধ]


18

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

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

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

প্রশ্নাবলী:

  1. উপরে বর্ণিত পদ্ধতিতে রেজিস্টার এ নিয়ে গণ্ডগোল করা কি সম্ভব?

  2. যদি তা না হয় তবে ওএস দ্বারা ব্যবহৃত রেজিস্টারগুলিকে সংশোধন করা থেকে অ্যাসেম্বলি প্রোগ্রামগুলি কী থামবে?


13
স্মার্ট প্রোগ্রামাররা ...
টনি স্টিয়ার্ট সানিসস্কিগুয়ে EE75

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

2
একটি মাইক্রোপ্রসেসরে আপনার প্রোগ্রামটি "ব্যবহারকারী মোড" এ চলে, অপারেটিং সিস্টেমগুলি "সিস্টেম মোডে" চলমান runs যদি কোনও ব্যবহারকারী মোড প্রোগ্রাম একটি থামানোর নির্দেশ কার্যকর করে, উদাহরণস্বরূপ, মেশিনটি থামবে না। থামতে আটকা পড়বে এবং অপারেটিং সিস্টেমটি চালিত হবে। র‌্যাম সম্পর্কিত, ওএস ব্যবহারকারী মোড প্রোগ্রামের জন্য একটি পরিবেশ স্থাপন করবে যাতে মেমরি পরিচালনার হার্ডওয়ারের মাধ্যমে, ব্যবহারকারী প্রোগ্রামটি র‌্যামের ঠিকানা হিসাবে X যা দেখতে পাবে তা সত্যই র্যাম ঠিকানা এক্স হতে পারে না
জর্জ হোয়াইট

1
@ ফ্লাক্স আমি আমার মন্তব্য আপডেট করেছি। উত্তরটি হবে: আপনার কম্পিউটারে কোনও "জেনারেল" উত্তর নেই, কারণ এখানে বিভিন্ন কম্পিউটার আর্কিটেকচার / ওএস রয়েছে। এটি বিভিন্ন উপায়ে হতে পারে।
ঘূর্ণিঝড় 125

2
... অনেক আগে আমি কাঁচা মেশিন কোডে লিখতাম। ইয়ে হা !!! :-)
রাসেল ম্যাকমাহন

উত্তর:


33

শেষ পর্যন্ত, সমস্ত প্রোগ্রাম মেশিন কোড হয়, উত্স ভাষাটি এসেম্বলার ছিল বা উচ্চ-স্তরের ভাষা নির্বিশেষে।

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

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


এটিকে আরও কিছুটা কংক্রিট করার জন্য এখানে খুব সাধারণ উদাহরণ:

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

  • সুতরাং, "ব্যবহারকারী মোড" এ, কোনও প্রক্রিয়া এমএমইউ নিয়ন্ত্রণ রেজিস্টারগুলিতে অ্যাক্সেস করতে পারে না।

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

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


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

3
মূলত, এই উত্তরটি এমএমইউ এবং সুরক্ষিত মোড সহ আধুনিক "i386- জাতীয়" আর্কিটেকচারের বর্ণনা দেয়। তবে সত্য কথা বলতে গেলে অনেকগুলি পুরানো (i8080, এমওএস 6502 ইত্যাদি) পাশাপাশি আধুনিক সরল (এভিআর, এআরএম কর্টেক্স-এম ইত্যাদি) আর্কিটেকচারগুলিতে এই বৈশিষ্ট্যগুলি নেই এবং যদি কোনও ধরণের ওএস ব্যবহার করা হয় (যেমন পুরানো old সিপি / এম, আধুনিক ফ্রিআরটিওএস, চিবিওস ইত্যাদি) প্রোগ্রামটি যা করছে তা থেকে কোনও কিছুই থামাতে পারে না।
ঘূর্ণিঝড় 125

2
@ ফ্লাক্স i386 (এবং উপরের) স্থাপত্যগুলি শিখতে বিশদ সরবরাহ করে details X86 আর্কিটেকচারে কেবল মেমরি ঠিকানা নেই যা সুরক্ষিত করা যায়, এছাড়াও I / O ঠিকানাগুলিও। (আই / ও অ্যাক্সেস বনাম মেমরি অ্যাক্সেসের জন্য বিভিন্ন নির্দেশাবলীর ব্যবহার রয়েছে)) i386 + তে তিনটি মেমরি ঠিকানা রয়েছে। বিভাগটি / নির্বাচক-ভিত্তিক ঠিকানাটি এমন একটি নির্বাচক নিবন্ধ ব্যবহার করে যা কোনও একক 32-বিট লিনিয়ার ঠিকানায় জোড় মানচিত্র করতে একটি সারণী প্রবেশ (জিডিটি বা এলডিটি) উল্লেখ করে। পৃষ্ঠাগুলি সারণীগুলি পরে 32-বিট রৈখিক ঠিকানাটিকে 36-বিট দৈহিক ঠিকানায় অনুবাদ করে (পি-II।) উভয় অনুবাদ ধাপে সুরক্ষা বিদ্যমান।
জনক

4
@ ফ্লাক্স আপনার সারসংক্ষেপটি সঠিক। উপযুক্ত মাল্টিটাস্কিং ওএস সহ একটি সুরক্ষিত মেমরি সিস্টেমে কোনও প্রোগ্রাম নির্দেশের কোনও প্রবাহের সাহায্যে সিস্টেমটি ক্র্যাশ করতে সক্ষম হবে না। এমনকি অবৈধগুলিও - এগুলি বিশেষ হ্যান্ডলারের সমাপ্তি।
pjc50

যদিও একাধিক রিং রয়েছে (x86 এ কমপক্ষে) তবে এটি ব্যবহার করা খুব বেশি দু'এরও খুব বিরল।
বন

10

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

  1. প্রক্রিয়া এ এর ​​রাষ্ট্রীয় ডেটা (নিবন্ধের সামগ্রী, প্রোগ্রামের কাউন্টার, ইত্যাদি) এর পিসিবিতে অনুলিপি করা হয়।

  2. প্রসেস বি এর রাজ্য ডেটা সিপিইউ রেজিস্টারে তার পিসিবি থেকে অনুলিপি করা হয়

  3. প্রক্রিয়া বি প্রসেসরের উপর সঞ্চালিত হয় যতক্ষণ না এটি শেষ হয় বা প্রিম্পেটিং হয়

  4. প্রক্রিয়া বি এর রাজ্য ডেটাগুলি তার পিসিবিতে আবার অনুলিপি করা হয়

  5. প্রক্রিয়া এ এর ​​রাষ্ট্রীয় ডেটাগুলি আবার সিপিইউতে অনুলিপি করা হয় এবং এটি চলতে থাকে

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

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

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


4

আপনি কোন প্ল্যাটফর্মের বিষয়ে কথা বলছেন তা নির্ভর করে।

  • আরও বেসিক প্রসেসরের উপর, প্রসেসর কেবল প্রোগ্রামটি নির্বাহ করতে যা যা নির্দেশ নির্দেশ করে তা সম্পাদন করে।

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

পুরো সিস্টেমটি ক্র্যাশ করে কোনও প্রোগ্রাম থামায় কী? প্রথম ধরণের প্রসেসরের সাথে উত্তরটি "কিছুই নয়"। একটি বেসিক প্রসেসরের সাহায্যে, একটি একক দুর্বৃত্ত প্রোগ্রাম সত্যই পুরো সিস্টেমটিকে ক্র্যাশ করতে পারে। সমস্ত প্রথম 8-বিট হোম কম্পিউটার এবং 16-বিটের অনেকগুলি এই বিভাগে আসে।

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

স্পষ্টতই, একক দুর্বৃত্ত প্রোগ্রামকে পুরো সিস্টেমটি ক্র্যাশ করার অনুমতি দেওয়া খারাপ। (একটি দুর্বৃত্ত প্রোগ্রামটি যা যা ডেটা চায় তা অ্যাক্সেস করতে দেয়ায় গুরুতর সুরক্ষা জড়িত রয়েছে)) এড়াতে আপনার দুটি জিনিস প্রয়োজন:

  1. এমন একটি প্রসেসর যার আসলে সুরক্ষা হার্ডওয়্যার রয়েছে (যেমন, এটি নির্দিষ্ট নির্দেশাবলী কার্যকর করতে অস্বীকার করার জন্য কনফিগার করা যেতে পারে)।

  2. একটি ওএস যা প্রকৃতপক্ষে নিজেকে রক্ষার জন্য এই সুবিধাগুলি ব্যবহার করে। (ওএস কখনই এটি ব্যবহার না করে সুরক্ষা সার্কিটরি সহ একটি চিপ রাখা ভাল নয়!)

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


1

প্র: কোনও অ্যাসেম্বলি প্রোগ্রামটি অপারেটিং সিস্টেমটি ক্রাশ হওয়া থেকে থামায়?

উ: কিছুই না।

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

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

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

  with open("myFile.txt", "w+") as f:
      # do some really clever things
      f.write("Goodbye cruel world!")

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

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