থ্রেডগুলির মধ্যে কোন সংস্থানগুলি ভাগ করা হয়?


264

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

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

প্র: আপনি কি সেগমেন্টগুলি জানেন যেগুলিতে একটি প্রোগ্রাম ভাগ হয়ে যায়?

আমার উত্তর: হ্যাঁ (এটি সহজেই মনে হয়েছিল) স্ট্যাক, ডেটা, কোড, গাদা

প্র। সুতরাং, আমাকে বলুন: থ্রেডগুলি কোন বিভাগগুলিতে ভাগ করে?

আমি এটার উত্তর দিতে পারলাম না এবং এগুলি সব বলে শেষ করেছি।

দয়া করে, কোনও প্রক্রিয়া এবং থ্রেডের মধ্যে পার্থক্যের জন্য কেউ কি সঠিক এবং চিত্তাকর্ষক উত্তর উপস্থাপন করতে পারেন?


9
থ্রেডগুলি একই ভার্চুয়াল ঠিকানা-স্থান ভাগ করে দেয় , প্রক্রিয়া করে না।
বেনোইট

উত্তর:


177

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


27
মজার অংশটি হ'ল থ্রেডে স্বতন্ত্র কল স্ট্যাক থাকলেও অন্যান্য স্ট্যাকের মেমরিটি এখনও অ্যাক্সেসযোগ্য।
কার্তিক বালাগুরু

1
হ্যাঁ - আমি ভাবছি যে থ্রেডগুলির মধ্যে অন্য স্ট্যাকগুলিতে মেমরি অ্যাক্সেস করা গ্রহণযোগ্য কিনা? যতক্ষণ না আপনি নিশ্চিত যে আপনি যে স্ট্যাকটি অবনমিত হয়েছে তা উল্লেখ করার চেষ্টা করছেন না আমি নিশ্চিত নই যে আমি এটিতে কোনও সমস্যা দেখছি?
বিএফএফ

2
@ বিএফএফ: অন্য থ্রেডের স্ট্যাক মেমোরি অ্যাক্সেস করা সম্ভব , তবে ভাল সফ্টওয়্যার ইঞ্জিনিয়ারিং অনুশীলনের স্বার্থে, আমি এটি বলব না যে এটি গ্রহণযোগ্য হবে।
গ্রেগ হিউগিল

1
অ্যাক্সেস করা, বিশেষত এগুলিতে লেখা, অন্যান্য থ্রেডের স্ট্যাকগুলি বেশ কয়েকটি আবর্জনা সংগ্রহকারী প্রয়োগের সাথে মিশে যায়। যদিও এটি জিসি বাস্তবায়নের ত্রুটি হিসাবে ন্যায়সঙ্গত হতে পারে।
yyny

56

উইকিপিডিয়া থেকে (আমি মনে করি এটি সাক্ষাত্কারকারীর জন্য সত্যই উত্তর দেবে: পি)

থ্রেডগুলি এতে প্রচলিত মাল্টিটাস্কিং অপারেটিং সিস্টেম প্রক্রিয়াগুলির থেকে পৃথক:

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

2
উপরে পয়েন্ট নং 2 সম্পর্কে: থ্রেডগুলির জন্য সিপিইউ একটি প্রসঙ্গও বজায় রাখে।
জ্যাক 6

49

যে বিষয়টির সত্যই উল্লেখ করা দরকার তা হ'ল এই প্রশ্নের সত্যই দুটি দিক রয়েছে - তাত্ত্বিক দিক এবং বাস্তবায়নের দিক।

প্রথমে আসুন তাত্ত্বিক দিকটি দেখুন। একটি প্রক্রিয়া এবং থ্রেডের মধ্যে পার্থক্য বুঝতে এবং তাদের মধ্যে কী ভাগ করা আছে তা বোঝার জন্য আপনার প্রক্রিয়াটি ধারণাগতভাবে কী তা বুঝতে হবে।

আমরা অধ্যায় থেকে নিম্নোক্ত আছে 2.2.2 ক্লাসিক্যাল থ্রেড মডেল মধ্যে অধুনিক অপারেটিং সিস্টেম 3E Tanenbaum দ্বারা:

