cari
RumahTutorial sistemLINUXKuasai pengurusan memori Linux dan tingkatkan prestasi program anda!

Kuasai pengurusan memori Linux dan tingkatkan prestasi program anda!

Feb 13, 2024 pm 04:40 PM
linuxtutorial linuxsistem linuxarahan linuxskrip shellembeddedlinuxBermula dengan linuxpembelajaran linux

Linux, sebagai sistem pengendalian yang digunakan secara meluas dalam pelayan dan peranti terbenam, menduduki bahagian pasaran yang semakin meningkat. Dalam senario ini, pengurusan memori adalah penting kerana ia secara langsung mempengaruhi prestasi dan kestabilan sistem, terutamanya untuk pengaturcara. Bagi pengaturcara yang ingin membangunkan aplikasi berprestasi tinggi pada platform Linux, kemahiran dalam pengurusan memori Linux adalah satu kemestian. Hari ini kami akan memperkenalkan artikel yang harus dibaca oleh setiap pengaturcara: Pengurusan memori Linux.
Apa yang anda perlu tahu tentang bahagian ingatan:

  1. Pemetaan alamat
  2. Kaedah pengurusan memori
  3. Tiada pengecualian halaman

Mari kita lihat dahulu beberapa pengetahuan asas Dari perspektif proses, memori dibahagikan kepada dua bahagian: mod kernel dan mod pengguna Nisbah klasik adalah seperti berikut:

Kuasai pengurusan memori Linux dan tingkatkan prestasi program anda!
Dari mod pengguna kepada mod kernel biasanya dicapai melalui panggilan sistem dan gangguan. Memori mod pengguna dibahagikan kepada kawasan yang berbeza untuk tujuan yang berbeza:

Kuasai pengurusan memori Linux dan tingkatkan prestasi program anda!

Sudah tentu, mod kernel tidak akan digunakan secara sembarangan, jadi ia dibahagikan seperti berikut:

Kuasai pengurusan memori Linux dan tingkatkan prestasi program anda!

Mari kita lihat dengan lebih dekat bagaimana kenangan ini diuruskan.

Alamat

Proses pemetaan alamat dalam Linux ialah alamat logik –> alamat linear –> alamat fizikal adalah yang paling mudah: isyarat digital yang dihantar dalam bas alamat, manakala alamat linear dan alamat logik mewakili peraturan penukaran adalah seperti berikut:

Kuasai pengurusan memori Linux dan tingkatkan prestasi program anda!

Bahagian ini dilengkapkan oleh MMU, yang melibatkan daftar utama CR0 dan CR3. Apa yang muncul dalam arahan mesin ialah alamat logik, dan peraturan alamat logik adalah seperti berikut:

Kuasai pengurusan memori Linux dan tingkatkan prestasi program anda!

Alamat logik dalam Linux adalah sama dengan alamat linear, yang bermaksud bahawa Inter menjadikan perkara yang sangat rumit untuk keserasian, dan Linux memudahkannya menjadi malas.

Cara menguruskan memori

Apabila sistem but, ia akan mengesan saiz dan keadaan memori Sebelum membina struktur yang kompleks, adalah perlu untuk menguruskan kenangan ini dengan cara yang mudah. ​​Ini adalah bootmem, yang hanya peta bit, tetapi terdapat juga beberapa pengoptimuman di dalamnya.

Tidak kira betapa dioptimumkan bootmem, kecekapannya tidak tinggi Lagipun, ia perlu dilalui apabila memperuntukkan memori Sistem rakan boleh menyelesaikan masalah ini: secara dalaman menyimpan beberapa serpihan memori percuma dengan kuasa 2 ingin memperuntukkan 3 muka surat, Pergi ke senarai 4 muka surat dan pilih satu, peruntukkan 3 dan kemudian letakkan baki 1 kembali Proses pelepasan memori hanyalah proses terbalik. Gunakan gambar untuk mewakilinya:

Kuasai pengurusan memori Linux dan tingkatkan prestasi program anda!

Anda dapat melihat bahawa 0, 4, 5, 6, dan 7 semuanya sedang digunakan Jadi, apabila 1 dan 2 dilepaskan, adakah ia akan digabungkan?

