কম্পিউটার

C/C++ এ প্রক্রিয়া সিঙ্ক্রোনাইজেশন


প্রসেস সিঙ্ক্রোনাইজেশন হল শেয়ার করা ডেটাতে সমসাময়িক অ্যাক্সেসের সমস্যা কাটিয়ে ওঠার কৌশল যা ডেটার অসামঞ্জস্যতার কারণ হতে পারে। একটি সহযোগিতা প্রক্রিয়া এমন একটি যা অন্য প্রক্রিয়া দ্বারা প্রভাবিত বা প্রভাবিত হতে পারে যা প্রসেস ডেটাতে অসঙ্গতি সৃষ্টি করবে তাই ডেটার সামঞ্জস্যের জন্য প্রক্রিয়া সিঙ্ক্রোনাইজেশন প্রয়োজন৷

গুরুত্বপূর্ণ-বিভাগের সমস্যা

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

নিচে দেওয়া হল একটি নির্দিষ্ট প্রক্রিয়া P1 এর একটি সমালোচনামূলক বিভাগের গঠন

C/C++ এ প্রক্রিয়া সিঙ্ক্রোনাইজেশন

একটি সমালোচনামূলক বিভাগের জন্য তিনটি প্রয়োজনীয়তা অবশ্যই পূরণ করতে হবে

  • পারস্পরিক বর্জন − যদি একটা প্রসেস ধরা যাক P1 অন্য যেকোন প্রসেসের তুলনায় তার ক্রিটিকাল সেকশনে এক্সিকিউট করছে, তাহলে ধরা যাক P2 তার ক্রিটিকাল সেকশনে এক্সিকিউট করতে পারে না।
  • প্রগতি - যদি এর সমালোচনামূলক বিভাগে কোনও প্রক্রিয়া কার্যকর না হয় এবং এমন প্রক্রিয়াগুলি থাকে যারা এটির সমালোচনামূলক বিভাগে প্রবেশ করতে চায়, তবে শুধুমাত্র সেই প্রক্রিয়াগুলি যারা তাদের অবশিষ্ট বিভাগে সম্পাদন করছে না তারা সমালোচনামূলক বিভাগে প্রবেশের জন্য অনুরোধ করতে পারে এবং নির্বাচন অনির্দিষ্টকালের জন্য স্থগিত করা যেতে পারে। .
  • বেষ্টিত অপেক্ষা − আবদ্ধ অপেক্ষায়, একটি প্রক্রিয়া তার সমালোচনামূলক বিভাগে প্রবেশ করার অনুরোধ করার পরে এবং সেই অনুরোধটি মঞ্জুর হওয়ার আগে একটি প্রক্রিয়া কতবার প্রবেশ করতে পারে তার সীমা বা সীমা রয়েছে৷

গুরুত্বপূর্ণ বিভাগ পরিচালনা করার জন্য অপারেটিং সিস্টেমে সাধারণত ব্যবহৃত দুটি পদ্ধতি রয়েছে৷

প্রিম্পটিভ কার্নেল − একটি অগ্রিম কার্নেল কার্নেল মোডে চলাকালীন একটি প্রক্রিয়াকে পূর্বনির্ধারিত করার অনুমতি দেয়৷

নন-প্রিমপ্টিভ কার্নেল − একটি নন-প্রিম্পিটিভ কার্নেল কার্নেল মোডে চলমান কোনো প্রক্রিয়াকে প্রিম্পট করার অনুমতি দেয় না।

পিটারসনের সমাধান

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

  • Int turn;
  • বুলিয়ান পতাকা[2];

এখানে, পরিবর্তনশীল টার্ন নির্দেশ করে যে কার পালা তার সমালোচনামূলক বিভাগে প্রবেশ করতে হবে এবং ফ্ল্যাগ অ্যারে নির্দেশ করে যে প্রক্রিয়াটি তার সমালোচনামূলক বিভাগে প্রবেশ করার জন্য প্রস্তুত কিনা৷

যদি মোড় ==i, তাহলে এর অর্থ প্রক্রিয়া পাই এর সমালোচনামূলক বিভাগে প্রবেশ করার অনুমতি দেওয়া হয়েছে।

যদি পতাকা[j] সত্য হয়, তাহলে এর অর্থ হল প্রসেস j তার সমালোচনামূলক বিভাগে প্রবেশের জন্য প্রস্তুত

পিটারসনের দ্রবণে প্রক্রিয়া P এর গঠন নীচে দেওয়া হল