প্রক্রিয়া মডেল দুটি স্বতন্ত্র ধারণার উপর ভিত্তি করে: রিসোর্স গ্রুপিং এবং এক্সিকিউশন। কখনও কখনও তাদের পৃথক করা দরকারী; থ্রেড এখানে আসে ...

তিনি আরো বলেছেন:

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

আরও নিচে তিনি নীচের সারণীটি সরবরাহ করেন:

Per process items             | Per thread items
------------------------------|-----------------
Address space                 | Program counter
Global variables              | Registers
Open files                    | Stack
Child processes               | State
Pending alarms                |
Signals and signal handlers   |
Accounting information        |

উপরে কাজ করার জন্য থ্রেডগুলির জন্য আপনার প্রয়োজন। অন্যরা যেমন উল্লেখ করেছে, বিভাগগুলির মতো জিনিসগুলি ওএস নির্ভর বাস্তবায়ন বিশদ details


2
এটি একটি দুর্দান্ত ব্যাখ্যা। তবে সম্ভবত এটি কোনওভাবেই "উত্তর" হিসাবে বিবেচিত হওয়া প্রশ্নের সাথে আবদ্ধ হওয়া উচিত
অনুঘটক

টেবিলটি সম্পর্কে, প্রোগ্রামটি কি কোনও রেজিস্টারের বিপরীতে নেই? এবং একটি থ্রেডের "রাষ্ট্র", নিবন্ধকের মানতে ক্যাপচার? তারা যে কোডটি চালায়
সেটির

29

সাক্ষাত্কারকারকে বলুন যে এটি সম্পূর্ণরূপে ওএস বাস্তবায়নের উপর নির্ভর করে।

উদাহরণস্বরূপ উইন্ডোজ এক্স 86 নিন। কোড এবং ডেটা রয়েছে মাত্র 2 টি বিভাগ [1]। এবং তারা উভয়ই পুরো 2GB (লিনিয়ার, ব্যবহারকারী) ঠিকানা স্পেসে ম্যাপ করা আছে। বেস = 0, সীমা = 2 জিবি। তারা একটি তৈরি করেছে তবে x86 কোনও বিভাগকে পঠন / লেখার এবং সম্পাদনকারী উভয়ই হতে দেয় না। সুতরাং তারা দুটি করে, এবং কোড বর্ণনাকারীকে নির্দেশ করতে সিএস সেট করে, এবং বাকী (ডিএস, ইএস, এসএস, ইত্যাদি) অপর দিকে নির্দেশ করতে [2]। কিন্তু উভয় একই জিনিস ইঙ্গিত!

আপনার সাক্ষাত্কারটি দেওয়া ব্যক্তিটি একটি গোপন অনুমান করেছিলেন যে তিনি বর্ণনা করেন নি এবং এটি টান দেওয়ার বোকামি কৌশল।

তাই সম্পর্কিত

প্র: তাহলে কোন বিভাগের থ্রেড ভাগ বলুন?

বিভাগগুলি প্রশ্নটির সাথে অপ্রাসঙ্গিক, কমপক্ষে উইন্ডোজে। থ্রেডগুলি পুরো ঠিকানার স্থান ভাগ করে দেয়। এখানে কেবলমাত্র 1 টি স্ট্যাক সেগমেন্ট, এসএস রয়েছে এবং এটি ডিএস, ইএস এবং সিএস ঠিক একই জিনিসগুলিকে নির্দেশ করে [2]। অর্থাৎ পুরো রক্তাক্ত ব্যবহারকারীর স্থান । 0-2GB। অবশ্যই, এর অর্থ এই নয় যে থ্রেডগুলিতে কেবল 1 টি স্ট্যাক রয়েছে। স্বাভাবিকভাবেই প্রত্যেকের নিজস্ব স্ট্যাক থাকে তবে x86 বিভাগগুলি এই উদ্দেশ্যে ব্যবহৃত হয় না।

হয়তো * নিক্স আলাদা কিছু করে। কে জানে. প্রশ্নটি ভিত্তিতে প্রশ্নটি ভাঙা হয়েছিল।


  1. কমপক্ষে ব্যবহারকারীর স্থানের জন্য।
  2. থেকে ntsd notepad:cs=001b ss=0023 ds=0023 es=0023

