آدرس دهی در سیستم عامل ها - بخش یکم

برای آغاز آموزش های هسته لینوکس، بهتر است پرداختن به پردازش ها، زمانبدی، اولویت پردازش ها، برنامه نویسی شبکه و مولفه های شبکه و بسیاری دیگر از جنبه های سیستم عامل، نخست مفهوم آدرس دهی را بدانیم.

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

از دید چرخه زندگی (Life Cycle) یک فرایند، فرایندهای که درون حافظه اصلی هستند در حالت آماده (Ready) و فرایندهای که پردازنده دارند در حالت اجرا (Running) هستند. بنابراین گام نخست برای اجرا شدن فرایند، نشستن فرایند در حافظه اصلی است.

از دید برنامه نویس ها، آدرس حافظه یک سلول است که محتوایی (مانند مقدار یک متغیر) درون آن نگهداری می شود. این سلول های فضای آدرس، به گونه یک پشته، از پایین به بالا با یک شماره هگزا دسیمال (مبنای ۱۶) آدرس دهی شده اند.

اما از یک دید فضای آدرس به دو بخش Kernel Space و User Space تقسیم می شود. هسته سیستم عامل و همه مولفه های آن مانند راه اندازه های سخت افزار یا همان درایورها، سیستم فایل، پشته شبکه و همه دیگر مولفه های هسته درون فضای هسته نگهداری می شوند. شکل زیر گویای همه چیز است و در دنباله با این شکل، مفهوم Kernel Space و User Space را آموزش می دهم.

نمایی از دو فضای User و Kernel
نمایی از دو فضای User و Kernel

فضای کاربر، شامل همه کدهایی درون سیستم عامل می شود که خارج از هسته هستند. برای نمونه خواندن از یک فایل روی سیستم فایل. دستورهای خط فرمان و برنامه های گرافیکی، همگی درون فضای User از حافظه اصلی نگهداری می شوند.

هیچ کدام از فرایندهایی که درون فضای کاربر هستند، نمی توانند به فضای هسته و کدها و مولفه های آن دسترسی داشته باشند. بنابراین فضای هسته از دسترس فرایندهای کاربر، محافظت می شود. برای برقراری ارتباط میان برنامه فضای کاربر با فضای هسته، مکانیزمی به نام فراخوان سیستمی (System Call) وجود دارد. هرسیستم فایل دارای یک شماره یکتا و دارای یک کاربرد ویژه است.

برای نمونه فراخوان سیستمی open برای دسترسی به سیستم فایل و دسترسی به بلاک های آن به کار می رود. بنابراین در توابعی مانند ()open از زبان سی، این تابع است که شما را به فراخوان سیستمی open ارتباط داده و خود فراخوان سیستمی است که با هسته و در اینجا با سیستم فایل در ارتباط است.

در شکل بالا فرض کنید پوسته (Shell) لینوکس، bash را باز کردید، پس خود آن از این پس یک فرایند است و باید درون فضای آدرس بخش User Space قرار بگیرد. همچنین در همه سیستم عامل ها، هر فرایند دارای یک شناسه یکتا به نام PID (یا Process ID) است. پس برنامه یا بهتر بگوییم فرایند، شناسه خود را از هسته می گیرد.

در مورد دیگر، می خواهیم بوسیله دستور cat فایل etc/host/ را بخوانیم، پس درون کدهای دستور cat از تابع ()open در زبان سی کمک گرفته شده تا با فراخوان سیستمی open ارتباط پیدا کرده و سپس نخست با مولفه VFS (یا Virtual File System) ارتباط برقرار کند و بوسیله VFS است که با سیستم فایل مربوطه (در اینجا XFS) ارتباط برقرار می شود. خود سیستم فایل یاه بهتر بگوییم، کدهای سیستم فایل نیز می دانند چگونه باید به بلاک های مورد نظر روی دیسک برای نمایش محتوای فایل دسترسی پیدا کنند.

در نوشته های آینده مفاهیم آدرس دهی حافظه، فرایند و سیستم فایل را بیشتر آموزش می دهیم. آموزش خواهیم داد که آدرس دهی حافظه به سه گونه Logical Address و Virtual Address و Physical Adress دسته بندی می شوند.

منبع شکل