کرنل، در درجه نخست، وظیفه مدیریت قسمتهای سختافزاری، شناسایی آنها و فعالسازی هنگامی که رایانه روشن میشود را بر عهده دارد. همچنین باعث میشود که نرمافزاری که در لایه بالاتر قرار دارد بتواند از طریق یک رابط برنامهنویسی ساده با آن ارتباط برقرار کند تا برنامههای کاربردی بتوانند از مزایای آن استفاده کرده بدون آنکه درگیر جزئیات لایه پایینتر خود شوند. این رابط برنامهنویسی همچنین یک لایه انتزاعی بوجود میآورد؛ برای نمونه، باعث میشود یک نرمافزار ویدیو کنفرانس بدون اطلاع از مدل و شماره وبکم، براحتی از آن استفاده کند. نرمافزار تنها میتواند از Video for Linux یا (V4L) استفاده کرده و کرنل وظیفه ترجمه فراخوانیهای تابع را دارد که متناظر با دستورات موجود در خود سختافزار وبکم باشند.
کرنل بسیاری از جزئیات مربوط به سختافزار را از طریق فایل سیستمهای مجازی
/proc/
و
/sys/
ارائه میدهد. برخی ابزارها نیز قابلیت ارائه این گزارشات را دارند. از میان آنها، دستور
lspci
(واقع در بسته
pciutils) فهرستی از دستگاههای PCI، دستور
lsusb
(واقع در بسته
usbutils) فهرستی از دستگاههای USB و دستور
lspcmcia
(واقع در بسته
pcmciautils) فهرستی از کارتهای PCMCIA را نمایش میدهند. این ابزارها برای شناسایی مدل دقیق یک سختافزار بسیار کاربردی هستند. این شناسایی دقیق منجر به جستجوهای دقیقتری در وب میشود که میتواند مستندات مرتبطی را نمایان سازد.
مثال B.1. نمونه اطلاعاتی که lspci
و lsusb
ارائه میدهند
$
lspci
[...]
00:02.1 Display controller: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1 (rev 03)
00:1d.0 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 (rev 03)
[...]
01:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5751 Gigabit Ethernet PCI Express (rev 01)
02:03.0 Network controller: Intel Corporation PRO/Wireless 2200BG Network Connection (rev 05)
$
lsusb
Bus 005 Device 004: ID 413c:a005 Dell Computer Corp.
Bus 005 Device 008: ID 413c:9001 Dell Computer Corp.
Bus 005 Device 007: ID 045e:00dd Microsoft Corp.
Bus 005 Device 006: ID 046d:c03d Logitech, Inc.
[...]
Bus 002 Device 004: ID 413c:8103 Dell Computer Corp. Wireless 350 Bluetooth
این برنامهها شامل یک گزینه -v
هستند که اطلاعات بیشتری (البته نه ضروری) را نمایش میدهند. در نهایت، دستور lsdev
(واقع در بسته procinfo) فهرستی از منابع ارتباطی که توسط دستگاهها استفاده میشوند را نمایش میدهد.
برنامههای کاربردی اغلب بوسیله فایلهای مخصوصی که درون
/dev/
ایجاد میشود (به قسمت
بازگشت به مقدمات مجوزهای دسترسی به دستگاه مراجعه شود) به دستگاههای مختلف دسترسی پیدا میکنند. فایلهای مخصوصی هستند که درایوهای دیسک (برای نمونه،
/dev/hda
و
/dev/sda
)، پارتیشنها (
/dev/hda1
یا
/dev/sda1
)، ماوس (
/dev/input/mouse0
)، صفحه کلید (
/dev/input/event0
)، کارت صدا (
/dev/snd/*
)، پورتهای سریال (
/dev/ttyS*
) و بسیاری موارد دیگر را مشخص میکنند.
فایلسیستمها یکی از برجستهترین جنبههای کرنل هستند. سیستمهای یونیکس تمام فایلهای موجود را داخل یک ساختار درختی قرار میدهند، که به کاربران (و برنامههای کاربردی) به راحتی این امکان را میدهند تا با دانستن مکان فایلها در این ساختار، از منابع آن استفاده کنند.
نقطه آغازین این ساختار درختی، ریشه نام دارد، /
. این دایرکتوری میتواند شامل دایرکتوریهای فرزند دیگری باشد. برای نمونه، دایرکتوری فرزند home
از /
با نام /home/
شناخته میشود. این دایرکتوری فرزند نیز میتواند زیر مجموعههای خود را داشته باشد و به همین ترتیب. هر دایرکتوری میتواند شامل فایلهای گوناگونی باشد، جایی که دادههای واقعی ذخیره میشوند. بنابراین، /home/rmas/Desktop/hello.txt
به فایلی با نام hello.txt
در دایرکتوری فرزند Desktop
واقع در حساب کاربری rmas
از home
قرار دارد که خود زیرمجموعه دایرکتوری ریشه است. کرنل وظیفه ترجمه این مسیرها و آدرس حقیقی رو دیسک را بر عهده دارد.
بر خلاف سایر سیستمها، تنها یک ساختار درختی مانند این وجود دارد، که توانایی همگرائی دادهها از دیسکهای فیزیکی گوناگون را داراست. یکی از این دیسکها به عنوان دایرکتوری ریشه استفاده شده است و دیسکهای دیگر بر روی سایر دایرکتوریهای فرزند آن “سوار” شدهاند (دستور یونیکس آن mount
خوانده میشود)؛ این دیسکها تحت عبارت “نقاط دسترسی (سوار)” شناخته میشوند. این قابلیت، امکان ذخیرهسازی دایرکتوریهای مربوط به حساب کاربری افراد (که به صورت سنتی در /home/
ذخیره میشود) را روی دیسک دیگری میدهد که شامل rhertzog
و rmas
است. زمانی که دیسک روی /home/
سوار شود، این دایرکتوریها در مکانهای مورد نظر خود قادر دسترس خواهند شد و مسیرهایی مانند /home/rmas/Desktop/hello.txt
به درستی کار خواهند کرد.
There are many filesystem formats, corresponding to many ways of physically storing data on disks. The most widely known are ext3 and ext4, but others exist. For instance, vfat is the system that was historically used by DOS and Windows operating systems, which allows using hard disks under Debian as well as under Windows. In any case, a filesystem must be prepared on a disk before it can be mounted and this operation is known as “formatting”. Commands such as mkfs.ext3
(where mkfs
stands for MaKe FileSystem) handle formatting. These commands require, as a parameter, a device file representing the partition to be formatted (for instance, /dev/sda1
). This operation is destructive and should only be run once, except if one deliberately wishes to wipe a filesystem and start afresh.
همچنین فایلسیستمهای شبکهای نیز وجود دارند، مانند
NFS که داده به صورت مستقیم از روی دیسک نصب شده روی رایانه خوانده نمیشود. در عوض، داده توسط شبکه به سروری که وظیفه نگهداری و بازنشانی داده را به عهده دارد، منتقل میشود. این فایلسیستم لایهای انتزاعی برای کاربر بوجود میآورد: تمامی فایلها با همان ساختار درختی سابق قابل دسترسی خواهند بود.
از آنجایی که تعدادی از عملکردهای پایه در تمام نرمافزارها مورد استفاده قرار میگیرند، معقول به نظر میرسد که یک مکان مرکزی برای آنها در کرنل در نظر بگیریم. برای نمونه، فایلسیستم اشتراکی به هر برنامه کاربری این امکان را میدهد که تمامی فایلها را با استفاده از نامشان باز کند، بدون نگرانی از اینکه این فایل در کجای دیسک ذخیره شده است. فایل ممکن است در قطاعهای گوناگونی از دیسک ذخیره شده باشد، یا حتی بین چند دیسک گوناگون تقسیم شده باشد، یا در یک فایل سرور روی شبکه قرار داشته باشد. توابع ارتباطی اشتراکی توسط برنامههای کاربردی به منظور تبادل داده مورد استفاده قرار میگیرند مستقل از راه و روش انتقال آن. برای نمونه، عملیات انتقال ممکن است با ترکیبی از شبکههای محلی یا بیسیم یا حتی خطوط تلفن صورت بگیرد.
B.4.4. مدیریت فرآیندها (پروسهها)
یک فرآیند، نمونه اجرایی یک برنامه به حساب میآید. این عمل شامل حافظهای است که هم برنامه را شامل شود هم عملیات کنترلی روی آن. کرنل وظیفه ایجاد و ردیابی آنها را برعهده دارد. زمانی که یک برنامه اجرا میشود، کرنل در ابتدا مقداری حافظه کنار میگذارد، سپس کد اجرایی برنامه از از فایلسیستم خوانده و درون حافظه بارگذاری میکند و در نهایت به اجرای کد میپردازد. اطلاعات مربوط به این فرآیند را ذخیره میکند، که مهمترین این اطلاعات یک شناسه عددی به نام pid است (شناسه فرآیند).
کرنلهای شبه یونیکس (از جمله لینوکس)، مانند سایر سیستم عاملهای پیشرفته، قابلیت “چند وظیفگی” دارند. به عبارت دیگر، آنها اجازه اجرای بسیاری از فرآیندها را “در یک زمان مشخص” میدهند. در حقیقت تنها یک فرآیند در هر واحد زمانی وجود دارد، اما کرنل زمان را به بازههای کوچکتری تبدیل میکند و به اجرای هر فرآیند میپردازد. از آنجایی که این بازههای زمانی بسیار کوتاه هستند (در محدوده هزارم ثانیه)، این خیال باطل بوجود میآید که گویی همه فرآیندها به صورت موازی اجرا میشوند، با اینکه در حقیقت هر یک از آنها طی یک بازه زمانی فعال و در زمان دیگر دیگر بیکار هستند. وظیفه کرنل این است که مکانیزم این جدول زمانی را طوری تنظیم کند که این خیال به ذهن برسد، همزمان با اینکه عملکرد عمومی سیستم را افزایش دهد. اگر این بازههای زمانی بسیار طولانی باشند، برنامه کاربردی ممکن است پاسخی از خود نمایش ندهد و اگر بسیار کوتاه باشد سیستم توانایی تعویض این بازهها را از دست خواهد داد. این تصمیمات میتواند با استفاده از اولویتبندی برای فرآیندها تغییر یایند. فرآیندهای با اولویت بالا برای مدت طولانی و با بازههای زمانی مکرر اجرا خواهند شد تا فرآیندهای با اولویت پایین.
البته، کرنل اجازه اجرای چند نسخه مختلف از یک برنامه را میدهد. اما هر یک از آنها تنها میتواند به برش زمانی و حافظه خود دسترسی داشته باشد. دادههای موجود در آنها به صورت جداگانه باقی میمانند.