লিনাক্স কার্নেল থ্রেডগুলি কি আসলে কার্নেল প্রক্রিয়া?


19

আমি অনেক জায়গায় পড়েছি যে লিনাক্স জাভা ভিএম-এ প্রতিটি ব্যবহারকারীর থ্রেডের জন্য কার্নেল থ্রেড তৈরি করে। (আমি "কর্নেল থ্রেড" শব্দটি দুটি ভিন্ন উপায়ে ব্যবহৃত দেখি:

  1. মূল ওএস কাজ করতে একটি থ্রেড তৈরি করা হয়েছে এবং
  2. একটি থ্রেড ওএস সচেতন এবং ব্যবহারকারীর কাজ সম্পাদনের সময়সূচী।

আমি পরের ধরণের কথা বলছি))

লিনাক্স প্রসেসগুলি পিতামাতা এবং সন্তানের মধ্যে ভাগ করা মেমরি ফাঁকা স্থানগুলিকে সমর্থন করে বা এটি সত্যই কোনও আলাদা সত্তা, কার্নেল থ্রেড কি কার্নেল প্রক্রিয়া হিসাবে একই?

উত্তর:


23

লিনাক্সের কোনও থ্রেড এবং প্রক্রিয়ার মধ্যে একেবারেই কোনও পার্থক্য নেই। আপনি যদি ক্লোন (2) তাকান তবে আপনি পতাকাগুলির একটি সেট দেখতে পাবেন যা থ্রেডগুলির মধ্যে কী ভাগ করা হয় এবং কী ভাগ করা হয় না তা নির্ধারণ করে।

ক্লাসিক প্রক্রিয়াগুলি কেবল থ্রেড যা কিছুই ভাগ করে না; আপনি লিনাক্সের অধীনে কোন উপাদানগুলি চান তা ভাগ করতে পারেন।

এটি অন্যান্য ওএস বাস্তবায়নের ক্ষেত্রে নয়, যেখানে আরও অনেকগুলি যথেষ্ট পার্থক্য রয়েছে।


22

ডকুমেন্টেশনটি বেশ বিভ্রান্তিকর হতে পারে, সুতরাং এখানে " আসল " লিনাক্স মডেলটি রয়েছে:

  • লিনাক্স কার্নেলের ভিতরে, এমন কিছু যা চালানো যায় (& নির্ধারিত) তাকে "প্রক্রিয়া" বলা হয়,
  • প্রতিটি প্রক্রিয়াটির একটি সিস্টেম-অনন্য প্রসেস আইডি (পিআইডি), এবং একটি থ্রেড গ্রুপ আইডি (টিজিআইডি) রয়েছে,
  • একটি "স্বাভাবিক" প্রক্রিয়াতে PID = TGID থাকে এবং অন্য কোনও প্রক্রিয়া এই TGID মান ভাগ করে না,
  • একটি "থ্রেডেড" প্রক্রিয়া এমন একটি প্রক্রিয়া যা টিজিআইডি মান অন্যান্য প্রক্রিয়াগুলি দ্বারা ভাগ করা হয়,
  • একই টিজিআইডি ভাগ করে নেওয়ার বিভিন্ন প্রক্রিয়াও কমপক্ষে একই মেমরি স্পেস এবং সিগন্যাল হ্যান্ডলার (কখনও কখনও আরও) ভাগ করে দেয়,
  • যদি কোনও "থ্রেডেড" প্রক্রিয়াতে PID = TGID থাকে, তবে এটি "মূল থ্রেড" বলা যেতে পারে,
  • যে getpid()কোনও প্রক্রিয়া থেকে কল করা তার TGID (= "মূল থ্রেড" পিআইডি) ফিরিয়ে দেবে,
  • যে gettid()কোনও প্রক্রিয়া থেকে কল করা তার পিআইডি (!) ফিরিয়ে দেবে,
  • clone(2)সিস্টেম কল দিয়ে যে কোনও ধরণের প্রক্রিয়া তৈরি করা যেতে পারে ,
  • ফোল্ডারগুলির সংখ্যাসূচক নামগুলি আপনি টিজিআইডি ls /procহিসাবে তালিকাভুক্ত করতে পারেন /proc/NUMBER,
  • ফোল্ডারের সংখ্যার নামগুলি /proc/TGID/taskযেমন /proc/TGID/task/NUMBERপিআইডি রয়েছে,
  • যদিও আপনি প্রতিটি বিদ্যমান PIDs দেখতে না ls /proc, আপনি এখনও কি করতে পারেন cd /proc/any_PID

উপসংহার : কার্নেল দৃষ্টিকোণ থেকে, কেবলমাত্র প্রক্রিয়া বিদ্যমান, প্রত্যেকের নিজস্ব অনন্য পিআইডি রয়েছে এবং তথাকথিত থ্রেডটি কেবল একটি ভিন্ন ধরণের প্রক্রিয়া।

দ্রষ্টব্য: লিনাক্সে "থ্রেড" ধারণাটি বাস্তবায়নের ফলে একটি ভোকাবুলারি বিভ্রান্তি ঘটেছে এবং যদি getpid() আপনি মিথ্যা বলছেন যা আপনি যা ভাবেন তা না করে, কারণ এর আচরণটি পসিক্সের সামঞ্জস্যের অনুসরণ করে (থ্রেডগুলি একটি সাধারণ পিআইডি ভাগ করে নেবে বলে মনে করা হয়) ।


1
পরামর্শ: "টাস্ক" শব্দটি ব্যবহার করে প্রসেস / থ্রেডের বিভ্রান্তির এতটুকু না গিয়েই চলমান কিছু উল্লেখ করাতে সহায়তা করতে পারে।
টোটার

17

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


1
লোকটি pthreads(7)বলেছে যে বর্তমান এনপিটিএল (নেটিভ পসিক্স থ্রেডস লাইব্রেরি) বাস্তবায়নের জন্য, "একটি প্রক্রিয়াতে সমস্ত থ্রেড একই থ্রেড গ্রুপে স্থাপন করা হয়; একটি থ্রেড গ্রুপের সমস্ত সদস্য একই পিআইডি ভাগ করে দেয়।" অপ্রচলিত লিনাক্সথ্রেড বাস্তবায়নে প্রতিটি "থ্রেড" এর নিজস্ব পিআইডি থাকে।
টোটার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.