گنو هرد

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
گنو هرد
Hurd-logo.svg
HURD Live CD.png
سی‌دی زنده هرد
شرکت / توسعه‌دهنده پروژه گنو
Thomas Bushnell
Roland McGrath
Marcus Brinkmann
Neal Walfield
خانواده شبه-یونیکس
وضعیت توسعه فعال
نوع منبع نرم‌افزار آزاد و متن‌باز
پلاتفرم معماری i386
واسط کاربری خط فرمان
پروانه مجوز عمومی گنو
وب‌گاه رسمی www.gnu.org/software/hurd/

گنو هرد (معموما هرد نامیده می‌شود) یک هسته سیستم‌عامل است که به عنوان جایگزینی برای یونیکس طراحی شده است. گنو هرد به عنوان نرم‌افزار آزاد تحت مجوز عمومی گنو منتشر شده است. گنو هرد از سال ۱۹۹۰ بوسیله پروژه گنو از بنیاد نرم‌افزار آزاد در حال توسعه بوده است.
گنو هرد شامل مجموعه‌ای از پروتکل‌ها و فرایندهای سرور (یا دیمن daemon در اصطلاح یونیکس) است که در ریزهسته گنو ماخ اجرا می‌شود و در نظر گرفته شده‌اند که با همدیگر هسته سیستم عامل گنو را شکل دهند. هدف هرد پیش افتادن از سیستم عامل یونیکس در عملکرد، امنیت، و ثبات است در حالی که تا حد زیادی با این سیستم‌عامل سازگار است. پروژه گنو معماری کارخواه-کارساز ریزهسته را به دلیل مزایای بیشتر نسبت به معماری سنتی هسته یکپارچه یونیکس برای این سیستم عامل انتخاب کرده است.

نام[ویرایش]

هرد (به انگلیسی: HURD) یک مخفف بازگشتی متقابل از HIRD of Unix-replacing daemons است که در این مخفف HIRD مخفف HURD of interfaces representing depth است. همینطور HURD و HIRD دو املای متفاوت برای برای کلمه انگلیسی herd است. نام کامل گنو هرد (GNU HURD) همچنین یک بازی با کلمات هرد herd و گنو gnus با تامل به اینکه کرنل چگونه کار می‌کند است.

تاریخچه توسعه[ویرایش]

