لینوکس

هسته لینوکس چیست؟ داستان Linux Kernel در ۳۵ سالگی

هسته لینوکس یا Linux Kernel قلب سیستم‌های لینوکسی است و مدیریت CPU، حافظه، پردازش‌ها، شبکه و سخت‌افزار را برعهده دارد. در ۳۵ سالگی اعلام عمومی Linux، ببینیم Kernel چگونه کار می‌کند و چرا هنوز یکی از پایه‌های مهم زیرساخت مدرن است.

هسته لینوکس چیست؟ داستان Linux Kernel در ۳۵ سالگی
علیرضا عزیزی
علیرضا عزیزی
نویسنده و کارشناس
26 دقیقه • ۷ آبان ۱۴۰۵• ۲۱

امروز، ۲۵ اوت ۲۰۲۶، ۳۵ سال از یکی از معروف‌ترین پیام‌های تاریخ نرم‌افزار می‌گذرد.

در ۲۵ اوت ۱۹۹۱، دانشجوی ۲۱ ساله‌ای از دانشگاه هلسینکی به نام 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 Devices

Kernel مشخص می‌کند:

  • کدام Process چه زمانی از CPU استفاده کند

  • Memory چگونه تخصیص پیدا کند

  • فایل‌ها چگونه خوانده و نوشته شوند

  • Packetهای شبکه چگونه پردازش شوند

  • Applicationها چگونه با Deviceها ارتباط داشته باشند

  • چه عملیاتی مجاز یا غیرمجاز باشند

به همین دلیل می‌توان Kernel را مدیر اصلی منابع سیستم دانست.

linux-kernel-architecture.png

آیا 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 چند بخش از همه مهم‌تر هستند.

Afyb6xVld8gn1OCzUNMLxC8O.avif

مدیریت 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
Microkernel

Linux در دسته 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 Crash

Kernel در پشت صحنه حضور دارد.

دستورهایی مثل:

uname
dmesg
sysctl
lsmod

هم مستقیماً اطلاعات یا تنظیمات مرتبط با هسته را در اختیار مدیر سیستم قرار می‌دهند.


Linux چگونه شروع شد؟

داستان Linux از سال ۱۹۹۱ شروع شد.

Linus Torvalds در آن زمان دانشجوی دانشگاه هلسینکی بود و روی یک سیستم مبتنی بر پردازنده 386 کار می‌کرد.

در ۲۵ اوت ۱۹۹۱ او در comp.os.minix درباره سیستم‌عامل رایگانی که در حال توسعه آن بود نوشت.

در همان پیام گفته بود پروژه از ماه آوریل در حال شکل‌گیری بوده و آن را چیزی در حد یک سرگرمی می‌دانست. متن تاریخی پیام هنوز در آرشیوها موجود است.

نسخه‌های اولیه کمی بعد در اختیار دیگران قرار گرفتند و مسیر توسعه Linux آغاز شد.

در نتیجه چند تاریخ مهم در داستان اولیه Linux وجود دارد، اما ۲۵ اوت ۱۹۹۱ معمولاً به‌عنوان تاریخ اعلام عمومی پروژه شناخته می‌شود.

P1ORkIwpYVV9JSRCnNum81YP.avif

امروز 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 می‌کنند.


علیرضا عزیزی

نویسنده مقالات تخصصی و آموزشی در وبلاگ نتزو.

مشاهده تمام مقالات این نویسنده

مقالات مرتبط و پیشنهادی