محمد لینوکس

همه چیز به غیر از لینوکس!

محمد لینوکس

همه چیز به غیر از لینوکس!

قسمت نزدیک به آخر از سریال آبکی لینوکس بیاموز

در قسمت قبلی دیدیم که میشه با لینوکس کارهای بسیار ساده Console رو انجام داد. در این قسمت می خواهیم کمی در مورد قدرت های لینوکس صحبت کنیم. قرار نیست ادامه Command Set لینوکس توضیح داده بشه. چون Command Set ها در بخش های مختلف این کلوب و سایت های فارسی دیگه و کتابهای زیادی عنوان شده. در اینجا فقط می خوام کمی در مورد کارکرد لینوکس باهاتون صحبت کنم.

هشدار - هشدار - امروز بحث کاربردی نیست و فقط تئوریک
------------------------------------

همونطور که دیدید از نظر لینوکس، همه چیز فایله. یعنی گفته شد که لینوکس در بر خورد با همه چیز مثل یک فایل عمل می کنه، از قسمتهای مختلف دیسک گرفته تا خروجی صدای کارت صدا.

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

مدیریت منابع:
همانطور که میدونید سیستم عامل اومده که شما بتونید بیشترین استفاده رو از سیستم کامپیوترتون ببرید. سیستم های عامل مختلفی برای استفاده  های مختلف وجود دارند که قیمت هاشون بسته به نوع عملکردشون و سیستم هدفشون تغییر می کنه. لینوکس به عنوان یک سیستم عامل رایگان بر خلاف این روند در حال حرکت. یعنی هم به شما اجازه می ده که سیستم هدفتون رو خودتون مشخص کنید و هم به شما اجازه میده که بهترین امکانات رو در اختیار داشته باشید.

مدیریت منابع در لینوکس شامل، مدیریت حافظه، مدیریت فایلها، مدیریت CPU، مدیریت Mediaهای ارتباطی و مدیریت کاربران میشه.

مدیریت حافظه: حافظه سیستم شما برای بالابردن سرعت عملیات به شما خیلی کمک می کنه. زمانی که این حافظه پر بشه از نظر منطقی هیچ برنامه دیگه ای نباید اجرا بشه ولی در سیستم های عامل این امکان به شما داده می شه که با تکنیک های مختلف برنامه های غیر لازم رو از حافظه خارج کنید و برنامه های جدید رو جایگزین اونها کنید و زمانی که به برنامه های قبلی دوباره نیاز بود اونها رو به جای اولیشون برگردونید و الی آخر. این کار از نظر تئوری توسط همه سیستم عامل نویسان دنیا پیاده شده ولی خود در بحث نرم افزار مسئله Performance و Optimization خیلی مهم. یعنی با تئوریهای ثابت ما پیاده سازی های مختلفی داریم. لینوکس یکی از سیستم های عامل قدرتمند که در بحث مدیریت حافظه بسیار دقیق و پویا عمل می کنه و شما بیشترین استفاده رو از حافظه اصلیتون می برید. به طور عامیانه تر شما در لینوکس حافظه مرده ندارید و یا بسیار کم دارید. حافظه مرده یعنی بخشی از حافظه که اختصاص داده شده ولی ازش به هیچ وجه استفاده ای نمیشه. چیزی که ویندوز به کرات شما باهاش برخورد دارید. بعد از چند ساعت کار سیستم کند میشه. شما با استفاده از Task Manager برخی از برنامه ها رو می بندید ولی هنوز سیستم کند و با Restart شدن سیستم دوباره به سرعت اولیه برمی گرده در حالی که هیچ کدام از Process های سیستم بعد از Restart از لیست خارج نشدن.

