Apakah pfn dalam linux

青灯夜游
青灯夜游asal
2022-03-24 11:57:323958semak imbas

Di Linux, pfn bermaksud "nombor bingkai halaman", iaitu nombor kawasan memori fizikal. "Bingkai halaman" merujuk kepada memori fizikal Ia membahagikan memori fizikal kepada kawasan saiz halaman dan memberikan setiap halaman nombor, dan nombor ini ialah PFN.

Apakah pfn dalam linux

Persekitaran pengendalian tutorial ini: sistem linux5.9.8, komputer Dell G3.

1. Apakah bingkai halaman?

Salah satu fungsi sistem pengendalian yang paling penting ialah mengurus pelbagai sumber dalam sistem komputer Sebagai sumber yang paling penting: ingatan, kita mesti menguruskannya. Dalam sistem pengendalian Linux, memori fizikal diuruskan mengikut saiz halaman Saiz halaman tertentu berkaitan dengan perkakasan dan konfigurasi sistem Linux adalah tetapan paling klasik. Oleh itu, untuk ingatan fizikal, kami membahagikannya kepada halaman yang disusun mengikut saiz halaman Kawasan memori saiz halaman dalam setiap memori fizikal dipanggil bingkai halaman. Kami mewujudkan struktur data halaman struktur untuk setiap bingkai halaman fizikal untuk menjejaki penggunaan setiap halaman fizikal: Adakah ia digunakan untuk segmen teks kernel? Atau adakah ia jadual halaman untuk proses? Adakah ia digunakan untuk pelbagai cache fail atau dalam keadaan bebas...

Setiap bingkai halaman mempunyai struktur data halaman yang sepadan satu dengan satu Sistem mentakrifkan makro page_to_pfn dan pfn_to_page untuk digunakan dalam halaman nombor bingkai dan halaman Menukar antara struktur data, kaedah penukaran khusus adalah berkaitan dengan model memori Kami akan menerangkan tiga model memori dalam kernel Linux secara terperinci dalam Bab 3.

2. Apakah itu PFN?

Untuk sistem komputer, keseluruhan ruang alamat fizikalnya hendaklah tempoh ruang alamat bermula dari 0 dan berakhir dengan ruang fizikal maksimum yang boleh disokong oleh sistem sebenar. Dalam sistem ARM, dengan mengandaikan alamat fizikal ialah 32 bit, maka ruang alamat fizikal ialah 4G Dalam sistem ARM64, jika bilangan bit alamat fizikal yang disokong ialah 48, maka ruang alamat fizikal ialah 256T. Sudah tentu, sebenarnya, tidak semua ruang alamat fizikal yang besar digunakan untuk ingatan, ada juga yang tergolong dalam ruang I/O (sudah tentu, sesetengah gerbang CPU mempunyai ruang alamat io bebas mereka sendiri). Oleh itu, ruang alamat fizikal yang diduduki oleh memori haruslah selang terhad, dan adalah mustahil untuk menampung keseluruhan ruang alamat fizikal. Namun, kini memori semakin besar dan besar, untuk sistem 32-bit, ruang alamat fizikal 4G tidak lagi dapat memenuhi keperluan memori, jadi terdapat konsep ingatan tinggi, yang akan diterangkan secara terperinci kemudian.

PFN ialah singkatan nombor bingkai halaman Apa yang dipanggil bingkai halaman adalah untuk ingatan fizikal Memori fizikal dibahagikan kepada kawasan saiz halaman, dan setiap halaman bernombor. Dengan mengandaikan bahawa ingatan fizikal bermula pada alamat 0, maka bingkai halaman dengan PFN sama dengan 0 ialah halaman yang bermula pada alamat 0 (alamat fizikal). Dengan mengandaikan bahawa memori fizikal bermula pada alamat x, maka nombor bingkai halaman pertama ialah (x>>PAGE_SHIFT).

Julat nilai PFN ialah 0---- (saiz memori >> 12).

Walau bagaimanapun, disebabkan oleh hubungan pemetaan memori fizikal, alamat memori fizikal 0 tidak sepadan dengan alamat fizikal 0 pada sistem. Contohnya: pada s3c2440, alamat memori bermula dari 0x30000000. Apabila ram disambungkan, alamat 0 ram ialah 0x30000000 dalam paparan s3c2440 Oleh itu, nilai pfn dalam sistem hendaklah sama dengan (alamat fizikal - alamat pangkalan memori) >>

Tetapi dalam Linux, semua alamat maya digunakan, jadi alamat maya mesti ditukar kepada alamat fizikal terlebih dahulu. Jadi terdapat definisi makro dalam Linux yang menukar alamat maya ruang linear kernel kepada pfn:

#define virt_to_pfn(kaddr)	(__pa(kaddr) >> PAGE_SHIFT)   //__pa() 将虚拟地址转化成物理地址  
#define pfn_to_virt(pfn)	__va((pfn) << PAGE_SHIFT)

Jadi pfn harus sepadan dengan nombor bingkai halaman dalam kernel Linux. Alamat fizikal yang sepadan boleh didapati melalui penukaran mudah.

Untuk setiap halaman fizikal, kernel memberikan deskriptor untuk menerangkannya: halaman. pfn boleh ditukar kepada halaman:

#define page_to_pfn __page_to_pfn
#define pfn_to_page __pfn_to_page

Semua struktur halaman disimpan dalam mem_map untuk pengurusan yang mudah.

Kerana Linux membahagikan memori fizikal kepada halaman 4K untuk pengurusan. Oleh itu, MMU juga akan disediakan dalam perisian untuk pemadanan. Diceritakan kemudian.

Linux membahagikan ruang maya 4G kepada ruang pengguna dan ruang kernel. Ruang pengguna ialah 0---3G, dan ruang kernel ialah 3G---4G. Ruang pengguna boleh diakses dari ruang kernel, tetapi ruang kernel mesti diakses dari ruang pengguna melalui panggilan sistem.

Cadangan berkaitan: "Tutorial Video Linux"

Atas ialah kandungan terperinci Apakah pfn dalam linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Apakah fail .d dalam linuxArtikel seterusnya:Apakah fail .d dalam linux