কেন কিছু অপারেটিং সিস্টেম ইভেন্ট হ্যান্ডলিং সি এর পরিবর্তে asm এ লেখা হয়?


17

আমার প্রশ্ন হ'ল আজকাল কেন কিছু অপারেটিং সিস্টেম ইভেন্ট হ্যান্ডলিং সি এর মতো উচ্চ স্তরের ভাষার পরিবর্তে অ্যাসেম্বলি ভাষায় লেখা হয়, যখন কার্নেল নিজেই বেশিরভাগ সিতে লেখা হয়?


5
"বেশিরভাগ সিতে" - এবং অনুমান করুন বাকীটি কী? ;)
সোনারলকস

@ গোল্ডিলোক এটি সমাবেশে ভাল। তবে কেন, যখন অন্যান্য অংশগুলি সি তে থাকে?
মাকজেড

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

আপনি কীভাবে গ্লোবাল বর্ণনাকারী সারণী পয়েন্টার রেজিস্টার সেট করবেন?
ব্যবহারকারী 253751

উত্তর:


24

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


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

18

সি মেশিন কোড থেকে বিমূর্ততা যা মেশিনে চলে (যদিও অন্যান্য ভাষার তুলনায় অনেক নিকটবর্তী)।

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

কার্নেল উত্স কোড ট্রিতে এটি সংরক্ষণ করা হয় arch/<arch>এবং include/asm-<arch>যেখানে <arch>একটি নির্দিষ্ট স্থাপত্যের নাম। এটি আসলে সম্পূর্ণ কার্নেল উত্সের একটি ছোট্ট অংশ।


6

আপনি সি তে এটি করতে পারবেন না :)

lgdt[xxxx]
mov eax, cr0
or al, 0x01
mov cr0, eax

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

দ্বিতীয় উদাহরণটি বুটলোডার o এক্স ৮ systems সিস্টেমে, প্রথাগত বুট কোডটি যথাযথভাবে 512 বাইট দীর্ঘ এবং শেষ দুটি বাইট যথাক্রমে 0xAA এবং 0x55 (বা 55 এএ হুবহু) হওয়া উচিত ... সি সংকলকগুলির সাথে এই জাতীয় জিনিস নিশ্চিত করা একটি দুঃস্বপ্ন এবং এসেম্বলারের মতো চমত্কার উপায়ে কাজ।

এরকম আরও অনেকগুলি মামলা রয়েছে যেখানে সমাবেশ কেবল পছন্দনীয় নয় - তবে এটিই একমাত্র উপায়।


-5

asm স্লিমার এবং সাধারণত সি লাইব্রেরি ইত্যাদির সাথে জাঁকানো তুলনায় অনেক দ্রুত এবং ওএস সেই সময়ের সমস্ত ঘটনা প্রচুর পরিচালনা করে। আপনি এই ফাংশনের জন্য স্লিম এবং দ্রুত চান।


2
অপ্টিমাইজ করা সি সংকলক প্রযুক্তি বেশ ভাল হয়েছে। এটি একটি পৌরাণিক কাহিনী যে asm সাধারণত সি এর চেয়ে অনেক দ্রুত হয় যে কোনও ক্ষেত্রে এটি নিম্ন স্তরের অপারেটিং সিস্টেম অপারেশনগুলি asm ব্যবহার করার কারণ নয়। এটি বেশিরভাগই এমন ক্রিয়াকলাপগুলির সাথে করতে হয় যা মেমরি বাধাগুলির মতো সিতে প্রকাশ করা যায় না, এবং নন-সি কলিং কনভেনশন ইত্যাদির জন্য নৃত্যগুলি রেজিস্ট্রেশন করে ...
সেলেদা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.