فصل دوم: نرم افزار
در دنیای امروز، نرمافزار نقش اساسی و تعیینکنندهای در عملکرد کامپیوترها و دستگاههای دیجیتال دارد. نرمافزارها به ما امکان میدهند تا با سختافزار تعامل کنیم، وظایف پیچیده را انجام دهیم و از قابلیتهای بینهایت سیستمهای کامپیوتری بهرهمند شویم. در این فصل، به بررسی عمیقتر نرمافزارها میپردازیم، انواع مختلف آنها را معرفی میکنیم و نقش حیاتی آنها در عملکرد کامپیوتر را مورد بحث قرار میدهیم.
تقسیمبندی نرمافزار
نرمافزارها به دو دسته اصلی تقسیم میشوند:
- نرمافزار سیستم (System Software)
- نرمافزار کاربردی (Application Software)
نرمافزار سیستم

نرمافزار سیستم مجموعهای از برنامهها است که برای مدیریت و کنترل منابع سختافزاری کامپیوتر طراحی شدهاند. این نرمافزارها به عنوان واسط بین کاربر و سختافزار عمل میکنند و امکان اجرای نرمافزارهای کاربردی را فراهم میسازند.
ویژگیها و وظایف نرمافزار سیستم:
- مدیریت منابع سختافزاری: تخصیص و کنترل استفاده از پردازنده، حافظه، دستگاههای ورودی/خروجی و سایر منابع.
- ارائه رابط کاربری: فراهم کردن محیطی که کاربران بتوانند با سیستم تعامل داشته باشند.
- اجرای نرمافزارهای کاربردی: ایجاد بستری برای نصب و اجرای برنامههای کاربردی.
- امنیت و پایداری سیستم: محافظت از سیستم در برابر تهدیدات و اطمینان از عملکرد پایدار.
انواع نرمافزار سیستم:
- سیستمعامل (Operating System): برنامهای که مدیریت کلی سیستم را بر عهده دارد.
- درایورهای دستگاه (Device Drivers): نرمافزارهایی که ارتباط بین سیستمعامل و دستگاههای سختافزاری را ممکن میسازند.
- مترجمها و کامپایلرها: ابزارهایی که کد منبع را به زبان ماشین ترجمه میکنند.
- برنامههای سودمند (Utility Programs): نرمافزارهایی برای انجام وظایف خاص مانند مدیریت دیسک، فشردهسازی فایلها و غیره.
نرمافزار کاربردی
تعریف:
نرمافزار کاربردی برنامههایی هستند که برای انجام وظایف خاص و حل مسائل معین طراحی شدهاند. این نرمافزارها بر روی سیستمعامل نصب میشوند و نیازهای کاربران را در زمینههای مختلف برآورده میکنند.
انواع نرمافزارهای کاربردی:
- نرمافزارهای اداری: مانند Microsoft Office (Word، Excel، PowerPoint) برای ایجاد اسناد، جداول و ارائهها.
- نرمافزارهای گرافیکی: مانند Adobe Photoshop برای ویرایش تصاویر.
- مرورگرهای وب: مانند Google Chrome، Mozilla Firefox برای دسترسی به اینترنت.
- نرمافزارهای چندرسانهای: برای پخش موسیقی و ویدیو.
- برنامههای تخصصی: مانند نرمافزارهای مهندسی، پزشکی، آموزشی و غیره.
معماری سیستم کامپیوتر و عملکرد آن

