هر برنامه ای که در یونیکسی ها و لینوکس اجرا می شود، فرایند (Process) می گویند. فرایند ها برای اجرا باید در حافظه Ram قرار بگیرند. وقتی یک فرایند در حافظه Ram قرار می گیرد، به اصطلاح در حالت آماده قرار می گیرد و تنها منبعی که لازم دارد تا اجرا شود، پردازنده است. هر فرایند دارای یک عدد منحصر به فرد و مختص به خود است که PID یا Process ID گفته می شود. از این عدد برای کنترل فرایند توسط ابزار های خط فرمان استفاده می شود.
هر فرایند دارای یک والد است و والد ها هم دارای یک عدد منحصر به فرد هستند. در خروجی دستور ها این عدد با عبارت PPID یا Parent Process ID نشان داده میشود. اولین فرایندی که در سیستم ایجاد میشود init با PID=1 و PPID=0 است. PPID به این خاطر صفر است که این فرایند والد تمام فرایند هاست و خود والدی ندارد. عمل ایجاد یک فرایند فرزند از فرایند والد در یونیکسی ها و لینوکس توسط فراخوان سیستمی fork که یک تابع به زبان C است انجام می شود. فرض کنید که دستور یک پنجره خط فرمان باز کرده اید با باز کردن یک پنجره خط فرمان یک فرایند به نام bash ایجاد می شود که ایجاد این فرایند توسط فرایند init انجام می شود. پس اگر دستور ps را اجرا کنید می بنید که والد فرایند bash فرایند init است. اگر در خود پنجره خط فرمان دستور bash را اجرا کنید این بار یک فرایند جدید از دستور bash ایجاد می شود یعنی والدی به نام bash با PID=4523 یک فرزند به نام bash با PID=4575 و با PPID=4523 ایجاد می شود.
پس از ایجاد یک فرایند فرزندف فرایند فرزند منابعش را از والد خود می گیرد و شروع به کار می کند. اگر فرایند والد به هر دلیلی از بین برودف فرایند فرزند هم بصورت خودکار از بین می رود. به عمل از بین بردن یک فرایند در اصطلاح کشتن یا Kill کردن آن فرایند می گویند. اما گونه ای از فرایند ها هستند که حتی پس از از بین رفتن والدشان همچنان در سیستم وجود دارند و منابع سیستم را اشغال کرده اند. در اصطلاح به این نوع فرایند ها Zombi یا بی پدرومادر می گویند.
همانطور گه گفته شد هر فرایند برای اجرا شدن ابتدا در حافظه Ram قرار می گیرد و سپس با دریافت پردازنده، شروع به کار و اجرا شدن می کند. پس دو مفهوم میزان مصرف حافظه و میزان مصرف پردازنده وجود دارد. اینکه فرایند فعلی چه مقدار از حاضه اصلی (حافظه Ram) را اشغال کرده و اینکه چه مقدار مدت پردازنده را برای اجرا شدن اشغال کرده و از چه زمانی شروع به استفاده از پردازنده کرده است مطرح می شود. هر پردازنده در هر لحظه فقط می تواند یک فرایند را اجرا کند. پس برای بالا بردن راندمان و اجرا شدن چندین فرایند بصورت مکرر از مفهومی به نام زمانبندی استفاده می شود. به این معنی که با استفاده از الگوریتم ها و تکنیک هایی پردازنده مابین فرایند ها سوئیچ میشود.
مفهوم دیگری که در ارتباط با فرایند ها وجود دارد، اولویت یک فرایند است. دسته ای از الگوریتم های زمانبندی بر اساس اولویت اجرا میشود به این معنی که به هر فرایند بر اساس تصمیماتی به هر فرایند اولویتی داده می شود و پردازند و الگوریتم های زمانبندی بر اساس همین اولویت ها، آن فرایندی که اولویت بیشتری دارد را از حافظه اصلی انتخاب می کند. بطور مثال فرایند های سیستمی مانند کرنل اولویت بیشتری نسبت به فرایند برنامه ای مانند فایرفاکس دارد.
مطلب دیگر درباره هر فرایندف وضعیت مرتبط با آن فرایند است. گفتیم هر فرایند برای اجرا شده باید در حافظه Ram قرار بگیرد که به این حالت، حالت آماده یا Ready می گویند. هر فرایند زمانی اجرا می شود که پردازنده را داشته باشد که به این حالت، حالت Running می گویند. همچنین امکان دارد فرایند به دلایلی مانند انتظار برای I/O از حالت اجرا خارج شود و به حالت انتظار یا Waiting می گویند و حالت دیگری که وجود دارد حالت Sleep است.
مفهوم حافظه Swap که یک حافظه مجازی یا Virtual Memory است این است که ظرفیت حافظه اصلی محدود و کم است و به دلیل در خواست های بالا و اینکه پردازنده در هر لحظه می تواند یک فرایند را اجرا کند بسیاری از فرایند ها بی کار می مانند و فضای حافظه اصلی را اشغال می کنند. فرض کنید در همین حین یک فرایند با اولویت بالا وارد می شود ولی فضای کافی برای قرار گرفتن در حافظه اصلی را ندارد. پس این فرایند هر گز نمی تواند اجرا شود. ولی راه حل این موضوع استفاده از حافظه swap است. به اینصورت که فرایند های بی کار در حافظه اصلی را از حافظه اصلی به حافظه ثانویه منتقل می کند و ک فرایند را جایگزین آن می کند. به این عمل انتقال Swapping گفته میشود.
مطب دیگری که در ارتباط با فرایند ها وجود دارد این هست که کدام کاربر کدام فرایند را اجرا کرده است. بطور مثال فرایند های سیستمی توسط کاربر root اجرا می شوند. مثلن فرایند init توسط root اجرا میشود ولی مثلن کاربری به نام amirnami دستور free را اجرا کرده است، پس این فرایند توسط amirnami اجرا شده است.
نویسنده نامی امیر
هر فرایند دارای یک والد است و والد ها هم دارای یک عدد منحصر به فرد هستند. در خروجی دستور ها این عدد با عبارت PPID یا Parent Process ID نشان داده میشود. اولین فرایندی که در سیستم ایجاد میشود init با PID=1 و PPID=0 است. PPID به این خاطر صفر است که این فرایند والد تمام فرایند هاست و خود والدی ندارد. عمل ایجاد یک فرایند فرزند از فرایند والد در یونیکسی ها و لینوکس توسط فراخوان سیستمی fork که یک تابع به زبان C است انجام می شود. فرض کنید که دستور یک پنجره خط فرمان باز کرده اید با باز کردن یک پنجره خط فرمان یک فرایند به نام bash ایجاد می شود که ایجاد این فرایند توسط فرایند init انجام می شود. پس اگر دستور ps را اجرا کنید می بنید که والد فرایند bash فرایند init است. اگر در خود پنجره خط فرمان دستور bash را اجرا کنید این بار یک فرایند جدید از دستور bash ایجاد می شود یعنی والدی به نام bash با PID=4523 یک فرزند به نام bash با PID=4575 و با PPID=4523 ایجاد می شود.
پس از ایجاد یک فرایند فرزندف فرایند فرزند منابعش را از والد خود می گیرد و شروع به کار می کند. اگر فرایند والد به هر دلیلی از بین برودف فرایند فرزند هم بصورت خودکار از بین می رود. به عمل از بین بردن یک فرایند در اصطلاح کشتن یا Kill کردن آن فرایند می گویند. اما گونه ای از فرایند ها هستند که حتی پس از از بین رفتن والدشان همچنان در سیستم وجود دارند و منابع سیستم را اشغال کرده اند. در اصطلاح به این نوع فرایند ها Zombi یا بی پدرومادر می گویند.
همانطور گه گفته شد هر فرایند برای اجرا شدن ابتدا در حافظه Ram قرار می گیرد و سپس با دریافت پردازنده، شروع به کار و اجرا شدن می کند. پس دو مفهوم میزان مصرف حافظه و میزان مصرف پردازنده وجود دارد. اینکه فرایند فعلی چه مقدار از حاضه اصلی (حافظه Ram) را اشغال کرده و اینکه چه مقدار مدت پردازنده را برای اجرا شدن اشغال کرده و از چه زمانی شروع به استفاده از پردازنده کرده است مطرح می شود. هر پردازنده در هر لحظه فقط می تواند یک فرایند را اجرا کند. پس برای بالا بردن راندمان و اجرا شدن چندین فرایند بصورت مکرر از مفهومی به نام زمانبندی استفاده می شود. به این معنی که با استفاده از الگوریتم ها و تکنیک هایی پردازنده مابین فرایند ها سوئیچ میشود.
مفهوم دیگری که در ارتباط با فرایند ها وجود دارد، اولویت یک فرایند است. دسته ای از الگوریتم های زمانبندی بر اساس اولویت اجرا میشود به این معنی که به هر فرایند بر اساس تصمیماتی به هر فرایند اولویتی داده می شود و پردازند و الگوریتم های زمانبندی بر اساس همین اولویت ها، آن فرایندی که اولویت بیشتری دارد را از حافظه اصلی انتخاب می کند. بطور مثال فرایند های سیستمی مانند کرنل اولویت بیشتری نسبت به فرایند برنامه ای مانند فایرفاکس دارد.
مطلب دیگر درباره هر فرایندف وضعیت مرتبط با آن فرایند است. گفتیم هر فرایند برای اجرا شده باید در حافظه Ram قرار بگیرد که به این حالت، حالت آماده یا Ready می گویند. هر فرایند زمانی اجرا می شود که پردازنده را داشته باشد که به این حالت، حالت Running می گویند. همچنین امکان دارد فرایند به دلایلی مانند انتظار برای I/O از حالت اجرا خارج شود و به حالت انتظار یا Waiting می گویند و حالت دیگری که وجود دارد حالت Sleep است.
مفهوم حافظه Swap که یک حافظه مجازی یا Virtual Memory است این است که ظرفیت حافظه اصلی محدود و کم است و به دلیل در خواست های بالا و اینکه پردازنده در هر لحظه می تواند یک فرایند را اجرا کند بسیاری از فرایند ها بی کار می مانند و فضای حافظه اصلی را اشغال می کنند. فرض کنید در همین حین یک فرایند با اولویت بالا وارد می شود ولی فضای کافی برای قرار گرفتن در حافظه اصلی را ندارد. پس این فرایند هر گز نمی تواند اجرا شود. ولی راه حل این موضوع استفاده از حافظه swap است. به اینصورت که فرایند های بی کار در حافظه اصلی را از حافظه اصلی به حافظه ثانویه منتقل می کند و ک فرایند را جایگزین آن می کند. به این عمل انتقال Swapping گفته میشود.
مطب دیگری که در ارتباط با فرایند ها وجود دارد این هست که کدام کاربر کدام فرایند را اجرا کرده است. بطور مثال فرایند های سیستمی توسط کاربر root اجرا می شوند. مثلن فرایند init توسط root اجرا میشود ولی مثلن کاربری به نام amirnami دستور free را اجرا کرده است، پس این فرایند توسط amirnami اجرا شده است.
نویسنده نامی امیر
کامنت