static inline unsigned long
__find_buddy_index(unsigned long page_idx, unsigned int order)
{
    return page_idx ^ (1 

Seperti yang anda lihat daripada kod di atas, 0 dan 1 ialah rakan, dan 2 dan 3 ialah rakan Walaupun 1 dan 2 bersebelahan, mereka tidak. Pemecahan memori adalah musuh operasi sistem Mekanisme sistem rakan boleh menghalang pemecahan pada tahap tertentu Selain itu, kita boleh mendapatkan bilangan halaman percuma dalam setiap pesanan melalui cat /proc/buddyinfo.

Setiap kali sistem rakan kongsi memperuntukkan memori, ia adalah dalam unit halaman (4KB), tetapi kebanyakan struktur data yang digunakan semasa sistem berjalan adalah sangat kecil. Ia jelas tidak menjimatkan kos untuk memperuntukkan 4KB kepada objek kecil. Gunakan papak dalam Linux untuk menyelesaikan peruntukan objek kecil:

Kuasai pengurusan memori Linux dan tingkatkan prestasi program anda!

Apabila berlari, sapukan "borong" beberapa memori kepada rakan, proses dan potong menjadi kepingan dan "jual" secara pukal. Dengan aplikasi meluas sistem berbilang pemproses berskala besar dan sistem NUMA, papak akhirnya mendedahkan kelemahannya:

  1. Pengurusan giliran yang kompleks
  2. Menguruskan data dan storan baris gilir adalah mahal
  3. Barisan beratur separa yang panjang boleh menjadi sangat panjang
  4. Sokongan NUMA sangat rumit

Untuk menyelesaikan masalah ini, pakar telah membangunkan slub: struktur halaman diubah suai untuk mengurangkan overhed struktur pengurusan papak, setiap CPU mempunyai papak aktif setempat (kmem_cache_cpu), dsb. Untuk sistem terbenam kecil, terdapat lapisan simulasi papak, yang mempunyai lebih banyak kelebihan dalam sistem sedemikian.

小内存的问题算是解决了,但还有一个大内存的问题:用伙伴系统分配10 x 4KB的数据时,会去16 x 4KB的空闲列表里面去找(这样得到的物理内存是连续的),但很有可能系统里面有内存,但是伙伴系统分配不出来,因为他们被分割成小的片段。那么,vmalloc就是要用这些碎片来拼凑出一个大内存,相当于收集一些“边角料”,组装成一个成品后“出售”:

Kuasai pengurusan memori Linux dan tingkatkan prestasi program anda!

之前的内存都是直接映射的,第一次感觉到页式管理的存在:D 另外对于高端内存,提供了kmap方法为page分配一个线性地址。

进程由不同长度的段组成:代码段、动态库的代码、全局变量和动态产生数据的堆、栈等,在Linux中为每个进程管理了一套虚拟地址空间:

Kuasai pengurusan memori Linux dan tingkatkan prestasi program anda!

在我们写代码malloc完以后,并没有马上占用那么大的物理内存,而仅仅是维护上面的虚拟地址空间而已,只有在真正需要的时候才分配物理内存,这就是COW(COPY-ON-WRITE:写时复制)技术,而物理分配的过程就是最复杂的缺页异常处理环节了,下面来看!

缺页异常

在实际需要某个虚拟内存区域的数据之前,和物理内存之间的映射关系不会建立。如果进程访问的虚拟地址空间部分尚未与页帧关联,处理器自动引发一个缺页异常。在内核处理缺页异常时可以拿到的信息如下:

  1. cr2:访问到线性地址
  2. err_code:异常发生时由控制单元压入栈中,表示发生异常的原因
  3. regs:发生异常时寄存器的值

处理的流程如下:

Kuasai pengurusan memori Linux dan tingkatkan prestasi program anda!

发生缺页异常的时候,可能因为不常使用而被swap到磁盘上了,swap相关的命令如下:

swapon                        开启swap
swapoff                       关闭swap
/proc/sys/vm/swapiness        分值越大越积极使用swap,可以修改/etc/sysctl.conf中添加vm.swappiness=xx[1-100]来修改

如果内存是mmap映射到内存中的,那么在读、写对应内存的时候也会产生缺页异常。

在Linux中,内存管理是一个复杂的主题,但是如果程序员能够理解并充分利用它,他们可以极大地提高他们的程序的性能和可靠性。在本文中,我们介绍了Linux内存管理的基本知识、虚拟内存的概念、内存映射文件以及交换空间等。此外,我们还介绍了一些有助于程序员优化内存使用的技巧和工具。现在,不要再让程序的性能拖慢了你的项目,去掌握Linux内存管理吧!

Atas ialah kandungan terperinci Kuasai pengurusan memori Linux dan tingkatkan prestasi program anda!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:良许Linux教程网. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Apakah perbezaan dalam pengurusan akaun pengguna antara Linux dan Windows?Apakah perbezaan dalam pengurusan akaun pengguna antara Linux dan Windows?May 02, 2025 am 12:02 AM

Perbezaan utama antara Linux dan Windows dalam Pengurusan Akaun Pengguna adalah model kebenaran dan alat pengurusan. Linux menggunakan model keizinan berasaskan UNIX dan alat baris arahan (seperti UserAdd, Usermod, UserDel), manakala Windows menggunakan model keselamatan mereka sendiri dan alat pengurusan antara muka pengguna grafik (GUI).

Bagaimanakah persekitaran baris arahan Linux menjadikannya lebih selamat daripada Windows?Bagaimanakah persekitaran baris arahan Linux menjadikannya lebih selamat daripada Windows?May 01, 2025 am 12:03 AM

Linux'sCommandLineCanbeMoresecurethanWindowsifManageRageRly, ButrequiresmoreUsererknowledy.1) linux'sopen-sourcencenatureAllowsforquicksecurityupdates.2) MisconfigurationCanLeadTovulnerBility.WindowsoManCoManToReSonToReSonToReSonToReSonToReSonToRnoShoShoShoManToRn

Cara membuat pemacu usb dipasang secara automatik di linuxCara membuat pemacu usb dipasang secara automatik di linuxApr 30, 2025 am 10:04 AM

Panduan ini menerangkan bagaimana untuk melancarkan pemacu USB secara automatik di Boot di Linux, menjimatkan masa dan usaha anda. Langkah 1: Kenal pasti pemacu USB anda Gunakan arahan LSBLK untuk menyenaraikan semua peranti blok. Pemacu USB anda mungkin akan dilabel /dev /sdb1, /dev /sdc1, dll

Aplikasi silang platform terbaik untuk Linux, Windows, dan Mac pada tahun 2025Aplikasi silang platform terbaik untuk Linux, Windows, dan Mac pada tahun 2025Apr 30, 2025 am 09:57 AM

Aplikasi silang platform telah merevolusikan pembangunan perisian, yang membolehkan fungsi lancar merentasi sistem operasi seperti Linux, Windows, dan MacOS. Ini menghapuskan keperluan untuk menukar aplikasi berdasarkan peranti anda, yang menawarkan pengalaman yang konsisten

Alat Linux Terbaik untuk AI dan Pembelajaran Mesin pada tahun 2025Alat Linux Terbaik untuk AI dan Pembelajaran Mesin pada tahun 2025Apr 30, 2025 am 09:44 AM

Kecerdasan Buatan (AI) dengan cepat mengubah banyak sektor, dari penjagaan kesihatan dan kewangan ke bidang kreatif seperti seni dan muzik. Linux, dengan sifat terbuka, kebolehsuaian, dan keupayaan prestasi, telah muncul sebagai platfo utama

5 distro linux ringan terbaik tanpa GUI5 distro linux ringan terbaik tanpa GUIApr 30, 2025 am 09:38 AM

Mencari pengedaran Linux yang cepat, minimum, dan cekap tanpa antara muka pengguna grafik (GUI)? Ringan, distros Linux GUI-Less adalah sempurna untuk perkakasan yang lebih lama atau tugas khusus seperti pelayan dan sistem tertanam. Mereka mengambil lebih sedikit res

Cara Memasang Wain 10.0 dalam Pengagihan RedhatCara Memasang Wain 10.0 dalam Pengagihan RedhatApr 30, 2025 am 09:32 AM

Pelepasan Versi Wain 10.0 Stabil: Running Windows Applications di Linux ke tahap yang lebih tinggi Wain, sumber terbuka dan aplikasi percuma ini, membolehkan pengguna Linux menjalankan perisian dan permainan Windows pada sistem pengendalian UNIX/Linux, yang menyampaikan pelepasan versi stabil 10.0! Versi ini telah disediakan dengan kod sumber dan muat turun pakej binari, dan menyokong pelbagai pengagihan seperti Linux, Windows dan Mac. Edisi ini merangkumi satu tahun kerja keras dan lebih daripada 8,600 penambahbaikan, membawa banyak penambahbaikan yang menarik. Sorotan utama termasuk: Sokongan yang dipertingkatkan untuk peranti Bluetooth. Meningkatkan sokongan untuk peranti input HID. Prestasi optimum aplikasi 32-bit dan 64-bit.

Cara Memasang dan Mengkonfigurasi SQL Server di RHELCara Memasang dan Mengkonfigurasi SQL Server di RHELApr 30, 2025 am 09:27 AM

Tutorial ini membimbing anda melalui memasang SQL Server 2022 pada RHEL 8.X atau 9.X, menyambung melalui alat baris arahan SQLCMD, penciptaan pangkalan data, dan pertanyaan asas. Prasyarat Sebelum memulakan, pastikan: Versi RHEL yang disokong (RHEL 8 atau 9). Sudo

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa