থ্রেডগুলি কি ভার্চুয়াল মেমরি বা আসল মেমরি ব্যবহার করে?


10

আমি আমার লিনাক্স সার্ভারটি প্রতি প্রক্রিয়ায় 10,000 টি থ্রেড পরিচালনা করতে অপ্টিমাইজ করার চেষ্টা করছিলাম যখন এখনই এটি 382 টি করে। অনুযায়ী এই নিবন্ধটি নিম্নলিখিত সূত্র আউট মোট সম্ভব থ্রেড এটি ব্যবহার করা হয়:

number of threads = total virtual memory / (stack size*1024*1024)

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

সুতরাং আমার প্রশ্নটি হল যে আমাদের থ্রেডগুলি এর ডেটা প্রক্রিয়াকরণ / সঞ্চয় করার জন্য হার্ডডিস্ক ব্যবহার করে।

যদি হ্যাঁ, তবে কি এই প্রভাবটি সম্পাদন করে না? আমরা তাদের র‌্যাম বা ক্যাশে রেখে কর্মক্ষমতা বাড়িয়ে তুলতে পারি? কিভাবে?

যদি না হয় তবে থ্রেডগুলি ঠিক কীভাবে কাজ করবে?

হালনাগাদ:

অকেজো এর উত্তর অনুসারে ভার্চুয়াল মেমোরি মোটামুটি সমন্বিত একটি সিস্টেম:

  • শারীরিক স্মৃতি (র‌্যাম)
  • আপনি সংযুক্ত কোন swapfiles
  • শারীরিক ঠিকানাগুলিতে ভার্চুয়াল অনুবাদ করার জন্য এবং যখন ভার্চুয়াল ঠিকানাটি শারীরিক স্মৃতিতে পাওয়া যায় না তখন পৃষ্ঠা ত্রুটি জারি করার জন্য হার্ডওয়্যার সমর্থন
  • (কার্নেল) সফ্টওয়্যার সমর্থন: ডিভাইসগুলির চাহিদা অনুযায়ী অদলবদল থেকে পৃষ্ঠাগুলি টানিয়ে সেই হার্ডওয়্যার দ্বারা ব্যবহৃত তদন্ত সারণি পরিচালনা করা

সুতরাং, ভার্চুয়াল মেমরিতে থাকা সমস্ত কিছুই সম্মিলিতভাবে র‍্যাম (রিয়েল মেমরি) এবং হার্ড ডিস্কে (অদলবদল) উপর থাকে। এবং জেমস রাম বনাম এইচডিডি সম্পর্কে তাঁর উত্তরটিতে ব্যাখ্যা হিসাবে এলআরইউর মতো অ্যালগরিদম ব্যবহার করে কার্নেল গ্রহণ করেছেন।


2
আপনার সার্ভারের 10,000 সিপিইউ / কোর না থাকলে আপনি নিজের সময় নষ্ট করছেন।

@ জারোডরোবারসন: তা কেন?
ড্রাগগ্রেসপ্রাকুল

3
10,000 টি থ্রেডগুলি জিনিসগুলি স্কেল করার পক্ষে ভাল উপায় নয়, কোনও সার্ভারকে ক্রল আসার পক্ষে এটি একটি ভাল উপায়, সিপিইউ বা কোর প্রতি 1 টির বেশি থ্রেড সার্ভারের প্রসঙ্গটি স্যুইচ করতে চলেছে এবং ধীরে ধীরে ধীরে চলবে না।

বিশেষত, যখন আপনি "আমার লিনাক্স সার্ভারটি অপ্টিমাইজ করার চেষ্টা করছেন" বলছেন - আপনি কী অনুকূলিত করার চেষ্টা করছেন? যদি এটি থ্রুপুট হয়, তবে মাল্টিপ্লেক্সিং এবং নন-ব্লকিং I / O সহ সিপিইউতে প্রতি একটি থ্রেড ভাল হওয়ার সম্ভাবনা রয়েছে।
বেহুদা

উত্তর:


12

আমার জ্ঞানের সর্বোত্তম হিসাবে, ভার্চুয়াল মেমরিটি একটি লিনাক্স মেশিনে অদলবদল