جوابی که در این زمینه داده می شه اینه که برنامه های تحت ویندوز حافظه هایی رو Allocate میکنن و در هنگام خروج اونها رو نمی بندن. این مطلب شامل نرم افزار های دارای Bug و نرم افزارهایی که با رخداد خطا بسته می شن میشه. در لینوکس به این صورت نیست. لینوکس به شما تضمین میده که در صورتیکه یک Process بخشی از حافظه رو اشغال کنه، حتی در صورت بسته شدن اجباری یا Force Kill حافظه تخصیص داده شده به سیستم عامل برمیگرده. اون درصدی از حافظه که گفتم در لینوکس به عنوان حافظه مرده و به صورت خیلی معدود پیش میاد داریم، بخش هایی از حافظه است که توسط Processهای کرنلی اختصاص داده شده و یا بخش هایی از حافظه که به صورت Global تعریف شده.

مدیریت فایلها:
قرار دادن دیسک در اختیار کابران به جز این موضوع که کاربران برای کار با دیسک های مختلف از جمله PATA و SATA و SCSI اطلاعات لازم رو ندارند و نیاز به یک واسط یا API واحد دارند باعث پایین اومدن سطح امنیت سیستم میشه. به همین منظور دیسک در لینوکس از نظر کاربران توسط یک سری رابط های برنامه نویسی عرضه میشه.

در سیستم های عامل Multiuser و MultiTasking بسیار اتفاق میافته که چند Process به طور همزمان به بخشی از اطلاعات دیسک نیاز داشته باشند پس مدیریت فایل در سیستم های عامل یکی از بخش های بسیار مهم قلمداد میشه.

در مورد مدیریت فایلها، به جز بحث های امنیتی و چند کاربره بودن مسئله بسیار مهم دیگه مسئله سرعت دسترسی به دیسک. یعنی در صورتی که چند نفر به طور همزمان بخش های مختلفی از دیسک رو درخواست کردند چگونه به این درخواست ها جواب داده بشه.

آسانسوری رو در نظر بگیرید در ساختمانی 20 طبقه. به طور معمول و الگوریم ساده به نظر میرسه که دکمه ای که زده میشه باید به اون طبقه بریم. پس این برنامه رو می نویسیسم و در آسانسور نصب می کنیم. روزی اتفاق میافته که در طبقه 18ام فردی دکمه آسانسور رو میزنه. بعد از حرکت آسانسور فردی در طبقه اول دکمه رو میزنه و همزمان با اون فردی در طبقه 16ام. طبق الگوریتم ما آسانسور به طبقه 18 ام میره و فرد رو سوار میکنه. بعد به طبقه اول میاد و بعد 16ام.

نوشتن الگوریتم های بهینه و مناسب برای دیسک در راندمان و بالا بردن سرعت سیستم نقش بسیار زیادی داره. سرعت CPU و RAM در مقابل Disk بسیار بالاست، پس برای اینکه استفاده از RAM و پردازشگر سیستم ما بهینه باشه باید از الگوریتم های مناسب دسترسی به دیسک استفاده کنیم. در لینوکس الگوریتم های دسترسی به دیسک طی سالهای مختلف در Unix و خانواده هاش و تا امروزه در لینوکس به کرات مورد تغییر قرار گرفته و خروجی که امروز در Kernel لینوکس قرار داده بهینه ترین روش در بین روشهای معمول دسترسی به دیسک.

