تعرض هذه الصفحة الطرق المختلفة للحصول على حجم صفحة النواة المستخدَمة في الجهاز. للاتصال بالجهاز، يمكنك استخدام adb
.
$ adb shell
استخدام رمز برمجي
في C++، يُفضَّل استخدام getpagesize(2)
:
# include <unistd.h>
...
... = getpagesize();
في Java، يمكنك استخدام إعدادات النظام:
import android.system.Os;
import android.system.OsConstants;
... = Os.sysconf(OsConstants._SC_PAGE_SIZE);
استخدام الأمر getconf
استخدِم الأمر getconf
للحصول على حجم الصفحة، كما هو موضّح أدناه:
$ getconf PAGE_SIZE
4096
استخدام ملف /proc//smaps الوهمي
يعرض الحقل KernelPageSize
في الملف الزائف /proc/<pid>/smaps
حجم الصفحة، كما هو موضح أدناه:
$ grep KernelPageSize /proc/1/smaps
KernelPageSize: 4 kB
استخدِم علامة الربط LD_SHOW_AUXV=1.
استخدِم العلامة LD_SHOW_AUXV
لطباعة المتّجه المساعد للبرنامج
الذي سيتم تنفيذه. يحتوي الحقل AT_PAGESZ
على حجم الصفحة،
كما هو موضّح أدناه:
$ LD_SHOW_AUXV=1 ls
AT_SYSINFO_EHDR 0x7250460000
AT_MINSIGSTKSZ 4720
AT_HWCAP 0b11111111111111111111111111111111
AT_PAGESZ 4096
AT_CLKTCK 100
AT_PHDR 0x5fda1e0040
AT_PHENT 56
AT_PHNUM 12
AT_BASE 0x72502f8000
AT_FLAGS 0
AT_ENTRY 0x5fda210000
AT_UID 0
AT_EUID 0
AT_GID 0
AT_EGID 0
AT_SECURE 0
AT_RANDOM 0x7fc59d66f8
AT_HWCAP2 0b100011001111111111
AT_EXECFN "/system/bin/ls"
AT_PLATFORM "aarch64"
data dev. init vendor
استخدام ملف /proc/config.gz الوهمي
تحقَّق من إعدادات النواة لحجم الصفحة في الملف الزائف
/proc/config.gz
. في ما يلي الإعدادات المتاحة لحجم الصفحة:
CONFIG_ARM64_4K_PAGES=y
: تستخدم النواة صفحات بحجم 4096 بايت.CONFIG_ARM64_16K_PAGES=y
: تستخدم النواة صفحات بحجم 16384 بايت.CONFIG_ARM64_64K_PAGES=y
: تستخدم النواة صفحات بحجم 65536 بايت.
$ zcat /proc/config.gz | grep "CONFIG_ARM64_[164K]*_PAGES=y"
CONFIG_ARM64_16K_PAGES=y
استخدام المتّجه المساعد
عند تنفيذ برنامج، تخصّص النواة وتضبط المتّجه الإضافي باستخدام معلومات، مثل حجم الصفحة، يستخدِمها الرابط الديناميكي. يمكن قراءة المتّجه المساعد من الملف الزائف
/proc/<pid>/auxv
. يمكن عرض حجم الصفحة من المتّجه المساعد للعملية 1 على النحو التالي:
$ od -N8 -j56 -td8 -An /proc/1/auxv
4096
المكان:
od
تعرض الملفات بتنسيق سداسي عشري أو عشري أو تنسيقات أخرى.- تُفرغ
-N8 -j56
البايتات الثمانية بدءًا من الإزاحة 56 في الملف، المتوافقة معAT_PAGESZ
. - تنسِّق
-td8
القيمة كعدد صحيح عشري من 8 بايت. - تتسبّب السمة
-An
في عرض القيمة فقط، وليس عنوانها.
القراءة من صورة نواة
يمكنك قراءة عنوان صورة النواة لتحديد حجم الصفحة. ويكون ذلك مفيدًا في برنامج التشغيل، إذا كنت بحاجة إلى معرفة نوع النواة التي يتم تشغيلها.
يظهر حجم الصفحة في البايت رقم 25 من عنوان النواة:
$ file Image
Image: Linux kernel ARM64 boot executable Image, little-endian, 16K pages
$ hexdump -C Image -n 48
00000000 4d 5a 40 fa ff 7f 7b 14 00 00 00 00 00 00 00 00 |MZ@...{.........|
00000010 00 00 64 02 00 00 00 00 0c 00 00 00 00 00 00 00 |..d.............|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030
في هذا المثال، تكون القيمة 0x0C = 0000 1100b
. تحتوي البت 1 على القيمة 0
، وتحتوي البت 2 على القيمة 1
. عند قراءة هذين البتّين، نحصل على 10b
أو 2
بالنظام العشري. استنادًا إلى قيمة هذه البتات، يمكنك تحديد حجم صفحة النواة على النحو التالي:
-
0
- غير محدّد -
1
- 4 كيلوبايت -
2
- 16 كيلوبايت -
3
- 64 كيلوبايت
لمزيد من المعلومات، يُرجى الاطّلاع على مستندات كيرنل بنظام Linux.