


Berhenti mengatakan anda tidak memahami pengurusan memori Linux, 10 gambar akan menjelaskannya untuk anda!
Hari ini kita akan mengkaji pengurusan ingatan Linux
.
Bagi pelajar bisnes yang mahir dalam CURD
, pengurusan ingatan nampak jauh dari kita. Tetapi walaupun titik pengetahuan ini tidak popular (dianggarkan ramai orang tidak akan menggunakannya sama sekali selepas mempelajarinya), ia pastinya asas asas.
Ini seperti latihan kekuatan dalaman dalam novel seni mempertahankan diri Anda tidak akan melihat hasil serta-merta selepas mempelajarinya, tetapi ia akan memberi manfaat besar kepada kerja pembangunan masa depan anda kerana anda akan berdiri lebih tinggi.
Semua contoh gambar dalam artikel adalah saya lukis. Melukis gambar mengambil lebih banyak masa daripada pengekodan, tetapi semua orang memahami dengan lebih intuitif dengan melihat gambar daripada teks, jadi saya masih melukisnya. Bagi pelajar yang memerlukan gambar sampel definisi tinggi, terdapat cara untuk mendapatkannya di akhir artikel.
Secara lebih utilitarian, jika anda secara tidak sengaja mendedahkan bahawa anda memahami ilmu ini semasa temuduga dan boleh menceritakannya secara terperinci, ia mungkin membuatkan penemuduga lebih berminat dengan anda, dan anda mungkin boleh mendapat kenaikan pangkat, kenaikan gaji, dan mulakan hidup anda Puncaknya adalah satu langkah lebih dekat.
Perjanjian premis: Premis kandungan teknikal yang dibincangkan dalam artikel ini ialah persekitaran sistem pengendalian ialah x86
sistem 32-bit x86
架构的 32 位 Linux
.
Alamat Maya
Walaupun dalam sistem pengendalian moden, memori masih merupakan sumber yang sangat berharga dalam komputer anda. Lihat sahaja saiz pemacu keadaan pepejal komputer anda, dan kemudian lihat saiz memori.
Untuk menggunakan dan mengurus sumber memori sistem sepenuhnya, Linux menggunakan teknologi pengurusan memori maya. Menggunakan teknologi memori maya, setiap proses mempunyai ruang alamat maya 4GB yang tidak mengganggu antara satu sama lain.
Peruntukan dan operasi permulaan proses adalah berdasarkan "alamat maya" ini. Hanya apabila proses perlu benar-benar mengakses sumber memori, pemetaan antara alamat maya dan alamat fizikal akan ditubuhkan dan halaman memori fizikal dipindahkan.
Untuk memberikan analogi yang tidak sesuai, prinsip ini sebenarnya sama dengan cakera rangkaian XX semasa. Jika ruang cakera rangkaian anda ialah 1TB, adakah anda benar-benar berfikir bahawa anda akan diberikan ruang yang begitu besar sekali gus? Itu masih terlalu muda. Ruang diperuntukkan kepada anda hanya apabila anda meletakkan sesuatu di dalamnya. Anda akan diperuntukkan sebanyak ruang sebenar seperti yang anda letakkan. Tetapi nampaknya anda dan rakan anda mempunyai 1TB ruang.
Faedah Alamat Maya
- Halang pengguna daripada terus mengakses alamat memori fizikal, menghalang operasi yang merosakkan dan melindungi sistem pengendalian.
- Setiap proses diperuntukkan 4GB memori maya, membolehkan program pengguna menggunakan ruang alamat yang lebih besar daripada memori fizikal sebenar.
Ruang alamat maya proses 4GB dibahagikan kepada dua bahagian: "ruang pengguna" dan "ruang kernel".