توسعه سیستم عامل گنو از ۱۹۸۴ آغاز شد و در ابتدا پیشرفت خوبی داشت. ابزارهای آزاد گنو شهرت خوبی به دست آورد و به ابزارهای اختصاصی ارائه شده توسطه فروشندگان سیستم اولیت پیدا کرد. از اوایل ۱۹۹۰ تنها قسمت مهم که وجود نداشت هسته بود.
توسعه هرد در سال ۱۹۹۰ بعد از تلاش رها شده هسته در سال ۱۹۸۶، بر اساس تحقیقات سیستم عامل TRIX توسعه یافته بوسیله پرفسور Steve Ward و گروهش در آزماشگاه MIT برای علوم کامپیوتری شروع شد. به گفته توماس بوشنل، معمار اولیه هرد، برنامه اولیه آنها این بود که که با هسته 4.4BSD-Lite انطباق داشته باشد و اعلام کرد «در حال حاضر کاملا برای من آشکار شده که این موفق خواهد بود و امروز دنیا مکان بسیار متفاوتی خواهد بود.» با این حال در سال ۱۹۸۷، به دلیل عدم همکاری برنامه نویسان برکلی، ریچارد استالمن پیشنهاد کرد به جای آن از ریزهسته ماخ دانشگاه کارنگی ملون استفاده کنند. کار بروی هسته به دلیل عدم اطمینان از اینکه آیا دانشگاه دانشگاه کارنگی ملون کد ماخ را تحت یک مجوز مناسب عرضه خواهد کرد یا نه به تعویق افتاد.
با انتشار هسته لینوکس در ۱۹۹۱ کاربران اولیه اجزای فضای کاربر گنو بزودی سیستم عاملهای بر پایه هسته لینوکس (توزیع لینوکس) شدند که بحث نامگذاری گنو/لینوکس را باعث شدند.
توسعه هرد بصورت آرام بود. با وجود یک اعلان خوش‌بینانه توسط استالمن در سال ۲۰۰۲ که پیش بینی کرده بود که یک انشار از گنو هرد بعد از آن سال منتشر شود هرد هنوز هم مناسب محیط‌های تولید نیست. توسعه تا به حال انتظارات را برآورده نکرده است و هنو هم اشکالات و ویژگی‌های ناتمام وجود دارد. این منجر شد از هر محصول دیگری که انتظار می‌رفت ضعیفتر باشد. در سال ۲۰۱۲ بعد از بیست سال توسعه، استالمن گفت که او «چندان به گنو هرد خوشبین نیست، پیشرفت‌هایی بوده اما برای اینکه به نظر فوق‌العاده باشد باید تعداد زیادی مشکل عمیق را حل کنیم.»، اما همزمان گفت که «اتمام آن [برای سیستم‌های گنو] خیلی مهم نیست» چون یک هسته آزاد در حال حاضر در لینوکس وجود دارد و به پایان رساندن هرد مشکلات باقی ماننده سیستم عامل آزاد یعنی پشتیبانی از دستگاه‌ها را حل نمی‌کند.
پروژه دبیان روی پروژه هرد کار کرده تا توزیع اجرایی بر پایه سیستم عامل گنو هرد برای سیستم‌های سازگار با IBM PC تولید کند.

معماری[ویرایش]

برخلاف اکثر هسته‌های شبه یونیکس، هرد از معماری کارخواه-کارساز که در ریزهسته است استفاده می‌کند که مسئولیت ارائه اکثر سرویسهای هسته - هماهنگی دسترسی به سخت‌افزار: واحد پردازش مرکزی (از طریق مدیریت فرآیند ، زمان‌بندی)، حافظه (از طریق مدیریت حافظه)، و دیگر دستگاه‌های ورودی/خروجی دیگر (از طریق زمان‌بند ورودی/خروجی) برای صدا، گرافیک، دخیره سازی انبوه و غیره را فراهم می‌کند. در تئوری طراحی ریزهسته باید به همه راه‌اندازهای دستگاه‌ها اجازه داشته باشیند تا به صورت سرور در فضای کاربر ساخته شوند. اما امروزه اغلب راه‌اندازها از این نوع همچنان در فضای هسته ماخ هستند. دلیل این است که در ابتدا، راه‌اندازهای فضای کاربر به دلیل سربار ارتباطات بین فرآیندی در هسته ماخ عملکرد مناسبی نخواهند داشت. با کمک عملکرد ماشین‌های امروزی، ممکن است که این سربار باعث مشکل قابل توجه‌ی نشود.
در ابتدا، هرد برای استفاده از گنو ماخ به عنوان ریزهسته توسعه داده می‌شد. این یک تصمیم فنی بود که بوسیله ریچارد استالمن گرفته شده است که فکر میکرد به دلیل صرفه‌جویی در کار، سرعت توسعه را افزایش خواهد داد اما او اذعان کرده که این تصمیم او اشتباه بوده است. بقیه سیستم‌های یونیکس که روی ریزهسته ماخ کارکرده‌اند شامل OSF/1 و Lites و Mklinux و مک اواس ده و NeXTSTEP از کرنل ترکیبی بر اساس ماخ استفاده کرده‌اند.

تلاش از هسته‌های دیگر[ویرایش]

