B.3. طرزکار داخلی یک رایانه: لایههای مختلفی درگیر هستند
یک رایانه بیشتر به عنوان یک شی انتزاعی در نظر گرفته میشود و رابط گرافیکی خروجی بسیار سادهتر از پیچیدگیهای درون آن دارد. این پیچیدگی از قسمتهایی میآید که با یکدیگر در ارتباط هستند. اگرچه، این قسمتها میتوانند به عنوان لایههای گوناگون دیده شوند، که هر لایه میتواند صرفاً با لایه بالا یا پایین خود ارتباط داشته باشد.
یک کاربر نهایی کاری با جزئیات این لایهها ندارد... تا زمانی که همه چیز درست کار میکند. وقتی با مشکلاتی مانند “اینترنت کار نمیکند!” روبهرو میشویم، اولین کاری که باید کرد شناسایی لایهای است که این مشکل از آن نشات گرفته است. آیا کارت شبکه (سختافزار) کار میکند؟ آیا توسط رایانه شناخته شده است؟ آیا کرنل قادر به تعامل با آن است؟ آیا پارامترهای شبکه به درستی تنظیم شدهاند؟ تمام این پرسشها مربوط به یک لایه خاص میباشند و تمرکز خاصی روی موضوع مورد سوال دارند.
B.3.1. عمیقترین لایه: سختافزار
بگذارید با یادآوری کوتاهی شروع کنیم که رایانه در حقیقت مجموعهای از عناصر سختافزاری است. معمولاً یک برد اصلی وجود دارد (که با نام motherboard شناخته میشود) با یک (یا چند) پردازنده، مقدای حافظه، کنترلرهای دستگاه و کارتهای توسعه برای سایر بردها (برای سایر کنترلرهای دستگاه). قابل توجهترین این کنترلرها عبارتند از IDE (که Parallel ATA نیز نامیده میشود) و SCSI و Serial ATA، برای اتصال به دستگاههای ذخیرهسازی مانند هارددیسکها. سایر کنترلرها عبارتند از USB، که قادر به میزبانی از بسیاری دستگاهها است (از دوربین گرفته تا دستگاههای حساس به حرارت، از صفحات کلید تا سیستمهای خودکارسازی خانه) و IEEE 1394 (یا همان Firewire). این کنترلرها اغلب اجازه اتصال چندین دستگاه را میدهند تا جایی که سیستم درونی که این فعالیتها را مدیریت میکنند با نام “گذرگاه” شناخته میشوند. بردهای دیگر شامل کارتهای گرافیکی (که نمایشگرها به آنها وصل هستند)، کارتهای صدا، کارتهای رابط شبکه و بسیاری دیگر. برخی بردهای اصلی به صورت پیشفرض این قابلیتها را دارند و نیازی به سایر بردها وجود ندارد.
B.3.2. راهانداز: BIOS یا UEFI
سختافزار، به خودی خود، نمیتواند بدون ارتباط یک نرمافزار که آن را کنترل کند عملکرد مفیدی داشته باشد. کنترل و تعامل با سختافزار از جمله وظایف سیستم عامل و برنامههای کاربردی آن است. این عمکرد، نیز متعاقباُ نیاز به عملکرد صحیح سختافزار دارد.
این همزیستی بین سختافزار و نرمافزار به خودی خود اتفاق نمیافتد. زمانی که رایانه برای اولین بار روشن میشود، برخی پیکربندی اولیه مورد نیاز است. این نقش را BIOS یا UEFI بازی میکند، نرمافزار کوچکی که درون برد اصلی قرار دارد که به صورت خودکار هنگام روشن شدن سیستم اجرا میشود. وظیفه اصلی آن یافتن نرمافزاری است که ادامه کنترل را به آن بسپارد. معمولاً، در مورد BIOS، به دنبال اولین هارددیسک با سکتور اجرایی آن میگردد (که با نام
Master Boot Record یا
MBR شناخته میشود)، بارگذاری آن سکتور راهانداز و در نهایت اجرای آن. از این لحظه، BIOS معمولاً نقش دیگری ندارد (تا راهآندازی بعدی سیستم) در مورد UEFI، فرآیند شامل اسکن دیسکها میشود تا اولین پارتیشن اختصاصی EFI پیدا شود تا برنامههای مربوط به آن را اجرا کند.
سکتور راهانداز (یا پارتیشن EFI) در عوض، شامل نرمافزار دیگری نیز هستند که bootloader نامیده میشود که هدف اصلیاش جستجو و اجرای سیستم عامل است. از آنجایی که این bootloader داخل برد اصلی قرار ندارد و محتوایش از روی دیسک خوانده میشود، عملکرد هوشمندانهتری نسبت به BIOS دارد، که توضیح میدهد چرا BIOS نمیتواند به خودی خود سیستم عامل را راهاندازی کند. برای نمونه، bootloader (که اغلب در سیستمهای لینوکس GRUB نامیده میشود) میتواند فهرستی از سیستم عاملهای موجود روی سیستم را به کاربر نمایش داده تا وی انتخاب کند. معمولاً، زمان و گزینه پیشفرض انتخاب میشود. گاهی اوقات کاربر میتواند پارامترهای دیگری به کرنل ارائه دهد و مواردی از این دست. در نهایت، یک کرنل پیدا،در حافظه بارگذاری و اجرا میشود.
یکی دیگر از کاربردهای BIOS/UEFI شناسایی و بارگذاری اولیه برخی دستگاهها است. به طور مشخص این فرآیند شامل دستگاههای IDE/SATA (معمولاً هارددیسکها و درایوهای CD/DVD) و همچنین دستگاههای PCI میشود. دستگاههای شناسایی شده حین فرآیند راهاندازی سیستم، روی صفحه نمایش داده میشوند. اگر این فهرست به تندی از جلوی چشمتان رد میشود میتوانید با فشردن دکمه Pause صفحه را برای چند لحظه نگاه دارید و به مطالعه آن بپردازید. دستگاههای PCI که نصب شدهاند اما نمایش داده نمیشوند مانند طالعی نحس عمل میکنند! در بدترین حالت، خود سختافزار ممکن است مشکل داشته باشد. در بهترین حالت، تنها ناسازگاری آنها با نسخه BIOS یا برد اصلی است. قوانین مربوط به PCI پیشرفت زیادی داشتهاند، اما بردهای اصلی قدیمی ضمانت اجرای دستگاههای PCI جدیدتر را ندارند.
هر دو ابزار BIOS/UEFI و bootloader تنها برای چند ثانیه اجرا میشوند؛ در این مرحله به اولین نرمافزاری میرسیم که برای مدت طولانیتری اجرا میشود، کرنل (هسته) سیستم عامل. کرنل نقش یک رهبر ارکستر را بازی میکند و ارتباط صحیح بین نرمافزار و سختافزار را تضمین مینماید. این نقش مستلزم اجرای وظایف گوناگونی است از قبیل: مدیریت سختافزار، مدیریت فرآیندها، کاربران و مجوزهای مربوط به آنان، فایل سیستم و بسیاری موارد دیگر. کرنل یک پایگاه عمومی برای سایر برنامههای سیستم ایجاد میکند.
با اینکه هر آنچه خارج از محیط داخلی کرنل اتفاق میافتد با نام “فضای کاربری” شناخته میشود، میتوانیم این قسمت را به لایههای مختلف نرمافزاری تقسیم کنیم. اگرچه، تعامل بین آنها نسبت به گذشته پیچیدهتر شده است و طبقهبندی آنها کار سادهای نخواهد بود. یک برنامه کابردی به صورت عمومی از کتابخانههایی استفاده میکند که برخی عملکردهای کرنل را فراخوانی میکنند، اما ارتباط بین آنها میتواند منجز به درگیر کردن سایر برنامهها نیز بشود یا حتی کتابخانههای بیشتری در این فرآیند فراخوانی گردند.