C/C++ এ প্রক্রিয়া সিঙ্ক্রোনাইজেশন

পিটারসনের সমাধান তিনটি শর্তই সংরক্ষণ করে -

  • পারস্পরিক বর্জন − একবারে একটি প্রক্রিয়া গুরুত্বপূর্ণ বিভাগে অ্যাক্সেস করতে পারে৷
  • প্রগতি − ক্রিটিকাল সেকশনের বাইরের একটি প্রসেস অন্য প্রসেসকে ক্রিটিকাল সেকশনে প্রবেশ করতে বাধা দেয় না৷
  • বেষ্টিত অপেক্ষা − প্রতিটি প্রক্রিয়া অনির্দিষ্টকালের জন্য অপেক্ষা না করেই তার জটিল বিভাগে প্রবেশ করার সুযোগ পাবে।

সিঙ্ক্রোনাইজেশন হার্ডওয়্যার

এটি দুটি ধরণের নির্দেশাবলী ব্যবহার করে প্রয়োগ করা হয় -

  • পরীক্ষা এবং সেট()
  • swap()

টেস্ট এবং সেট () হল সিঙ্ক্রোনাইজেশনের সমস্যা সমাধানের জন্য একটি হার্ডওয়্যার সমাধান। এতে, একটি শেয়ার্ড ভেরিয়েবল রয়েছে যা লক নামে পরিচিত একাধিক প্রসেস দ্বারা ভাগ করা হয় যার 0 এবং 1 থেকে একটি মান থাকতে পারে যেখানে 1 লক লাভ করে এবং 0 প্রকাশ করে লককে প্রতিনিধিত্ব করে৷

যখনই প্রক্রিয়াটি তাদের সমালোচনামূলক বিভাগে প্রবেশ করার চেষ্টা করছে তখন তাদের লকের মান সম্পর্কে জিজ্ঞাসা করতে হবে। যদি লকের মান 1 হয় তাহলে তাদের অপেক্ষা করতে হবে যতক্ষণ না লকের মান 0 এ পরিবর্তিত হবে।

TestAndSet() এর সাথে পারস্পরিক-বর্জন বাস্তবায়ন নিচে দেওয়া হল

C/C++ এ প্রক্রিয়া সিঙ্ক্রোনাইজেশন

সেমাফোরস

Semaphore হল একটি সিঙ্ক্রোনাইজেশন টুল যা TestAndSet() এবং Swap() নির্দেশাবলী দ্বারা উত্পন্ন সমস্যাগুলি কাটিয়ে উঠতে ব্যবহৃত হয়। একটি সেমাফোর এস হল একটি পূর্ণসংখ্যার পরিবর্তনশীল যা দুটি স্ট্যান্ডার্ড পারমাণবিক ক্রিয়াকলাপের মাধ্যমে অ্যাক্সেস করা যেতে পারে যা অপেক্ষা() এবং সংকেত()

অপেক্ষার জন্য ফাংশন():

wait(S) {
   While S <= 0
   ; // no operation
   S--;
}

সিগন্যালের জন্য ফাংশন():

signal(S) {
   S++;
}

যখন একটি প্রক্রিয়া সেমাফোরের মান পরিবর্তন করে তখন অন্য কোন প্রক্রিয়া একই সাথে একই সেমাফোর মানকে পরিবর্তন করতে পারে না।

সেমাফোরের সাথে পারস্পরিক-বর্জন বাস্তবায়ন নিচে দেওয়া হল

C/C++ এ প্রক্রিয়া সিঙ্ক্রোনাইজেশন

অপারেটিং সিস্টেম দুই ধরনের সেমফোর ব্যবহার করে যেগুলো হল −

সেমাফোর গণনা − এই ধরনের সেমাফোরের মান একটি অনিয়ন্ত্রিত ডোমেনের উপর হতে পারে

বাইনারী সেমাফোর − এই ধরনের সেমাফোরের মান 0 থেকে 1 এর মধ্যে হতে পারে। এগুলিকে Mutex Locks নামেও পরিচিত। অপারেটিং সিস্টেম একাধিক প্রক্রিয়ায় জটিল বিভাগের সমস্যা সমাধানের জন্য এটি ব্যবহার করে।


  1. C/C++ এ putwchar() ফাংশন

  2. C/C++ এ memcpy()

  3. C/C++ এ AA গাছ?

  4. strcpy() C/C++ এ