در سال ۲۰۰۷ توسعه‌دهندگان هرد Neal Walfield و Marcus Brinkmann یک نقد از معماری هرد که به «the critique» معروف شد و یک پشنهاد برای اینکه سیستم‌های آینده ممکن است چگونه طراحی شوند که به نام «the position paper» معروف شد دادند.
از سال ۲۰۰۴ به بعد، تلاش‌های زیادی شد تا هرد به ریزهسته‌های مدرنتر منتقل شود. در سال ۲۰۰۴ ریزهسته L4 انتخاب اصلی بود اما پیشرفت کند بود. با این وجود، در طول سال ۲۰۰۵، توسعه دهنده هرد Neal Walfild انتقال چارچوب مدیریت حافظه اولیه برای هرد L4 را به پایان برد و Marcus Brinkmann قسمتهای ضروری از glibc را منتقل کرد،

الحاقات یونیکس[ویرایش]

تعدادی از مفاهیم سنتی یونیکس در هرد تغییر کرده و یا توسعه یافته است.
در یونیکس هر برنامه در حال اجرا یک شناسه کاربر (user id) دارد، که به طور معمول مربوط به کاربری است که فرآیند را آغاز کرده است. این آی‌دی تا حد زیادی کارهایی را که برنامه مجاز است انجام دهد مشخص می‌کند. هیچ فرآیند دیگری نمی‌تواند شماره کاربری یک فرآیند در حال اجرا را تغییر دهد. یک فرآیند هرد، از سوی دیگر، ریز مجموعه‌ای از شناسه‌های کاربر اجرا می‌شود که در نتیجه می‌تواند شامل یک شناسه، شناسه‌های متعدد و یا حتی بدون شناسه باشد. یک فرآیند با دسترسی بالا میتواند به فرآیند دیگر آی‌دی اضافه یا حذف کند. برای مثال یک سرور کلمه عبور وجود دارد که میتواند بعد از ورود موفق آی‌دی را برگرداند.
با توجه به سیستم پرونده، یک برنامه مناسب میتواند به عنوان یک مترجم برای یک فایل تنها و یا کل یک دایرکتوری بصورت سلسله مراتبی طراحی شود.هر دسترسی به فایل ترجمه شده یا در حالت بعد فایلهای زیر ساختار سلسله مراتبی در حقیقت بوسیله برنامه به کار گرفته شده است. برای مثال یک مترجم فایل ممکن است بر خلاف لینک در یونیکس به سادگی عملیات خواندن و نوشتن را به فایل دیگری تغییر مسیر دهد. اثر مونت در یونیکس به دست آورده شده بوسیله راه اندازی یک مترجم سیستم پرونده (با استفاده از دستور SETTRANS) مترجم‌ها همچینی می‌توانند برای ارائه خدمات به کاربر مورد استفاده قرار گیرند. به عنوان مثال، مترجم FTPFS به یک کاربر اجازه می‌دهد سایتهای اف‌تی‌پی راه دور را با به داخل یک پوشه encapsulate کند. آنگاه ابزارهای استانداردی ماننده ls و cp و rm میتوانند دستکاری فایلها در سیستم راه دور استفاده شوند. حتی مترجم‌های قدرتمندتر ماننده UnionFS که به کاربر اجازه می‌دهند چند دایرکتوری را با هم یکی کند در نتیجه لیست گرفتن از دایرکتوری یکی شده unified directory محتویات همه دایرکتوری ها را نشان می‌هد (یک ویژگی در بسیاری از یونیکس‌ها نیست گرچه در بسیاری از بی‌اس‌دیهای جدید موجود است).
هرد به یک بوت لودر با پشتیبانی از گند بوت مانند گنو گراب نیاز دارد.

معماری سرور[ویرایش]

با توجه به مستندات دبیان ۲۴ سرور (۱۸ سرور اصلی و ۶ سرور سیستم پرونده) با نام‌های زیر وجود دارد.

