কম্পিউটার টিউটোরিয়াল

সিস্টেম কল বোঝা:উদ্দেশ্য, কার্যকারিতা, এবং লিনাক্সে সাধারণ ব্যবহার

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

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

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

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

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

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

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

এই ধরনের ফাংশন কল করার পদ্ধতিটি অন্য যেকোন ফাংশনের মতোই যা আমরা সি লাইব্রেরিতে পাই। অতএব, এটি একটি কলিং ফাংশন কিনা সেই প্রশ্নটি বাস্তবে, প্রোগ্রামারের জন্য একটি সম্পূর্ণরূপে ধারণাগত প্রশ্ন৷

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

লিনাক্সে, বর্তমানে প্রায় 350টি সিস্টেম কল রয়েছে। এছাড়াও, প্রচুর সংখ্যক ফাংশন রয়েছে যা সিস্টেম কল নয় কিন্তু তাদের মাধ্যমে সম্পদ পরিচালনা করে যেমন malloc(), free(), calloc(), এবং realloc() ফাংশন যা আপনার কোডে syscalls ব্যবহার করে গতিশীলভাবে মেমরি পরিচালনা করে।

লিনাক্স কনসোলে স্ট্রেস কমান্ডের সাহায্যে সিস্টেম কলগুলি কীভাবে নিরীক্ষণ করবেন

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

আপনি যখন এই কমান্ডটি চালান, তখন কমান্ড কনসোলে "স্ট্রেস" দ্বারা অফার করা পর্যবেক্ষণ বিকল্পগুলির তালিকা প্রদর্শিত হয়৷

সিস্টেম কল বোঝা:উদ্দেশ্য, কার্যকারিতা, এবং লিনাক্সে সাধারণ ব্যবহার

একটি প্রক্রিয়ার syscalls নিরীক্ষণ করতে, আমাদের নিম্নলিখিত কমান্ড দিয়ে এটি চালাতে হবে:

strac
strace ./process
e -h

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

# অন্তর্ভুক্ত করুন
#include
# অন্তর্ভুক্ত করুন
#include
#include
#include
#include
#include

