سلام.
طبق معمول عنوان تاپیکم زیاد خوب نیست و عنوان بهتری براش به ذهنم نرسید
قضیه:
وقتی ما میخوایم با کامندهای لینوکس یه کار سنگین روی io انجام بدیم، معمولا اینطوریه که بعد از چند ثانیه ترمینال برامون آزاد میشه که بتونیم به کارهای دیگه برسیم و اون کار سنگین توی پس زمینه انجام میشه.
و برای اینکه مطمئن باشیم اون تسک تموم شده، از کامند sync
استفاده میکنیم.
مثال:
cp some/heavy/file some/destination/
sync
# or
cp some/heavy/file some/destination/ && sync
میخواستم بدونم که مثلا cp
اینجا چیکار میکنه که به لینوکس میفهمونه «من کارم طول میکشه. شما برید من خودمو میرسونم» و دستور sync
دقیقا چیکار میکنه.
سوال:
-
احتمالی که میتونم بدم اینه که یه سیستم
multi threading
در لایهی سیستمعامل به وجود میاد همونطور که مثلا با&
میتونیم اینکارو انجام بدیم (مثلاcp file1 file2 & apt update
) و لینوکس، اون تسک رو میفرسته به یه thread دیگه و مشخصات اون تسک رو توی یه فایل (یا یه استک که توی کرنل تعریف شده) نگهمیداره وsync
میتونه بعدا بره اونو بخونه.
آیا این درسته؟ -
و سوال دیگهای که داشتم اینه که نرمافزار ما چطوری به لینوکس میگه که «من کارم طول میکشه شماها برید»؟
آیا با یهreturn code
مخصوص اینکارو انجام میده؟ مثلruturn 0
که به معنی «اجرای برنامه با موفقیت انجام شد.»، یه کدی هم داریم به معنی «من کار سنگین با io دارم. منتظر نمونید»؟ -
در نهایت (اگه توی ۲تا سوال بالا پاسخ ندادید) کار
sync
دقیقا چطوریه؟ میره یه فایل که تسکها توش نوشته شدن رو چک میکنه؟ میره به کرنل میگه «من از tty4 میام، اونجا چیزی رو به بکگراند فرستادی؟»؟ یا همچین چیزی؟ یا مثلا از طریق dbus با نرمافزار ما ارتباط برقرار میکنه (که بعید میدونم)؟