1
হ্যাঁ ... বিভাগগুলি ওএস এবং সংকলক / লিঙ্কারের উপর নির্ভর করে। কখনও কখনও ডেটা বিভাগ থেকে আলাদা বিএসএস সেগমেন্ট থাকে। কখনও কখনও রোডাটা থাকে (ধ্রুব স্ট্রিংয়ের মতো ডেটা যা কেবলমাত্র পঠনযোগ্য পৃষ্ঠায় থাকতে পারে)। কিছু সিস্টেম এমনকি ডেটাকে ছোট ডেটা (একটি বেস + 16-বিট অফসেট থেকে অ্যাক্সেসযোগ্য) এবং (ফার) ডেটা (অ্যাক্সেসের জন্য 32-বিট অফসেটের প্রয়োজনে) ভাঙে। এটি আরও সম্ভব যে এখানে একটি অতিরিক্ত টিএলএস ডেটা (থ্রেড লোকাল স্টোর) বিভাগ রয়েছে যা প্রতি থ্রেড ভিত্তিতে উত্পন্ন হয়
অ্যাডিসাক

5
ওহ! না! আপনি বিভাগগুলি সহ বিভ্রান্তিকর বিভাগগুলি! বিভাগগুলি হ'ল লিঙ্কার কীভাবে মডিউলটিকে অংশগুলিতে বিভক্ত করে (ডেটা, rdata, পাঠ্য, বিএস, ইত্যাদি) you তবে আমি সেগমেন্টগুলি নিয়ে কথা বলছি, যেমনটি ইন্টেল / এএমডি x86 হার্ডওয়্যারে উল্লিখিত হয়েছে। সংকলক / লিকারগুলির সাথে মোটেই সম্পর্কিত নয়। আশা করি তা বোধগম্য হয়।
অ্যালেক্স বুদোভস্কি

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

20

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


আপনি গাদা ভুলে গেছেন। গাদা, আমি ভুল না হলে, থ্রেডের মধ্যে ভাগ করা উচিত
ফেট

20

একটি প্রক্রিয়াতে কোড, ডেটা, হিপ এবং স্ট্যাক বিভাগ রয়েছে। এখন, কোনও থ্রেডের নির্দেশিকা পয়েন্টার (আইপি) বা প্রক্রিয়াটির কোড বিভাগকে নির্দেশ করে to ডেটা এবং হিপ বিভাগগুলি সমস্ত থ্রেড দ্বারা ভাগ করা হয়। এখন স্ট্যাক এরিয়া নিয়ে কী হবে? আসলে স্ট্যাকের অঞ্চলটি কী? প্রক্রিয়াটি কেবল তার থ্রেডটি ব্যবহারের জন্য এটি তৈরি করা একটি অঞ্চল ... কারণ স্ট্যাকগুলি গাদা ইত্যাদির চেয়ে আরও দ্রুত উপায়ে ব্যবহার করা যেতে পারে the প্রক্রিয়াটির স্ট্যাক অঞ্চলটি থ্রেডগুলির মধ্যে ভাগ করা হয়, যদি 3 টি থ্রেড থাকে তবে প্রক্রিয়াটির স্ট্যাক ক্ষেত্রটি 3 ভাগে বিভক্ত এবং প্রতিটি 3 টি থ্রেডে দেওয়া হয়। অন্য কথায়, আমরা যখন বলি যে প্রতিটি থ্রেডের নিজস্ব স্ট্যাক থাকে, তখন সেই স্ট্যাকটি প্রতিটি থ্রেডে বরাদ্দকৃত প্রক্রিয়া স্ট্যাকের একটি অংশ। যখন কোনও থ্রেড এর কার্য সম্পাদন শেষ করে, থ্রেডের স্ট্যাকটি প্রক্রিয়াটির মাধ্যমে পুনরায় দাবি আদায় করে। আসলে, কোনও প্রক্রিয়াটির স্ট্যাক কেবল থ্রেডগুলির মধ্যে বিভক্ত নয়, তবে থ্রেডের সমস্ত সেট যা এসপি, পিসি এবং রাজ্য রেজিস্টারের মতো ব্যবহার করে তা প্রক্রিয়াটির নিবন্ধক। সুতরাং এটি ভাগ করার ক্ষেত্রে, কোড, ডেটা এবং হিপ অঞ্চলগুলি ভাগ করা হয়, যখন স্ট্যাকের অঞ্চলটি কেবল থ্রেডগুলির মধ্যে ভাগ করা হয়।