عملکرد یک کامپیوتر را میتوان به چهار واحد اصلی تقسیم کرد:
- واحد ورودی (Input Unit):
- وظیفه: دریافت دادهها و دستورات از کاربر.
- دستگاهها: صفحهکلید، ماوس، اسکنر، میکروفون.
- یک واحد حافظه:
- وظیفه: ذخیرهسازی دادهها و دستورالعملها برای پردازش.
- انواع حافظه: حافظه اصلی (RAM)، حافظه ثانویه (دیسک سخت، SSD).
- واحد پردازش مرکزی (Central Processing Unit – CPU):
- وظیفه: پردازش دادهها و اجرای دستورالعملها.
- اجزا: واحد حساب و منطق (ALU)، واحد کنترل (CU)، ثباتها (Registers).
- واحد خروجی (Output Unit):
- وظیفه: ارائه نتایج پردازش به کاربر.
- دستگاهها: مانیتور، چاپگر، بلندگو، هدست.
ویژگیهای اساسی سیستمهای کامپیوتری
- برنامهریزیپذیری: کامپیوترها با استفاده از برنامهها و دستورالعملهای خاصی کار میکنند.
- پردازش داده: تبدیل دادههای خام به اطلاعات مفید.
- دیجیتالی بودن: استفاده از سیستم باینری (0 و 1) برای پردازش و ذخیرهسازی اطلاعات.
- قابلیت اطمینان و دقت بالا: انجام محاسبات پیچیده با دقت و سرعت بالا.
کامپایل برنامه: ترجمه برنامهها از زبان سطح بالا به کد ماشین

برنامههای کامپیوتری معمولاً به زبانهای برنامهنویسی سطح بالا مانند C، Java یا Python نوشته میشوند که برای انسان قابل فهم هستند. اما کامپیوترها فقط کد ماشین (صفر و یکها) را میفهمند. برای اجرای این برنامهها، باید توسط کامپایلرها به کد ماشین ترجمه شوند.
مراحل ترجمه:

- نوشتن کد منبع: برنامهنویس کد را به زبان سطح بالا مینویسد.
- کامپایل کردن: کامپایلر کد منبع را به کد ماشین تبدیل میکند.
- ایجاد فایل اجرایی: کد ماشین در قالب یک برنامه اجرایی ذخیره میشود.
- اجرای برنامه: سیستمعامل برنامه را در حافظه بارگذاری و اجرا میکند.
فرآیند بوت شدن (Booting)

بوت شدن فرآیندی است که در آن کامپیوتر با بارگذاری سیستمعامل در حافظه اصلی آماده استفاده میشود. این فرآیند از زمان روشن شدن سیستم تا نمایش دسکتاپ یا محیط کاربری ادامه دارد.
انواع بوت شدن:
- بوت سرد (Cold Boot):
- تعریف: زمانی که کامپیوتر از حالت خاموش روشن میشود.
- مراحل: اجرای تستهای اولیه سختافزاری، بارگذاری BIOS/UEFI، یافتن سیستمعامل و بارگذاری آن.
- بوت گرم:
- تعریف: راهاندازی مجدد سیستم بدون خاموش کردن کامل.
- موارد استفاده: نصب نرمافزار یا سختافزار جدید، رفع مشکلات سیستم.
- روشها: استفاده از گزینه Restart در سیستمعامل یا کلیدهای ترکیبی مانند Ctrl+Alt+Del.
مراحل فرآیند بوت شدن:

- روشن کردن سیستم:
- فشردن دکمه پاور و تأمین برق به قطعات سختافزاری.
- اجرای POST (Power-On Self-Test):
- تست اولیه سختافزار توسط BIOS/UEFI.
- شناسایی و بررسی سلامت قطعات مانند RAM، CPU، دستگاههای ورودی/خروجی.
- بارگذاری Bootloader:
- برنامهای که سیستمعامل را در حافظه بارگذاری میکند.
- مثال: NTLDR در ویندوزهای قدیمی، Bootmgr در ویندوزهای جدید، GRUB در لینوکس.
بارگذاری سیستمعامل:
- انتقال کنترل به سیستمعامل و بارگذاری فایلهای ضروری.
- تنظیم محیط کاربری و آمادهسازی سیستم برای استفاده.
سیستمعامل (Operating System – OS)
![]()
سیستمعامل نرمافزار سیستمی اساسی است که به عنوان واسط بین کاربر و سختافزار کامپیوتر عمل میکند. بدون سیستمعامل، امکان استفاده از کامپیوتر وجود ندارد.
وظایف اصلی سیستمعامل:
- مدیریت پردازش (Process Management): مدیریت اجرای برنامهها و تخصیص زمان CPU به فرآیندها.
- مدیریت حافظه (Memory Management): تخصیص و آزادسازی حافظه برای برنامهها و اطمینان از استفاده بهینه از حافظه.
- مدیریت دستگاهها (Device Management): کنترل و ارتباط با دستگاههای ورودی/خروجی.
- مدیریت فایل (File Management): سازماندهی، ذخیرهسازی و دسترسی به فایلها و دایرکتوریها.
- امنیت و حفاظت (Security and Protection): محافظت از دادهها و منابع در برابر دسترسی غیرمجاز.
- رابط کاربری (User Interface): ارائه محیطی برای تعامل کاربر با سیستم، مانند رابط گرافیکی (GUI) یا خط فرمان (CLI).
هسته (Kernel) و شِل (Shell)