مورد بعدی سیستم Cache در فایل سیستم لینوکس. Cache در 2 جا برای سیستم بسیار مفیده. اولا زمانی که شما می خواهید یک بایت از روی دیسکتون بخونید دیسک به شما یک سکتور و یا 512 بایت داده رو میده. در اصل واحد خوندن از دیسک Sectorها هستند و نه بایت ها. زمانی که شما برنامه ای می نویسید که یک فایل رو بایت به بایت بخونه در صورتی که Cache وجود نداشته باشه، به ازای هر بار خواندن یک بایت سیستم عامل ملزم که یک سکتور رو بخونه و بایت مورد نظر شما رو از روی اون استخراج کنه و تحویل شما بده. این عمل نه تنها سرعت رو بسیار پایین میاره بلکه باعث اصطحلاک دیسک شما میشه. Cache لینوکس آخرین دسترسیهای دیسک رو در حافظه نگه میداره و بخش های درخواستی شما قبل از ارسال به دیسک می بایستی از لایه Cache لینوکس رد شوند. در صورتی که اطلاعات درخواستی شما در Cache سیستم موجود نباشه اطلاعات در خواستی شما به Cache لینوکس منتقل میشه و سپس از Cache به شما اطلاعات داده میشه. Cache دیسک سیستم شما بر روی حافظه اصلی قرار داده.
بالابردن مقدار حافظه Cache تا حدی سرعت رو بالا میبره ولی زمانی که از نقطه کار Cache شما عبور کنید به دلیل افزایش حافظه Cahce جستجوی داده مورد نیاز خود در پایین اوردن سرعت نقش زیادی داره.

پس بازم با وجود این مطالب تئوری پیدا کردن حافظه مناسب برای Cache و مدیریت مناسب حافظه اون نیاز به الگوریتم های دقیق و سریع داره که در سیستم عامل لینوکس به طور صحیح پیاده سازی شده.

مدیریت Process:
همانطور که میدونید سیستم های کامپیوتری تک CPU در آن واحد تنها قابلیت اجرای یک دستور العمل رو دارند ولی با الگوریتم های پیاده شده در سیستم های عامل شما همزمان به گوش دادن موسیقی و کار با برنامه Editor خودتون مشغولید. تخصیص CPU به Processهای مختلف کاریه که در سیستم های عامل صورت میگیره. این تخصیص به قدری سریع صورت میگیره که در نظر شما، تمامی برنامه ها همزمان در حال فعالیتند.

در محیط Task Manager ویندوز شما ، تعداد زیادی Process وجود داره. تمامی این Processها در اصطلاح در حالت Suspend هستند. یعنی هیچ فعالیتی نمیکنند. مدیریت CPU به صورت ساده اینطور به نظر میاد که باید به تمامی پردازه ها بخشی از زمان CPU داده بشه. ولی آیا Process که منتظر دریافت یک کلید از صفحه کلید است نیازی به CPU داره؟

به پردازش هایی که منتظر یک رخداد یا Event سخت افزاری هستند، پردازه های Waiting گفته میشه و سیستم عامل ها این پردازه ها رو از لیست پردازه های فعال خارج می کنند. برای مثال پردازه ای که دستور خواندن اطلاعات از روی هارد رو داده از لیست پردازه های فعال خارج میشه و در لیست وقفه یا Interrupt مربوط به دیسک قرار داده میشه. زمانی که دیسک عملیات خوندن رو انجام بده، با یک Interruptبه CPU سیستم عامل شما رو متوجه این امر میکنه. سیستم عامل Process های موجود در لیست دیسک رو از حالت Suspend به حالت Ready میبره و در بازی تخصیص CPu اونها رو هم شرکت میده.

به این ترتیب تعداد زیاد Process های موجود در لیست Task Manager باعث کندی سیستم شما نمیشه بلکه تعداد Processهای فعال سیستم هستند که باعث کندی سیستم میشن.

آیا میدونید بیشترین برنامه ای که از سیستم رو کند می کنه چیه؟ Photoshop?  Winamp? ماشین حساب؟ برنامه حسابداری ؟ نههههههههههههه

برنامه زیر به زمان C یا معادلش در VB بیشترین فشار رو به سیستم وارد می کنن:

While (true);

یعنی یک برنامه یک خطی!

اگر شما این برنامه رو Compile و اجرا کنید می بینید که در لیست Task Manager مقدار CPU در حدود 100% برای اون در نظر گرفته شده. دلیلشم اینه که این پردازه زمانی که CPU بهش تعلق داده میشه، اون رو ول نمی کنه. دراصل هیچ زمانی اتفاق نمیافته که این Process به حالت Suspend بره. تنها زمانی این اتفاق میافته که، زمان استفاده این Process از CPU تموم بشه که سیستم عامل به صورت اجباری CPU رو از این Process میگیره.