13

থ্রেডগুলি কোড এবং ডেটা বিভাগ এবং হিপ ভাগ করে তবে তারা স্ট্যাকটি ভাগ করে না।


11
"স্ট্যাকের ডেটা অ্যাক্সেস করতে সক্ষম" এবং স্ট্যাকটি ভাগ করার মধ্যে পার্থক্য রয়েছে। এই থ্রেডগুলির নিজস্ব স্ট্যাক রয়েছে যা ধাক্কা খায় এবং প্যাপগুলি হয়ে যায় যখন তারা পদ্ধতিগুলি কল করে they
কেভিন পিটারসন

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

@ ডেভিডশওয়ার্টজ, আমি আপনার পয়েন্টটি নীচের মতো সংক্ষেপে বলতে পারি: প্রতিটি থ্রেডের নিজস্ব স্ট্যাক থাকে এবং স্ট্যাকটি 2 অংশ নিয়ে থাকে - প্রক্রিয়াটি বহু-থ্রেড হওয়ার আগে থ্রেডগুলির মধ্যে ভাগ করা প্রথম অংশ এবং দ্বিতীয় অংশটি যখন পপুলেটে থাকে নিজস্ব থ্রেড চলছে .. একমত?
ফেসব্রো

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

5

থ্রেডগুলি প্রক্রিয়াগুলি না করে এমন সময় ডেটা এবং কোড ভাগ করে। স্ট্যাক উভয়ের জন্য ভাগ করা হয় না।

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

           প্রক্রিয়া থ্রেড

   ব্যক্তিগত বেসরকারী স্ট্যাক
   ডেটা ব্যক্তিগত ভাগ করা হয়েছে
   কোড ব্যক্তিগত 1 টি   ভাগ করেছে 2

1 কোডটি যৌক্তিকভাবে ব্যক্তিগত তবে কার্য সম্পাদনের কারণে ভাগ করা যেতে পারে। 2 আমি 100% নিশ্চিত নই।


আমি বলব ডেটা থেকে আলাদা কোড বিভাগ (পাঠ্য বিভাগ) প্রায়শই বেশিরভাগ আর্কিটেকচারে কেবলমাত্র পঠনযোগ্য।
হোর্হে কর্ডোবা

4

থ্রেডগুলি সমস্ত কিছু ভাগ করে দেয় [1]। পুরো প্রক্রিয়াটির জন্য একটি ঠিকানা ঠিকানা রয়েছে।

প্রতিটি থ্রেডের নিজস্ব স্ট্যাক এবং রেজিস্টার রয়েছে তবে সমস্ত থ্রেডের স্ট্যাকগুলি ভাগ করা ঠিকানার জায়গায় দৃশ্যমান।

যদি কোনও থ্রেড তার স্ট্যাকের উপর কিছু বস্তু বরাদ্দ করে এবং অন্য থ্রেডটিতে ঠিকানাটি প্রেরণ করে তবে তাদের উভয়কেই সেই বস্তুর সমান অ্যাক্সেস থাকবে।


আসলে, আমি কেবল একটি বিস্তৃত সমস্যা লক্ষ্য করেছি: আমি মনে করি আপনি বিভাগটি শব্দের দুটি ব্যবহারকে বিভ্রান্ত করছেন ।

এক্সিকিউটেবল (উদাহরণস্বরূপ, ELF) এর জন্য ফাইল ফর্ম্যাটটিতে পৃথক বিভাগ রয়েছে, যা সংকলিত কোড (পাঠ্য), আর্কিডাইজড ডেটা, লিংক প্রতীক, ডিবাগ তথ্য, ইত্যাদি সম্বলিত অংশ হিসাবে উল্লেখ করা যেতে পারে সেখানে কোনও হিপ বা স্ট্যাক সেগমেন্ট নেই There এখানে, যেহেতু সেগুলি কেবলমাত্র রানটাইম-এর নির্মাণ।