هسته (Kernel):
- تعریف: بخش مرکزی سیستمعامل که کنترل کامل سختافزار را بر عهده دارد.
- وظایف: مدیریت حافظه، مدیریت فرآیندها، مدیریت دستگاهها، کنترل دسترسی و امنیت.
انواع هستهها:

- هسته یکپارچه (Monolithic Kernel): تمامی خدمات سیستمعامل در یک فضای واحد اجرا میشوند. لینوس بندیکت توروالدز (به سوئدی: Linus Benedict Torvalds؛ توروالدز صاحب نشان تجاری لینوکس است. لینوس توروالدز مفهوم هسته یکپارچه را در سال 1991 به عنوان بخشی از هسته لینوکس معرفی کرد. هسته یکپارچه یک برنامه بزرگ است که شامل تمام اجزای سیستم عامل است. با این حال، هسته لینوکس در طول سال ها تکامل یافته و اکنون از انواع مختلفی از هسته ها تشکیل شده است که در زیر ذکر شده است.
- ریز هسته (Microkernel): تنها اجزای ضروری در هسته قرار دارند و بقیه خدمات در فضای کاربر اجرا میشوند.
- هسته هیبریدی (Hybrid Kernel): ترکیبی از ویژگیهای هسته یکپارچه و ریز هسته.
شِل (پوسته):

- تعریف: رابط بین کاربر و سیستمعامل که دستورات را تفسیر و اجرا میکند.
انواع شل:
- خط فرمان (Command-Line Interface – CLI): کاربر دستورات را به صورت متنی وارد میکند.
- رابط گرافیکی (Graphical User Interface – GUI): کاربر با استفاده از المانهای گرافیکی با سیستم تعامل دارد.
انواع سیستمعاملها
- سیستمعامل دستهای (Batch Operating System):
- مناسب برای اجرای مجموعهای از وظایف بدون تعامل کاربر.
- سیستمعامل چندوظیفهای (Multitasking Operating System):
- امکان اجرای همزمان چندین برنامه را فراهم میکند.
- سیستمعامل توزیعشده (Distributed Operating System):
- مدیریت منابع در شبکهای از کامپیوترها.
- سیستمعامل بلادرنگ (Real-Time Operating System):
- پاسخگویی سریع به رویدادها، مناسب برای کاربردهای حساس زمانی.
- سیستمعامل شبکهای (Network Operating System):
- مدیریت و اشتراک منابع در شبکههای کامپیوتری.
سیستمعامل موبایل (Mobile Operating System):
- طراحی شده برای دستگاههای همراه مانند تلفنهای هوشمند و تبلتها.
ویژگی های سیستم عامل های مدرن
- پشتیبانی از مجازیسازی: امکان اجرای چندین سیستمعامل بر روی یک سختافزار.
- یکپارچگی با ابر (Cloud Integration): دسترسی به خدمات و ذخیرهسازی ابری.
- مدیریت انرژی: بهینهسازی مصرف انرژی، مخصوصاً در دستگاههای قابل حمل.
- امنیت پیشرفته: استفاده از فناوریهایی مانند احراز هویت بیومتریک، رمزنگاری، بهروزرسانیهای امنیتی مداوم.
- پشتیبانی از اینترنت اشیا (IoT): مدیریت و ارتباط با دستگاههای هوشمند و سنسورها.
- قابلیتهای هوش مصنوعی: استفاده از یادگیری ماشین برای بهبود تجربه کاربری.
انواع سیستمعاملهای محبوب

ویندوز (Windows):
- توسعهیافته توسط مایکروسافت.
- محبوبترین سیستمعامل دسکتاپ.
- رابط کاربری گرافیکی کاربرپسند و پشتیبانی گسترده از نرمافزارها.
مکاواس (macOS):
- توسعهیافته توسط اپل.
- طراحی شده برای کامپیوترهای مک.
- تمرکز بر طراحی زیبا و عملکرد روان.
لینوکس (Linux):
- سیستمعاملی متنباز و رایگان.
- قابل تنظیم و سفارشیسازی بالا.
- مناسب برای سرورها، توسعهدهندگان و کاربران حرفهای.
اندروید (Android):
- توسعهیافته توسط گوگل.
- محبوبترین سیستمعامل موبایل.
- متنباز و قابل سفارشیسازی.
آیاواس (iOS):
- توسعهیافته توسط اپل.
- طراحی شده برای آیفون و آیپد.
- تمرکز بر امنیت و یکپارچگی با اکوسیستم اپل.
سیستم عامل 32 بیتی در مقابل سیستم عامل 64 بیتی

تفاوت اصلی: میزان حافظهای که سیستمعامل میتواند مدیریت کند.
- سیستمعامل 32 بیتی: حداکثر تا 4 گیگابایت RAM را پشتیبانی میکند.
- سیستمعامل 64 بیتی: قادر به پشتیبانی از حافظه بسیار بیشتر (تا 16 اگزابایت).
سازگاری:
- سیستمعامل 32 بیتی فقط بر روی پردازندههای 32 بیتی اجرا میشود.
- سیستمعامل 64 بیتی بر روی پردازندههای 64 بیتی اجرا میشود و میتواند برنامههای 32 بیتی را نیز اجرا کند.
نرمافزارها بخش جداییناپذیر از سیستمهای کامپیوتری هستند که امکان استفاده و بهرهبرداری از سختافزار را فراهم میکنند. با درک انواع نرمافزارها و نقش هر یک، میتوانیم به صورت مؤثرتری از فناوریهای دیجیتال استفاده کنیم و به بهبود مهارتهای خود در زمینه کامپیوتر و فناوری اطلاعات بپردازیم.
حافظه مجازی (Virtual Memory)
در دنیای کامپیوترهای مدرن، مدیریت مؤثر حافظه یکی از چالشهای اساسی است که سیستمعاملها با آن روبهرو هستند. برنامهها و فرآیندهای مختلف نیاز به فضای حافظهای بیشتر از آنچه حافظه فیزیکی (RAM) سیستم ارائه میدهد، دارند. برای مقابله با این محدودیت و بهبود عملکرد سیستم، مفهومی به نام حافظه مجازی (Virtual Memory) معرفی شده است. حافظه مجازی به سیستمعامل اجازه میدهد تا با ایجاد فضایی بزرگتر از حافظه فیزیکی واقعی، برنامهها را بهطور کارآمد اجرا کند.
حافظه مجازی تکنیکی است که در آن سیستمعامل با ترکیب حافظه اصلی (RAM) و حافظه ثانویه (مانند دیسک سخت)، فضایی از حافظه را ایجاد میکند که به نظر برنامهها بزرگتر از حافظه فیزیکی واقعی است. به عبارت دیگر، حافظه مجازی به برنامهها اجازه میدهد تا گویی به یک فضای حافظه پیوسته و بزرگ دسترسی دارند، حتی اگر این فضا بهصورت فیزیکی وجود نداشته باشد.
نحوه کار حافظه مجازی
حافظه مجازی از طریق تقسیم حافظه به بلوکهای کوچکتر به نام صفحهها (Pages) در حافظه ثانویه و قابها (Frames) در حافظه اصلی عمل میکند. زمانی که یک برنامه اجرا میشود، به صفحههایی تقسیم شده و سیستمعامل آنها را در حافظه ثانویه ذخیره میکند.
هنگامی که یک فرآیند به دادهای نیاز دارد، سیستمعامل صفحه مربوطه را از حافظه ثانویه به حافظه اصلی منتقل میکند. اگر صفحه مورد نیاز در حافظه اصلی وجود نداشته باشد، یک نقص صفحه (Page Fault) رخ میدهد و سیستمعامل باید صفحه را بارگذاری کند.
صفحهبندی (Paging) در سیستمعامل
صفحهبندی یک تکنیک مدیریت حافظه است که به سیستمعاملها اجازه میدهد تا دادهها را بین حافظه ثانویه و حافظه اصلی منتقل کنند. در این روش، حافظه به بلوکهای با اندازه ثابت تقسیم میشود:
- صفحهها: بلوکهای حافظه ثانویه.
- قابها: بلوکهای حافظه اصلی.
نحوه عملکرد:
تقسیم حافظه:
- حافظه ثانویه به صفحهها تقسیم میشود.
- حافظه اصلی به قابها تقسیم میشود.
اجرای برنامه:
- برنامه به صفحهها تقسیم شده و در حافظه ثانویه ذخیره میشود.
درخواست حافظه:
- زمانی که برنامه به دادهای نیاز دارد، سیستمعامل صفحه مربوطه را به قاب خالی در حافظه اصلی منتقل میکند.
جدول صفحه (Page Table):
- سیستمی که رابطه بین صفحههای منطقی و قابهای فیزیکی را نگه میدارد.
- واحد مدیریت حافظه (MMU): سختافزاری که آدرسهای منطقی را به آدرسهای فیزیکی تبدیل میکند.
اصطلاحات مرتبط با صفحهبندی
- صفحه (Page): بلوکهای حافظه ثانویه با اندازه ثابت.
- قاب (Frame): بلوکهای حافظه اصلی با اندازه ثابت.
- جدول صفحه (Page Table): ساختاری که نگاشت بین صفحهها و قابها را نگه میدارد.
- آدرس منطقی (Logical Address): آدرسی که توسط برنامه تولید میشود.
- آدرس فیزیکی (Physical Address): آدرسی که به مکان واقعی در حافظه اصلی اشاره میکند.
- نقص صفحه (Page Fault): زمانی که صفحه مورد نظر در حافظه اصلی وجود ندارد.
فرآیند صفحهبندی گام به گام
اجرای فرآیند:
- فرآیند آغاز به کار میکند و سیستمعامل آن را به صفحهها تقسیم میکند.
ایجاد جدول صفحه:
- سیستمعامل جدولی ایجاد میکند که نگاشت بین صفحههای منطقی و قابهای فیزیکی را نشان میدهد.
درخواست دسترسی به صفحه:
- فرآیند درخواست دسترسی به یک صفحه را میدهد.
بررسی وجود صفحه در حافظه اصلی:
اگر صفحه در حافظه اصلی باشد (موفقیت صفحه)، دسترسی انجام میشود.
اگر صفحه در حافظه اصلی نباشد (نقص صفحه)، مراحل زیر انجام میشود:
- واحد مدیریت حافظه (MMU) آدرس فیزیکی را تعیین میکند.
- سیستمعامل صفحه را از حافظه ثانویه به حافظه اصلی منتقل میکند.
- جدول صفحه بهروزرسانی میشود.
- فرآیند ادامه مییابد.
تکنیکهای صفحهبندی
صفحهبندی بر اساس درخواست (Demand Paging):
- صفحهها فقط زمانی که مورد نیاز هستند به حافظه اصلی منتقل میشوند.
- متداولترین روش در سیستمعاملهای مدرن مانند ویندوز، لینوکس و مکاواس.
صفحهبندی پیشبینیکننده (Anticipatory Paging):
- سیستمعامل صفحههایی که احتمال نیاز به آنها در آینده نزدیک وجود دارد را پیشاپیش بارگذاری میکند.
- هدف: کاهش نقص صفحه و بهبود کارایی.
صفحهبندی پیشبارگذاری (Prepaging):
- مشابه صفحهبندی پیشبینیکننده، اما با شدت کمتر.
- صفحههایی که ممکن است در آینده نیاز شوند را بارگذاری میکند.
کپی در نوشتن (Copy-on-Write):
- زمانی که فرآیندی قصد نوشتن در صفحهای را دارد که توسط فرآیند دیگری استفاده میشود، یک کپی از صفحه ایجاد میشود.
- اطمینان از اینکه دادههای فرآیندها تداخلی ندارند.
نقص صفحه (Page Fault) و مدیریت آن
نقص صفحه چیست؟
زمانی رخ میدهد که فرآیند به صفحهای نیاز دارد که در حافظه اصلی موجود نیست.
ممکن است به دلایل زیر باشد:
- صفحه هرگز در حافظه اصلی بارگذاری نشده است.
- صفحه از حافظه اصلی حذف شده است تا جایگزین صفحه دیگری شود.
- صفحه تغییر یافته و نیاز به ذخیره در حافظه ثانویه دارد.
مدیریت نقص صفحه:
تعویض صفحه (Page Replacement):
سیستمعامل باید تصمیم بگیرد کدام صفحه را از حافظه اصلی حذف کند تا صفحه جدید را بارگذاری کند.
الگوریتمهای مختلفی برای این کار وجود دارد، مانند:
- Least Recently Used (LRU): صفحهای که کمتر مورد استفاده قرار گرفته است.
- First In, First Out (FIFO): صفحهای که زودتر بارگذاری شده است.
- Optimal: صفحهای که در آینده کمتر مورد نیاز است.
کاهش نقص صفحه:
- استفاده از تکنیکهای پیشبینیکننده.
- افزایش حافظه فیزیکی (RAM).
شلوغی (Thrashing) و علل آن
شلوغی چیست؟
- حالتی که سیستم بیشتر وقت خود را صرف مدیریت نقص صفحه میکند تا اجرای فرآیندها.
- باعث کاهش شدید کارایی سیستم میشود.
علل شلوغی:
- اجرای تعداد زیادی فرآیند به صورت همزمان.
- کمبود حافظه فیزیکی.
- استفاده از الگوریتم نامناسب برای تعویض صفحه.
- عدم تخصیص کافی قابها به فرآیندها.
راهحلهای جلوگیری از شلوغی:
- محدود کردن تعداد فرآیندهای در حال اجرا.
- افزایش حافظه فیزیکی.
- بهینهسازی الگوریتمهای تعویض صفحه.
- مدیریت بهتر تخصیص قابها.
مزایا و معایب حافظه مجازی و صفحهبندی
مزایا:
- استفاده بهینه از حافظه: امکان اجرای برنامههایی بزرگتر از حافظه فیزیکی.
- کاهش تکهتکه شدن خارجی (External Fragmentation): حافظه به بلوکهای با اندازه ثابت تقسیم میشود.
- سادهسازی مدیریت حافظه: سیستمعامل نیاز به مدیریت جزئیات آدرسدهی ندارد.
معایب:
- پیچیدگی بیشتر: نیاز به مدیریت جدول صفحه و تبدیل آدرسها.
- نقص صفحه: ممکن است باعث کاهش کارایی شود.
- هزینه سربار: مصرف منابع برای مدیریت حافظه مجازی.
حافظه مجازی و تکنیک صفحهبندی ابزارهای قدرتمندی در سیستمعاملها هستند که به مدیریت مؤثر حافظه و بهبود کارایی سیستم کمک میکنند. با درک عمیق این مفاهیم، میتوان به بهینهسازی سیستمها و جلوگیری از مشکلاتی مانند نقص صفحه و شلوغی پرداخت.