না, ভার্চুয়াল মেমরি মোটামুটি সমন্বিত একটি সিস্টেম:

  • শারীরিক স্মৃতি (র‌্যাম)
  • আপনি সংযুক্ত কোন swapfiles
  • শারীরিক ঠিকানাগুলিতে ভার্চুয়াল অনুবাদ করার জন্য এবং যখন ভার্চুয়াল ঠিকানাটি শারীরিক স্মৃতিতে পাওয়া যায় না তখন পৃষ্ঠা ত্রুটি জারি করার জন্য হার্ডওয়্যার সমর্থন
  • (কার্নেল) এর জন্য সফ্টওয়্যার সমর্থন:
    • সেই হার্ডওয়্যার দ্বারা ব্যবহৃত লুকিং টেবিলগুলি পরিচালনা করা
    • চাহিদা অনুযায়ী অদলবদল থেকে পৃষ্ঠাগুলি টানিয়া সেই পৃষ্ঠা ত্রুটিগুলি পরিচালনা করে

আপনি যে ভার্চুয়াল মেমরিটি চান তা যখন আপনি চান তখন এটি র‍্যামে ক্যাশে হয়ে গেছে তা নিশ্চিত করার জন্য এটি কার্নেলের উপর নির্ভর করে - আপনি নিজের ইউজারস্পেস ভিএম স্তর (যেমন ডেটাবেসগুলি প্রায়শই করেন, iiuc) না লিখে কেবল এ সম্পর্কে চিন্তা করবেন না।


ঠিক আছে তাই আমার ভার্চুয়াল মেমরি অনুমানটি ভুল ছিল। যাইহোক একটি দ্রুত ফলোআপ প্রশ্ন .. যদি সুইড স্পেস র‌্যামের চেয়ে বেশি হয় তবে সম্পূর্ণভাবে লোড হওয়া সর্বোচ্চ থ্রেডের কার্যকারিতা প্রভাবিত হবে?
ড্রাগগ্রেসপ্রাকুল

@ ডিগ্রোসরস্পেরকুল: আপনার অদলবদলটি সবসময় শারীরিক মেমরির চেয়ে বড় হতে চলেছে, অন্যথায় মো ভার্চুয়াল মেমরি ব্যবহার করা দরকার।
ব্রায়ান ওকলে

1
@ ব্রায়ান ওকলে: এটি অবশ্যই সত্য নয়। কিছু ওএসের বরাদ্দকৃত প্রতিটি ভার্চুয়াল পৃষ্ঠার জন্য একটি সোয়াপ পৃষ্ঠা বরাদ্দ করা হয় (অর্থাত্ সোয়াপ কমপক্ষে দৈহিকের চেয়েও বড় হতে হবে)। অন্যান্য ওএসের কেবলমাত্র যখন কোনও পৃষ্ঠাকে শারীরিক স্মৃতি থেকে সরিয়ে রাখার প্রয়োজন হয় তখনই অদলবদ পৃষ্ঠা বরাদ্দ করা হয় (অর্থাত্ সোয়াপ শারীরিক চেয়ে কম হতে পারে)। পূর্বের সুবিধাটি হ'ল যদি বরাদ্দটি সফল হয়, তবে সেই স্মৃতিটি সর্বদা সফল হয়। পরেরটির সুবিধাটি হ'ল তুলনামূলক বিরল পরিস্থিতির জন্য আপনাকে হতাশাজনকভাবে বিশাল অদলবদ ফাইল বরাদ্দ করতে হবে না।
এমসিএমসিসি

1
@ ডিগ্রোগোসারুপেরকুল, র‌্যামের পরিমাণ এবং অদলবদল বা তাদের মধ্যকার অনুপাতের দ্বারা পারফরম্যান্স প্রভাবিত হবে না যদি আপনি র‌্যাম কম হন এবং প্রকৃতপক্ষে পেজিং করেন না। স্যার আপনাকে পেজিং ক্রিয়াকলাপ আইরিচ সম্পর্কে বলতে পারে (চেক করা হয়েছে: sar -Bলিনাক্সে)।
বেহুদা

@ ব্যবহারহীন: আমি সম্পূর্ণরূপে র‌্যাম ব্যবহার না করা এবং পেজিং শুরু না করা পর্যন্ত থ্রেডের সংখ্যা বাড়িয়ে তুলতে চাই।
ড্রাগগ্রেসপ্রাকুল

14

থ্রেডটি যদি প্রকৃতপক্ষে চলমান থাকে তবে বর্তমান নির্দেশ এবং থ্রেডটি যে কোনও ভেরিয়েবল ব্যবহার করছে তা অবশ্যই শারীরিক স্মৃতিতে থাকা উচিত।

