লিনাক্স সিস্টেম কল কি?

What Is Linux System Call



আমরা একটি লিনাক্স সিস্টেম কল এর সংজ্ঞা খুঁজে বের করার আগে এবং তার বাস্তবায়নের বিশদ পরীক্ষা করার আগে, একটি সাধারণ লিনাক্স সিস্টেমের বিভিন্ন সফ্টওয়্যার স্তরগুলি সংজ্ঞায়িত করে শুরু করা ভাল।

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







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



লিনাক্স সিস্টেম কল দিয়ে বাধা দূর করা

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



মিথস্ক্রিয়া সহজ করার জন্য, কার্নেল একটি সফটওয়্যার গেট নির্ধারণ করে যা চলমান প্রোগ্রামকে অনুরোধ করে যে কার্নেল তার পক্ষে কাজ করে। এই ইন্টারফেসটি সিস্টেম কল নামে পরিচিত।





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

ওয়েফার-পাতলা মোড়ক

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



দৃশ্যের অন্তরালে

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

অকার্যকরপ্রধান() {
}

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

gcc ctest। -ctest

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

এমনকি একটি সহজ উদাহরণে, আমরা লিনাক্স সিস্টেমকে আমাদের জন্য সি রানটাইমের উপর নির্ভর করার পরিবর্তে প্রস্থান করার জন্য কল করতে পারি।

অকার্যকর_ শুরু() {
asm('movl $ 1,%eax;'
'xorl %ebx, %ebx;'
'int $ 0x80');
}

এখানে আমরা 1 টি EAX রেজিস্টারে স্থানান্তরিত করি, EBX রেজিস্টারটি সাফ করুন (যা অন্যথায় রিটার্ন ভ্যালু ধারণ করবে) তারপর লিনাক্স সিস্টেম কল কল ইন্টারাপ্ট 0x80 (বা দশমিক 128)। এই বাধা আমাদের কল প্রক্রিয়া করার জন্য কার্নেলকে ট্রিগার করে।

যদি আমরা আমাদের নতুন উদাহরণ সংকলন করি, যাকে বলা হয় asmtest.c, এবং প্রতীকগুলি সরিয়ে ফেলুন এবং স্ট্যান্ডার্ড লাইব্রেরি বাদ দিন:

gcc-গুলি-nostdlib asmtest। -o asmtest

আমরা 1k এর কম বাইনারি তৈরি করব (আমার সিস্টেমে, এটি 984 বাইট উৎপন্ন করে)। এই কোডের অধিকাংশই এক্সিকিউটেবল হেডার। আমরা এখন সরাসরি লিনাক্স সিস্টেম কল করছি।

সমস্ত ব্যবহারিক উদ্দেশ্যে

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

কিভাবে সিস্টেম কল টিউটোরিয়াল প্রোগ্রাম করবেন

সমস্ত সিস্টেম কলের তালিকা

আপনি যদি লিনাক্সের জন্য সমস্ত উপলব্ধ সিস্টেম কলগুলির একটি তালিকা দেখতে চান তবে আপনি এই রেফারেন্স পৃষ্ঠাগুলি পরীক্ষা করতে পারেন: LinuxHint.com এ সিস্টেম কলগুলির সম্পূর্ণ তালিকা, filippo.io/linux-syscall-table/ এবং অথবা syscalls.kernelgrok.com