এই বাইনারি ফাইল অংশগুলি পৃথক অনুমতি সহ প্রসেসের ঠিকানা স্পেসে ম্যাপ করা যেতে পারে (উদাহরণস্বরূপ, কোড / পাঠ্যের জন্য কেবল পঠনযোগ্য এক্সিকিউটেবল এবং প্রারম্ভিক ডেটার জন্য অনুলিপি-অন-লিখনের জন্য) copy

এই ঠিকানার জায়গার অঞ্চলগুলি বিভিন্ন উদ্দেশ্যে যেমন হিপ বরাদ্দ এবং থ্রেড স্ট্যাকগুলি ব্যবহার করে কনভেনশন করে (আপনার ভাষা রানটাইম লাইব্রেরি দ্বারা প্রয়োগ করা হয়)। যদিও এটি ভার্চুয়াল ৮০ mode mode মোডে চালাচ্ছেন না এগুলি সমস্তই মেমোরি এবং সম্ভবত সেগমেন্টেড নয়। প্রতিটি থ্রেডের স্ট্যাকটি থ্রেড তৈরির সময় বরাদ্দ করা মেমরির একটি অংশ, বর্তমান স্ট্যাকের শীর্ষ ঠিকানাটি একটি স্ট্যাক পয়েন্টার রেজিস্টারে সঞ্চিত থাকে এবং প্রতিটি থ্রেড তার নিজস্ব স্ট্যাক পয়েন্টারটিকে তার অন্যান্য রেজিস্টারের সাথে রাখে।


[1] ঠিক আছে, আমি জানি: সংকেত মুখোশ, টিএসএস / টিএসডি ইত্যাদি ঠিকানার স্থানটি এর ম্যাপযুক্ত প্রোগ্রামের সমস্ত অংশ সহ এখনও ভাগ করা আছে।


3

একটি x86 ফ্রেমওয়ার্কে, কেউ একাধিক বিভাগকে বিভক্ত করতে পারে (2 ^ 16-1 অবধি)। এএসএমের নির্দেশাবলী SEGMENT / সমাপ্তি এটির অনুমতি দেয় এবং অপারেটরগুলি এসইজি এবং অফফেসট সেগমেন্ট রেজিস্টারগুলির সূচনা করার অনুমতি দেয়। সিএস: আইপি সাধারণত লোডার দ্বারা আরম্ভ হয়, তবে ডিএস, ইএস, এসএসের জন্য অ্যাপ্লিকেশনটি আরম্ভের সাথে দায়ী। অনেক পরিবেশ তথাকথিত "সরলিকৃত অংশ বিভাগের সংজ্ঞা" যেমন। কোড, .ডাটা, .বিএস,। স্ট্যাক ইত্যাদির অনুমতি দেয় এবং "মেমরি মডেল" (ছোট, বড়, কমপ্যাক্ট ইত্যাদি) এর উপরও নির্ভর করে লোডার সেগমেন্টের নিবন্ধগুলি আরম্ভ করে সেই অনুযায়ী। সাধারণত .ডাটা, .বিএস, .স্ট্যাক এবং অন্যান্য স্বাভাবিক বিভাগগুলি (আমি 20 বছর ধরে এটি করিনি তাই আমি সব মনে করি না) একটি একক দলে বিভক্ত হয় - এজন্য সাধারণত ডিএস, ইএস এবং এসএস পয়েন্টগুলিকে লক্ষ্য করে একই অঞ্চল, তবে এটি কেবল জিনিসগুলিকে সরল করার জন্য।

সাধারণভাবে, সমস্ত বিভাগের রেজিস্টারগুলির রান-টাইম অনুসারে বিভিন্ন মান থাকতে পারে। সুতরাং, সাক্ষাত্কারের প্রশ্নটি সঠিক ছিল: কোন কোড, ডেটা এবং স্ট্যাক থ্রেডের মধ্যে ভাগ করা আছে। হিপ ম্যানেজমেন্ট হ'ল অন্য কিছু - এটি কেবল ওএসের কলগুলির ক্রম। তবে এম্বেড থাকা সিস্টেমের মতো আপনার যদি কোনও ওএস না থাকে - তবে কি আপনার কোডটিতে এখনও নতুন / মুছতে পারবেন?