বেশিরভাগ (বাস্তবে প্রায় সবগুলি) প্রোগ্রাম ভার্চুয়াল মেমোরিতে থাকে এবং বেশিরভাগ প্রোগ্রাম ভেরিয়েবলের সঞ্চয় করার জন্য ভার্চুয়াল মেমরি ব্যবহার করে।

ভার্চুয়াল ঠিকানাগুলিকে পৃষ্ঠাগুলি বলা অংশগুলিতে সংগঠিত করা হয় (এগুলি সাধারণত 4096 বা 8192 বাইট ব্লক হয়)।

যেকোন সময় ভার্চুয়াল মেমরির প্রতিটি ব্লক সত্যিকারের মেমোরিতে বা ডিস্কের জন্য এটির জন্য সংরক্ষিত "অদলবদলে" সংরক্ষণ করা হয়।

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

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

আধুনিক সিস্টেমে ভার্চুয়াল স্টোরেজের সাথে যুক্ত কয়েকটি অপ্টিমাইজেশন এবং কৌশল রয়েছে।

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

3
"একটি লিনাক্স বাক্সের সমস্ত সি প্রোগ্রাম একই ঠিকানা থেকে [মূল] শুরু করে" মনে হয় ঠিকানার স্থানের বিন্যাসটি র‍্যান্ডমাইজেশনকে বিবেচনায় নিবে না। এটি বিভিন্ন স্ট্যাকের বিপর্যয় আক্রমণ স্কিমগুলিকে ব্যর্থ করতে আজ আরও বেশি বেশি ব্যবহৃত হয়। ভাল উত্তর অন্যথায়, তাই +1।
একটি সিভিএন

7

প্রথমত, আপনাকে কম্পিউটারের মেমোরিতে আরও পড়তে হবে কারণ আপনার মনে হয় সেই ক্ষেত্রে আপনার জ্ঞানের অভাব রয়েছে।

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

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


@ ভি জোনভিক: বেসিক থ্রেডের ব্যাখ্যার জন্য +1।
ড্রাগগ্রেসপ্রাকুল

6

আপনার প্রশ্নের সহজ উত্তর হ'ল তারা ভার্চুয়াল মেমরি ব্যবহার করে। ওএস সম্পর্কিত কয়েকটি মুদ্রণ প্রক্রিয়া বাদে সবকিছু ভার্চুয়াল মেমরি ব্যবহার করে।

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


3

ভার্চুয়াল মেমরিটি আপনার র‌্যাম প্লাস আপনার অদলবদল। ভার্চুয়ালটির অর্থ হ'ল আপনার প্রোগ্রামটি যে ঠিকানা দেখায় তা র‍্যাম চিপ যে ঠিকানা দেখায় তার চেয়ে আলাদা। আপনার যদি অদলবদলে মেমরি অ্যাক্সেস করতে হয় তবে ওএস প্রথমে এটি র‍্যামে স্থানান্তরিত করবে। আপনি যদি কোনও অদলবদল করতে না চান, কেবল এটি অক্ষম করুন। আপনার যদি পর্যাপ্ত র‍্যাম থাকে তবে আপনার সত্যিকারের এটি দরকার হয় না।

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


হ্যাঁ, আমার সার্ভারটি 32 বিট সিঙ্গল কোর মেশিন হিসাবে 10,000 খুব বেশি। আসলে, থ্রেডগুলি মোট সিপু জিনিস নয়। এগুলি ক্রলার থ্রেড, তাই তারা কখনও কখনও সার্ভারের প্রতিক্রিয়ার জন্য অপেক্ষা করার মতো হয়। আমার লক্ষ্য সিপিইউ পুরোপুরি দখল করা হয়েছে তবে ওভারলোড বা আন্ডারলোড নয় make তবে আমি এখনও বুঝতে ব্যর্থ হয়েছি কীভাবে আমি জানতে পারি যে সিপিইউ ফ্রি বা সম্পূর্ণ দখলে রাখার মতো like কোন সরঞ্জাম বা আদেশ আছে?
ড্রাগগ্রেসপ্রাকুল

আমি মনে করি আপনি topকমান্ড থেকে তথ্য পেতে পারেন ।
কার্ল বিলেফেল্ট

