سوال 97

حل تشریحی سوال شماره 97 مجموعه دروس تخصصی مشترک

کنکور ارشد مهندسی فناوری اطلاعات (IT) 1398

97.

با اجرای کد زیر در نهایت چند پردازه خواهیم داشت؟

main()

{

for(i=1;i<4;i++)

fork();

}

1)

2

2)

4

3)

8

4)

16

پاسخ ها

1 پاسخ
دکتر ابوالفضل حقیقت
دکتر ابوالفضل …یکشنبه 13 اردیبهشت 1405

گزينه 3 درست است.

طبق این برنامه­، فرایند ریشه که ما آن را نام گذاشته‌­ایم، سه دور در حلقه for می­‌چرخد و سه بار فراخوان سیستمی  fork را صدا می‌­کند و بنابراین سه فرزند می­‌سازد ( و و ) . هر یک از این سه فرزند دقیقاً عین خود پدر هستند (با همین کد و داده و پشته) و رجیستر شمارنده برنامه یا PC آنها نیز دقیقاً مانند پدر به ادامه برنامه دقیقاً بلافاصله بعد از همان fork اشاره ­می­‌کند و هم فرایند پدر و هم فرزند تازه به وجود آمده، دقیقاً از نقطه بعد از fork به کارشان ادامه می­‌دهند.

اولین  فرزند ریشه، یعنی ، در دور اول حلقه به وجود آمده است. پدرش () از حالا به بعد دو دور دیگر در حلقه خواهد چرخید و دو فرزند دیگر ( و ) ایجاد خواهد کرد. پس نیز مانند پدرش دو دور آخر حلقه را اجرا خواهد کرد و دو فرزند ( و ) خواهد ساخت.

دومین فرزند ریشه یعنی ، در دور دوم حلقه به وجود آمده است. پدرش () از حالا به بعد تنها یک دور دیگر در حلقه خواهد چرخید و یک فرزند دیگر () ایجاد خواهد کرد. پس نیز مانند ادامه کار پدرش دور آخر حلقه را اجرا خواهد کرد و یک فرزند () خواهد ساخت.

سومین  فرزند ریشه یعنی ، در دور آخر حلقه به وجود آمده است. پدرش () از حالا به بعد دیگر در حلقه نخواهد چرخید و exit خواهد کرد (البته قبل از فرزندانش از بین نخواهد رفت). پس نیز مانند پدرش که از حالا به بعد فرزند دیگری ندارد، اصلاً فرزندی نخواهد ساخت.

در دور دوم حلقه به وجود آمده است و مانند ادامه کار پدرش () که دور آخر حلقه را اجرا خواهد کرد و یک فرزند () خواهد ساخت، او نیز دور آخر حلقه را اجرا خواهد کرد و یک فرزند () خواهد ساخت.

و در دور آخر حلقه به وجود آمده‌­اند و مانند پدر خود از حالا به بعد دیگر در حلقه نخواهند چرخید و اصلاً فرزندی نخواهند ساخت.

نکته: در این حلقه با 3 دور، تعداد کل فرایندها با احتساب ریشه یعنی 8 تا شد. در حالت کلی، در یک حلقه با n دور، تعداد کل فرایندها با احتساب ریشه خواهد بود و اگر بگوید تعداد فرزندها و نوادگانی که ساخته می­شوند (بدون احتساب ریشه) خواهد بود.

ارسال پاسخ