Ruang isirong ruang pengguna
Alamat fizikal
Dalam bab di atas, kita sudah tahu bahawa sama ada ruang pengguna atau ruang kernel, alamat yang digunakan adalah alamat maya Apabila proses perlu benar-benar mengakses memori, "pengecualian kesalahan halaman" akan dihasilkan oleh "permintaan kernel. mekanisme paging" dan dipindahkan ke alamat fizikal. halaman memori.
Tukar alamat maya ke alamat fizikal memori, yang melibatkan penggunaan MMU
Unit Pengurusan Memori untuk membahagikan dan halaman alamat maya (jenis halaman segmen) penukaran alamat Mengenai proses pembahagian dan halaman khusus, kami tidak akan membincangkannya di sini. Untuk butiran lanjut, anda boleh merujuk kepada mana-mana buku teks prinsip komposisi komputer untuk penerangan.

Penukaran alamat pengurusan memori halaman segmen
Linux
Inti akan membahagikan memori fizikal kepada 3 kawasan pengurusan, iaitu:
ZONE_DMA
DMA
内存区域。包含0MB~16MB之间的内存页框,可以由老式基于ISA
的设备通过DMA
Digunakan, dipetakan terus ke ruang alamat kernel.
ZON_BIASA
Kawasan ingatan biasa. Mengandungi bingkai halaman memori antara 16MB~896MB, bingkai halaman biasa, dipetakan terus ke ruang alamat kernel.
ZON_TINGGI
Kawasan memori mewah. Mengandungi bingkai halaman memori melebihi 896MB, yang tidak dipetakan secara langsung Bahagian bingkai halaman memori ini boleh diakses melalui pemetaan kekal dan pemetaan sementara.

Pembahagian kawasan ingatan fizikal
Ruang Pengguna
Apa yang boleh diakses oleh proses pengguna ialah "ruang pengguna". Setiap proses mempunyai ruang pengguna tersendiri, dan julat alamat maya adalah dari 0x00000000
至 0xBFFFFFFF
Jumlah kapasiti ialah 3G.
Proses pengguna biasanya hanya boleh mengakses alamat maya dalam ruang pengguna, dan hanya boleh mengakses ruang kernel apabila melaksanakan operasi dalam talian atau panggilan sistem.
Proses dan Ingatan
Ruang pengguna yang diduduki oleh proses (program yang dilaksanakan) dibahagikan kepada 5
kawasan memori yang berbeza mengikut prinsip "ruang alamat dengan atribut akses yang konsisten disimpan bersama". Sifat capaian merujuk kepada “boleh dibaca, boleh ditulis, boleh laku, dsb.
-
Coretan kod
Segmen kod digunakan untuk menyimpan arahan operasi fail boleh laku dan imej program boleh laku dalam ingatan. Segmen kod perlu dilindungi daripada pengubahsuaian haram pada masa jalan, jadi hanya operasi baca dibenarkan, ia tidak boleh ditulis.
-
Segmen data
Segmen data digunakan untuk menyimpan pembolehubah global yang dimulakan dalam fail boleh laku Dalam erti kata lain, ia menyimpan pembolehubah dan pembolehubah global yang diperuntukkan secara statik oleh program.
-
Bahagian BSS
BSS
段包含了程序中未初始化的全局变量,在内存中bss
Tetapkan semua segmen kepada sifar. -
Timbunan
heap
Timbunan digunakan untuk menyimpan segmen memori yang diperuntukkan secara dinamik semasa proses berjalan Saiznya tidak tetap dan boleh dikembangkan atau dikurangkan secara dinamik. Apabila proses memanggil fungsi seperti malloc untuk memperuntukkan memori, memori yang baru diperuntukkan ditambah secara dinamik pada timbunan (timbunan dikembangkan); (timbunan berkurangan).
- Timbunan
Timbunan ialah pembolehubah tempatan yang dibuat sementara oleh pengguna untuk menyimpan atur cara, iaitu pembolehubah yang ditakrifkan dalam fungsi (tetapi tidak termasuk pembolehubah yang diisytiharkan olehstack
, bermakna statik menyimpan pembolehubah dalam segmen data). Di samping itu, apabila fungsi dipanggil, parameternya juga akan ditolak ke tindanan proses yang memulakan panggilan, dan selepas panggilan selesai, nilai pulangan fungsi itu juga akan disimpan semula pada tindanan. Disebabkan oleh ciri pertama-masuk-akhir-keluar bagi timbunan, timbunan amat sesuai untuk menyimpan/memulihkan adegan panggilan. Dalam pengertian ini, kita boleh menganggap timbunan sebagai kawasan memori yang menyimpan dan menukar data sementara.
static
dalam seni bina, tindanan mengembang ke bawah dan timbunan mengembang ke atas, yang relatif antara satu sama lain. BSS
段、堆通常是被连续存储在内存中,在位置上是连续的,而代码段和栈往往会被独立存放。堆和栈两个区域在 i386
di bawah Linux untuk menyemak saiz setiap kawasan memori program yang disusun: size
[lemon ~]# size /usr/local/sbin/sshd text data bss dec hexfilename 1924532 12412 4268962363840 2411c0/usr/local/sbin/sshd
Ruang kernel
Kapasiti termasuk imej kernel, jadual halaman fizikal, pemacu, dsb. yang berjalan dalam ruang kernel. x86 32
位系统里,Linux 内核地址空间是指虚拟地址从 0xC0000000
开始到 0xFFFFFFFF
为止的高端内存地址空间,总计 1G

