.\" -*- coding: UTF-8 -*- .\" Copyright 2001, David Gómez .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH madvise 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم madvise \- إعطاء نصيحة حول استخدام الذاكرة .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBint madvise(\fPsize_t size; \fB void \fP\fIaddr\fP\fB[\fP\fIsize\fP\fB], size_t \fP\fIsize\fP\fB, int \fP\fIadvice\fP\fB);\fP .fi .P .RS -4 متطلبات ماكروات اختبار الميزات لـ glibc (انظر \fBfeature_test_macros\fP(7)): .RE .P \fBmadvise\fP(): .nf بدءاً من glibc 2.19: _DEFAULT_SOURCE حتى glibc 2.19 متضمناً إياه: _BSD_SOURCE .fi .SH الوصف يُستخدم استدعاء النظام \fBmadvise\fP() لإعطاء نصيحة أو توجيهات إلى النواة بشأن نطاق العناوين الذي يبدأ من العنوان \fIaddr\fP وبحجم \fIsize\fP. يعمل \fBmadvise\fP() فقط على صفحات كاملة، لذا يجب أن يكون \fIaddr\fP محاذياً للصفحة. تُقرب قيمة \fIsize\fP لأقرب مضاعف لحجم الصفحة. في معظم الحالات، يكون الهدف من هذه النصيحة هو تحسين أداء النظام أو التطبيق. .P .\" .\" ====================================================================== .\" في البداية، دعم استدعاء النظام مجموعة من قيم \fIadvice\fP "التقليدية"، والتي تتوفر أيضًا في تطبيقات أخرى عديدة. (لاحظ، مع ذلك، أن \fBmadvise\fP() غير محدد في POSIX.) لاحقًا، وُفر عدد من قيم \fIadvice\fP الخاصة بلينكس. .SS "قيم النصيحة التقليدية" تسمح قيم \fIadvice\fP المدرجة أدناه للتطبيق بإخبار النواة كيف يتوقع استخدام بعض مناطق الذاكرة المخططة أو المشتركة، حتى تتمكن النواة من اختيار تقنيات القراءة المسبقة والخبيئة المناسبة. لا تؤثر قيم \fIadvice\fP هذه على دلالات التطبيق (باستثناء حالة \fBMADV_DONTNEED\fP)، ولكنها قد تؤثر على أدائه. جميع قيم \fIadvice\fP المدرجة هنا لها نظائر في دالة \fBposix_madvise\fP(3) المحددة في POSIX، وللقيم نفس المعاني، باستثناء \fBMADV_DONTNEED\fP. .P تُحدد النصيحة في وسيط \fIadvice\fP، وهو أحد ما يلي: .TP \fBMADV_NORMAL\fP لا توجد معاملة خاصة. هذا هو المبدئي. .TP \fBMADV_RANDOM\fP توقع مراجع الصفحات بترتيب عشوائي. (وبالتالي، قد تكون القراءة المسبقة أقل فائدة من المعتاد.) .TP \fBMADV_SEQUENTIAL\fP توقع مراجع الصفحات بترتيب تسلسلي. (وبالتالي، يمكن قراءة الصفحات في النطاق المعطى مسبقاً بشكل مكثف، وقد تُحرر بعد وقت قصير من الوصول إليها.) .TP \fBMADV_WILLNEED\fP توقع الوصول في المستقبل القريب. (وبالتالي، قد يكون من الجيد قراءة بعض الصفحات مسبقاً.) .TP \fBMADV_DONTNEED\fP لا تتوقع الوصول في المستقبل القريب. (في الوقت الحالي، انتهى التطبيق من النطاق المعطى، لذا يمكن للنواة تحرير الموارد المرتبطة به.) .IP بعد نجاح عملية \fBMADV_DONTNEED\fP، تتغير دلالات الوصول إلى الذاكرة في المنطقة المحددة: ستنجح عمليات الوصول اللاحقة للصفحات في النطاق، ولكنها ستؤدي إما إلى إعادة ملء محتويات الذاكرة من المحتويات الحديثة للملف المخطط الأساسي (بالنسبة لمخططات الملفات المشتركة، والمخططات المجهولة المشتركة، والتقنيات المستندة إلى shmem مثل مقاطع ذاكرة System V المشتركة) أو صفحات الملء بالصفر عند الطلب للمخططات الخاصة المجهولة. .IP لاحظ أنه عند تطبيق \fBMADV_DONTNEED\fP على المخططات المشتركة، قد لا يؤدي ذلك إلى تحرير فوري للصفحات في النطاق. للنواة الحرية في تأخير تحرير الصفحات حتى لحظة مناسبة. ومع ذلك، سيُقلل حجم المجموعة المقيمة (RSS) للعملية المستدعِية على الفور. .IP .\" http://lwn.net/Articles/162860/ لا يمكن تطبيق \fBMADV_DONTNEED\fP على الصفحات المقفلة، أو صفحات \fBVM_PFNMAP\fP. (الصفحات المميزة بعلامة \fBVM_PFNMAP\fP الداخلية للنواة هي مناطق ذاكرة خاصة لا يُديرها نظام الذاكرة الوهمية الفرعي. تُنشأ مثل هذه الصفحات عادةً بواسطة برامج تشغيل الأجهزة التي تخطط الصفحات في مساحة المستخدم.) .IP .\" .\" ====================================================================== .\" أُضيف دعم صفحات Huge TLB في لينكس 5.18. يجب أن تكون العناوين داخل مخطط مدعوم بصفحات Huge TLB محاذية لحجم صفحة Huge TLB الأساسي، ويُقرب حجم النطاق لأقرب مضاعف لحجم صفحة Huge TLB الأساسي. .SS "قيم النصيحة الخاصة بلينكس" قيم \fIadvice\fP التالية الخاصة بلينكس ليس لها نظائر في \fBposix_madvise\fP(3) المحددة في POSIX، وقد يكون أو لا يكون لها نظائر في واجهة \fBmadvise\fP() المتوفرة في تطبيقات أخرى. لاحظ أن بعض هذه العمليات تغير دلالات الوصول إلى الذاكرة. .TP \fBMADV_REMOVE\fP (منذ لينكس 2.6.16) .\" commit f6b3ec238d12c8cc6cc71490c6e3127988460349 .\" Databases want to use this feature to drop a section of their .\" bufferpool (shared memory segments) - without writing back to .\" disk/swap space. This feature is also useful for supporting .\" hot-plug memory on UML. تحرير نطاق معين من الصفحات ومخزنها الاحتياطي المرتبط بها. هذا يعادل ثقب فجوة في النطاق المقابل للمخزن الاحتياطي (انظر \fBfallocate\fP(2)). سترى عمليات الوصول اللاحقة في نطاق العناوين المحدد بيانات بقيمة صفر. .IP يجب تخطيط نطاق العناوين المحدد كمشترك وقابل للكتابة. لا يمكن تطبيق هذه العلامة على الصفحات المقفلة، أو صفحات \fBVM_PFNMAP\fP. .IP .\" commit 3f31d07571eeea18a7d34db9af21d2285b807a17 في التطبيق الأولي، كان \fBtmpfs\fP(5) فقط يدعم \fBMADV_REMOVE\fP؛ ولكن منذ لينكس 3.5، فإن أي نظام ملفات يدعم وضع \fBFALLOC_FL_PUNCH_HOLE\fP في \fBfallocate\fP(2) يدعم أيضًا \fBMADV_REMOVE\fP. أنظمة الملفات التي لا تدعم \fBMADV_REMOVE\fP تفشل مع الخطأ \fBEOPNOTSUPP\fP. .IP أُضيف دعم نظام ملفات Huge TLB في لينكس 4.3. .TP \fBMADV_DONTFORK\fP (منذ لينكس 2.6.16) .\" commit f822566165dd46ff5de9bf895cfa6c51f53bb0c4 .\" See http://lwn.net/Articles/171941/ .\" [PATCH] madvise MADV_DONTFORK/MADV_DOFORK .\" Currently, copy-on-write may change the physical address of .\" a page even if the user requested that the page is pinned in .\" memory (either by mlock or by get_user_pages). This happens .\" if the process forks meanwhile, and the parent writes to that .\" page. As a result, the page is orphaned: in case of .\" get_user_pages, the application will never see any data hardware .\" DMA's into this page after the COW. In case of mlock'd memory, .\" the parent is not getting the realtime/security benefits of mlock. .\" .\" In particular, this affects the Infiniband modules which do DMA from .\" and into user pages all the time. .\" .\" This patch adds madvise options to control whether memory range is .\" inherited across fork. Useful, e.g., for when hardware is doing DMA .\" from/into these pages. Could also be useful to an application .\" wanting to speed up its forks by cutting large areas out of .\" consideration. .\" .\" SEE ALSO: http://lwn.net/Articles/171941/ .\" "Tweaks to madvise() and posix_fadvise()", 14 Feb 2006 عدم جعل الصفحات في هذا النطاق متاحة للابن بعد \fBfork\fP(2). هذا مفيد لمنع دلالات النسخ عند الكتابة من تغيير الموقع الفيزيائي للصفحة إذا كتب الأب فيها بعد \fBfork\fP(2). (مثل هذه التنقلات في الصفحات تسبب مشاكل للأجهزة التي تقوم بالوصول المباشر للذاكرة (DMA) في الصفحة.) .TP \fBMADV_DOFORK\fP (منذ لينكس 2.6.16) التراجع عن تأثير \fBMADV_DONTFORK\fP، واستعادة السلوك المبدئي، حيث يورث المخطط عبر \fBfork\fP(2). .TP \fBMADV_HWPOISON\fP (منذ لينكس 2.6.32) .\" commit 9893e49d64a4874ea67849ee2cfbf3f3d6817573 تسميم الصفحات في النطاق المحدد بواسطة \fIaddr\fP و \fIsize\fP والتعامل مع المراجع اللاحقة لتلك الصفحات كفساد في الذاكرة المادية. هذه العملية متاحة فقط للعمليات ذات الامتيازات (\fBCAP_SYS_ADMIN\fP). قد تؤدي هذه العملية إلى استلام العملية المستدعِية لإشارة \fBSIGBUS\fP وإلغاء تخطيط الصفحة. .IP هذه الميزة مخصصة لاختبار كود معالجة أخطاء الذاكرة؛ وهي متاحة فقط إذا ضبطت النواة بـ \fBCONFIG_MEMORY_FAILURE\fP. .TP \fBMADV_MERGEABLE\fP (منذ لينكس 2.6.32) .\" commit f8af4da3b4c14e7267c4ffb952079af3912c51c5 تمكين دمج الصفحات المتماثلة في النواة (KSM) للصفحات في النطاق المحدد بواسطة \fIaddr\fP و \fIsize\fP. تمسح النواة بانتظام مناطق ذاكرة المستخدم التي عُلمت كقابلة للدمج، بحثاً عن صفحات ذات محتوى متطابق. تُستبدل هذه بصفحة واحدة محمية ضد الكتابة (تُنسخ آلياً إذا أرادت عملية لاحقًا تحديث محتوى الصفحة). يدمج KSM الصفحات الخاصة المجهولة فقط (انظر \fBmmap\fP(2)). .IP ميزة KSM مخصصة للتطبيقات التي تنشئ نسخاً عديدة من نفس البيانات (على سبيل المثال، أنظمة المحاكاة الوهمية مثل KVM). يمكن أن تستهلك الكثير من قوة المعالجة؛ استخدمها بحذر. انظر ملف مصدر نواة لينكس \fIDocumentation/admin\-guide/mm/ksm.rst\fP لمزيد من التفاصيل. .IP عمليتا \fBMADV_MERGEABLE\fP و \fBMADV_UNMERGEABLE\fP متاحتان فقط إذا ضبطت النواة بـ \fBCONFIG_KSM\fP. .TP \fBMADV_UNMERGEABLE\fP (منذ لينكس 2.6.32) التراجع عن تأثير عملية \fBMADV_MERGEABLE\fP سابقة على نطاق العناوين المحدد؛ يقوم KSM بإلغاء دمج أي صفحات كان قد دمجها في نطاق العناوين المحدد بواسطة \fIaddr\fP و \fIsize\fP. .TP \fBMADV_SOFT_OFFLINE\fP (منذ لينكس 2.6.33) .\" commit afcf938ee0aac4ef95b1a23bac704c6fbeb26de6 إخراج الصفحات في النطاق المحدد بواسطة \fIaddr\fP و \fIsize\fP من الخدمة بشكل ناعم. تُحفظ ذاكرة كل صفحة في النطاق المحدد (أي عند الوصول التالي، سيظهر المحتوى نفسه، ولكن في إطار صفحة فيزيائي جديد)، وتُخرج الصفحة الأصلية من الخدمة (أي لم تعد مستخدمة، وتُسحب من إدارة الذاكرة العادية). تأثير عملية \fBMADV_SOFT_OFFLINE\fP غير مرئي (أي لا يغير دلالات) العملية المستدعِية. .IP هذه الميزة مخصصة لاختبار كود معالجة أخطاء الذاكرة؛ وهي متاحة فقط إذا ضبطت النواة بـ \fBCONFIG_MEMORY_FAILURE\fP. .TP \fBMADV_HUGEPAGE\fP (منذ لينكس 2.6.38) .\" commit 0af4e98b6b095c74588af04872f83d333c958c32 .\" http://lwn.net/Articles/358904/ .\" https://lwn.net/Articles/423584/ تمكين الصفحات الضخمة الشفافة (THP) للصفحات في النطاق المحدد بواسطة \fIaddr\fP و \fIsize\fP. ستمسح النواة بانتظام المناطق المميزة كمرشحة للصفحات الضخمة لاستبدالها بصفحات ضخمة. ستخصص النواة أيضًا صفحات ضخمة مباشرةً عندما تكون المنطقة محاذية بشكل طبيعي لحجم الصفحة الضخمة (انظر \fBposix_memalign\fP(2)). .IP تهدف هذه الميزة بشكل رئيس إلى التطبيقات التي تستخدم مخططات كبيرة للبيانات وتصل إلى مناطق واسعة من تلك الذاكرة في وقت واحد (مثل أنظمة المحاكاة الوهمية مثل QEMU). يمكنها بسهولة تامة إهدار الذاكرة (على سبيل المثال، مخطط بحجم 2 ميجابايت لا يصل إلا إلى بايت واحد سيؤدي إلى 2 ميجابايت من الذاكرة المحجوزة بدلاً من صفحة واحدة بحجم 4 كيلوبايت). انظر ملف مصدر نواة لينكس \fIDocumentation/admin\-guide/mm/transhuge.rst\fP لمزيد من التفاصيل. .IP توفر معظم إعدادات النواة الشائعة سلوكاً بأسلوب \fBMADV_HUGEPAGE\fP مبدئياً، وبالتالي فإن \fBMADV_HUGEPAGE\fP ليس ضرورياً في العادة. هو مخصص في الغالب للأنظمة المدمجة، حيث قد لا يُمكن السلوك بأسلوب \fBMADV_HUGEPAGE\fP مبدئياً في النواة. في مثل هذه الأنظمة، يمكن استخدام هذه العلامة لتمكين THP بشكل انتقائي. كلما استُخدم \fBMADV_HUGEPAGE\fP، يجب أن يكون دائماً في مناطق ذاكرة ذات نمط وصول يعرف المطور مسبقاً أنه لن يخاطر بزيادة بصمة الذاكرة للتطبيق عند تمكين الصفحات الضخمة الشفافة. .IP .\" commit 99cb0dbd47a15d395bf3faa78dc122bc5efe3fc0 منذ لينكس 5.4، يعمل المسح الآلي للمناطق المؤهلة والاستبدال بصفحات ضخمة مع الصفحات الخاصة المجهولة (انظر \fBmmap\fP(2))، وصفحات shmem، والصفحات المدعومة بالملفات. لجميع أنواع الذاكرة، قد تُستبدل الذاكرة بصفحات ضخمة فقط عند حدود محاذية للصفحة الضخمة. بالنسبة للذاكرة المخططة بالملفات \[em]بما في ذلك tmpfs (انظر \fBtmpfs\fP(2))\[em] يجب أن يكون المخطط أيضًا محاذياً بشكل طبيعي للصفحة الضخمة داخل الملف. بالإضافة إلى ذلك، بالنسبة للذاكرة المدعومة بالملفات وغير التابعة لـ tmpfs، يجب ألا يكون الملف مفتوحاً للكتابة ويجب أن يكون المخطط قابلاً للتنفيذ. .IP يجب ألا تُعلم VMA بـ \fBVM_NOHUGEPAGE\fP أو \fBVM_HUGETLB\fP أو \fBVM_IO\fP أو \fBVM_DONTEXPAND\fP أو \fBVM_MIXEDMAP\fP أو \fBVM_PFNMAP\fP، كما لا يمكن أن تكون ذاكرة مكدس أو مدعومة بجهاز مفعل بـ DAX (ما لم يُوصل جهاز DAX كذاكرة رام للنظام). يمكن أن يكون للعملية \fBPR_SET_THP_DISABLE\fP مضبوطاً فقط إذا كان \fBPR_THP_DISABLE_EXCEPT_ADVISED\fP مضبوطاً (انظر \fBprctl\fP(2)). .IP عمليات \fBMADV_HUGEPAGE\fP و \fBMADV_NOHUGEPAGE\fP و \fBMADV_COLLAPSE\fP متاحة فقط إذا ضبطت النواة بـ \fBCONFIG_TRANSPARENT_HUGEPAGE\fP، وذاكرة الملف/shmem مدعومة فقط إذا ضبطت النواة بـ \fBCONFIG_READ_ONLY_THP_FOR_FS\fP. .TP \fBMADV_NOHUGEPAGE\fP (منذ لينكس 2.6.38) يضمن أن الذاكرة في نطاق العناوين المحدد بواسطة \fIaddr\fP و \fIsize\fP لن تكون مدعومة بصفحات ضخمة شفافة. .TP \fBMADV_COLLAPSE\fP (منذ لينكس 6.1) .\" commit 7d8faaf155454f8798ec56404faca29a82689c77 .\" commit 34488399fa08faaf664743fa54b271eb6f9e1321 إجراء طي متزامن بأقصى جهد للصفحات الأصلية المخططة بواسطة نطاق الذاكرة إلى صفحات ضخمة شفافة (THPs). يعمل \fBMADV_COLLAPSE\fP على الحالة الحالية لذاكرة العملية المستدعِية ولا يجري أي تغييرات دائمة أو ضمانات حول كيفية تخطيط الصفحات أو بنائها أو تعطلها في المستقبل. .IP يدعم \fBMADV_COLLAPSE\fP الصفحات الخاصة المجهولة (انظر \fBmmap\fP(2))، وصفحات shmem، والصفحات المدعومة بالملفات. انظر \fBMADV_HUGEPAGE\fP للحصول على معلومات عامة حول متطلبات الذاكرة لـ THP. إذا كان النطاق المقدم يمتد عبر عدة VMAs، فإن دلالات الطي فوق كل VMA مستقلة عن الأخرى. إذا فشل طي منطقة معينة محاذية/بجم صفحة ضخمة، فقد تستمر العملية في محاولة طي بقية الذاكرة المحددة. سيقوم \fBMADV_COLLAPSE\fP آلياً بتقييد النطاق المقدم ليكون محاذياً للصفحة الضخمة. .IP سيتم أولاً استبدال/إحضار جميع الصفحات غير المقيمة التي يغطيها النطاق، قبل نسخها إلى صفحة ضخمة مخصصة حديثاً. إذا كانت الصفحات الأصلية تشكل نفس الصفحة الضخمة المخططة بـ PTE، وكانت محاذية بشكل مناسب، فقد يتم تجاوز تخصيص صفحة ضخمة جديدة وقد يحدث الطي في مكانها. سيتم تهيئة بيانات الصفحات غير المخططة مباشرة إلى 0 في الصفحة الضخمة الجديدة. ومع ذلك، لكل منطقة مؤهلة محاذية/بحجم صفحة ضخمة سيتم طيها، يجب أن تكون صفحة واحدة على الأقل مدعومة حالياً بذاكرة فيزيائية. .IP \fBMADV_COLLAPSE\fP مستقل عن أي إعداد لـ sysfs (انظر \fBsysfs\fP(5)) تحت \fI/sys/kernel/mm/transparent_hugepage\fP، سواء من حيث تحديد أهلية THP أو دلالات التخصيص. انظر ملف مصدر نواة لينكس \fIDocumentation/admin\-guide/mm/transhuge.rst\fP لمزيد من المعلومات. يتجاهل \fBMADV_COLLAPSE\fP أيضًا وصل tmpfs بـ \fBhuge=\fP عند العمل على ملفات tmpfs. قد يدخل تخصيص الصفحة الضخمة الجديدة في الاسترداد المباشر و/أو الضغط، بغض النظر عن علامات VMA (رغم أنه لا يزال يُحترم \fBVM_NOHUGEPAGE\fP). .IP عندما يحتوي النظام على عدة عُقد NUMA، ستُخصص الصفحة الضخمة من العقدة التي توفر أكبر عدد من الصفحات الأصلية. .IP إذا تم طي جميع المناطق بحجم/محاذاة الصفحة الضخمة التي يغطيها النطاق المقدم بنجاح، أو كانت بالفعل THPs مخططة بـ PMD، فستُعتبر هذه العملية ناجحة. لاحظ أن هذا لا يضمن أي شيء حول المخططات الممكنة الأخرى للذاكرة. في حال فشل طي مناطق متعددة محاذية/بحجم الصفحة الضخمة، سيُعين الكود الأحدث فشلاً فقط في \fIerrno\fP. .TP \fBMADV_DONTDUMP\fP (منذ لينكس 3.4) .\" commit 909af768e88867016f427264ae39d27a57b6a8ed .\" commit accb61fe7bb0f5c2a4102239e4981650f9048519 استبعاد الصفحات في النطاق المحدد بواسطة \fIaddr\fP و \fIsize\fP من تفريغ الذاكرة (core dump). هذا مفيد في التطبيقات التي تحتوي على مناطق كبيرة من الذاكرة المعروف أنها غير مفيدة في تفريغ الذاكرة. يكون لتأثير \fBMADV_DONTDUMP\fP الأسبقية على قناع البتات الذي يُضبط عبر ملف \fI/proc/\fPpid\fI/coredump_filter\fP (انظر \fBcore\fP(5)). .TP \fBMADV_DODUMP\fP (منذ لينكس 3.4) التراجع عن تأثير \fBMADV_DONTDUMP\fP سابقة. .TP \fBMADV_FREE\fP (منذ لينكس 4.5) لم يعد التطبيق يتطلب الصفحات في النطاق المحدد بواسطة \fIaddr\fP و \fIsize\fP. وبالتالي يمكن للنواة تحرير هذه الصفحات، ولكن قد يتأخر التحرير حتى يحدث ضغط على الذاكرة. لكل صفحة عُلمت لتُحرر ولكن لم تُحرر بعد، ستُلغى عملية التحرير إذا كتب المستدعِي في الصفحة. بعد نجاح عملية \fBMADV_FREE\fP، ستُفقد أي بيانات قديمة (أي الصفحات المتسخة وغير المكتوبة) عندما تحرر النواة الصفحات. ومع ذلك، ستنجح عمليات الكتابة اللاحقة للصفحات في النطاق ولن تتمكن النواة حينها من تحرير تلك الصفحات المتسخة، بحيث يمكن للمستدعِي دائماً رؤية البيانات المكتوبة للتو. إذا لم تكن هناك كتابة لاحقة، يمكن للنواة تحرير الصفحات في أي وقت. بمجرد تحرير الصفحات في النطاق، سيرى المستدعِي صفحات ملء بالصفر عند الطلب عند مراجع الصفحات اللاحقة. .IP .\" commit 93e06c7a645343d222c9a838834a51042eebbbf7 يمكن تطبيق العملية \fBMADV_FREE\fP فقط على الصفحات المجهولة الخاصة (انظر \fBmmap\fP(2)). قبل لينكس 4.12، عند تحرير الصفحات في نظام لا يحتوي على مساحة تبديل (swapless)، كانت الصفحات في النطاق المعطى تُحرر فوراً، بغض النظر عن ضغط الذاكرة. .TP \fBMADV_WIPEONFORK\fP (منذ لينكس 4.14) .\" commit d2cd9ede6e193dd7d88b6d27399e96229a551b19 تقديم ذاكرة مملوءة بالأصفار للعملية الابن في هذا النطاق بعد \fBfork\fP(2). هذا مفيد في الخوادم التي تعتمد على التفريع لضمان عدم تسليم البيانات الحساسة الخاصة بكل عملية (مثل بذور PRNG، والأسرار التشفيرية، وما إلى ذلك) إلى العمليات الأبناء. .IP يمكن تطبيق عملية \fBMADV_WIPEONFORK\fP فقط على الصفحات الخاصة المجهولة (انظر \fBmmap\fP(2)). .IP داخل الابن الذي أنشئ بواسطة \fBfork\fP(2)، يظل إعداد \fBMADV_WIPEONFORK\fP قائماً على نطاق العناوين المحدد. يُمسح هذا الإعداد أثناء \fBexecve\fP(2). .TP \fBMADV_KEEPONFORK\fP (منذ لينكس 4.14) .\" commit d2cd9ede6e193dd7d88b6d27399e96229a551b19 التراجع عن تأثير \fBMADV_WIPEONFORK\fP سابقة. .TP \fBMADV_COLD\fP (منذ لينكس 5.4) .\" commit 9c276cc65a58faf98be8e56962745ec99ab87636 إلغاء تنشيط نطاق معين من الصفحات. سيجعل هذا الصفحات هدفاً مرجحاً أكثر للاسترداد في حال حدوث ضغط على الذاكرة. هذه عملية غير تدميرية. قد تُتجاهل النصيحة لبعض الصفحات في النطاق عندما لا تكون قابلة للتطبيق. .TP \fBMADV_PAGEOUT\fP (منذ لينكس 5.4) .\" commit 1a4e58cce84ee88129d5d49c064bd2852b481357 استرداد نطاق معين من الصفحات. يتم ذلك لتحرير الذاكرة التي تشغلها هذه الصفحات. إذا كانت الصفحة مجهولة، فسيتم ترحيلها إلى مساحة التبادل. إذا كانت الصفحة مدعومة بملف ومتسخة، فسيتم كتابتها مرة أخرى إلى التخزين الاحتياطي. قد تُتجاهل النصيحة لبعض الصفحات في النطاق عندما لا تكون قابلة للتطبيق. .TP \fBMADV_POPULATE_READ\fP (منذ لينكس 5.14) ملء جداول الصفحات كقابلة للقراءة، مع إحضار جميع الصفحات في النطاق تماماً كما لو كان يتم القراءة يدوياً من كل صفحة؛ ومع ذلك، تجنب الوصول الفعلي للذاكرة الذي كان سيُجرى بعد معالجة الخطأ. .IP على عكس \fBMAP_POPULATE\fP، لا يخفي \fBMADV_POPULATE_READ\fP الأخطاء، ويمكن تطبيقه على (أجزاء من) المخططات الموجودة وسيقوم دائماً بملء جداول الصفحات كقابلة للقراءة. إحدى حالات الاستخدام هي الإحضار المسبق لمخطط ملف، وقراءة كل محتوى الملف من القرص؛ ومع ذلك، لن تُلوث الصفحات وبالتالي لن يتعين كتابتها مرة أخرى على القرص عند إخلاء الصفحات من الذاكرة. .IP اعتماداً على المخطط الأساسي، تخطيط صفحة الصفر المشتركة، أو التخصيص المسبق للذاكرة أو قراءة الملف الأساسي؛ قد تقوم الملفات التي بها فجوات بتخصيص كتل مسبقاً أو لا تقوم بذلك. إذا فشل الملء، لا تُولد إشارة \fBSIGBUS\fP؛ بدلاً من ذلك، يُرجع خطأ. .IP إذا نجح \fBMADV_POPULATE_READ\fP، فقد ملئت جميع جداول الصفحات كقابلة للقراءة مرة واحدة. إذا فشل \fBMADV_POPULATE_READ\fP، فقد تكون بعض جداول الصفحات قد ملئت. .IP لا يمكن تطبيق \fBMADV_POPULATE_READ\fP على المخططات التي لا تملك أذونات قراءة والمخططات الخاصة، على سبيل المثال، المخططات المميزة بعلامات داخلية للنواة مثل \fBVM_PFNMAP\fP أو \fBVM_IO\fP، أو مناطق الذاكرة السرية المنشأة باستخدام \fBmemfd_secret(2)\fP. .IP لاحظ أنه مع \fBMADV_POPULATE_READ\fP، يمكن قتل العملية في أي لحظة عندما ينفد النظام من الذاكرة. .TP \fBMADV_POPULATE_WRITE\fP (منذ لينكس 5.14) ملء جداول الصفحات كقابلة للكتابة، مع إحضار جميع الصفحات في النطاق تماماً كما لو كان يتم الكتابة يدوياً في كل صفحة؛ ومع ذلك، تجنب الوصول الفعلي للذاكرة الذي كان سيُجرى بعد معالجة الخطأ. .IP على عكس \fBMAP_POPULATE\fP، لا يخفي MADV_POPULATE_WRITE الأخطاء، ويمكن تطبيقه على (أجزاء من) المخططات الموجودة وسيقوم دائماً بملء جداول الصفحات كقابلة للكتابة. إحدى حالات الاستخدام هي التخصيص المسبق للذاكرة، كاسراً أي نسخ عند الكتابة (CoW). .IP اعتماداً على المخطط الأساسي، التخصيص المسبق للذاكرة أو قراءة الملف الأساسي؛ ستقوم الملفات التي بها فجوات بتخصيص كتل مسبقاً. إذا فشل الملء، لا تُولد إشارة \fBSIGBUS\fP؛ بدلاً من ذلك، يُرجع خطأ. .IP إذا نجحت \fBMADV_POPULATE_WRITE\fP، فتكون جميع جداول الصفحات قد وُزعت (أُخطئت مسبقًا) كقابلة للكتابة لمرة واحدة. إذا فشلت \fBMADV_POPULATE_WRITE\fP، فقد يكون قد وُزع بعض جداول الصفحات. .IP لا يمكن تطبيق \fBMADV_POPULATE_WRITE\fP على التعيينات التي لا تملك أذونات كتابة والتعيينات الخاصة، على سبيل المثال، التعيينات المعلمة بأعلام النواة الداخلية مثل \fBVM_PFNMAP\fP أو \fBVM_IO\fP، أو مناطق الذاكرة السرية التي أُنشئت باستخدام \fBmemfd_secret(2)\fP. .IP لاحظ أنه مع \fBMADV_POPULATE_WRITE\fP، يمكن قتل العملية في أي لحظة عندما ينفد نظام الذاكرة. .TP \fBMADV_GUARD_INSTALL\fP (منذ لينكس 6.13) ثبّت منطقة حماية خفيفة في النطاق المحدد بواسطة \fIaddr\fP و\fIsize\fP، مما يتسبب في أن تؤدي أي قراءة أو كتابة في النطاق إلى رفع إشارة \fBSIGSEGV\fP. .IP إذا كانت المنطقة تعيّن صفحات ذاكرة، فستُستبدل تلك التعيينات كجزء من العملية، رغم أنه إذا طُبقت \fBMADV_GUARD_INSTALL\fP على مناطق تحتوي على مناطق حماية خفيفة مسبقة الوجود، فستُترك في مكانها. .IP قبل لينكس 6.15، كانت هذه العملية مدعومة فقط لتعيينات الخصوصية المجهولة القابلة للكتابة. منذ لينكس 6.15، كلاً من التعيينات المجهولة والمدعومة بملفات أصبحت مدعومة، بما في ذلك التعيينات المخصصة للقراءة فقط. .IP يجب ألا يكون التعيين مغلّقاً بـ mlock، أو يعيّن نطاقات hugetlb، ولا يحتوي على تعيينات خاصة. على سبيل المثال، التعيينات المعلمة بأعلام النواة الداخلية مثل \fBVM_PFNMAP\fP أو \fBVM_IO\fP، أو مناطق الذاكرة السرية المنشأة باستخدام \fBmemfd_secret\fP(2). .IP يُرجع الخطأ \fBEINVAL\fP إذا أُجريت محاولة على أي نوع آخر من التعييات. .IP هذه العملية أكثر كفاءة من تعيين منطقة جديدة من الذاكرة بـ \fBPROT_NONE\fP، لأنها لا تتطلب إنشاء تعيينات جديدة. بدلاً من ذلك، يتم ببساطة التلاعب بجداول الصفحات لتعيين موجود لإنشاء السلوك المطلوب. ولا تُستخدم ذاكرة إضافية. .IP تظل مناطق الحماية الخفيفة عند التفريع fork (باستثناء أي أجزاء طُبقت عليها \fBMADV_WIPEONFORK\fP)، ولا تُزال بواسطة \fBMADV_DONTNEED\fP أو \fBMADV_FREE\fP أو \fBMADV_PAGEOUT\fP أو \fBMADV_COLD\fP. .IP ستفشل محاولة إجراء \fBmlock\fP(2) على مناطق الحماية الخفيفة، وكذلك ستفشل \fBMADV_POPULATE_READ\fP أو \fBMADV_POPULATE_WRITE\fP. .IP إذا تغيرت سمات التعيين، أو قُسم أو أُلغي تعيينه جزئياً، تظل أي مناطق حماية موجودة في مكانها (إلا إذا أُلغي تعيينها). .IP إذا نُقل تعيين باستخدام \fBmremap\fP(2)، فستُنقل مناطق الحماية الخفيفة معه. .IP تُزال مناطق الحماية الخفيفة عند إلغاء التعيين، أو عند إنهاء العملية، أو عند تطبيق عملية \fBMADV_GUARD_REMOVE\fP عليها. .TP \fBMADV_GUARD_REMOVE\fP (منذ لينكس 6.13) أزل أي مناطق حماية خفيفة موجودة في النطاق المحدد بواسطة \fIaddr\fP و\fIsize\fP. .IP تُترك جميع التعيينات في النطاق بخلاف مناطق الحماية الخفيفة في مكانها. هذه العملية مدعومة في تلك التعيينات المسموح بها بواسطة \fBMADV_GUARD_INSTALL\fP بالإضافة إلى التعيينات المغلّقة بـ mlock()، مع إرجاع خطأ \fBEINVAL\fP في الحالات الأخرى. .IP عند إزالة مناطق الحماية الخفيفة، فإنها تعمل كمناطق فارغة من التعيين الحاوي. لذلك، تصبح التعيينات الخاصة المجهولة صفحات تُملأ بالصفر عند الطلب، وتُعاد تعبئة التعيينات المدعومة بملفات بمحتويات الذاكرة من المحتويات المحدثة للملف المنيّن الأساسي. .IP إذا واجهت العملية أي صفحات ضخمة شفافة، فستُترك في مكانها. .SH "قيمة الإرجاع" عند النجاح، يرجع \fBmadvise\fP() صفراً. عند حدوث خطأ، يرجع \-1 ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEACCES\fP \fIadvice\fP هو \fBMADV_REMOVE\fP، لكن نطاق العنوان المحدد ليس تعييناً مشتركاً قابلاً للكتابة. .TP \fBEAGAIN\fP مورد للنواة غير متاح مؤقتاً. .TP \fBEBADF\fP التعيين موجود، لكن المنطقة تعيّن شيئاً ليس ملفاً. .TP \fBEBUSY\fP (لأجل \fBMADV_COLLAPSE\fP) لم يمكن تحميل الصفحة الضخمة إلى cgroup: تم تجاوز حد cgroup. .TP \fBEBUSY\fP (لأجل \fBMADV_SOFT_OFFLINE\fP) لم يمكن جعل أي صفحات ضمن نطاق العنوان المحدد خارج الخدمة (offline). قد يحدث هذا إذا كانت الصفحة قيد الاستخدام حالياً أو مغلقة. .TP \fBEFAULT\fP \fIadvice\fP هو \fBMADV_POPULATE_READ\fP أو \fBMADV_POPULATE_WRITE\fP، وفشلت تعبئة (prefaulting) جداول الصفحات لأن \fBSIGBUS\fP كانت ستتولد عند الوصول الفعلي للذاكرة والسبب ليس صفحة مسمومة بالأجهزة (الصفحات المسمومة بالأجهزة يمكن، على سبيل المثال، إنشاؤها باستخدام العلم \fBMADV_HWPOISON\fP الموصوف في مكان آخر في هذه الصفحة). .TP \fBEINVAL\fP .\" .I size .\" is zero, \fIaddr\fP ليس محاذياً للصفحة أو \fIsize\fP سالب. .TP \fBEINVAL\fP \fIadvice\fP غير صالح. .TP \fBEINVAL\fP \fIadvice\fP هو \fBMADV_COLD\fP أو \fBMADV_PAGEOUT\fP ونطاق العنوان المحدد يتضمن صفحات مغلقة، أو Huge TLB، أو صفحات \fBVM_PFNMAP\fP. .TP \fBEINVAL\fP \fIadvice\fP هو \fBMADV_DONTNEED\fP أو \fBMADV_REMOVE\fP ونطاق العنوان المحدد يتضمن صفحات مغلقة، أو Huge TLB، أو صفحات \fBVM_PFNMAP\fP. .TP \fBEINVAL\fP \fIadvice\fP هو \fBMADV_MERGEABLE\fP أو \fBMADV_UNMERGEABLE\fP، لكن النواة لم تُضبط بـ \fBCONFIG_KSM\fP. .TP \fBEINVAL\fP \fIadvice\fP هو \fBMADV_FREE\fP أو \fBMADV_WIPEONFORK\fP لكن نطاق العنوان المحدد يتضمن نطاقات ملفات، أو Huge TLB، أو \fBMAP_SHARED\fP، أو \fBVM_PFNMAP\fP. .TP \fBEINVAL\fP \fIadvice\fP هو \fBMADV_POPULATE_READ\fP أو \fBMADV_POPULATE_WRITE\fP، لكن نطاق العنوان المحدد يتضمن نطاقات بأذونات غير كافية أو تعييات خاصة، على سبيل المثال، التعيينات المعلمة بأعلام النواة الداخلية مثل \fBVM_IO\fP أو \fBVM_PFNMAP\fP، أو مناطق الذاكرة السرية المنشأة باستخدام \fBmemfd_secret(2)\fP. .TP \fBEINVAL\fP \fIadvice\fP هو \fBMADV_GUARD_INSTALL\fP أو \fBMADV_GUARD_REMOVE\fP، لكن نطاق العنوان المحدد يحتوي على تعيين غير مدعوم. .TP \fBEIO\fP (لأجل \fBMADV_WILLNEED\fP) التصفير في هذه المنطقة سيتجاوز الحد الأقصى لحجم الطقم المقيم (resident set size) للعملية. .TP \fBENOMEM\fP (لأجل \fBMADV_WILLNEED\fP) لا توجد ذاكرة كافية: فشل التصفير. .TP \fBENOMEM\fP (لأجل \fBMADV_COLLAPSE\fP) لا توجد ذاكرة كافية: لم يمكن تخصيص صفحة ضخمة. .TP \fBENOMEM\fP العناوين في النطاق المحدد غير معينة حالياً، أو تقع خارج فضاء عناوين العملية. .TP \fBENOMEM\fP \fIadvice\fP هو \fBMADV_POPULATE_READ\fP أو \fBMADV_POPULATE_WRITE\fP، وفشلت تعبئة (prefaulting) جداول الصفحات بسبب عدم كفاية الذاكرة. .TP \fBEPERM\fP \fIadvice\fP هو \fBMADV_HWPOISON\fP، لكن المستدعي لا يملك صلاحية \fBCAP_SYS_ADMIN\fP. .TP \fBEHWPOISON\fP \fIadvice\fP هو \fBMADV_POPULATE_READ\fP أو \fBMADV_POPULATE_WRITE\fP، وفشلت تعبئة (prefaulting) جداول الصفحات بسبب مواجهة صفحة مسمومة بالأجهزة (الصفحات المسمومة بالأجهزة يمكن، على سبيل المثال، إنشاؤها باستخدام العلم \fBMADV_HWPOISON\fP الموصوف في مكان آخر في هذه الصفحة). .SH الإصدارات توجد إصدارات من استدعاء النظام هذا، والتي تطبق مجموعة واسعة من قيم \fIadvice\fP في العديد من التطبيقات الأخرى. عادةً ما تطبق التطبيقات الأخرى على الأقل الأعلام المدرجة أعلاه تحت \fIConventional advice flags\fP، وإن كان ذلك مع بعض الاختلاف في المعاني. .P تصف مواصفة POSIX.1\-2001 استدعاء \fBposix_madvise\fP(3) مع الثوابت \fBPOSIX_MADV_NORMAL\fP و\fBPOSIX_MADV_RANDOM\fP و\fBPOSIX_MADV_SEQUENTIAL\fP و\fBPOSIX_MADV_WILLNEED\fP و\fBPOSIX_MADV_DONTNEED\fP وما إلى ذلك، بسلوك قريب من الأعلام المسماة بشكل مشابه والمدرجة أعلاه. .SS لينكس يتطلب تطبيق لينكس أن يكون العنوان \fIaddr\fP محاذياً للصفحة، ويسمح بأن يكون \fIsize\fP صفراً. إذا كان هناك بعض الأجزاء من نطاق العنوان المحدد غير معينة، فإن نسخة لينكس من \fBmadvise\fP() تتجاهلها وتطبق الاستدعاء على الباقي (لكنها ترجع \fBENOMEM\fP من استدعاء النظام، كما يجب). .P سيُرجع \fImadvise(0,\ 0,\ advice)\fP صفراً إذا وفقط إذا كان \fIadvice\fP مدعوماً من قبل النواة ويمكن الاعتماد عليه لاستقصاء الدعم. .SH المعايير لا يوجد. .SH التاريخ ظهر لأول مرة في 4.4BSD. .P .\" commit d3ac21cacc24790eb45d735769f35753f5b56ceb منذ لينكس 3.18، أصبح دعم استدعاء النظام هذا اختيارياً، اعتماداً على ضبط خيار الإعداد \fBCONFIG_ADVISE_SYSCALLS\fP. .SH "انظر أيضًا" \fBgetrlimit\fP(2), \fBmemfd_secret\fP(2), \fBmincore\fP(2), \fBmmap\fP(2), \fBmprotect\fP(2), \fBmsync\fP(2), \fBmunmap\fP(2), \fBprctl\fP(2), \fBprocess_madvise\fP(2), \fBposix_madvise\fP(3), \fBcore\fP(5) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .