Product SiteDocumentation Site

B.4. برخی از وظایفی که کرنل به آن‌ها رسیدگی می‌کند

B.4.1. مدیریت سخت‌افزار

کرنل، در درجه نخست، وظیفه مدیریت قسمت‌های سخت‌افزاری، شناسایی آن‌ها و فعال‌سازی هنگامی که رایانه روشن می‌شود را بر عهده دارد. همچنین باعث می‌شود که نرم‌افزاری که در لایه بالاتر قرار دارد بتواند از طریق یک رابط برنامه‌نویسی ساده با آن ارتباط برقرار کند تا برنامه‌های کاربردی بتوانند از مزایای آن استفاده کرده بدون آنکه درگیر جزئیات لایه پایین‌تر خود شوند. این رابط برنامه‌نویسی همچنین یک لایه انتزاعی بوجود می‌آورد؛ برای نمونه، باعث می‌شود یک نرم‌افزار ویدیو کنفرانس بدون اطلاع از مدل و شماره وب‌کم، براحتی از آن استفاده کند. نرم‌افزار تنها می‌تواند از 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: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Root Complex
00:00.2 IOMMU: Advanced Micro Devices, Inc. [AMD] Starship/Matisse IOMMU
00:01.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
00:01.2 PCI bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse GPP Bridge
00:02.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
00:03.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
[..]
02:09.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Device 43ea
05:00.0 PCI bridge: ASPEED Technology, Inc. AST1150 PCI-to-PCI Bridge (rev 04)
06:00.0 VGA compatible controller: ASPEED Technology, Inc. ASPEED Graphics Family (rev 41)
07:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)
08:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller PM9A1/PM9A3/980PRO
09:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller PM9A1/PM9A3/980PRO
0a:00.0 Non-Essential Instrumentation [1300]: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Function
0b:00.0 Non-Essential Instrumentation [1300]: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Reserved SPP
0b:00.1 Encryption controller: Advanced Micro Devices, Inc. [AMD] Starship/Matisse Cryptographic Coprocessor PSPCPP
0b:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 05e3:0610 Genesys Logic, Inc. Hub
Bus 001 Device 003: ID 048d:c102 Integrated Technology Express, Inc. ITE Device(8910)
Bus 001 Device 004: ID 5986:115f Bison Electronics Inc. Integrated Camera
Bus 001 Device 005: ID 048d:c975 Integrated Technology Express, Inc. ITE Device(8295)
Bus 001 Device 006: ID 8087:0026 Intel Corp. AX201 Bluetooth
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 002: ID 05e3:0620 Genesys Logic, Inc. GL3523 Hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.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.
Applications often access devices by way of special files created within /dev/ (see sidebar بازگشت به مقدمات مجوزهای دسترسی به دستگاه). These are special files that represent disk drives (for instance, /dev/hda and /dev/sdc), /dev/nvme1n1 partitions (/dev/hda1 or /dev/sdc3 or /dev/nvme1n1p2), mice (/dev/input/mouse0), keyboards (/dev/input/event0), soundcards (/dev/snd/*), serial ports (/dev/ttyS*), and so on.

B.4.2. فایل‌سیستم‌ها

فایل‌سیستم‌ها یکی از برجسته‌ترین جنبه‌های کرنل هستند. سیستم‌های یونیکس تمام فایل‌های موجود را داخل یک ساختار درختی قرار می‌دهند، که به کاربران (و برنامه‌های کاربردی) به راحتی این امکان را می‌دهند تا با دانستن مکان فایل‌ها در این ساختار، از منابع آن استفاده کنند.
نقطه آغازین این ساختار درختی، ریشه نام دارد، /. این دایرکتوری می‌تواند شامل دایرکتوری‌های فرزند دیگری باشد. برای نمونه، دایرکتوری فرزند 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.ext4 (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.3. توابع اشتراکی

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

B.4.4. مدیریت فرآیندها (پروسه‌ها)

یک فرآیند، نمونه اجرایی یک برنامه به حساب می‌آید. این عمل شامل حافظه‌ای است که هم برنامه را شامل شود هم عملیات کنترلی روی آن. کرنل وظیفه ایجاد و ردیابی آن‌ها را برعهده دارد. زمانی که یک برنامه اجرا می‌شود، کرنل در ابتدا مقداری حافظه کنار می‌گذارد، سپس کد اجرایی برنامه از از فایل‌سیستم خوانده و درون حافظه بارگذاری می‌کند و در نهایت به اجرای کد می‌پردازد. اطلاعات مربوط به این فرآیند را ذخیره می‌کند، که مهم‌ترین این اطلاعات یک شناسه عددی به نام pid است (شناسه فرآیند).
کرنل‌های شبه یونیکس (از جمله لینوکس)، مانند سایر سیستم عامل‌های پیشرفته، قابلیت “چند وظیفگی” دارند. به عبارت دیگر، آن‌ها اجازه اجرای بسیاری از فرآیندها را “در یک زمان مشخص” می‌دهند. در حقیقت تنها یک فرآیند در هر واحد زمانی وجود دارد، اما کرنل زمان را به بازه‌های کوچکتری تبدیل می‌کند و به اجرای هر فرآیند می‌پردازد. از آنجایی که این بازه‌های زمانی بسیار کوتاه هستند (در محدوده هزارم ثانیه)، این خیال باطل بوجود می‌آید که گویی همه فرآیندها به صورت موازی اجرا می‌شوند، با اینکه در حقیقت هر یک از آن‌ها طی یک بازه زمانی فعال و در زمان دیگر دیگر بیکار هستند. وظیفه کرنل این است که مکانیزم این جدول زمانی را طوری تنظیم کند که این خیال به ذهن برسد، همزمان با اینکه عملکرد عمومی سیستم را افزایش دهد. اگر این بازه‌های زمانی بسیار طولانی باشند، برنامه کاربردی ممکن است پاسخی از خود نمایش ندهد و اگر بسیار کوتاه باشد سیستم توانایی تعویض این بازه‌ها را از دست خواهد داد. این تصمیمات می‌تواند با استفاده از اولویت‌بندی برای فرآیندها تغییر یایند. فرآیندهای با اولویت بالا برای مدت طولانی و با بازه‌های زمانی مکرر اجرا خواهند شد تا فرآیندهای با اولویت پایین.
البته، کرنل اجازه اجرای چند نسخه مختلف از یک برنامه را می‌دهد. اما هر یک از آن‌ها تنها می‌تواند به برش زمانی و حافظه خود دسترسی داشته باشد. داده‌های موجود در آن‌ها به صورت جداگانه باقی می‌مانند.

B.4.5. مدیریت مجوز

سیستم‌های شبه‌-یونیکس همچنین چند-کاربره نیز هستند. آن‌ها سیستم مدیریت مجوزی را فراهم می‌کنند که از کاربران و گروه‌های کاربری جداگانه، حمایت می‌کند؛ همچنین اجازه کنترل بر اساس نوع فعالیت و مجوز آن را هم می‌دهد. کرنل داده مربوط به هر فرآیند را مدیریت می‌کند و به آن اجازه کنترل مجوزهایش را می‌دهد. در اکثر اوقات، یک فرآیند توسط کاربری که آن را أغاز کرده است شناخته می‌شود. آن فرآیند تنها مجاز به اجرای عملیاتی است که برای آن کاربر مشخص شده است. برای نمونه، تلاش برای باز کردن یک فایل نیازمند بررسی کرنل از شناسه فرآیند در مقابله با مجوزهای مورد نیازش می‌باشد (برای جزئیات بیشتر در این مورد خاص، قسمت 9.3, “مدیریت دسترسی” را ببینید).