@ কার্লবিল্ডেল্ড্ট: হ্যাঁ আমি যা চেয়েছিলাম ঠিক সেটাই ছিল .. আর একটি ফলোআপ প্রশ্ন: আমি কেবল ক্রলিংয়ের জন্য একটি ধারণা নিয়ে এসেছি যে যদি অন্য থ্রেডটি সার্ভারের প্রতিক্রিয়া গ্রহণ করে তবে কোনও থ্রেড url এর জন্য অনুরোধ পাঠাতে পারে তবে আমি রাখতে পারি অনেক বেশি থ্রেড ব্যবহার না করেই সিপিইউ ব্যবহার উচ্চ। এটা কি সম্ভব? অন্য থ্রেডে প্রতিক্রিয়া পাওয়ার সময় একটি থ্রেড থেকে অনুরোধ পাঠানোর মতো?
ড্রাগগ্রেসপ্রাকুল

2

প্রক্রিয়া প্রতি 10,000 থ্রেড পরিচালনা করতে আমার লিনাক্স সার্ভারকে অনুকূলিত করুন

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

অপারেটিং সিস্টেমগুলি পড়ুন : তিনটি সহজ টুকরো (নিখরচায় ডাউনলোডযোগ্য পাঠ্যপুস্তক)।

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

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

লিনাক্সে, একটি প্রক্রিয়া হ'ল থ্রেডগুলির একটি গ্রুপ যা একই ভার্চুয়াল ঠিকানার স্থান ভাগ করে (এবং কিছু অন্যান্য জিনিস যেমন ফাইল বিবরণকারী টেবিল ইত্যাদি ভাগ করে ...)। কিছু প্রক্রিয়াতে কেবল একটি থ্রেড থাকে।

একটি ভার্চুয়াল অ্যাড্রেস স্পেস হয় সংজ্ঞায়িত হিসাবে উইকিপিডিয়া

"ভার্চুয়াল ঠিকানাগুলির ব্যাপ্তিগুলির সেট যা একটি অপারেটিং সিস্টেম একটি প্রক্রিয়াতে উপলব্ধ করে"

(তবে এই উত্তরটিও ব্যাখ্যা করে দেখুন যে পরিভাষাটি সর্বজনীন নয় এবং কিছু মাইক্রোসফ্ট ডকুমেন্টেশন পৃথক এবং বেমানান সংজ্ঞা ব্যবহার করে)।

লিনাক্সে, প্রোস (5) কিছু প্রক্রিয়ার ভার্চুয়াল অ্যাড্রেস স্পেস বোঝার জন্য দরকারী। উভয়
cat /proc/self/mapsএবং cat /proc/$$/mapsএকটি টার্মিনাল চেষ্টা করুন । আরও দেখুন এই , এবং pmap (1)PS (1)শীর্ষ (1)

সমস্ত ব্যবহারকারীর স্থান প্রোগ্রাম কোনও প্রক্রিয়াতে চলছে এবং ভার্চুয়াল মেমরি ব্যবহার করছে যাতে প্রতিটি প্রক্রিয়াটির নিজস্ব ভার্চুয়াল ঠিকানার স্থান থাকে। ফিজিকাল র‌্যাম লিনাক্স কার্নেল দ্বারা পরিচালিত একটি সংস্থান এবং অ্যাপ্লিকেশনগুলিতে র‌্যামের সরাসরি অ্যাক্সেস নেই (এমএমএপি (2) -ইং ছাড়া /dev/mem, মেম (4) দেখুন )।

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

সিস্টেম থ্রেডের উপরে আপনার সবুজ থ্রেড থাকতে পারে (তবে সবুজ থ্রেড লাইব্রেরিগুলি প্রয়োগ করা এবং ডিবাগ করা কঠিন)। দেখব goroutines ব্যবহৃত যান একটি অভিনব উদাহরণস্বরূপ। আরও দেখুন setcontext (3)

কখনও কখনও, আপনার সিস্টেমটি ছোটাছুটি পরীক্ষা করতে পারে । এটি তখন ঘটে যখন মোট ভার্চুয়াল মেমরি (সমস্ত প্রক্রিয়া দ্বারা প্রয়োজনীয়) একটি বৃহত ফ্যাক্টর - উপলব্ধ শারীরিক র্যামকে ছাড়িয়ে যায়। তারপরে আপনার কম্পিউটারটি প্রতিক্রিয়াবিহীন হয়ে ওঠে। সম্পর্কে পড়ুন বাসিন্দা সেট আকার , চাহিদা পেজিং , কাজ সেট , মেমোরি overcommitmment , ASLR

Linux- -for আরও দেখুন কাঁটাচামচ (2) , ক্লোন (2) , mmap (2) , madvise (2) , posix_fadvise (2) , mlock (2) , execve (2) , পরিচয়পত্র (7) , pthreads (7) , futex (7) , ক্ষমতা (7)

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