উত্তর:
ম্যান পেজগুলি সাধারণত রেফারেন্স ডকুমেন্টগুলি থাকে। উইকিপিডিয়া একটি ভাল জায়গা ধারণাগত ব্যাখ্যা চালু হয়।
ফর্ক একটি প্রক্রিয়া সদৃশ: এটা একটি শিশু প্রক্রিয়া যার পিতা বা মাতা প্রক্রিয়া প্রায় অভিন্ন সৃষ্টি (অধিকাংশ সুস্পষ্ট পার্থক্য হল যে নতুন পদ্ধতির একটি ভিন্ন প্রক্রিয়া আইডি আছে) হয়। বিশেষ করে, কাঁটাচামচ (ধারণার দিক থেকে) সমস্ত পিতা বা মাতা প্রক্রিয়া স্মৃতিতে কপি উচিত নয়।
এই বরং ব্যয়বহুল হয়, vfork একটি সাধারণ বিশেষ ক্ষেত্রে পরিচালনা করতে আবিষ্কৃত হয় যেখানে কপি প্রয়োজন নেই। প্রায়শই, প্রথম জিনিস শিশু প্রক্রিয়া আছে তাই এই যা হওয়ার তাই হল, একটি নতুন প্রোগ্রাম চিত্রটি লোড করা:
if (fork()) {
# parent process …
} else {
# child process (with a new copy of the process memory)
execve("/bin/sh", …); # discard the process memory
}
execve
কল লোড একটি নতুন এক্সিকিউটেবল প্রোগ্রাম, এবং এই প্রতিস্থাপন নতুন এক্সিকিউটেবল কোড এবং একটি নতুন করে তথ্য মেমরি দ্বারা প্রক্রিয়া এর কোড এবং ডাটা মেমরির। দ্বারা নির্মিত পুরো মেমরির কপি সুতরাং fork
কিছুই জন্য সব ছিল।
এভাবে vfork
কল আবিষ্কৃত হয়। এটি মেমরি একটি কপি দেখা যায় না। অতএব vfork
সস্তা, কিন্তু এটা যেহেতু আপনি নিশ্চিত করতে হবে ব্যবহার করা কঠিন আপনি না এক্সেস প্রক্রিয়া এর স্ট্যাকের বা শিশু প্রক্রিয়ায় গাদা স্থান কোন। মনে রাখবেন যে পড়তে এমনকি সমস্যা হতে পারে, কারণ পিতামাতার প্রক্রিয়া চালিয়ে যায়। উদাহরণ হিসেবে বলা যায়, এই কোড ভাঙ্গা (এটা বা শিশু বা অভিভাবক প্রথমে একটি সময় ফালি পায় কিনা না নির্ভর করে কাজ করতে পারে পারে) হয়:
if (vfork()) {
# parent process
cmd = NULL; # modify the only copy of cmd
} else {
# child process
execve("/bin/sh", "sh", "-c", cmd, (char*)NULL); # read the only copy of cmd
}
Vfork উদ্ভাবন সাল থেকে, ভাল অপ্টিমাইজেশন উদ্ভাবিত হয়েছে। লিনাক্স সমেত অধিকাংশ আধুনিক সিস্টেম,, একটি ফর্ম ব্যবহার কপি-অন-লেখ , যেখানে প্রক্রিয়া মেমরি পেজের সময়ে অনুলিপি করা হয়নি fork
কল, কিন্তু পরে যখন বাবা-মা বা শিশু পৃষ্ঠায় প্রথম লিখেছেন। প্রতিটি পৃষ্ঠা আরম্ভ আউট হিসাবে ভাগ, এবং যে পৃষ্ঠায় পারেন প্রক্রিয়া লিখেছেন পর্যন্ত ভাগ থাকে, হয়; প্রক্রিয়া যা লিখেছেন একটি নতুন শারীরিক (একই ভার্চুয়াল অ্যাড্রেস সহ) পৃষ্ঠা পায়। কপি-অন-লেখ তোলে বেশিরভাগই বেহুদা vfork, যেহেতু fork
ক্ষেত্রে যেখানে কোনো অনুলিপি তৈরি করা হবে না vfork
ব্যবহারযোগ্য হবে।
লিনাক্স vfork ধরে রাখা আছে। fork
সিস্টেম কল এখনও প্রক্রিয়া এর ভার্চুয়াল মেমরি টেবিল একটি কপি করতে হবে, যদিও তা প্রকৃত মেমরি কপি না; vfork
এমনকি এই কাজ করতে প্রয়োজন হবে না। কর্মক্ষমতা বৃদ্ধি সবচেয়ে অ্যাপ্লিকেশনের মধ্যে তুচ্ছ হয়।
fork
চাহিদা আলাদা ভার্চুয়াল মেমরি ম্যাপিং তৈরি করতে যাতে পরবর্তী কপি-অন-লেখ কপি মাত্র দুটি প্রসেস এক প্রভাবিত।
fork()
এবং vfork()
syscalls ভিন্ন।
fork()
প্রাপ্ত syscall পৃথক মেমরির একই রকম দুটি প্রসেস জেনারেট করে। vfork()
প্রাপ্ত syscall দুই প্রক্রিয়ার ভাগ একই মেমরির জেনারেট করে।
সঙ্গে vfork()
পিতা বা মাতা সন্তান বন্ধ জন্য অপেক্ষা করব। ভেরিয়েবল থেকে পিতা বা মাতা inherites যে প্রোগ্রাম ভাগ করছে। তাই পরে সন্তান বলা হয়, সব ভেরিয়েবল শিশু ভিতরে পরিবর্তিত এখনও পিতা বা মাতা ভিতরে পরিবর্তন করা হবে।
আরও তথ্যের জন্য ক্লিক এখানে