যুবকদের আমার পরামর্শ - কিছু ভাল সমাবেশ প্রোগ্রামিং বই পড়ুন। দেখে মনে হচ্ছে যে বিশ্ববিদ্যালয়ের পাঠ্যক্রমগুলি এই ক্ষেত্রে যথেষ্ট দুর্বল।


2

গ্লোবাল মেমোরির পাশাপাশি থ্রেডগুলি আরও অনেকগুলি বৈশিষ্ট্য ভাগ করে (যেমন, এই বৈশিষ্ট্যগুলি কোনও থ্রেডের পরিবর্তে কোনও প্রক্রিয়াতে বৈশ্বিক)। এই বৈশিষ্ট্যগুলির মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:

  • প্রক্রিয়া আইডি এবং প্যারেন্ট প্রসেস আইডি;
  • প্রক্রিয়া গ্রুপ আইডি এবং সেশন আইডি;
  • নিয়ন্ত্রণ টার্মিনাল;
  • প্রক্রিয়া শংসাপত্র (ব্যবহারকারী এবং গ্রুপ আইডি);
  • ফাইল বিবরণকারী খুলুন;
  • রেকর্ড লক ব্যবহার করে তৈরি fcntl();
  • সংকেত স্বভাব;
  • ফাইল সিস্টেম সম্পর্কিত তথ্য: উমাস্ক, বর্তমান ওয়ার্কিং ডিরেক্টরি এবং রুট ডিরেক্টরি;
  • বিরতি টাইমার ( setitimer()) এবং পসিক্স টাইমার ( timer_create());
  • সিস্টেম ভি সেম্যাফোর পূর্বাবস্থায় ফেরা ( semadj) মান (বিভাগ 47.8);
  • সংস্থান সীমা;
  • সিপিইউ সময় গ্রাস (হিসাবে ফিরে times());
  • সম্পদ গ্রাস (হিসাবে ফিরে getrusage()); এবং
  • সুন্দর মান (দ্বারা সেট setpriority()এবং nice())।

প্রতিটি থ্রেডের জন্য স্বতন্ত্র বৈশিষ্ট্যগুলির মধ্যে নিম্নরূপ:

  • থ্রেড আইডি (বিভাগ 29.5);
  • সংকেত মুখোশ;
  • থ্রেড-নির্দিষ্ট ডেটা (বিভাগ 31.3);
  • বিকল্প সিগন্যাল স্ট্যাক ( sigaltstack());
  • ভুল ভেরিয়েবল;
  • ভাসমান পয়েন্ট পরিবেশ (দেখুন fenv(3));
  • রিয়েলটাইম শিডিউলিং নীতি এবং অগ্রাধিকার (বিভাগ 35.3 এবং 35.3);
  • সিপিইউ অ্যাফিনিটি (বিভাগ 35.4 এ বর্ণিত লিনাক্স-নির্দিষ্ট);
  • ক্ষমতা (লিনাক্স-নির্দিষ্ট, অধ্যায় 39 বর্ণিত); এবং
  • স্ট্যাক (স্থানীয় ভেরিয়েবল এবং ফাংশন কল লিঙ্কেজ তথ্য)।

এর থেকে অংশ: লিনাক্স প্রোগ্রামিং ইন্টারফেস: একটি লিনাক্স এবং ইউনিক্স সিস্টেম প্রোগ্রামিং হ্যান্ডবুক, মাইকেল কেরিক , পৃষ্ঠা 619


0

থ্রেড শেয়ার হিপ (থ্রেড নির্দিষ্ট হিপ সম্পর্কে গবেষণা রয়েছে) তবে বর্তমান বাস্তবায়ন গাদা ভাগ করে দেয়। (এবং অবশ্যই কোড)


0

প্রক্রিয়াধীন সমস্ত থ্রেড সিস্টেম রিসোর্সের মতো হিপ মেমরি ইত্যাদি ভাগ করে নেয় যখন থ্রেডের নিজস্ব স্ট্যাক থাকে

সুতরাং আপনার উত্তরগুলি হ্যাপ মেমরি হওয়া উচিত যা সমস্ত থ্রেড প্রক্রিয়াটির জন্য ভাগ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.