ترجمه آدرس مجازی x64 – انجمن DEV

Summarize this content to 400 words in Persian Lang
این مقاله روز 15 از تقویم ظهور Connehito 2024 است.
صفحه بندی یک مکانیسم مدیریت حافظه است که فضای آدرس مجازی را به فضای آدرس فیزیکی نگاشت می کند. این مکانیسم فضای آدرس مجازی را به واحدهایی با اندازه ثابت به نام “صفحه” و فضای آدرس فیزیکی را به “قاب” تقسیم می کند، سپس صفحات را به فریم ها نگاشت می کند. اندازه صفحه را می توان روی 4KiB، 2MiB یا 1GiB تنظیم کرد. در این توضیح، از اندازه صفحه 4KiB استفاده می کنیم که متداول ترین پیکربندی مورد استفاده است.
صفحات را می توان به طور مستقل به فریم ها نگاشت، بنابراین نیازی نیست که در فضای آدرس فیزیکی به هم پیوسته باشند. این نگاشت توسط جداول صفحه مدیریت می شود که در سیستم های x64 به صورت سلسله مراتبی ساختار یافته اند.
جدول صفحه یک ساختار داده ای است که اطلاعات لازم را برای نگاشت صفحات به فریم ذخیره می کند.
در صفحهبندی 4 سطحی x64، از چهار سطح جداول صفحه به شرح زیر استفاده میشود:
PML4 (نقشه صفحه سطح 4)
PDP (نشانگر دایرکتوری صفحه)
PD (دایرکتوری صفحه)
PT (جدول صفحه)
هر جدول شامل 512 ورودی است که هر ورودی 8 بایت است. هر ورودی آدرس پایه جدول سطح بعدی و ویژگی های آن را ذخیره می کند. به عنوان یک استثنا، ورودی های PT آدرس پایه فریم مربوطه را ذخیره می کنند که به آدرس فیزیکی واقعی تبدیل می شود.
آدرس پایه جدول PML4 از رجیستر CR3 بدست می آید. همه جداول صفحه در فضای آدرس فیزیکی قرار می گیرند و هر جدول 4KiB (512 ورودی × 8 بایت) را اشغال می کند.
هر فرآیند به جداول صفحه خاص خود نیاز دارد زیرا هر فرآیند دارای یک فضای آدرس مجازی منحصر به فرد است. سیستم عامل جداول صفحه را با بارگذاری آدرس پایه جدول صفحه فرآیند در رجیستر CR3 قبل از اجرا تغییر می دهد.
ورودی هایی که باید در هر جدول ارجاع داده شوند با تفسیر ساختار آدرس مجازی در حین ترجمه آدرس تعیین می شوند.
تبدیل از آدرس مجازی به آدرس فیزیکی نیاز به تفسیر صحیح آدرس مجازی دارد. استفاده کنیم 0xFFFF80001E141F3C به عنوان یک نمونه آدرس مجازی برای توضیح این فرآیند.
آدرس متعارف
در معماری x64، بیت های 63:48 آدرس مجازی به عنوان بیت های پسوند علامت در نظر گرفته می شوند. این بیت ها باید با مقدار بیت 47 پر شوند.
آدرسهای مجازی که این محدودیت را برآورده میکنند «آدرسهای متعارف» نامیده میشوند و CPU در صورت استفاده از آدرسی که از این فرمت پیروی نمیکند استثناء ایجاد میکند.
آدرس های متعارف به دو محدوده طبقه بندی می شوند:
آدرسهای متعارف منفی (بیتهای 63:48 همه 1 هستند)
0xFFFF800000000000 ~ 0xFFFFFFFFFFFFFFFFFF
به عنوان فضای هسته شناخته می شود که توسط هسته سیستم عامل استفاده می شود
آدرسهای متعارف مثبت (بیتهای 63:48 همه 0 هستند)
0x0000000000000000 ~ 0x00007FFFFFFFFFFFF
به عنوان فضای کاربر شناخته می شود که توسط فرآیندهای کاربر استفاده می شود
آدرس نمونه ما 0xFFFF80001E141F3C یک آدرس شرعی منفی است.
نمایه جدول صفحه و آفست صفحه
بیتهای 47:12 آدرس مجازی به چهار بخش 9 بیتی تقسیم میشوند که هر کدام بهعنوان نمایه در جدول صفحه متفاوتی استفاده میشوند:
بیت 47:39 – شاخص جدول PML4
بیت 38:30 – شاخص جدول PDP
بیت 29:21 – فهرست جدول PD
بیت 20:12 – نمایه جدول صفحه
بیت های 11:0 به عنوان افست صفحه استفاده می شوند که برای به دست آوردن آدرس فیزیکی نهایی به آدرس فریم اضافه می شود.
بیایید آدرس مثال خود را تفسیر کنیم 0xFFFF80001E141F3C:
بیت 47:39 – 0x1E (30) → منابع جدول PML4[30]
بیت 38:30 – 0x14 (20) → جدول PDP مراجع[20]
بیت 29:21 – 0x1 (1) → جدول PD مراجع[1]
بیت 20:12 – 0xF (15) → جدول صفحه مراجع[15]
بیت 11:0 – 0x3C (60) → آفست 60 بایت از آدرس فریم
اگر آدرس فریمی که در ورودی جدول صفحه نهایی به آن اشاره می شود 0x200000 باشد، آدرس فیزیکی تبدیل می شود. 0x200000 + 0x3C = 0x20003C.
این مقاله روز 15 از تقویم ظهور Connehito 2024 است.
صفحه بندی یک مکانیسم مدیریت حافظه است که فضای آدرس مجازی را به فضای آدرس فیزیکی نگاشت می کند. این مکانیسم فضای آدرس مجازی را به واحدهایی با اندازه ثابت به نام “صفحه” و فضای آدرس فیزیکی را به “قاب” تقسیم می کند، سپس صفحات را به فریم ها نگاشت می کند. اندازه صفحه را می توان روی 4KiB، 2MiB یا 1GiB تنظیم کرد. در این توضیح، از اندازه صفحه 4KiB استفاده می کنیم که متداول ترین پیکربندی مورد استفاده است.
صفحات را می توان به طور مستقل به فریم ها نگاشت، بنابراین نیازی نیست که در فضای آدرس فیزیکی به هم پیوسته باشند. این نگاشت توسط جداول صفحه مدیریت می شود که در سیستم های x64 به صورت سلسله مراتبی ساختار یافته اند.
جدول صفحه یک ساختار داده ای است که اطلاعات لازم را برای نگاشت صفحات به فریم ذخیره می کند.
در صفحهبندی 4 سطحی x64، از چهار سطح جداول صفحه به شرح زیر استفاده میشود:
- PML4 (نقشه صفحه سطح 4)
- PDP (نشانگر دایرکتوری صفحه)
- PD (دایرکتوری صفحه)
- PT (جدول صفحه)
هر جدول شامل 512 ورودی است که هر ورودی 8 بایت است. هر ورودی آدرس پایه جدول سطح بعدی و ویژگی های آن را ذخیره می کند. به عنوان یک استثنا، ورودی های PT آدرس پایه فریم مربوطه را ذخیره می کنند که به آدرس فیزیکی واقعی تبدیل می شود.
آدرس پایه جدول PML4 از رجیستر CR3 بدست می آید. همه جداول صفحه در فضای آدرس فیزیکی قرار می گیرند و هر جدول 4KiB (512 ورودی × 8 بایت) را اشغال می کند.
هر فرآیند به جداول صفحه خاص خود نیاز دارد زیرا هر فرآیند دارای یک فضای آدرس مجازی منحصر به فرد است. سیستم عامل جداول صفحه را با بارگذاری آدرس پایه جدول صفحه فرآیند در رجیستر CR3 قبل از اجرا تغییر می دهد.
ورودی هایی که باید در هر جدول ارجاع داده شوند با تفسیر ساختار آدرس مجازی در حین ترجمه آدرس تعیین می شوند.
تبدیل از آدرس مجازی به آدرس فیزیکی نیاز به تفسیر صحیح آدرس مجازی دارد. استفاده کنیم 0xFFFF80001E141F3C به عنوان یک نمونه آدرس مجازی برای توضیح این فرآیند.
آدرس متعارف
در معماری x64، بیت های 63:48 آدرس مجازی به عنوان بیت های پسوند علامت در نظر گرفته می شوند. این بیت ها باید با مقدار بیت 47 پر شوند.
آدرسهای مجازی که این محدودیت را برآورده میکنند «آدرسهای متعارف» نامیده میشوند و CPU در صورت استفاده از آدرسی که از این فرمت پیروی نمیکند استثناء ایجاد میکند.
آدرس های متعارف به دو محدوده طبقه بندی می شوند:
- آدرسهای متعارف منفی (بیتهای 63:48 همه 1 هستند)
- 0xFFFF800000000000 ~ 0xFFFFFFFFFFFFFFFFFF
- به عنوان فضای هسته شناخته می شود که توسط هسته سیستم عامل استفاده می شود
- آدرسهای متعارف مثبت (بیتهای 63:48 همه 0 هستند)
- 0x0000000000000000 ~ 0x00007FFFFFFFFFFFF
- به عنوان فضای کاربر شناخته می شود که توسط فرآیندهای کاربر استفاده می شود
آدرس نمونه ما 0xFFFF80001E141F3C یک آدرس شرعی منفی است.
نمایه جدول صفحه و آفست صفحه
بیتهای 47:12 آدرس مجازی به چهار بخش 9 بیتی تقسیم میشوند که هر کدام بهعنوان نمایه در جدول صفحه متفاوتی استفاده میشوند:
- بیت 47:39 – شاخص جدول PML4
- بیت 38:30 – شاخص جدول PDP
- بیت 29:21 – فهرست جدول PD
- بیت 20:12 – نمایه جدول صفحه
بیت های 11:0 به عنوان افست صفحه استفاده می شوند که برای به دست آوردن آدرس فیزیکی نهایی به آدرس فریم اضافه می شود.
بیایید آدرس مثال خود را تفسیر کنیم 0xFFFF80001E141F3C:
- بیت 47:39 – 0x1E (30) → منابع جدول PML4[30]
- بیت 38:30 – 0x14 (20) → جدول PDP مراجع[20]
- بیت 29:21 – 0x1 (1) → جدول PD مراجع[1]
- بیت 20:12 – 0xF (15) → جدول صفحه مراجع[15]
- بیت 11:0 – 0x3C (60) → آفست 60 بایت از آدرس فریم
اگر آدرس فریمی که در ورودی جدول صفحه نهایی به آن اشاره می شود 0x200000 باشد، آدرس فیزیکی تبدیل می شود. 0x200000 + 0x3C = 0x20003C.