Kawasan pemetaan terus
Kawasan pemetaan terus Julat alamat ruang kernel ialah kawasan pemetaan memori langsung. Direct Memory Region
:从内核空间起始地址开始,最大896M
"Alamat linear" 896MB dalam kawasan pemetaan langsung disambungkan terus ke hadapan "alamat fizikal" 896MB
进行映射,也就是说线性地址和分配的物理地址都是连续的。内核地址空间的线性地址0xC0000001
所对应的物理地址为0x00000001
,它们之间相差一个偏移量PAGE_OFFSET = 0xC0000000
Terdapat hubungan penukaran linear antara alamat linear dan alamat fizikal di kawasan ini "Alamat linear = PAGE_OFFSET
+ 物理地址」也可以用 virt_to_phys()
Fungsi menukar alamat linear dalam ruang maya kernel kepada alamat fizikal.
Ruang alamat linear memori mewah
Julat alamat linear ruang kernel adalah dari 896M hingga 1G, dan julat alamat dengan kapasiti 128MB ialah ruang alamat linear memori mewah Mengapa ia dipanggil ruang alamat linear memori mewah? Biar saya terangkan kepada anda di bawah:
Seperti yang dinyatakan sebelum ini, jumlah saiz ruang kernel ialah 1GB, dan alamat linear 896MB bermula dari alamat permulaan ruang kernel boleh dipetakan terus ke julat alamat dengan saiz alamat fizikal 896MB.
Undur selangkah, walaupun alamat linear 1GB dalam ruang kernel dipetakan ke alamat fizikal, ia hanya boleh menangani maksimum 1GB julat alamat memori fizikal.
Berapa besar kayu memori yang anda miliki sekarang? Sedarlah, sudah hampir 2023, dan kebanyakan PC mempunyai lebih daripada 1GB memori!
Jadi, ruang kernel mengeluarkan julat alamat 128M terakhir dan membahagikannya kepada tiga kawasan pemetaan memori mewah berikut untuk menangani keseluruhan julat alamat fizikal. Masalah ini tidak wujud pada sistem 64-bit, kerana ruang alamat linear yang tersedia jauh lebih besar daripada memori yang boleh dipasang.
Kawasan pemetaan memori dinamik
vmalloc Region
该区域由内核函数vmalloc
来分配,特点是:线性空间连续,但是对应的物理地址空间不一定连续。vmalloc
Halaman fizikal yang sepadan dengan alamat linear yang diperuntukkan mungkin dalam memori rendah atau memori mewah.
Kawasan pemetaan ingatan kekal
FungsiPersistent Kernel Mapping Region
该区域可访问高端内存。访问方法是使用 alloc_page (_GFP_HIGHMEM)
分配高端内存页或者使用kmap
memetakan memori mewah yang diperuntukkan ke kawasan ini.
Kawasan pemetaan tetap
Fixing kernel Mapping Region
该区域和 4G 的顶端只有 4k 的隔离带,其每个地址项都服务于特定的用途,如 ACPI_BASE
dsb.

Pemetaan memori fizikal ruang kernel
Semakan
Terdapat banyak perkara yang perlu dibincangkan di atas, jadi jangan tergesa-gesa ke bahagian seterusnya Sebelum itu, mari semak semula apa yang kami katakan di atas. Jika anda membaca bab di atas dengan teliti, saya telah melukis satu lagi gambar di sini, dan kini anda sepatutnya mempunyai gambaran global pengurusan ingatan dalam fikiran anda.

Gambar penuh ruang kernel dan ruang pengguna
Struktur data memori
Untuk kernel mengurus memori maya dalam sistem, struktur data pengurusan memori mesti diabstrakkan daripadanya operasi pengurusan memori seperti "peruntukan, keluaran, dll adalah berdasarkan operasi struktur data ini struktur yang menguruskan kawasan ingatan maya.
Struktur data memori ruang pengguna
Dalam bab "Proses dan Memori" sebelum ini, kami menyebut bahawa proses Linux boleh dibahagikan kepada 5 kawasan memori yang berbeza, iaitu: segmen kod, segmen data, BSS
、堆、栈,内核管理这些区域的方式是,将这些内存区域抽象成vm_area_struct
objek pengurusan memori.
vm_area_struct
是描述进程地址空间的基本管理单元,一个进程往往需要多个vm_area_struct
来描述它的用户空间虚拟地址,需要使用「链表」和「红黑树」来组织各个vm_area_struct
.
Senarai terpaut digunakan apabila semua nod perlu dilalui, manakala pokok merah-hitam sesuai untuk mengesan kawasan ingatan tertentu dalam ruang alamat. Kernel menggunakan kedua-dua struktur data untuk mencapai prestasi tinggi untuk pelbagai operasi pada kawasan memori.
Model pengurusan alamat proses ruang pengguna:

wm_arem_struct
Ruang kernel memperuntukkan struktur data memori secara dinamik
Dalam bab ruang kernel, kami menyebut "kawasan pemetaan memori dinamik". vmalloc
来分配,特点是:线性空间连续,但是对应的物理地址空间不一定连续。vmalloc
sekatan kawasan bebas bersaiz anti-silang. vmalloc
分配的地址则限于vmalloc_start
与vmalloc_end
之间。每一块vmalloc
分配的内核虚拟内存都对应一个vm_struct
结构体,不同的内核空间虚拟地址之间有4k