در سیستم عامل لینوکس زمانهای تخصیص داده شده به پردازش ها برحسب نیاز اونها، اولویتشون و تعدادی پارامتر دیگه در نظر گرفته میشه تا کاربران بیشترین احساس آرامش کارکردن با لینوکس و بیشترین استفاده بهینه از دستگاهشون رو داشته باشند.


مدیریت Mediaهای ارتباطی:
مدیریت Mediaهای ارتباطی در لینوکس، شامل ارتباطات متصل به سیستم از جمله ارتباطات شبکه ای میشه.

سیستم های عاملی که از شبکه پشتیبانی می کنند زحمت زیادی رو برای این امر کشیدن. Stackشبکه های موجود فعلی با تمامی سادگیشون دارای پیچیدگی های خیلی زیاد در پیاده سازین. ضعف مدیریت شبکه در سیستم های عامل باعث بالارفتن شدید هزینه ها میشه. شاید برای شما درکش مقداری سخت باشه ولی Optimize کردن بخشی از کد Stack شبکه های پر استفاده مثل TCP/IP در نرم افزار معادل هزینه های سر سام آور سخت افزاری.
سیستم عامل لینوکس سیستم عاملی که توانایی برخورد با Loadهای بسیار بالای شبکه ای رو بدون ایجاد هیچگونه خرابی و یا از بین رفتن اطلاعات برای کاربران فراهم میکنه.

شکی نیست که بخش اعظم مدیریت از بین نرفتن اطلاعات در شبکه های کامپیوتری مدیون پروتکل های قوی شبکه ای و سیستم های فیزیکی موجود در مسیر ولی از طرفی همگان قبول دارند که Unix و Linux بخش عمده ای از این استاندار ها رو تدوین و به جامعه جهانی عرضه کرده.

زمانی بود که لینوکس در پی پیاده سازی دستگاههای سخت افزاری شبکه ای موجود مثل Routerها و Firewallها بود. همیشه نرم افزار قابلیت های کمتری نسبت به نمونه های سخت افزاری داشت. اما امروزه خیلی از شرکت های بزرگ سخت افزاری شبکه مانند Cisco بعضی از قابلیت ها یا Featureهای کاربری موجود بر روی سخت افزار های خودشون رو از روی نمونه های نرم افزاری و شبیه سازی شده در سیستم های عامل معتبر مثل لینوکس کپی برداری می کنند.

Firewall بسیار قوی موجود در لینوکس که به صورت کامل و بدون عیب و نقص عمل می کنه نمونه ای از این نرم افزار هاست. نرم افزار Iptables نصب شده بر روی سیستم عامل لینوکس قابلیت کار با Loadهای بسیار بالا رو داره و بدون هیچ مشکلی امروزه به عنوان یک مکمل قوی و یا یک جانشین در بسیاری از سرور های جهان به جای نمونه های سخت افزاری خشک و بدون انعطاف نصب شده.

لینوکس در شبکه به عنوان یک Router نرم افزاری کلیه امکانات یک Router سخت افزاری رو برای شما فراهم می کنه و همه روزه با Optimize کردن کد اون گام جدیدی رو در زمینه شبکه بر می داره.

مدیریت شبکه، بر خلاف مدیریت فایلها که تمامی منابع داخلی می باشند، مسئله ای بسیار حیاتی و مهم برای سیستم های عامل. شما زمانی که در حال درست کردن کیک هستید و تلفن زنگ می زنه، سراغ تلفن میرید و تماس رو جواب میدید و بر می گردید. گاهی مواقع اتفاق میافته که از خودتون سوال کنید آیا فلان ماده رو اضافه کردم؟

