Product SiteDocumentation Site

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

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

کرنل، در درجه نخست، وظیفه مدیریت قسمت‌های سخت‌افزاری، شناسایی آن‌ها و فعال‌سازی هنگامی که رایانه روشن می‌شود را بر عهده دارد. همچنین باعث می‌شود که نرم‌افزاری که در لایه بالاتر قرار دارد بتواند از طریق یک رابط برنامه‌نویسی ساده با آن ارتباط برقرار کند تا برنامه‌های کاربردی بتوانند از مزایای آن استفاده کرده بدون آنکه درگیر جزئیات لایه پایین‌تر خود شوند. این رابط برنامه‌نویسی همچنین یک لایه انتزاعی بوجود می‌آورد؛ برای نمونه، باعث می‌شود یک نرم‌افزار ویدیو کنفرانس بدون اطلاع از مدل و شماره وب‌کم، براحتی از آن استفاده کند. نرم‌افزار تنها می‌تواند از 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*) و بسیاری موارد دیگر را مشخص می‌کنند.

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 به درستی کار خواهند کرد.
انواع مختلفی از فایل‌سیستم وجود دارد، که هر یک متناسب با یک شیوه ذخیره‌سازی داده روی دیسک هستند. شناخته‌شده‌ترین آن‌ها عبارتند از ext2 و ext3 و ext4 اما موارد دیگری نیز وجود دارد. برای نمونه، vfat سیستمی است که سابق بر این توسط سیستم‌ عامل‌های داس و ویندوز استفاده می‌شد که امکان استفاده همزمان از هارددیسک روی دبیان و ویندوز را می‌دهد. در هر صورت، یک فایل سیستم ابتدا باید روی دیسک آماده شود قبل از اینکه بتوان از آن استفاده کرد که به این فرآیند “فرمت‌کردن” می‌گویند. دستوراتی مانند mkfs.ext3 (که mkfs مخفف Make FileSystem است) فرمت‌کردن را بر عهده دارند. این دستورات، به عنوان پارامتر، نیاز به فایلی دارند که نشان‌دهنده پارتیشنی است که باید فرمت شود (برای نمونه، /dev/sda1). این عملیات، مخرب است و تنها یکبار باید اجرا شود، مگر در شرایطی که کسی بخواهد به عمد تمام محتویات روی فایل‌سیستم را از بین ببرد.
همچنین فایل‌سیستم‌های شبکه‌ای نیز وجود دارند، مانند NFS که داده به صورت مستقیم از روی دیسک نصب شده روی رایانه خوانده نمی‌شود. در عوض، داده توسط شبکه به سروری که وظیفه نگهداری و بازنشانی داده را به عهده دارد، منتقل می‌شود. این فایل‌سیستم لایه‌ای انتزاعی برای کاربر بوجود می‌آورد: تمامی فایل‌ها با همان ساختار درختی سابق قابل دسترسی خواهند بود.

B.4.3. توابع اشتراکی

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

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

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

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

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