int প্রধান (){

//ধাপ 1
int সকেট_আইডি;
int পোর্ট =80;
int ত্রুটি;
চার বাফার [১০২৫];

struct hostent *সার্ভার;
struct sockaddr_in ক্লায়েন্ট;
memset(&server, 0, sizeof(server));

//ধাপ 2
সার্ভার =gethostbyname ( "www.google.com");
যদি (সার্ভার ==NULL)
  {
     printf("\nডোমেন ডেটা পাওয়ার ত্রুটি।\n");
     রিটার্ন 1;
 

//ধাপ 3
socket_id =সকেট ( AF_INET, SOCK_STREAM, 0);

//ধাপ 4
client.sin_family =AF_INET;
client.sin_port =htons(পোর্ট);

//ধাপ 5
bcopy((char*) সার্ভার->h_addr,
  (char*) &client.sin_addr.s_addr,
  sizeof(server->h_length));

error=connect(socket_id, (struct sockaddr *) &client, sizeof(client));

যদি (ত্রুটি <0){
  printf ("\nসার্ভারের সাথে সংযোগ স্থাপন করা যায়নি\n");
  বন্ধ (সকেট_আইডি);
  রিটার্ন 1;
 

printf ("\nএর সাথে সংযোগ করুন :%s\n", inet_ntoa( client.sin_addr));
যখন (1){

printf("প্রস্থান করতে Ctrl+c চাপুন \nhttp কমান্ড পাঠান:");
fgets(বাফার, 1025, stdin);
পাঠান(সকেট_আইডি, বাফার, 1025, 0);
মেমসেট(&বাফার, '\0', 1025);
recv(সকেট_আইডি, বাফার, 1025, 0);
printf("%s", বাফার);
মেমসেট(&বাফার, '\0', 1025);

আমরা কোড কম্পাইল করি এবং এটিকে "কানেক্ট" আউটপুট নাম দিই। তারপরে, আমরা এটিকে “./connect” কমান্ড দিয়ে কার্যকর করি এবং syscalls নিরীক্ষণ করতে সক্ষম হওয়ার জন্য “strace” কমান্ডটি প্রিপেন্ড করি।

এই কমান্ডটি কমান্ড কনসোলে প্রসেসের syscalls প্রদর্শন করে। নিচের চিত্রে যেমন দেখা যায়, যদিও আমাদের কোড শুধুমাত্র সকেট(), connect(), send() এবং recv() syscalls ব্যবহার করে, তবে এর সম্পাদনের জন্য অন্যান্য সিস্টেম কলের প্রয়োজন হয় যা আমরা যে ফাংশনগুলি ব্যবহার করি তার কোডে ঘটে।

সিস্টেম কল বোঝা:উদ্দেশ্য, কার্যকারিতা, এবং লিনাক্সে সাধারণ ব্যবহার

নিম্নলিখিত কমান্ডটি একটি প্রক্রিয়ার জন্য সিস্টেম কলের একটি সারাংশ প্রদর্শন করে যখন এটি সমাপ্ত হয়:

সিস্টেম কল বোঝা:উদ্দেশ্য, কার্যকারিতা, এবং লিনাক্সে সাধারণ ব্যবহার

প্রক্রিয়া পরিচালনার জন্য সিস্টেম কল ফাংশন:

ফাংশন বিবরণ হেডার execl()

execlp()

execle()

execv()

execvp()

execvpe()

ফ্যামিলি অফ সিস্টেম ফাংশন কলগুলি যেগুলি একটি প্রক্রিয়ার সাথে অন্য একটি প্রক্রিয়াকে প্রতিস্থাপন করে পিআইডি এবং প্যারেন্ট process.unistd.hfork()একটি process.unistd.hgetpid()কলিং প্রক্রিয়ার PID পায়। process.stdlib.hgetcwd()

getwd()

কলিং প্রক্রিয়ার বর্তমান কার্যকারী ডিরেক্টরির সাথে একটি স্ট্রিং প্রদান করে। unistd.hpause() একটি সংকেত না আসা পর্যন্ত প্রক্রিয়াটিকে বিরতি দেয়।

ফাইল পরিচালনার জন্য সিস্টেম কল ফাংশন:

ফাংশন বর্ণনা হেডার খোলা()

openat()

ফাইল খুলুন.

ftruncate()

নির্দিষ্ট lengthunistd.hcreat()একটি ফাইল তৈরি করুন.fcntl.hchmod() এ একটি ফাইল ছেঁটে দিন

fchmod()

একটি filesys/stat.hunlink()Delete a file.unistd.h এর অনুমতি সেট করে

সিগন্যাল পরিচালনার জন্য সিস্টেম কল ফাংশন:

ফাংশন বর্ণনা signal()একটি handler.signal.hkill()এর সাথে একটি সংকেতকে লিঙ্ক করে নির্দিষ্ট সংকেত না আসা পর্যন্ত কলিং থ্রেডের সঞ্চালন.signal.hsighold()কলিং প্রক্রিয়াতে সংকেত যোগ করুন' সিগন্যাল মাস্ক.signal.hsigignore()ignore a signal.signal.hsigblock()Block a signal.signal.hpsignal()

psiginfo()

একটি signal.signal.h এর বর্ণনা সহ একটি বার্তা প্রিন্ট করে

সকেট পরিচালনার জন্য সিস্টেম কল ফাংশন:

ফাংশন বর্ণনা একটি socket

recvfrom()

recvmsg()

একটি socket.socket.hsend() থেকে একটি বার্তা পায়

sendto()

sendmsg()

একটি socket.socket.hgetsockname() থেকে একটি বার্তা পাঠান নির্দিষ্ট সকেটের ঠিকানা তার descriptor.socket.hgetsockopt()Set or get অপশন দ্বারা socket.socket.h এ রিটার্ন করে

উপসংহার

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

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


  1. পিলো লাইব্রেরি ব্যবহার করে একটি ছবিতে বক্স ব্লার প্রয়োগ করা হচ্ছে

  2. কিভাবে ttk Treeview উইজেটে পাঠ্যকে ডানদিকে সারিবদ্ধ করবেন?

  3. সেরা C++ অনলাইন কম্পাইলার নির্বাচন করা:একটি ব্যাপক গাইড

  4. একটি গ্রাফ দৃঢ়ভাবে সংযুক্ত কি না তা পরীক্ষা করার জন্য C++ প্রোগ্রাম