امروز، ۲۵ اوت ۲۰۲۶، ۳۵ سال از یکی از معروفترین پیامهای تاریخ نرمافزار میگذرد.
در ۲۵ اوت ۱۹۹۱، دانشجوی ۲۱ سالهای از دانشگاه هلسینکی به نام Linus Torvalds در گروه خبری comp.os.minix درباره پروژهای شخصی که روی آن کار میکرد نوشت.
او پروژه را چیزی در حد یک سرگرمی توصیف کرد:
just a hobby, won't be big and professional like gnu
اما آن پروژه کوچک بعدها به Linux Kernel یا هسته لینوکس تبدیل شد؛ هستهای که امروز در سرورها، زیرساختهای Cloud، گوشیهای Android، تجهیزات شبکه، سیستمهای Embedded و بسیاری از سرویسهایی که هر روز استفاده میکنیم حضور دارد.
اما Linux Kernel دقیقاً چیست؟
چرا به آن «هسته» میگوییم و وقتی روی یک VPS لینوکسی دستور اجرا میکنیم، Kernel در پشت صحنه چه کاری انجام میدهد؟
هسته یا Kernel چیست؟
Kernel بخش مرکزی سیستمعامل است که بین نرمافزارها و سختافزار قرار میگیرد.
برنامهای مثل Nginx، MySQL یا Python نباید بتواند هر زمان که خواست مستقیماً CPU، RAM، Disk یا کارت شبکه را کنترل کند.
Kernel این منابع را مدیریت میکند و یک مسیر کنترلشده برای استفاده Applicationها از سختافزار فراهم میکند.
به شکل ساده:
Applications
│
▼
User Space
│
System Calls
│
▼
Linux Kernel
│
┌───┼────┬─────┬──────┐
▼ ▼ ▼ ▼ ▼
CPU RAM Disk Network DevicesKernel مشخص میکند:
کدام Process چه زمانی از CPU استفاده کند
Memory چگونه تخصیص پیدا کند
فایلها چگونه خوانده و نوشته شوند
Packetهای شبکه چگونه پردازش شوند
Applicationها چگونه با Deviceها ارتباط داشته باشند
چه عملیاتی مجاز یا غیرمجاز باشند
به همین دلیل میتوان Kernel را مدیر اصلی منابع سیستم دانست.
آیا Linux همان Linux Kernel است؟
در صحبت روزمره معمولاً میگوییم:
«روی سرور Linux نصب کردهام.»
و منظورمان سیستمهایی مثل:
Ubuntu
Debian
AlmaLinux
Rocky Linux
Arch Linuxاست.
اما از نظر فنی، Linux در اصل نام Kernel است، نه کل سیستمعاملی که کاربر میبیند.
یک Distribution مثل Ubuntu علاوه بر Linux Kernel از اجزای زیادی تشکیل شده است:
Ubuntu
│
├── Linux Kernel
├── System Libraries
├── Shell
├── systemd
├── apt
├── Utilities
└── Applicationsبرای مثال دستوری مثل:
lsبخشی از خود Kernel نیست.
همین موضوع درباره:
Bash
Nginx
MySQL
Docker CLI
Pythonهم صدق میکند.
این برنامهها در User Space اجرا میشوند و هنگام نیاز از سرویسهایی که Kernel در اختیارشان قرار میدهد استفاده میکنند.
Linux Kernel چه کارهایی انجام میدهد؟
وظایف Kernel بسیار بیشتر از چیزی است که در یک مقاله بتوان پوشش داد، اما برای درک ساختار Linux چند بخش از همه مهمتر هستند.
مدیریت CPU و Processها
فرض کنید روی یک Server همزمان این سرویسها اجرا میشوند:
Nginx
PHP-FPM
MySQL
Redis
SSH
Cron
Monitoringهمه این Processها به CPU نیاز دارند.
Kernel با استفاده از Scheduler مشخص میکند هر Process یا Thread چه زمانی فرصت اجرا داشته باشد.
وقتی دستور:
topیا:
htopرا اجرا میکنید، Processهای مختلفی را میبینید که Kernel دائماً اجرای آنها را مدیریت میکند.
Kernel همچنین بخش مهمی از چرخه زندگی Processها، از ایجاد تا پایان آنها، را مدیریت میکند.
مدیریت RAM
Memory هم منبع محدودی است.
Kernel باید مشخص کند چه مقدار Memory در اختیار هر Process قرار بگیرد و حافظه چگونه میان بخشهای مختلف سیستم مدیریت شود.
Linux برای این کار از مکانیزمهایی مانند Virtual Memory و Demand Paging استفاده میکند.
وقتی روی Server مینویسید:
free -hدر حال مشاهده وضعیت یکی از منابعی هستید که مدیریت آن مستقیماً با Memory Management Subsystem هسته ارتباط دارد.
مستندات رسمی Linux Kernel نیز Memory Management را یکی از Subsystemهای اصلی Kernel معرفی میکند.
مدیریت فایلها و Storage
وقتی Application میخواهد:
فایل باز کند
اطلاعات بخواند
فایل جدید بسازد
دادهای روی Disk ذخیره کند
Kernel دوباره وارد ماجرا میشود.
Linux از لایهای به نام VFS یا Virtual File System استفاده میکند که امکان کار با File Systemهای مختلف را از طریق Interface مشترک فراهم میکند.
برای مثال Linux میتواند با File Systemهایی مانند:
ext4
XFS
Btrfsکار کند.
Application لازم نیست جزئیات داخلی هرکدام از آنها را بداند.
مدیریت شبکه
فرض کنید Nginx روی Port 443 منتظر یک درخواست HTTPS است.
مسیر درخواست به شکل بسیار ساده چیزی شبیه این خواهد بود:
Internet
│
▼
Network Interface
│
▼
Linux Kernel
│
TCP/IP
│
▼
Socket
│
▼
Nginxبخش بزرگی از Networking سیستم، از Interfaceها و Routing گرفته تا TCP/IP و Socketها، با Kernel ارتباط دارد.
به همین دلیل Linux Kernel برای Serverها، Routerها، Cloud Infrastructure و تجهیزات شبکه اهمیت زیادی دارد.
ارتباط با سختافزار
برنامه شما نباید برای هر مدل کارت شبکه، Storage Controller یا Device دیگر روش ارتباط جداگانهای طراحی کند.
Kernel از Device Driverها برای ارتباط با سختافزار استفاده میکند.
Application
│
▼
Linux Kernel
│
Driver
│
▼
Hardwareمستندات رسمی Kernel نیز Driverها، Networking، Memory Management و Scheduler را بهعنوان Subsystemهای مستقل مستند میکند.
Applicationها چگونه با Kernel ارتباط برقرار میکنند؟
Application معمولی اجازه ندارد هر چیزی را مستقیماً در Kernel Space اجرا کند.
یکی از مهمترین مسیرهای ارتباطی بین User Space و Kernel Space، مفهومی به نام:
System Call
یا بهاختصار:
syscall
است.
فرض کنید برنامهای میخواهد:
فایل باز کند
Memory درخواست کند
Process ایجاد کند
داده از شبکه دریافت کنددر نهایت برای انجام چنین عملیاتی از Interfaceهای سیستمعامل استفاده میکند.
ساختار ساده:
Application
│
▼
Library / Runtime
│
▼
System Call
│
▼
Linux Kernel
│
▼
Resource / Hardwareمستندات رسمی Linux Kernel نیز System Callها را بخشی از User-space API هسته مستند میکند.
User Space و Kernel Space چیست؟
Linux میان برنامههای معمولی و Kernel جداسازی ایجاد میکند.
User Space
نرمافزارهایی مانند:
Nginx
MySQL
Node.js
PHP
Python
Bash
Redisمعمولاً در User Space اجرا میشوند.
Kernel Space
خود Kernel با سطح دسترسی بسیار بالاتری در Kernel Space اجرا میشود.
این جداسازی اهمیت زیادی دارد.
اگر هر Application میتوانست آزادانه Memory یا Hardware سیستم را کنترل کند، یک Bug ساده در یک برنامه ممکن بود کل سیستم را مختل کند.
Kernel در واقع مانند یک واسط و مدیر دارای سطح دسترسی بالا عمل میکند.
Linux از چه نوع Kernelی استفاده میکند؟
در طراحی سیستمعاملها معماریهای مختلفی برای Kernel وجود دارد.
دو مفهوم معروف عبارتاند از:
Monolithic Kernel
MicrokernelLinux در دسته Monolithic Kernel قرار میگیرد.
یعنی بخش بزرگی از سرویسهای اصلی سیستم در Kernel Space اجرا میشوند.
اما Linux در عین حال Modular هم هست.
بسیاری از قابلیتها میتوانند به شکل Loadable Kernel Module اضافه یا حذف شوند.
برای مشاهده Moduleهای فعلی:
lsmodو برای مشاهده اطلاعات یک Module:
modinfo MODULE_NAMEدر صورت نیاز، Moduleها را میتوان با ابزارهایی مانند:
sudo modprobe MODULE_NAMEمدیریت کرد.
البته Kernel Moduleها در بخش بسیار حساسی از سیستم اجرا میشوند و تغییر آنها روی Production Server باید آگاهانه انجام شود.
نسخه Kernel لینوکس را چگونه ببینیم؟
اگر یک VPS یا Server لینوکسی دارید، مشاهده Kernel بسیار ساده است.
uname -rاین دستور نسخه Kernel در حال اجرا را نمایش میدهد.
برای اطلاعات بیشتر:
uname -aو:
cat /proc/versionنیز قابل استفاده هستند.
یک نکته مهم:
Kernel نصبشده روی Disk الزاماً همان Kernel در حال اجرا نیست.
ممکن است Kernel جدید با Update نصب شده باشد، اما تا زمانی که Server Reboot نشده، Kernel قبلی همچنان در حال اجرا باشد.
هنگام روشن شدن Linux چه اتفاقی میافتد؟
فرایند Boot بسیار پیچیدهتر از نمودار زیر است، اما برای درک جایگاه Kernel میتوان آن را ساده کرد:
Power On
│
▼
BIOS / UEFI
│
▼
Bootloader
│
▼
Linux Kernel
│
▼
systemd / init
│
▼
Services
│
▼
Applicationsبعد از اینکه Bootloader، Kernel را Load میکند، هسته بخشهای اصلی سیستم را آماده میکند.
سپس User Space راهاندازی میشود و سرویسهایی مانند:
SSH
Nginx
Database
Docker
Applicationمیتوانند شروع به کار کنند.
بنابراین حتی قبل از اینکه Login Prompt یا صفحه وب Server را ببینید، Kernel بخش مهمی از کار خود را انجام داده است.
Linux Kernel چه ارتباطی با VPS دارد؟
برای کاربران سرور این بخش اهمیت زیادی دارد.
اگر VPS شما یک Virtual Machine کامل باشد، در فناوریهایی مثل KVM هر VM میتواند سیستمعامل و Kernel خودش را Boot کند.
Physical Server
│
Hypervisor
│
┌────┴────┐
▼ ▼
VPS 1 VPS 2
Kernel Kernelبه همین دلیل روی VPS خودتان میتوانید دستور:
uname -rرا اجرا کنید و Kernel همان ماشین مجازی را ببینید.
مطالعه پیشنهادی: سرور مجازی (VPS) چیست و چگونه کار میکند؟
Containerها چه تفاوتی دارند؟
اینجا یکی از جذابترین کاربردهای Linux Kernel مشخص میشود.
یک Linux Container معمولاً Kernel مستقلی مثل Virtual Machine Boot نمیکند.
Containerهای همان Host معمولاً Kernel میزبان را به اشتراک میگذارند.
به شکل ساده:
Physical Server
│
Linux Kernel
│
┌────┼────┐
▼ ▼ ▼
C1 C2 C3برای جداسازی Containerها، Linux قابلیتهایی مانند:
Namespaces
cgroups
Capabilitiesفراهم میکند.
پس یکی از تفاوتهای مهم این است:
Virtual Machine
→ Kernel مستقل
Linux Container
→ Kernel مشترک Hostهمین معماری یکی از دلایلی است که Containerها معمولاً نسبت به VM کامل سبکتر هستند.
چرا مدیر سرور باید Kernel را بشناسد؟
لازم نیست برای مدیریت VPS، Kernel Developer باشید.
اما شناختن نقش Kernel باعث میشود رفتار Server را بهتر درک کنید.
وقتی با این موضوعات سروکار دارید:
CPU
RAM
Processes
Network
Filesystem
Docker
Firewall
Kernel Update
System CrashKernel در پشت صحنه حضور دارد.
دستورهایی مثل:
uname
dmesg
sysctl
lsmodهم مستقیماً اطلاعات یا تنظیمات مرتبط با هسته را در اختیار مدیر سیستم قرار میدهند.
Linux چگونه شروع شد؟
داستان Linux از سال ۱۹۹۱ شروع شد.
Linus Torvalds در آن زمان دانشجوی دانشگاه هلسینکی بود و روی یک سیستم مبتنی بر پردازنده 386 کار میکرد.
در ۲۵ اوت ۱۹۹۱ او در comp.os.minix درباره سیستمعامل رایگانی که در حال توسعه آن بود نوشت.
در همان پیام گفته بود پروژه از ماه آوریل در حال شکلگیری بوده و آن را چیزی در حد یک سرگرمی میدانست. متن تاریخی پیام هنوز در آرشیوها موجود است.
نسخههای اولیه کمی بعد در اختیار دیگران قرار گرفتند و مسیر توسعه Linux آغاز شد.
در نتیجه چند تاریخ مهم در داستان اولیه Linux وجود دارد، اما ۲۵ اوت ۱۹۹۱ معمولاً بهعنوان تاریخ اعلام عمومی پروژه شناخته میشود.
امروز Linux ۳۵ ساله شد
امروز، ۲۵ اوت ۲۰۲۶، ۳۵ سال از آن اعلام عمومی میگذرد.
این بخش شاید جذابترین قسمت داستان باشد.
در پیام اولیه، Torvalds درباره پروژهای برای سیستمهای:
386
486صحبت میکرد.
اما امروز Linux در قلب بخش بزرگی از زیرساخت نرمافزاری دنیا قرار دارد.
از:
Cloud Servers
Virtual Machines
Containers
Android
Networking
Embedded Systemsگرفته تا بسیاری از محیطهای Enterprise و Developer.
آن پروژه شخصی کوچک حالا مجموعه بزرگی از Subsystemها برای مواردی مانند:
Memory Management
Scheduler
Networking
Device Drivers
Power Management
Security
دارد.
این شاید بهترین توصیف برای مسیر ۳۵ ساله Linux باشد:
پروژهای که قرار نبود بزرگ و حرفهای شود، به یکی از مهمترین پایههای زیرساخت محاسبات مدرن تبدیل شد.
آیا Kernel سرور باید آپدیت شود؟
بله؛ Kernel نیز مانند سایر بخشهای مهم سیستم Update دریافت میکند.
این Updateها میتوانند شامل:
Security Fix
Bug Fix
Hardware Support
Driver Update
Performance Improvement
باشند.
اما روی Production Server هدف نباید صرفاً داشتن «بالاترین شماره نسخه» باشد.
در Distributionهایی مثل Ubuntu یا Debian معمولاً منطقی است Kernel را از طریق Packageهای رسمی همان Distribution مدیریت کنید.
بعد از Update میتوانید نسخه در حال اجرا را دوباره بررسی کنید:
uname -rو اگر Kernel جدید نصب شده ولی هنوز Kernel قبلی در حال اجراست، ممکن است Reboot لازم باشد.
آیا همیشه جدیدترین Kernel بهتر است؟
نه.
در Serverها معمولاً این موارد از جدیدترین شماره Version مهمتر هستند:
پایداری
Security Support
سازگاری
Patchهای Distribution
سازگاری با Workload
بنابراین روی یک VPS Production معمولاً بهتر است از Kernel پشتیبانیشده Distribution استفاده کنید، مگر اینکه دلیل فنی مشخصی برای Custom Kernel داشته باشید.
جمعبندی
Linux Kernel همان چیزی نیست که مستقیماً هنگام کار با Terminal میبینیم، اما تقریباً پشت تمام عملیات اصلی سیستم قرار دارد.
وقتی:
Process اجرا میشود
Memory تخصیص پیدا میکند
فایل خوانده میشود
Packet شبکه دریافت میشود
Driver با Hardware ارتباط میگیرد
Container ایجاد میشودKernel بخشی اساسی از این فرایند است.
Linux Kernel منابع سیستم را مدیریت میکند و واسط کنترلشدهای بین Application و Hardware ایجاد میکند.
و داستان این هسته یک نکته جالب دیگر هم دارد.
۳۵ سال پیش، در ۲۵ اوت ۱۹۹۱، Linus Torvalds پروژهای را در اینترنت معرفی کرد که خودش انتظار نداشت بزرگ و حرفهای شود.
امروز همان پروژه در قلب بخش بزرگی از Serverها، Cloud Infrastructure و Containerهای دنیا قرار دارد.
پس دفعه بعد که روی VPS خودتان اجرا کردید:
uname -rعددی که میبینید فقط Version یک نرمافزار نیست؛ ادامه پروژهای است که مسیر عمومی آن ۳۵ سال پیش با یک پیام ساده آغاز شد.
سوالات متداول درباره هسته لینوکس
Linux Kernel چیست؟
Linux Kernel بخش مرکزی سیستم Linux است که منابعی مانند CPU، RAM، Processها، Storage، Network و Deviceها را مدیریت میکند و Interface لازم برای ارتباط Applicationها با سیستم را فراهم میکند.
آیا Linux یک سیستمعامل کامل است؟
در معنای دقیق فنی، Linux نام Kernel است. Distributionهایی مانند Ubuntu و Debian علاوه بر Linux Kernel شامل Libraryها، Utilityها، Package Manager و نرمافزارهای User Space هستند.
نسخه Kernel را چگونه ببینیم؟
با دستور زیر:
uname -rبرای اطلاعات بیشتر نیز میتوانید از:
uname -aاستفاده کنید.
Linux Kernel چند ساله است؟
در ۲۵ اوت ۲۰۲۶، ۳۵ سال از اعلام عمومی پروژه Linux توسط Linus Torvalds در comp.os.minix میگذرد.
آیا Docker Kernel مستقلی دارد؟
Linux Containerها معمولاً Kernel میزبان را به اشتراک میگذارند و برای Isolation از قابلیتهای Kernel مانند Namespaces و cgroups استفاده میکنند. Virtual Machineها در مقابل معمولاً Kernel مستقل خودشان را Boot میکنند.