Untuk meringkaskan
Pengurusan memori ialah sistem yang sangat kompleks Apa yang diterangkan dalam artikel ini hanyalah puncak gunung es Ia menunjukkan kepada anda gambaran keseluruhan pengurusan memori dari perspektif makro, tetapi secara amnya, pengetahuan ini masih mencukupi apabila anda bersembang. bersama penemuduga juga saya berharap agar semua orang dapat memahami prinsip yang lebih mendalam melalui pembacaan. Linux
Saya juga melukis banyak contoh rajah semasa penciptaan artikel ini, yang boleh digunakan sebagai indeks pengetahuan Secara peribadi, saya rasa melihat gambar lebih jelas daripada membaca teks Pengurusan" di latar belakang akaun rasmi saya "Sekolah Teknologi Backend" Resolusi tinggi asal gambar-gambar ini.
Peraturan lama, terima kasih kerana membaca Tujuan artikel adalah untuk berkongsi pemahaman tentang pengetahuan, saya akan mengesahkannya berulang kali untuk memastikan ketepatannya dialu-alukan untuk menunjukkan kepada mereka. Mari belajar daripada perbincangan bersama. Itu sahaja untuk perkongsian teknologi hari ini. Jumpa anda dalam keluaran seterusnya.Atas ialah kandungan terperinci Berhenti mengatakan anda tidak memahami pengurusan memori Linux, 10 gambar akan menjelaskannya untuk anda!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Pengenalan Linux adalah sistem operasi yang kuat yang disukai oleh pemaju, pentadbir sistem, dan pengguna kuasa kerana fleksibiliti dan kecekapannya. Walau bagaimanapun, kerap menggunakan arahan panjang dan kompleks boleh membosankan dan er

Linux sesuai untuk pelayan, persekitaran pembangunan, dan sistem tertanam. 1. Sebagai sistem pengendalian pelayan, Linux stabil dan cekap, dan sering digunakan untuk menggunakan aplikasi konkurasi tinggi. 2. Sebagai persekitaran pembangunan, Linux menyediakan alat arahan dan sistem pengurusan pakej yang cekap untuk meningkatkan kecekapan pembangunan. 3. Dalam sistem tertanam, Linux ringan dan disesuaikan, sesuai untuk persekitaran dengan sumber yang terhad.

Pengenalan: Mengamankan sempadan digital dengan penggodaman etika berasaskan Linux Di dunia yang semakin saling berkaitan, keselamatan siber adalah yang paling penting. Ujian penggodaman dan penembusan etika adalah penting untuk mengenal pasti dan mengurangkan keruntuhan secara proaktif

Kaedah untuk pembelajaran asas Linux dari awal termasuk: 1. Memahami sistem fail dan antara muka baris perintah, 2. Master arahan asas seperti LS, CD, MKDIR, 3.

Linux digunakan secara meluas dalam pelayan, sistem tertanam dan persekitaran desktop. 1) Dalam bidang pelayan, Linux telah menjadi pilihan yang ideal untuk menganjurkan laman web, pangkalan data dan aplikasi kerana kestabilan dan keselamatannya. 2) Dalam sistem tertanam, Linux popular untuk penyesuaian dan kecekapan yang tinggi. 3) Di persekitaran desktop, Linux menyediakan pelbagai persekitaran desktop untuk memenuhi keperluan pengguna yang berbeza.

Kelemahan Linux termasuk pengalaman pengguna, keserasian perisian, sokongan perkakasan, dan keluk pembelajaran. 1. Pengalaman pengguna tidak mesra seperti Windows atau MacOS, dan ia bergantung pada antara muka baris arahan. 2. Keserasian perisian tidak sebaik sistem lain dan tidak mempunyai versi asli banyak perisian komersial. 3. Sokongan perkakasan tidak begitu komprehensif seperti Windows, dan pemandu boleh dikumpulkan secara manual. 4. Keluk pembelajaran adalah curam, dan menguasai operasi baris arahan memerlukan masa dan kesabaran.

Linuxisnothardtolearn, butthedifficultydependsonyourbackgroals.forthosewithosexperience, shewhand-linefamiliarity, linuxisaneasytransition.beginnersmayfaceasterlepercurveButcananageWithPropenuSourcesources

Lima komponen asas Linux adalah: 1. Kernel, menguruskan sumber perkakasan; 2. Perpustakaan sistem, menyediakan fungsi dan perkhidmatan; 3. Shell, antara muka pengguna untuk berinteraksi dengan sistem; 4. Sistem fail, menyimpan dan menganjurkan data; 5. Aplikasi, menggunakan sumber sistem untuk melaksanakan fungsi.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

Dreamweaver Mac版
Alat pembangunan web visual

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini