انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: Fork چیست ؟  (دفعات بازدید: 11734 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین امیر و

  • Hero Member
  • *
  • ارسال: 791
  • جنسیت : پسر
  • Google is your friend
Fork چیست ؟
« : 17 آذر 1389، 04:32 ب‌ظ »
سلام به همه.

میخواستم در مورد Fork به من کمی اطلاعات بدین.

استاد درس سیستم عامل گفت برم راجع به Fork تحقیق کنم.

مطلب فارسی تقریبا هیچی پیدا نکردم.

ممنون میشم اگه یه سری اطلاعات به من بدین که من بتونم 10 دقیقه برم Presentation بدم.

با تشکر.

آفلاین امیرمهری

  • High Hero Member
  • *
  • ارسال: 1270
  • جنسیت : پسر
  • درورد بر اوبونتو
خداحافظ وبلاگ نويسي

من كاربر حرفه اي لينوكس نيستم
فقط خوب جستجو ميكنم.

آفلاین امیر و

  • Hero Member
  • *
  • ارسال: 791
  • جنسیت : پسر
  • Google is your friend
پاسخ به: Fork چیست ؟
« پاسخ #2 : 17 آذر 1389، 10:42 ب‌ظ »
مرسی اما من فارسی میخواستم.

انگلیسیشو دارم.

اما میخوام یکی بطور کلی توضیحش بده تا بفهمم چی به چیه ، بعد انگلیسیش رو راحت تر میتونم بفهمم.

آفلاین fzerorubigd

  • Hero Member
  • *
  • ارسال: 758
  • جنسیت : پسر
  • گوگل دوست خوبیه، فقط باید ازش بپرسی
    • یادداشتهای بیت نیمسوز
پاسخ به: Fork چیست ؟
« پاسخ #3 : 17 آذر 1389، 11:20 ب‌ظ »
سیستم ساده ای هستش.
یه پروسه، میتونه یه کپی دقیقا برابر از خودش رو بسازه، با همون محتوای حافظه و دقیقا در یه وضعیت با پروسه اولیه.(با یه سری تفاوت البته، تو man fork ببینید این تفاوتها رو.)
بعد از عمل fork شما با یه بررسی ساده از خروجی این تابع میتونید بفهمید که الان تو پروسه فرزند هستید یا پروسه پدر.

آفلاین امیر و

  • Hero Member
  • *
  • ارسال: 791
  • جنسیت : پسر
  • Google is your friend
پاسخ به: Fork چیست ؟
« پاسخ #4 : 17 آذر 1389، 11:35 ب‌ظ »
اقا مرسی.

فقط این به چه دردی میخوره ؟

آفلاین rezass

  • Full Member
  • *
  • ارسال: 153
  • مرگ بر نژاد پرستی
پاسخ به: Fork چیست ؟
« پاسخ #5 : 17 آذر 1389، 11:36 ب‌ظ »
این تایع دقیقا یک پراسس دیگه مثل همین یکی شما میسازه و از دستور بعد از fork اون رو شروع به اجرا میکنه.
برای تشخیص اینکه الان کدوم پراسس داره این دستور رو اجرا میکنه وقتی شما fork رو صدا میزنین خروجیش که شماره پراسس فرزند هست رو توی یک متغیر میریزین.
و مثلا قبلش این متغیر رو مقدار ۰ دادین. اینجوری در فرزند این متغیر صفر هست و توی پدر مقدار داره.
(البته اگه اشتباه نکنم چون سیستم عامل رو چند وقت پیش پاس کردم دقیق یادم نیست)

int i=0;
i=fork();
if(i==0){inja kari ke processe farzand bayad bokone ro mizarin}
else {kari ke processe pesar bayad bokone}

آفلاین r_m1232002

  • Full Member
  • *
  • ارسال: 143
پاسخ به: Fork چیست ؟
« پاسخ #6 : 18 آذر 1389، 03:18 ب‌ظ »
در حالت معمول هنگامی که شما یک برنامه در زبانی مانند سی می نویسید سیستم عامل کد شما را خط به خط اجرا می کنم و اجرا بخش های بعدی وابسطه به اجرا شدن قسمت های قبلی است. اما در برخی شرایط شما نیاز دارید تا برنامه ای بنویسید تا چند عمل را به صورت موازی انجام دهد. یک مثال معمول می تواند یک سرور وب باشد. هنگامی که یک کلاینت یک صفحه را از یک سرور وب درخواست می کند اگر سرور پاسخ آن کلاینت را بدهد و سپس به پاسخ کلاینت دیگری گوش دهد ، در آن فاصله زمانی بسیاری از درخواست ها به سرور بی پاسخ مانده و شکست می خورند. بنابراین اگر سرور بتواند هر درخواستی که دریافت می کند را به شکل موازی با درخواست های دیگر پاسخ دهد می تواند بسیار کارا تر عمل کند و در یک زمان به تعداد بیشتری کلاینت سرویس دهی کند.
کاربرد تابع fork دقیقا همین موضوع می باشد. هنگامی که برنامه شما این تابع را صدا کند سیستم عامل برنامه شما را که در قالب یک پروسه اجرا می شود به دو پروسه دقیقا همانند هم تبدیل می کند که به طور موازی اجرا می شوند. ( یک چنگال را تصور کنید! ) خروجی تابع  یا صفر است و یا یک عدد. برنامه شما می تواند با بررسی خروجی این تابع متوجه شود که الان کدام پروسه می باشد و با توجه به این موضوع به کاری متفاوت بپردازد. مثلا پروسه سرور وقتی یک درخواست از یک کلاینت دریافت می کند تابع fork را صدا می کند. حال برنامه شما در دو پروسه اجرا می شود. اکنون با بررسی مقدار خروجی تابع fork  میتوان فهمید که پروسه جاری پروسه فرزند است یا والد . اگر پروسه والد بود که یعنی همان سرور است و دوباره به درخواست های کلاینت ها پاسخ می دهد. اما اگر پروسه فرزند بود حال ازکلاینت اطلاعات بیشتری می گیرد و صفحه وب مورد نطر را برای کلاینت می فرستد.
به این ترتیب یک برنامه می تواند در تعداد زیادی نسخه به شکل موازی اجرا شود که هرکدام کار متفاوتی را انجام می دهند.
امیدوارم این توضیحات مفید واقع شود.
« آخرین ویرایش: 18 آذر 1389، 03:20 ب‌ظ توسط r_m1232002 »

آفلاین امیر و

  • Hero Member
  • *
  • ارسال: 791
  • جنسیت : پسر
  • Google is your friend
پاسخ به: Fork چیست ؟
« پاسخ #7 : 18 آذر 1389، 06:48 ب‌ظ »
ممنون.

من اینا رو خوندم.

یکم دیگه سرچ میکنم اگه سوالی داشتم میپرسم.

مرسی.

آفلاین babak210987

  • Newbie
  • *
  • ارسال: 1
  • جنسیت : پسر
پاسخ : Fork چیست ؟
« پاسخ #8 : 12 فروردین 1392، 03:22 ب‌ظ »
r_m1232002    مرسی از شما .

آفلاین دانیال بهزادی

  • ناظر انجمن
  • *
  • ارسال: 19722
  • جنسیت : پسر
  • Urahara Kiesuke
    • وبلاگ
پاسخ : Fork چیست ؟
« پاسخ #9 : 13 فروردین 1392، 03:35 ق‌ظ »
fork یه فرایند عین فرایند نخست (پدر) می‌سازه که بعد از این که بهش پردازنده رسید معمولاً با execve خودش رو به یه فرایند دیگه تبدیل می‌کنه (فرزند) که می‌تونه کاری مستقل یا در هم‌کاری با فرایند اصلی انجام بده. جالبه بدونی بعد از این که هسته بار شد فقط یه فرایند به اسم init ایجاد می‌شه و همه‌ی فرایندهای دیگه فرزندها و نوادگان این فرایند هستن.
اگه این ارسال بهت کمک کرد، دنبال دکمهٔ تشکر نگرد. به جاش تو هم به جامعهٔ آزادت کمک کن