حالا فرض کنید سیستم عامل لینوکس در آن واحد بخواد به بیش از چندین هزار ارتباط شبکه ای پاسخ بده. ارتباطاتی که بر خلاف ارتباطات Transaction Based شروع و پایان مستقلی ندارند و نگهداری وضعیت و کنترل وضعیت فعلی تماما بر عهده سیستم عامل است. در اینجا مبحثی پیش میاد به نام State Machine که موقعیت و وضعیت هر پایانه رو مشخص می کنه. در ارتباطات TCP/IP به طور معمول ارتباط انجام میشه، طرف ارسال کننده داده ها رو ارسال می کنه و بعد از ارسال هر Packet ، علامتی به عنوان دریافت اطلاعات از طرف مقابل دریافت می کنه.

حال فرض کنید که بیش از 1000 ارتباط شبکه ای در سیستم عامل شما وجود دارد و 700 بسته اطلاعاتی در آن واحد ارسال شده است. اگر از 50 پایانه موجود جوابی مبنی بر دریافت اطلاعات رسیده نشه، این اطلاعات باید دوباره ارسال بشه. در TCP/IP امکان این است که هرکدام از طرفین از طرف مقابل درخواست کنند که داده ها را با سرعت کمتری ارسال کند و یا طول بسته های اطلاعاتی را تغییر دهد. به جز پیاده سازی این مسائل مربوط به Stackهای شبکه، مسئله های مربوط به ارسال همزمان داده ها از طریق Processها، قطع شدن اتحمالی شبکه و مشکل سیستم عامل در اطلاع دادن به Processها و از طرفی پیگیری بسته های ارسال شده و نگهداری بسته های دریافتی از Processها در طول این مدت. بسته شدن یک Processدر زمان قطعی شبکه و اطلاع دادن به طرف مقابل مبنی بر اینکه بسته های دیگری ارسال نکن و فرستادن پیغام های مناسب برای مطلع کردن طرف دوم از نرسیدن بسته به طرف اول و در کنار همه اینها، رد کردن بسته های اضافی ارسال شده از طرف نفوذگران به سیستم و شناسایی و خنثی کردن بسته های آنها، مشکلات و موضلاتیست که بخش مدیریت شبکه در لینوکس با اونها باید مقابله کنه. پیاده سازی صحیح سیستم مدیریت شبکه، باعث بالارفتن راندمان کاری در سیستم های اداری و مالی میشه.

مدیریت کاربران:
تمامی مدیریت های بالا رو در نظر بگیرید. حالا فرض کنید لینوکس به جای یک نفر با چند نفر سروکار داشته باشد که هر کدام مشکلات خود را در مسائل مدیریتی بالا داشته باشند.

زمانی که شما به تنهایی بر روی سیستم Login هستند، سیستم عامل CPU را به درخواست های شما میدهد ولی زمانی که چند کاربر بر روی سیستم فعال هستند، مدیریت تمامی منابع از نظر سیستم عامل سخت تر خواهد شد. این سختی بخشی به دلیل مسائل امنیتی کار است یعنی عدم تاثیر گذاری فعالیت های یک کاربر بر روی کاربر دیگه، و بخش دیگه مشکلات مربوط به توضیع منابع به صورت عادلانه در بین کاربران می باشد.

----------------------------------------------------------------------------------------------

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


موفق باشی

از طرف عماد سی تی

نظرات 3 + ارسال نظر
یه محمدلینوکس دیگه! دوشنبه 25 تیر‌ماه سال 1386 ساعت 23:46 http://linuxer88@gmail.com

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

میترا چهارشنبه 24 فروردین‌ماه سال 1390 ساعت 19:37

سلامَ من یه مقاله در مورد مدیریت حافظه در لینوکس میخامُ البته به فارسی! می تونید کمکم کنید؟!

لیلی یکشنبه 7 خرداد‌ماه سال 1391 ساعت 11:33

سلام واقعا خسته نباشی
خیلی از مطالبت استفاده کردم ممنونم

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد