B.4. برخی از وظایفی که کرنل به آنها رسیدگی میکند
کرنل، در درجه نخست، وظیفه مدیریت قسمتهای سختافزاری، شناسایی آنها و فعالسازی هنگامی که رایانه روشن میشود را بر عهده دارد. همچنین باعث میشود که نرمافزاری که در لایه بالاتر قرار دارد بتواند از طریق یک رابط برنامهنویسی ساده با آن ارتباط برقرار کند تا برنامههای کاربردی بتوانند از مزایای آن استفاده کرده بدون آنکه درگیر جزئیات لایه پایینتر خود شوند. این رابط برنامهنویسی همچنین یک لایه انتزاعی بوجود میآورد؛ برای نمونه، باعث میشود یک نرمافزار ویدیو کنفرانس بدون اطلاع از مدل و شماره وبکم، براحتی از آن استفاده کند. نرمافزار تنها میتواند از Video for Linux یا (V4L) استفاده کرده و کرنل وظیفه ترجمه فراخوانیهای تابع را دارد که متناظر با دستورات موجود در خود سختافزار وبکم باشند.
The kernel exports many details about detected hardware through the /proc/
and /sys/
virtual filesystems. Several tools summarize those details. Among them, lspci
(in the pciutils package) lists PCI devices, lsusb
(in the usbutils package) lists USB devices, and lspcmcia
(in the pcmciautils package) lists PCMCIA cards. These tools are very useful for identifying the exact model of a device. This identification also allows more precise searches on the web, which in turn, lead to more relevant documents.
مثال B.1. نمونه اطلاعاتی که lspci
و lsusb
ارائه میدهند
$
lspci
[...]
00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers (rev 05)
00:01.0 PCI bridge: Intel Corporation 6th-9th Gen Core Processor PCIe Controller (x16) (rev 05)
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 630 (rev 04)
00:14.0 USB controller: Intel Corporation 100 Series/C230 Series Chipset Family USB 3.0 xHCI Controller (rev 31)
00:14.2 Signal processing controller: Intel Corporation 100 Series/C230 Series Chipset Family Thermal Subsystem (rev 31)
[...]
02:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 32)
03:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTL8411B PCI Express Card Reader (rev 01)
03:00.1 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 12)
04:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981/PM983
$
lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 0bda:5621 Realtek Semiconductor Corp. HD WebCam
Bus 001 Device 002: ID 04ca:3016 Lite-On Technology Corp.
Bus 001 Device 018: ID 145f:01bc Trust GXT 155 Gaming Mouse
Bus 001 Device 004: ID 04f3:0c03 Elan Microelectronics Corp. ELAN:Fingerprint
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
These programs have a -v
option that lists much more detailed (but usually not necessary) information. Finally, the lsdev
command (in the procinfo package) lists communication resources used by devices.
برنامههای کاربردی اغلب بوسیله فایلهای مخصوصی که درون
/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 است (شناسه فرآیند).
کرنلهای شبه یونیکس (از جمله لینوکس)، مانند سایر سیستم عاملهای پیشرفته، قابلیت “چند وظیفگی” دارند. به عبارت دیگر، آنها اجازه اجرای بسیاری از فرآیندها را “در یک زمان مشخص” میدهند. در حقیقت تنها یک فرآیند در هر واحد زمانی وجود دارد، اما کرنل زمان را به بازههای کوچکتری تبدیل میکند و به اجرای هر فرآیند میپردازد. از آنجایی که این بازههای زمانی بسیار کوتاه هستند (در محدوده هزارم ثانیه)، این خیال باطل بوجود میآید که گویی همه فرآیندها به صورت موازی اجرا میشوند، با اینکه در حقیقت هر یک از آنها طی یک بازه زمانی فعال و در زمان دیگر دیگر بیکار هستند. وظیفه کرنل این است که مکانیزم این جدول زمانی را طوری تنظیم کند که این خیال به ذهن برسد، همزمان با اینکه عملکرد عمومی سیستم را افزایش دهد. اگر این بازههای زمانی بسیار طولانی باشند، برنامه کاربردی ممکن است پاسخی از خود نمایش ندهد و اگر بسیار کوتاه باشد سیستم توانایی تعویض این بازهها را از دست خواهد داد. این تصمیمات میتواند با استفاده از اولویتبندی برای فرآیندها تغییر یایند. فرآیندهای با اولویت بالا برای مدت طولانی و با بازههای زمانی مکرر اجرا خواهند شد تا فرآیندهای با اولویت پایین.
البته، کرنل اجازه اجرای چند نسخه مختلف از یک برنامه را میدهد. اما هر یک از آنها تنها میتواند به برش زمانی و حافظه خود دسترسی داشته باشد. دادههای موجود در آنها به صورت جداگانه باقی میمانند.
سیستمهای شبه-یونیکس همچنین چند-کاربره نیز هستند. آنها سیستم مدیریت مجوزی را فراهم میکنند که از کاربران و گروههای کاربری جداگانه، حمایت میکند؛ همچنین اجازه کنترل بر اساس نوع فعالیت و مجوز آن را هم میدهد. کرنل داده مربوط به هر فرآیند را مدیریت میکند و به آن اجازه کنترل مجوزهایش را میدهد. در اکثر اوقات، یک فرآیند توسط کاربری که آن را أغاز کرده است شناخته میشود. آن فرآیند تنها مجاز به اجرای عملیاتی است که برای آن کاربر مشخص شده است. برای نمونه، تلاش برای باز کردن یک فایل نیازمند بررسی کرنل از شناسه فرآیند در مقابله با مجوزهای مورد نیازش میباشد (برای جزئیات بیشتر در این مورد خاص،
قسمت 9.3, “مدیریت دسترسی”
را ببینید).