|
علي پورحميدي Ali Pourhamidi
|
||
|
كامپيوتر - فناوري اطلاعات - علم و آمار |
مقدمه
-----------------------------------------------------------------------------------------
لینوکس چیست ؟
لینوکس یک سیستم عامل بازمتن، به منظور استفادههای شخصی و عمومی طراحی شده است. لینوکس به طور کلی یک Kernel یا هسته متمرکز است که وظیفه کنترل سخت افزار و ایجاد ارتباط بین کاربر و سخت افزار را بر عهده دارد.
کرنل لینوکس از ساختارهای اجرایی متعدد مثل ELF و COFF پشتیبانی میکند و از این رو میتوان برای آن برنامههای اجرایی کاربری طراحی کرد.
کرنل لینوکس از ساختارهای Load-On-Demand مانند SOها و KO ها برای محیطهای کاربری و سطح kernel استفاده میکند و از این رو میتواند از تکنولوژی Dynamic Load استفاده کند.
کرنل لینوکس از سرویسهای بین پروسهای (Interprocess Communication) سود میبرد.
کرنل لینوکس مدیریت سامانهها، منابع و وسایل سخت افزاری سیستم را بر عهده دارد.
کرنل لینوکس مدیریت اعطا کردن منابع زمانی (زمان CPU) را بر عهده دارد و از این رو یک سیستم Multi Programming محسوب میشود.
-----------------------------------------------------------------------------------------
What's your approch?
هدف شما چیست؟
شما قبل از هر چیزی میبایستی هدف خودتون رو درباره کار با لینوکس مشخص کنید.
هدف ها در لینوکس در ایران به طور کلی منحصر میشه به موارد زیر:
80% من با کلاسم
بسیاری از افراد برای اینکه به بقیه بفهمونن که سیستم عامل نصب بر روی سیستمشون Windows نیست و یک سیستم عامل دیگهس، از لینوکس استفاده میکنن. این استفاده معمولا محدود به نصب و درنهایت استفاده از Desktop میشه.
8% من مدیر شبکه خوبی هستم
بسیاری دیگر از افراد برای اینکه خود را در شبکه فردی موفق معرفی کنند لینوکس رو نصب میکنند و تعدادی از Commandهای Console اون رو یاد میگیرند و سعی میکنند کارایی رو که تو Windows انجام میدهند در لینوکس شبیه سازی کنند.
6% من برنامه نویس یا Hacker خوبی هستم
یکی از تفکرات به اصطلاح مالیخولیایی جا افتاده در بین افراد اینه که Hack یعنی Linux و Hacker باید بر روی سیستمش Linux نصب باشه. اگه یه روزی وقت شده مینویسم چرا Hackerها لینوکس میریزن. مورد دیگه برنامه نویسی در Linuxe که به خاطر صفحه سیاه و سفید Consolesh احساس خوبی به برنامه نویسا میده. احساس اینکه یه دوربین پشت سرشون قرار داره، و چند میلیون نفر دارن همراه با تخمه سیاه اونا رو نگاه میکنن.
6% من به لینوکس برای انجام کارم نیاز دارم
این افراد از لینوکس برای انجام کارهاشون استفاده میکنن. معمولا افراد لایق شبکه هستند (مثل محسن) که مضرات استفاده از Windows در شبکه رو میدونن و به طور کامل Switch کردن به لینوکس. عدهدیگری از این افراد کسانی هستند که برنامه نویس حرفهای سیستمهای //Embed//ded هستند و نیازی به دوربین و تخمه ندارند، اینها افرادی هستند که از ابزارهای برنامه نویسی رایگان موجود در لینوکس استفاده میکنن. ابزارهایی که به شما قدرت طراحی، آنالیز و پیاده سازی سریع نرمافزارهای هوشمند رو میده. بخش دیگری از این افراد، کاربرانی هستند که از لینوکس به منظور استفادههای Desktop بهره میبرند و پذیرفتهاند که از Windows با امکانات قدرتمندش در گرافیک و برنامههای کاربردی فراوان دور باشند. این افراد عادت کرده اند که با کمبودها بسازند ولی یک زندگی سالم IT داشته باشند. مثل خوردن نون و ماست در مقابل پیتزا. نون و ماست به شما لذت نمیده ولی شمارو کمک میکنه تا باشید و سالم باشید.
-----------------------------------------------------------------------------------------
What's My Requirements
من به چه چیزهایی نیاز دارم؟
مهمترین چیز در یادگیری لینوکس و نقاشی و دلالی و بنایی و درس خوندن اینه که اول شما با خودتون رو راست باشید. سوالهای زیر رو از خودتون بپرسید، و به خودتون دروغ نگید.
آیا من با زبان انگلیسی در حد استفاده از Computer، خوندن مقالات کامپیوتری و فهمیدن اونها آشنا هستم؟ آیا من میتوانم در صورتی که زبان خوبی ندارم، متنهای انگلیسی رو با کمک Dictionary ترجمه و برای خودم تفهیم کنم؟
آیا من وقت کافی برای یادگیری یک موضوع Complicated جدید دارم؟ آیا حوصله من در این زمینه کافیه؟ آیا من لینوکس را برای خود لینوکس یاد میگیرم یا هدف من تنها برای یادگیری سطحی اون و نمایش دادن به دیگرانه ؟
آیا من توانایی خسته شدن، و ادامه دادن در یک زمینه علمی را دارم؟
-----------------------------------------------------------------------------------------
What's My Requirements, in case of Hardware
من به چه چیزهایی نیاز دارم؟ از نظر امکانات
برای لینوکس، شما حداقل نیاز به 128MB فضا و حد اکثر نیاز به 30GB فضا دارید.
سیستمعامل لینوکس با بقیه سخت افزارهای شما مشکلی نخواهد داشت، چه سیستم شما PC باشد، چه Apple باشد و یا سیستمهای //Embed//ded باشد.
آیا من برای استفاده از لینوکس به کارت صدا و یا کارت گرافیک قوی نیاز دارم ؟
خیر، برای استفاده از لینوکس شما به هیچ وجه نیاز به کارت صدا و کارت گرافیک قوی نخواهید داشت. کارت گرافیک مورد استفاده لینوکس در محیط Graphic میتواند Minimum کارت گرافیک یا یک کارت گرافیک VESA VGA باشد.
در ضمن برای استفادههای Special شما نیاز به قطعات مورد نیاز دارید، مانند کارت شبکه برای کاربران شبکه.
-----------------------------------------------------------------------------------------
آیا لینوکس سیستم مرا خراب خواهد کرد ؟
خیر، هیچگاه لینوکس سیستم شما را خراب نمیکند. دلیل اینکه در روز این حرف رو شما از خیلیها میشنوید اینه که، خرابیهای موجود در اینجا، دلیلش عدم آشنایی به مراحل نصب و تایید کلیه پنجرههای نمایش داده شده در مراحل نصب است. خرابی از نظر خیلیها به معنی از بین رفتن اطلاعات هارد است.
آیا برای نصب کردن لینوکس من میبایستی اطلاعاتی داشته باشم؟
خیر. شما برای نصب لینوکس بر روی سیستم خود، نیاز به هیچ اطلاعاتی ندارید. فقط مواظب باشید، هیچ پنجرهای را در زمان نصب برنامه به صورت پیش فرض تایید نکنید و تا زمانی که از Message نمایش داده شده به طور کامل مطلع نشدهاید عمل تایید کردن را انجام ندهید.
در تمامی مراحل نصب سوالاتی بسیار ساده از شما پرسیده میشود و در کنار آن برای شما یک راهنمای کامل نصب در بخشی در مراحل نصب نمایش داده میشود. بهتر است در هر مرحله از نصب راهنمای مربوط به اون بخش خونده بشه.
آیا کار کردن با لینوکس سخت است ؟
خیر، کار کردن با لینوکس بسیار ساده میباشد. دلیل اینکه افراد کار کردن با لینوکس رو سخت عنوان میکنن اینه که لینوکس برای شما خیلی از مراحل عملیات را اعم از نصب و خود سیستمعامل در اختیار شما قرار داده است. برای مثال یکی از دلایلی که افراد برای سختی لینوکس عنوان میکنند Shell بسیار سنگین اونه که اگه Shell محدود میشد به دستوراتی مثل Copy، List، Delete و غیره این سیستم عامل یکی سیستم عامل ساده محسوب میشد.
برای مثال یک کارت گرافیک را فرض کنید که بر روی SLOT AGP شما نصب میشود و برای شما خروجی ایجاد میکند و در مقابل آن کارت گرافیک AGP دیگری که دارای 24 Jumper تنظیمات میباشد و در صورت تغییر ندادن این Jumperها کارت گرافیک مانند کارت اول عمل میکند. ولی کاربران کارت دوم، به علت داشتن Jumperهای زیاد، کارت گرافیک دوم را بسیار پیچیده عنوان میکنند، در صورتی که کارت گرافیک اول این تنظیمات را از دیده کاربران پنهان کرده است.
-----------------------------------------------------------------------------------------
در صورت یادگیری لینوکس چه کارهایی را میتوانم انجام دهم؟
متاسفانه IT هنوز در ایران سود آور نیست. شما در طول روز استفاده از Windows رو در اطراف خودتون میبینید، برنامه حسابداری، کارهای گرافیکی، تایپ نامه، برنامههای آموزشی. این کارها توسط لینوکس به سادگی Windows قابل اجرا نیستند. برای درآمد داشتن از طریق لینوکس شما حتما میبایستی در یک محیط Enterprise که از طرف یک شرکت بزرگ Supportمیشود فعالیت کنید. این شرکتهای بزرگ محدود میباشند و پرسنلی را استخدام میکنند که آشنایی خوبی با لینوکس داشته باشند، در صورتی که شما با نشستن 10 روز در کنار Windows میتونید یک مغازه را اداره کنید، مانند Write CD ، طراحی کارت ویزیت و ...
-----------------------------------------------------------------------------------------
چرا لینوکس را یاد بگیرم؟
آیا شما به زمانی فکر کردهاید که ایران به سازمان جهانی و Copyright بپیوند؟ در اون صورت شما میبایستی به طور کامل هزینه نرمافزار های مصرفی خود را بپردازید، در آن صورت بلد بودن یک سیستم عامل بازمتن باعث ادامه فعالیتهای شما میشود و در ضمن میتوانید از این قضیه سود مالی ببرید.
-----------------------------------------------------------------------------------------
چرا نرمافزارهای کاربردی Linux کم؟
آیا شما برای نصب Photoshop مبلغ 700$ پرداخت کرده اید؟
آیا شما برای نصب Office مبلغ 400$ پرداخت کرده اید؟
آیا شما برای نصب Maya مبلغ 2500$ پرداخت کردهاید؟
اگر مایلید مبلغ 2500$ پرداخت کنید تا نرمافزاری نمونه Maya در لینوکس را تحویل بگیرید. نرمافزارهای شخصی شرکتهای بزرگ مانند Walt Disney، Pixar و ...
کاربر: در ایران ما برای استفاده از نرمافزارهای بالا هزینهای پرداخت نمیکنیم، چرا باید به سمت لینوکس بریم؟
نرویــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــد
-----------------------------------------------------------------------------------------
چه زمانی طول میکشد تا لینوکس را یاد بگیرم؟
یادگیری لینوکس بی معناست، لینوکس یک بستر است برای تمامی کارهای شما، شما قبل از هر چیز میبایستی Field مورد نظر خود را مشخص کنید. در صورتی که Field خود را مشخص کردید زمان مشخصی برای یادگیری مطالب هست.
این زمان مشخص، با در نظر گرفتن اطلاعات پایه شما و آشنایی شما با زبان انگلیسی، و با زمان مشخص در روز محاسبه میشود.
اطلاعات پایه در اینجا بسیار پایین است.
آشنایی با زبان انگلیسی به صورت کامل وجود ندارد.
زمان مشخص در روز، به دلیل بی حوصلگی افراد وجود ندارد.
پس شروع کنید، سعی کنید تا یاد بگیرید و زمان پایان کار را جستجو نکنید.
کاربر: یادگیری Windows ساده تر است.
خیر، ویندوز یک سیستم بسته است، امکاناتی را که در اختیار شما قرار میدهد بسیار ساده است. شما در سراسر روز با این سیستم عامل کار میکنید و جزیی از شما شده است، پس یادگیری آن برای شما بسته به علاقه شماست.
لینوکس سیستمعاملی کامل و باز است. امکاناتی که به شما میدهد از امکانات ساده مانند تغییر پس زمینه Desktop تا تغییر در بطن (Kernel) سیستم میباشد. شما باید هدف خود را از یادگیری مشخص کنید.
-----------------------------------------------------------------------------------------
از کجا شروع کنم؟
برای شروع لینوکس شما ابتدا میبایستی بخشی از زمان خود را در روز خالی کنید. یادگیری لینوکس میبایستی آهسته و پیوسته باشد. عجله کردن و سریع حرکت کردن باعث عدم یادگیری مسائل پایه میشود و در ادامه به دلیل اینکه بسیاری از موضوعات برای شما ساختاری عجیب دارند، باعث ایجاد خستگی در ذهن شما میشوند و باعث ترک گفتن شما از این سیستمعامل میشوند.
در ادامه شما میبایستی یکی از نسخههای مختلف لینوکس را نصب کنید.
در این موضوع شما میبایستی چند نکته خیلی مهم رو به یاد داشته باشید:
هرگز سعی نکنید خاص باشید،
خیلی از افراد برای اینکه نمایش بدن که تو لینوکس از بقیه خاص ترند، بعضی نسخههای لینوکس رو که دارای اسامی عجیب هستند نصب میکنند در حالی که نمیدونن این نسخهها برای مصارف خاص ساخته شده اند.
نسخههای عمومی عبارتند از: Ubuntu، Fedora، Suse، Knoppix، Debian، Mandrake. قبل از نصب یک نسخه اسناد مربوط به اون نسخه رو به طور کامل مطالعه کنید.
به روز باشید،
لینوکس در حال پیشرفت در زمینه User Interface میباشد در نتیجه لینوکسهای جدید محیطهای کاربری بهتر و ساده تری دارند. سعی کنید آخرین شماره از نسخه مورد نظر خود را نصب کنید.
بستههای نرمافزاری را بشناسید،
لینوکسهای مختلف در هسته با هم تفاوتی ندارند، تفاوت آنها در بستههای نرمافزاری نصب شده بر روی اونهاست. لینوکسی را انتخاب کنید که بیشترین Support در زمینه برنامههای کاربردی رو داشته باشه. این امر به شما کمک میکنه تا در مقابله با دهنتون که نیاز به Windows داره کمی مقاوم تر باشید تا بتونید مسائل لینوکسی رو بهتر یاد بگیرید.
( بعضی از نسخههای لینوکس دارای بازیهای خیلی جالب، که من دقیقا نمیدونم کدوم نسخهها - اگه دوستان میدونن در ادامه این مطلب بنویسن)
چگونه شروع کنم؟
بعد از نصب لینوکس، چندین روز با محیط گرافیکی آن کار کنید. در این چند روز سعی کنید کمی از وابستگی خودتون به Windows کم کنید.
هرگز نترسید، در محیط گرافیکی معمولا شما امکانات کمتری برای خرابکاری در سیستم دارید، ولی در عین حال از هیچ چیز نترسید. در منو شبه Start لینوکس گردش کنید تمام نرمافزارها را اجرا کنید و نرمافزارهایی که در نظر شما استفادههای مدیریتی دارند را سریعا ببندید.
در این چند روز سعی کنید در سایتهای مختلف دستورات ساده Command Prompt یا همان Shell لینوکس رو فرا بگیرید. برای مثال سعی کنید شاخه بسازید. فایل بسازید و آن را کپی کنید. فایلها را پاک کنید و از آنها لیست بگیرید. فایلها را در کنار هم قرار دهید و عملیات ساده Console را فرا بگیرید. این فرامین بسیار ساده هستند و در تمامی Tutorialهای لینوکس پیدا میشوند. قبل از اجرای هر دستوری در Console لینوکس از عملکرد آن دستور مطلع شوید و بعد اجرا کنید.
Brain Storming
تنهایی کار کردن با لینوکس کمی خسته کننده است مخصوصا در روزهای اول، در روزهای اول بهتر است با یکی از دوستان خود شروع کنید و سعی کنید یک کار را که در Windows انجام میدهید در لینوکس به صورت مسابقهای با هم انجام دهید. برای مثال:
رضا و علی مسابقهای صورت میدهند، به این شکل که هرکس سریعتر تونست Screen Saver رو در لینوکس تغییر بده و کاری کنه که سیستم بعد از 10 دقیقه به صورت اتوماتیک مانیتور را خاموش کند.
کار کردن به همراه یک دوست، خیلی لذت بخش و مفید است و به صورت خیلی زیاد باعث افزایش سرعت در یادگیری میشود(تنها مشکل این مورد، نیاز به وجود 2 تا کامپیوتر که باید حل شه)
مستند کنید
هر مطلب جدیدی که یاد میگیرید در یک جا بنویسید، شاید برای شما کاری رو که انجام دادید، دوباره انجام دادنش ساده باشه ولی به دلیل اینکه هنوز از منطق لینوکس برای انجام اون کار مطلع نیستند نتونید دوباره اون کار رو انجام بدید.
به بقیه یاد بدید
رمز طلایی یادگیری هر مطلبی آموزش اون مطلب، چون در حین آموزش شخص مورد آموزش سوالاتی از شما میکنه که تمامی خلاهای فکری شما رو در اون مورد پر میکنه (بهتر این شخص مامان بزرگ یا داداش کوچیکه نباشه ;) )
تکرار کنید
هر کاری رو چند بار تکرار کنید، حتی اگه خسته کننده باشه. از اول بدون اینکه هیچ مرحله ای رو رد کنید.
گسترش بدید
زمانی که به یه مطلب مسلط شدید، اون کار رو ادامه بدید، این دفعه با انجام بخشهای اضافی در اون کار. مثل درخت که هر روز یه شاخه جدید بهش اضافه میشه. این تغییرات سعی کنید به صورتی باشه که منطقش برای شما قابل درک باشه.
برای مثال گسترش دستور Copy، کپی کردن یک شاخه با زیر شاخههای اون و از تاریخ مشخصی تا تاریخ مشخصیه. نه اینکه برای گسترش دستور کپی، برنامهای بخواهید بنویسید که Inode فایلهای کپی شده رو به صورت Sort شده نمایش بده.
لینوکس را ترک کنید!!
این هم از اون نکتههای طلاییه،
زمانی که بیشترین حس خوب رو به لینوکس پیدا کردید، لینوکس رو ترک کنید و به Windows برید، یا برید یه کتاب بخونید، یا برید غذا بخورید. چون اگه زمانی جدا شید از لینوکس که خسته شدید، برگشتتون بهش سخته (میشید علی دایی، اون موقع که Head میزد دروازه حریف میلرزید، از فوتبال جدا میشد، الان تو خیابون همه پیرهن شماره 10 تنشون بود - علی دایی 10 بود دیگه سوتی ندادم که )
-----------------------------------------------------------------------------------------
ویتامین بخورید
در زمان یادگیری لینوکس و یا هر یاد گیری دیگه ویتامین بخورید، اکسیژن بکشید بالا و کامل بخوابید.
اینو ادامه نمیدم، چون به طور کلی مربوط میشه به همه یادگیری ها
-----------------------------------------------------------------------------------------
روزی چقدر باید با لینوکس کار کنم؟
هر چقدر حال کردی عزیزم
-----------------------------------------------------------------------------------------
بعد از یادگیری لینوکس به من چی میده ؟
تو بهش چی دادی ؟
-----------------------------------------------------------------------------------------
من خیلی جو گیر شدم میخوام کامل Switch کنم به لینوکس.
در ابتدا این کار رو نکنید. چون زده میشید و کامل Switch میکنید به Windows.
-----------------------------------------------------------------------------------------
با لینوکس چه کارهایی را میشه کرد ؟
هر کاری که شما فکرشو کنی. شبکه، بازی، تفریحات، برنامه نویسی، صنعت، طراحی، آنالیز سیستمها، کارهای علمی و تحقیقاتی، مهندسی پزشکی، پردازش سیگنال، یادگیری الکترونیک و کامپیوتر از Base.
-----------------------------------------------------------------------------------------
من کجا هستم؟
اگر لینوکس رو تازه میخواهید شروع کنید، زیاد نگران نباشید، هنوز زیاد فاصله نگرفته اید، لینوکس در حال حاضر در حال اصلاح میباشد و اگه از الان شروع کنید زمانی که به سیستم عامل اول دنیا تبدیل شد شما برای خودتون موقعیت بسیار خوبی خواهید داشت.
-----------------------------------------------------------------------------------------
کسی هست در مسیر کمکم کنه؟
بسیاری از سایتهای فارسی و انگلیسی زبان برای لینوکس وجود داره. در کنار اینها در خود لینوکس تمامی فعالیتها مستند شده است و به طور کامل قابل دسترسی هستند. و در آخر هم بسیاری از گروههای فعال در زمینه لینوکس وجود دارد مانند همین کلوب که میتونید سوالاتتون رو مطرح کنید، اینجا افراد بسیار خوبی داریم، که میتونن کمکتون کنن، منم در سطح ساده مانند کارهای ساده با Desktop میتونم کمکتون کنم، فقط زیاد سخت نباشه.
فراموش نکنید که، هیچوقت دنبال ماهی نباشید، دنبال قلاب ماهیگیری باشید.
-----------------------------------------------------------------------------------------
خوب برای امروز بسه،
از منبر بیام پایین،
یه کم خودمونیش کن،
بیا وسط.
یادگیری لینوکس کار سادهای نیست، مخصوصا در اینجا با عدم وجود Copyright. لینوکس درسته هنوز اینجا جا نیافتاده ولی نگران آینده شغلی نباشید، همیشه سازمانها برای لینوکس کار در کمبود بودن و الان مخصوصا خیلی از مراکز اطلاعاتی در حال تغییر محیط خودشون به لینوکس هستند. من این حرف رو از سر گول زنکی نمیگم، خیالتون از آینده لینوکس مطمئن باشه. فقط باید سعی کنید محدود باشید، و از این شاخه به اون شاخه نپرید، سعی کنید مسیر مستقیم رو در یک جهت انتخاب کنید و ادامه بدید.
الان نیازهای کشور در رابطه با لینوکس به صورت زیر:
مدیر شبکه
کمکیار شبکه
طراح سیستمهای اطلاعاتی
برنامه نویس
طراح سیستمهای //Embed//ded
طراح Solutionهای امنیتی
طراحی Solutionهای نفوذ اخلاقی
تولید محتوا بر اساس سیستمهای لینوکسی
تغییر زیر ساختها به سمت لینوکس
طراحی سرورهای مرکزی
طراحی سیستمهای مدیریتی
وب سایتهای جدید
و ... و ...
نیاز به برنامه نویس لینوکس تا چند سال دیگه در کل کشور مشخص میشه.
جدیدا در رشته کامپیوتر در سطح دبیرستانها لینوکس گنجانده شده، که اساتید اون در حال حاضر در حال یادگیری لینوکس هستند و خدا میدونه اون سری از افرادی که امسال این کتاب رو داشتند چی یاد گرفتند. ولی به طور کلی، سیستم آموزشی کشور ما به دلیل منحصر بودن، در صورتی که به دانش آموزان لینوکس یاد بده مطمئن باشید سیستم مدیریتی آینده ماهم تحت تاثیر قرار میگیره.
یکی از شغلهای در آمد زا برای لینوکس، آموزش لینوکسه. که البته نیاز به تسلط کامل داره.
-----------------------------------------------------------------------------------------
سعی میکنم این مطالب رو ادامه بدم، اگه شد، دوستان هم کمک کنند. من تهشو سریع هم بیارم که انقد این DIDO پخش شد حالم به هم خورد. بعدم مگه Notepad جای نوشتنه. (این همه گفتم لینوکس، آخرش Notepad در اومد. البته بگما لینوکس Editorهاش خیلی بهتر از Windows ولی مشکل من با DIDO که تو لینوکس نمیدونم چرا صداش داریوش میشه. البته تقصیر لینوکس نیست تقصیر درایور کارت صدا Toshiba من در لینوکسه !!! KIDDING !!!)
-----------------------------------------------------------------------------------------
راستی یه چیزی هم بگم، (الکی که زیاد شه، بگن چقدر تایپ کرده، خدا خیرش بده)
دوتا دوست بودن علی و قلی، داشتن تو جنگل میرفتن، بعد یهو یه شیر از اون دور شروع میکنه به دویدن، علی وا میسه نگا میکنه شیرو، ولی قلی سریع کفشای ورزشی رو در می آره شروع میکنه به پوشیدن. علی یهو میزنه زیر خنده، میگه آخه فلان فلان شده، فکر میکنی با اون کفشات میتونی از دست این شیره فرار کنی؟ قلی هم با خنده نگاش میکنه، میگه من نیازی نیست از شیره جلو بزنم، باید از تو جلو بزنم.
مدیریت منابع:
همانطور که میدونید سیستم عامل اومده که شما بتونید بیشترین استفاده رو از سیستم کامپیوترتون ببرید. سیستم های عامل مختلفی برای استفاده های مختلف وجود دارند که قیمت هاشون بسته به نوع عملکردشون و سیستم هدفشون تغییر می کنه. لینوکس به عنوان یک سیستم عامل رایگان بر خلاف این روند در حال حرکت. یعنی هم به شما اجازه می ده که سیستم هدفتون رو خودتون مشخص کنید و هم به شما اجازه میده که بهترین امکانات رو در اختیار داشته باشید.
مدیریت منابع در لینوکس شامل، مدیریت حافظه، مدیریت فایلها، مدیریت 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 را به درخواست های شما میدهد ولی زمانی که چند کاربر بر روی سیستم فعال هستند، مدیریت تمامی منابع از نظر سیستم عامل سخت تر خواهد شد. این سختی بخشی به دلیل مسائل امنیتی کار است یعنی عدم تاثیر گذاری فعالیت های یک کاربر بر روی کاربر دیگه، و بخش دیگه مشکلات مربوط به توضیع منابع به صورت عادلانه در بین کاربران می باشد.