سرورهای اصلی[ویرایش]

  • احراز هویت (به انگلیسی: auth) (سرور تایید هویت): درخواست‌ها و پسوردها را از برنامه‌ها دریافت می‌کند و به آنها یک شماره یکتا (ID) می‌دهد که مجوز برنامه را تغییر می‌دهد.
  • crash (سرور کرش): تمام خطاهای گشنده را بررسی می‌کند.
  • exec (سرور اجرا): یک تصویر اجرایی (در حال حاضر تنها ELF و A.out را پشتیبانی می‌کند) را به یک تصویر قابل اجرا در حافظه ترجمه می‌کند. (برنامه را برای اجرا در حافظه آماده می‌کند)
  • FIFo (مترجم FIFO): پیاده ساز named pipes.
  • new-fifo (سرور new FIFO): یک سرور جایگزین برای named pipes.
  • firmlink (مترجم firmlink): پیاده سازی firmlink لینکی بین لینک سخت و لینک نرم.
  • fwd (سرور forward): درخواست‌ها به سرورهای دیگر را ارسال می‌کند، بوسیله fifo و سرور symlink استفاده می‌شود.
  • hostmux (پشتیبانی از سرور multiplexer)
  • ifsock (سرور رابط سوکت): به UNIX domain socket addresses کمک می‌کند.
  • init (سرور init): سیستم پایه بوت و تنظیمات
  • magic (سرور magic)
  • null (سرور null): /dev/null و /dev/zero را توسعه می‌دهد.
  • pfinet (سرور pfinet): پروتکل خانواده PF_INET را توسعه می‌دهد.
  • pflocal (سرور pflocal): سوکت دامنه یونیکس را پیاده سازی می‌کند.
  • proc (سرور فرآیند): شماره پروسس (به انگلیسی: PID) را اختصاص می‌دهد و اقدامات سطح فرآیند را مدیریت می‌کند.
  • symlink (مترجم لینکهای نمادی): لینک‌های نمادی را برای سیستم پرونده که آنها را پشتیبانی نمی‌کند پیاده سازی میکند.
  • term (سرور ترمینال): یک ترمینال پازیکس.
  • usermux (سرور user multiplexer): فراخوانی مترجم خاص کاربر.

سرورهای فایل سیستم[ویرایش]

ext2fs
مترجم سیستم پرونده ext2. بلوک‌های دیسک را از ریزهسته دریافت میکند و فایلها و دایرکتوری‌ها را به برنامه‌های کاربردی می‌دهد.
isofs
مترجم برای سیستم پرونده iso 9660. بلاک‌های سی‌دی یا دی‌وی‌دی را به فایل و دایرکتوری برای برنامه‌های کاربردی ترجمه می‌کند.
nfs
سیستم پرونده شبکه
ufs
مترجم سیستم پروندههای بی‌اس‌دی
ftpfs
مترجم سیستم پرونده اف‌تی‌پی
storeio
مترجم دخیره سازی
همه سرورها با رابط برنامه‌نویسی نرم‌افزار پازیکس پیاده‌سازی شده است، با هر سرور بخشی از رابط پیاده سازی شده است. به عنوان مثال، سرورهای سیستم پرونده مختلف هرکدام تماس سیستم پرونده (به انگلیسی: filesystem calls) را پیاده‌سازی کرده‌اند. سرور ذخیره سازی مانند لایه بلوک در لینوکس به عنوان یک لایه پوشش کار خواهد کرد. معادل فایل سیستم مجازی لینوکس کتابخانه‌های libdiskfs و libpager وجود دارد.

توزیعهای گنو بر پایه هرد[ویرایش]

توزیعهای گنو هرد عبارتند از:
آرچ هرد
دبیان گنو/هرد
nixos
Bee GNU/Hurd (متوقف شده)
جنتو گنو/هرد (متوقف شده)
سی دی زنده گنو/هرد (متوقف شده)

جستارهای وابسته[ویرایش]

منابع[ویرایش]

پیوند به بیرون[ویرایش]

جستجو در ویکی‌انبار در ویکی‌انبار پرونده‌هایی دربارهٔ گنو هرد موجود است.