Table of Contents

فصل دوم: نرم افزار

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

تقسیم‌بندی نرم‌افزار

نرم‌افزارها به دو دسته اصلی تقسیم می‌شوند:

  1. نرم‌افزار سیستم (System Software)
  2. نرم‌افزار کاربردی (Application Software)

نرم‌افزار سیستم

تفاوت بین نرم افزار سیستم و نرم افزار کاربردی - GeeksforGeeks

نرم‌افزار سیستم مجموعه‌ای از برنامه‌ها است که برای مدیریت و کنترل منابع سخت‌افزاری کامپیوتر طراحی شده‌اند. این نرم‌افزارها به عنوان واسط بین کاربر و سخت‌افزار عمل می‌کنند و امکان اجرای نرم‌افزارهای کاربردی را فراهم می‌سازند.

ویژگی‌ها و وظایف نرم‌افزار سیستم:

  • مدیریت منابع سخت‌افزاری: تخصیص و کنترل استفاده از پردازنده، حافظه، دستگاه‌های ورودی/خروجی و سایر منابع.
  • ارائه رابط کاربری: فراهم کردن محیطی که کاربران بتوانند با سیستم تعامل داشته باشند.
  • اجرای نرم‌افزارهای کاربردی: ایجاد بستری برای نصب و اجرای برنامه‌های کاربردی.
  • امنیت و پایداری سیستم: محافظت از سیستم در برابر تهدیدات و اطمینان از عملکرد پایدار.

انواع نرم‌افزار سیستم:

  • سیستم‌عامل (Operating System): برنامه‌ای که مدیریت کلی سیستم را بر عهده دارد.
  • درایورهای دستگاه (Device Drivers): نرم‌افزارهایی که ارتباط بین سیستم‌عامل و دستگاه‌های سخت‌افزاری را ممکن می‌سازند.
  • مترجم‌ها و کامپایلرها: ابزارهایی که کد منبع را به زبان ماشین ترجمه می‌کنند.
  • برنامه‌های سودمند (Utility Programs): نرم‌افزارهایی برای انجام وظایف خاص مانند مدیریت دیسک، فشرده‌سازی فایل‌ها و غیره.

    نرم‌افزار کاربردی

    تعریف:

    نرم‌افزار کاربردی برنامه‌هایی هستند که برای انجام وظایف خاص و حل مسائل معین طراحی شده‌اند. این نرم‌افزارها بر روی سیستم‌عامل نصب می‌شوند و نیازهای کاربران را در زمینه‌های مختلف برآورده می‌کنند.

    انواع نرم‌افزارهای کاربردی:

    • نرم‌افزارهای اداری: مانند Microsoft Office (Word، Excel، PowerPoint) برای ایجاد اسناد، جداول و ارائه‌ها.
    • نرم‌افزارهای گرافیکی: مانند Adobe Photoshop برای ویرایش تصاویر.
    • مرورگرهای وب: مانند Google Chrome، Mozilla Firefox برای دسترسی به اینترنت.
    • نرم‌افزارهای چندرسانه‌ای: برای پخش موسیقی و ویدیو.
    • برنامه‌های تخصصی: مانند نرم‌افزارهای مهندسی، پزشکی، آموزشی و غیره.

      معماری سیستم کامپیوتر و عملکرد آن

      عملکرد یک کامپیوتر را می‌توان به چهار واحد اصلی تقسیم کرد:

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

      ویژگی‌های اساسی سیستم‌های کامپیوتری

      • برنامه‌ریزی‌پذیری: کامپیوترها با استفاده از برنامه‌ها و دستورالعمل‌های خاصی کار می‌کنند.
      • پردازش داده: تبدیل داده‌های خام به اطلاعات مفید.
      • دیجیتالی بودن: استفاده از سیستم باینری (0 و 1) برای پردازش و ذخیره‌سازی اطلاعات.
      • قابلیت اطمینان و دقت بالا: انجام محاسبات پیچیده با دقت و سرعت بالا.

      کامپایل برنامه: ترجمه برنامه‌ها از زبان سطح بالا به کد ماشین

      کتاب آشپزی برنامه نویسی سیستم C++

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

      مراحل ترجمه:

      تحقیق معماری هسته سیستم عامل بر اساس مفهوم مدولاریت - ScienceDirect

      1. نوشتن کد منبع: برنامه‌نویس کد را به زبان سطح بالا می‌نویسد.
      2. کامپایل کردن: کامپایلر کد منبع را به کد ماشین تبدیل می‌کند.
      3. ایجاد فایل اجرایی: کد ماشین در قالب یک برنامه اجرایی ذخیره می‌شود.
      4. اجرای برنامه: سیستم‌عامل برنامه را در حافظه بارگذاری و اجرا می‌کند.

      فرآیند بوت شدن (Booting)

      فرآیند بوت BIOS/MBR

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

      انواع بوت شدن:

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

      مراحل فرآیند بوت شدن:

      فرآیند بوت کامپیوتر | فرآیند بوت در کامپیوتر چیست | فرآیند بوت

      1. روشن کردن سیستم:
        • فشردن دکمه پاور و تأمین برق به قطعات سخت‌افزاری.
      2. اجرای POST (Power-On Self-Test):
        • تست اولیه سخت‌افزار توسط BIOS/UEFI.
        • شناسایی و بررسی سلامت قطعات مانند RAM، CPU، دستگاه‌های ورودی/خروجی.
      3. بارگذاری Bootloader:
        • برنامه‌ای که سیستم‌عامل را در حافظه بارگذاری می‌کند.
        • مثال: NTLDR در ویندوز‌های قدیمی، Bootmgr در ویندوز‌های جدید، GRUB در لینوکس.
      4. بارگذاری سیستم‌عامل:

        • انتقال کنترل به سیستم‌عامل و بارگذاری فایل‌های ضروری.
        • تنظیم محیط کاربری و آماده‌سازی سیستم برای استفاده.

      سیستم‌عامل (Operating System – OS)

      https://upload.wikimedia.org/wikipedia/commons/thumb/8/87/Operating_system_placement_%28software%29.svg/2000px-Operating_system_placement_%28software%29.svg.png

      سیستم‌عامل نرم‌افزار سیستمی اساسی است که به عنوان واسط بین کاربر و سخت‌افزار کامپیوتر عمل می‌کند. بدون سیستم‌عامل، امکان استفاده از کامپیوتر وجود ندارد.

      وظایف اصلی سیستم‌عامل:

      1. مدیریت پردازش (Process Management): مدیریت اجرای برنامه‌ها و تخصیص زمان CPU به فرآیندها.
      2. مدیریت حافظه (Memory Management): تخصیص و آزادسازی حافظه برای برنامه‌ها و اطمینان از استفاده بهینه از حافظه.
      3. مدیریت دستگاه‌ها (Device Management): کنترل و ارتباط با دستگاه‌های ورودی/خروجی.
      4. مدیریت فایل (File Management): سازمان‌دهی، ذخیره‌سازی و دسترسی به فایل‌ها و دایرکتوری‌ها.
      5. امنیت و حفاظت (Security and Protection): محافظت از داده‌ها و منابع در برابر دسترسی غیرمجاز.
      6. رابط کاربری (User Interface): ارائه محیطی برای تعامل کاربر با سیستم، مانند رابط گرافیکی (GUI) یا خط فرمان (CLI).

      هسته (Kernel) و شِل (Shell)

      تفاوت هسته و پوسته | توسط Jagadish Hiremath | متوسط

      هسته (Kernel):

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

      انواع هسته‌ها:

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

      شِل (پوسته):

      پوسته چیست؟ | پوسته موثر

      • تعریف: رابط بین کاربر و سیستم‌عامل که دستورات را تفسیر و اجرا می‌کند.
      • انواع شل:

        • خط فرمان (Command-Line Interface – CLI): کاربر دستورات را به صورت متنی وارد می‌کند.
        • رابط گرافیکی (Graphical User Interface – GUI): کاربر با استفاده از المان‌های گرافیکی با سیستم تعامل دارد.

      انواع سیستم‌عامل‌ها

      1. سیستم‌عامل دسته‌ای (Batch Operating System):
        • مناسب برای اجرای مجموعه‌ای از وظایف بدون تعامل کاربر.
      2. سیستم‌عامل چندوظیفه‌ای (Multitasking Operating System):
        • امکان اجرای همزمان چندین برنامه را فراهم می‌کند.
      3. سیستم‌عامل توزیع‌شده (Distributed Operating System):
        • مدیریت منابع در شبکه‌ای از کامپیوترها.
      4. سیستم‌عامل بلادرنگ (Real-Time Operating System):
        • پاسخگویی سریع به رویدادها، مناسب برای کاربردهای حساس زمانی.
      5. سیستم‌عامل شبکه‌ای (Network Operating System):
        • مدیریت و اشتراک منابع در شبکه‌های کامپیوتری.
      6. سیستم‌عامل موبایل (Mobile Operating System):

        • طراحی شده برای دستگاه‌های همراه مانند تلفن‌های هوشمند و تبلت‌ها.

      ویژگی های سیستم عامل های مدرن

      • پشتیبانی از مجازی‌سازی: امکان اجرای چندین سیستم‌عامل بر روی یک سخت‌افزار.
      • یکپارچگی با ابر (Cloud Integration): دسترسی به خدمات و ذخیره‌سازی ابری.
      • مدیریت انرژی: بهینه‌سازی مصرف انرژی، مخصوصاً در دستگاه‌های قابل حمل.
      • امنیت پیشرفته: استفاده از فناوری‌هایی مانند احراز هویت بیومتریک، رمزنگاری، به‌روزرسانی‌های امنیتی مداوم.
      • پشتیبانی از اینترنت اشیا (IoT): مدیریت و ارتباط با دستگاه‌های هوشمند و سنسورها.
      • قابلیت‌های هوش مصنوعی: استفاده از یادگیری ماشین برای بهبود تجربه کاربری.

        انواع سیستم‌عامل‌های محبوب

        سیستم عامل – آنچه که هر برنامه نویس کاربردی باید بداند | توسط ویجی | متوسط

        1. ویندوز (Windows):

          • توسعه‌یافته توسط مایکروسافت.
          • محبوب‌ترین سیستم‌عامل دسکتاپ.
          • رابط کاربری گرافیکی کاربرپسند و پشتیبانی گسترده از نرم‌افزارها.
        2. مک‌اواس (macOS):

          • توسعه‌یافته توسط اپل.
          • طراحی شده برای کامپیوترهای مک.
          • تمرکز بر طراحی زیبا و عملکرد روان.
        3. لینوکس (Linux):

          • سیستم‌عاملی متن‌باز و رایگان.
          • قابل تنظیم و سفارشی‌سازی بالا.
          • مناسب برای سرورها، توسعه‌دهندگان و کاربران حرفه‌ای.
        4. اندروید (Android):

          • توسعه‌یافته توسط گوگل.
          • محبوب‌ترین سیستم‌عامل موبایل.
          • متن‌باز و قابل سفارشی‌سازی.
        5. آی‌اواس (iOS):

          • توسعه‌یافته توسط اپل.
          • طراحی شده برای آیفون و آیپد.
          • تمرکز بر امنیت و یکپارچگی با اکوسیستم اپل.

         

        سیستم عامل 32 بیتی در مقابل سیستم عامل 64 بیتی

        x64 در مقابل x86: تفاوت‌های کلیدی {ویژگی‌ها، محدودیت‌ها و موارد استفاده}

        • تفاوت اصلی: میزان حافظه‌ای که سیستم‌عامل می‌تواند مدیریت کند.

        • سیستم‌عامل 32 بیتی: حداکثر تا 4 گیگابایت RAM را پشتیبانی می‌کند.
        • سیستم‌عامل 64 بیتی: قادر به پشتیبانی از حافظه بسیار بیشتر (تا 16 اگزابایت).
        • سازگاری:

          • سیستم‌عامل 32 بیتی فقط بر روی پردازنده‌های 32 بیتی اجرا می‌شود.
          • سیستم‌عامل 64 بیتی بر روی پردازنده‌های 64 بیتی اجرا می‌شود و می‌تواند برنامه‌های 32 بیتی را نیز اجرا کند.

        نرم‌افزارها بخش جدایی‌ناپذیر از سیستم‌های کامپیوتری هستند که امکان استفاده و بهره‌برداری از سخت‌افزار را فراهم می‌کنند. با درک انواع نرم‌افزارها و نقش هر یک، می‌توانیم به صورت مؤثرتری از فناوری‌های دیجیتال استفاده کنیم و به بهبود مهارت‌های خود در زمینه کامپیوتر و فناوری اطلاعات بپردازیم. 

        حافظه مجازی (Virtual Memory)

        حافظه مجازی چیست؟ معایب، مزایا و روش های انجام!!

        در دنیای کامپیوترهای مدرن، مدیریت مؤثر حافظه یکی از چالش‌های اساسی است که سیستم‌عامل‌ها با آن روبه‌رو هستند. برنامه‌ها و فرآیندهای مختلف نیاز به فضای حافظه‌ای بیشتر از آنچه حافظه فیزیکی (RAM) سیستم ارائه می‌دهد، دارند. برای مقابله با این محدودیت و بهبود عملکرد سیستم، مفهومی به نام حافظه مجازی (Virtual Memory) معرفی شده است. حافظه مجازی به سیستم‌عامل اجازه می‌دهد تا با ایجاد فضایی بزرگ‌تر از حافظه فیزیکی واقعی، برنامه‌ها را به‌طور کارآمد اجرا کند.

        حافظه مجازی در سیستم عامل - درک بهتر | توسط Aditya Warke | متوسط

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

        نحوه کار حافظه مجازی

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

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

        صفحه‌بندی (Paging) در سیستم‌عامل

        طرح صفحه بندی حافظه پایه

        صفحه‌بندی یک تکنیک مدیریت حافظه است که به سیستم‌عامل‌ها اجازه می‌دهد تا داده‌ها را بین حافظه ثانویه و حافظه اصلی منتقل کنند. در این روش، حافظه به بلوک‌های با اندازه ثابت تقسیم می‌شود:

        • صفحه‌ها: بلوک‌های حافظه ثانویه.
        • قاب‌ها: بلوک‌های حافظه اصلی.

        نحوه عملکرد:

        1. تقسیم حافظه:

          • حافظه ثانویه به صفحه‌ها تقسیم می‌شود.
          • حافظه اصلی به قاب‌ها تقسیم می‌شود.
        2. اجرای برنامه:

          • برنامه به صفحه‌ها تقسیم شده و در حافظه ثانویه ذخیره می‌شود.
        3. درخواست حافظه:

          • زمانی که برنامه به داده‌ای نیاز دارد، سیستم‌عامل صفحه مربوطه را به قاب خالی در حافظه اصلی منتقل می‌کند.
        4. جدول صفحه (Page Table):

          • سیستمی که رابطه بین صفحه‌های منطقی و قاب‌های فیزیکی را نگه می‌دارد.
          • واحد مدیریت حافظه (MMU): سخت‌افزاری که آدرس‌های منطقی را به آدرس‌های فیزیکی تبدیل می‌کند.

        اصطلاحات مرتبط با صفحه‌بندی

        • صفحه (Page): بلوک‌های حافظه ثانویه با اندازه ثابت.
        • قاب (Frame): بلوک‌های حافظه اصلی با اندازه ثابت.
        • جدول صفحه (Page Table): ساختاری که نگاشت بین صفحه‌ها و قاب‌ها را نگه می‌دارد.
        • آدرس منطقی (Logical Address): آدرسی که توسط برنامه تولید می‌شود.
        • آدرس فیزیکی (Physical Address): آدرسی که به مکان واقعی در حافظه اصلی اشاره می‌کند.
        • نقص صفحه (Page Fault): زمانی که صفحه مورد نظر در حافظه اصلی وجود ندارد.

        فرآیند صفحه‌بندی گام به گام

        صفحه بندی با ضربه زدن به صفحه

        1. اجرای فرآیند:

          • فرآیند آغاز به کار می‌کند و سیستم‌عامل آن را به صفحه‌ها تقسیم می‌کند.
        2. ایجاد جدول صفحه:

          • سیستم‌عامل جدولی ایجاد می‌کند که نگاشت بین صفحه‌های منطقی و قاب‌های فیزیکی را نشان می‌دهد.
        3. درخواست دسترسی به صفحه:

          • فرآیند درخواست دسترسی به یک صفحه را می‌دهد.
        4. بررسی وجود صفحه در حافظه اصلی:

          • اگر صفحه در حافظه اصلی باشد (موفقیت صفحه)، دسترسی انجام می‌شود.

          • اگر صفحه در حافظه اصلی نباشد (نقص صفحه)، مراحل زیر انجام می‌شود:

            • واحد مدیریت حافظه (MMU) آدرس فیزیکی را تعیین می‌کند.
            • سیستم‌عامل صفحه را از حافظه ثانویه به حافظه اصلی منتقل می‌کند.
            • جدول صفحه به‌روزرسانی می‌شود.
            • فرآیند ادامه می‌یابد.

        تکنیک‌های صفحه‌بندی

        1. صفحه‌بندی بر اساس درخواست (Demand Paging):

          • صفحه‌ها فقط زمانی که مورد نیاز هستند به حافظه اصلی منتقل می‌شوند.
          • متداول‌ترین روش در سیستم‌عامل‌های مدرن مانند ویندوز، لینوکس و مک‌اواس.
        2. صفحه‌بندی پیش‌بینی‌کننده (Anticipatory Paging):

          • سیستم‌عامل صفحه‌هایی که احتمال نیاز به آن‌ها در آینده نزدیک وجود دارد را پیشاپیش بارگذاری می‌کند.
          • هدف: کاهش نقص صفحه و بهبود کارایی.
        3. صفحه‌بندی پیش‌بارگذاری (Prepaging):

          • مشابه صفحه‌بندی پیش‌بینی‌کننده، اما با شدت کمتر.
          • صفحه‌هایی که ممکن است در آینده نیاز شوند را بارگذاری می‌کند.
        4. کپی در نوشتن (Copy-on-Write):

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

        نقص صفحه (Page Fault) و مدیریت آن

        خطای صفحه در صفحه بندی

        نقص صفحه چیست؟

        • زمانی رخ می‌دهد که فرآیند به صفحه‌ای نیاز دارد که در حافظه اصلی موجود نیست.

        • ممکن است به دلایل زیر باشد:

          • صفحه هرگز در حافظه اصلی بارگذاری نشده است.
          • صفحه از حافظه اصلی حذف شده است تا جایگزین صفحه دیگری شود.
          • صفحه تغییر یافته و نیاز به ذخیره در حافظه ثانویه دارد.

        مدیریت نقص صفحه:

        • تعویض صفحه (Page Replacement):

          • سیستم‌عامل باید تصمیم بگیرد کدام صفحه را از حافظه اصلی حذف کند تا صفحه جدید را بارگذاری کند.

          • الگوریتم‌های مختلفی برای این کار وجود دارد، مانند:

            • Least Recently Used (LRU): صفحه‌ای که کمتر مورد استفاده قرار گرفته است.
            • First In, First Out (FIFO): صفحه‌ای که زودتر بارگذاری شده است.
            • Optimal: صفحه‌ای که در آینده کمتر مورد نیاز است.
        • کاهش نقص صفحه:

          • استفاده از تکنیک‌های پیش‌بینی‌کننده.
          • افزایش حافظه فیزیکی (RAM).

        شلوغی (Thrashing) و علل آن

        شلوغی چیست؟

        • حالتی که سیستم بیشتر وقت خود را صرف مدیریت نقص صفحه می‌کند تا اجرای فرآیندها.
        • باعث کاهش شدید کارایی سیستم می‌شود.

        علل شلوغی:

        • اجرای تعداد زیادی فرآیند به صورت همزمان.
        • کمبود حافظه فیزیکی.
        • استفاده از الگوریتم نامناسب برای تعویض صفحه.
        • عدم تخصیص کافی قاب‌ها به فرآیندها.

        راه‌حل‌های جلوگیری از شلوغی:

        • محدود کردن تعداد فرآیندهای در حال اجرا.
        • افزایش حافظه فیزیکی.
        • بهینه‌سازی الگوریتم‌های تعویض صفحه.
        • مدیریت بهتر تخصیص قاب‌ها.

        مزایا و معایب حافظه مجازی و صفحه‌بندی

        مزایا:

        • استفاده بهینه از حافظه: امکان اجرای برنامه‌هایی بزرگ‌تر از حافظه فیزیکی.
        • کاهش تکه‌تکه شدن خارجی (External Fragmentation): حافظه به بلوک‌های با اندازه ثابت تقسیم می‌شود.
        • ساده‌سازی مدیریت حافظه: سیستم‌عامل نیاز به مدیریت جزئیات آدرس‌دهی ندارد.

        معایب:

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

         

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

        فصل: معرفی فرآیندها (Processes) و رشته‌ها (Threads) در سیستم عامل

        در این فصل، قصد داریم به صورت دقیق بررسی کنیم که فرآیند (Process) در سیستم عامل (Operating System) چیست و چگونه کار می‌کند. برای درک بهتر این مفهوم، ابتدا به معماری مفهومی یک کامپیوتر نگاهی خواهیم داشت.

        معماری مفهومی کامپیوتر

        در پایین‌ترین سطح، سخت‌افزار (Hardware) کامپیوتر قرار دارد که شامل پردازنده (CPU)، حافظه (Memory) و دستگاه‌های جانبی (Peripherals) مانند سایر اجزای خارجی است. در بالای آن، سیستم عامل به عنوان اولین لایه نرم‌افزاری قرار می‌گیرد. سیستم عامل وظایف متعددی از جمله مدیریت وظایف (Task Management)، امنیت (Security) و عملکرد (Performance) را بر عهده دارد. سپس لایه برنامه‌ها (Applications Layer) قرار دارد که شامل تمامی برنامه‌هایی است که توسط کاربر مدیریت می‌شوند.

        تعریف فرآیند (Process)

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

        مراحل ایجاد و اجرای فرآیند

        برای اجرای یک برنامه، ابتدا آن را کامپایل (Compile) می‌کنیم تا به یک فایل باینری (Executable Binary File) قابل اجرا تبدیل شود، مانند فرمت‌های jar یا exe. پس از اجرای این فایل، سیستم عامل یک شیء فرآیند (Process Object) ایجاد کرده و آن را در حافظه بارگذاری می‌کند. از این لحظه به بعد، فرآیند کاملاً توسط سیستم عامل مدیریت می‌شود.

        فرآیند شامل برنامه به‌علاوه منابع مورد نیاز برای اجرا است. این منابع شامل رجیسترها (Registers)، شمارنده برنامه (Program Counter)، پشته (Stack)، هیپ (Heap) و سایر اطلاعات ضروری است.

        چرخه حیات فرآیند (Process Lifecycle)

        هر فرآیند یک حالت (State) دارد. وقتی فرآیندی ایجاد می‌شود، حالت اولیه آن «جدید» (New) است. زمانی که فرآیند آماده اجرای روی پردازنده باشد، به حالت آماده (Ready) منتقل می‌شود. سیستم عامل دارای مؤلفه‌ای به نام زمان‌بند (Scheduler) است که وظیفه انتخاب فرآیندها از حالت آماده و قرار دادن آنها روی پردازنده برای اجرا را بر عهده دارد.

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

        پردازنده (CPU) و نقش آن در اجرای فرآیندها

        پردازنده (CPU) مرکز پردازش کامپیوتر است و وظیفه اجرای دستورالعمل‌ها و انجام محاسبات را بر عهده دارد. فرآیندها برنامه‌های در حال اجرا هستند که شامل دستورالعمل‌ها و داده‌هایی هستند که باید توسط پردازنده پردازش شوند. پردازنده می‌تواند چندین فرآیند را به صورت همزمان مدیریت کند، به ویژه اگر دارای چندین هسته (Cores) باشد که می‌توانند به صورت موازی کار کنند.

        برای افزایش پاسخ‌دهی در سیستم‌هایی که چندین فرآیند دارند، هر فرآیند به یک محدودیت زمانی (Time Slice) اختصاص داده می‌شود که طی آن می‌تواند از پردازنده استفاده کند. این مکانیسم به عنوان چندوظیفه‌ای پیشگیرانه (Preemptive Multitasking) شناخته می‌شود. در سیستم‌های کاربرمحور مانند Windows و Mac OS، فرآیندهای مرتبط با رابط کاربری (UI) بیشتر زمان‌بندی می‌شوند تا پاسخگویی بهتری ارائه دهند. در مقابل، در سیستم‌های سرور مانند Windows Server یا Ubuntu Server، زمان‌بند به سمت فرآیندهای طولانی‌مدت گرایش دارد.

        رشته‌ها (Threads) و چندرشتگی (Multithreading)

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

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

        تفاوت بین فرآیندها و Threadها

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

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