Linux のメモリ管理をマスターして、プログラムのパフォーマンスを向上させましょう。
Linux は、サーバーや組み込みデバイスで広く使用されているオペレーティング システムとして、市場シェアを拡大しています。このようなシナリオでは、メモリ管理はシステムのパフォーマンスと安定性に直接影響するため、特にプログラマにとっては重要です。 Linux プラットフォームで高性能アプリケーションを開発したいプログラマーにとって、Linux メモリ管理の習熟は必須です。今日はすべてのプログラマが読むべき記事「Linux メモリ管理」を紹介します。
メモリ部分について知っておく必要があります:
- アドレスマッピング
- メモリ管理方法
- ページフォールト例外
まず基本的な知識を見てみましょう。プロセスの観点から見ると、メモリはカーネル モードとユーザー モードの 2 つの部分に分割されます。古典的な比率は次のとおりです:
ユーザー モードからカーネル モードへは、通常、システム コールと割り込みによって実現されます。ユーザー モード メモリは、さまざまな目的に応じてさまざまな領域に分割されます:

もちろん、カーネル状態は無差別に使用されるわけではないため、次のように分割されます。

######住所######
Linux 内のアドレスのマッピング プロセスは、論理アドレス –> リニア アドレス –> 物理アドレスです。物理アドレスは最も単純です。アドレス バスで送信されるデジタル信号であり、リニア アドレスと論理アドレスは変換を表します。ルール、リニアアドレス規則は次のとおりです:この部分は、メイン レジスタ CR0 および CR3 を含む MMU によって完了します。機械語命令に記載されるのは論理アドレスであり、論理アドレスの規則は次のとおりです。
Linux の論理アドレスはリニア アドレスと同じです。これは、Inter が互換性のために物事を非常に複雑にしているのに対し、Linux はそれを単純化して怠惰であることを意味します。

メモリ管理方法

システムが起動すると、メモリのサイズと状態が検出されます。複雑な構造を確立する前に、これらのメモリを簡単な方法で管理する必要があります。これは bootmem であり、単なるビットマップですが、いくつかのビットマップがあります。最適化のアイデア。
bootmem がどれほど最適化されていても、効率は高くありません。結局のところ、メモリを割り当てるときにそれを通過する必要があります。バディ システムはこの問題を解決できます。2 のべき乗サイズの空きメモリ フラグメントを内部的に保存するだけです。 3 ページを割り当てたい場合は、4 ページのリストから 1 ページを選択し、3 ページを割り当て、残りの 1 ページを元に戻すという、メモリ解放のプロセスはその逆のプロセスです。画像を使用してそれを表します:
0、4、5、6、7 がすべて使用されていることがわかります。では、1 と 2 がリリースされたら、それらはマージされるのでしょうか?リーリー
上記のコードからわかるように、0 と 1 はバディ、2 と 3 はバディであり、1 と 2 は隣接していますが、隣接していません。メモリの断片化はシステム運用の大敵ですが、バディシステムの仕組みにより断片化をある程度防ぐことができ、さらに cat /proc/buddyinfo で各オーダーの空きページ数を取得することができます。パートナー システムがメモリを割り当てるたびに、メモリはページ (4KB) 単位で割り当てられますが、システムの実行中に使用されるデータ構造のほとんどは非常に小さいため、小さなメモリに 4KB を割り当てるのは明らかにコスト効率が良くありません。物体。 。 Linux でスラブを使用して小さなオブジェクトの割り当てを解決します:

複雑なキュー管理

管理データとキューストレージのオーバーヘッドが大きい
- 長時間実行される部分キューは非常に長くなる可能性があります
- NUMA サポートは非常に複雑です
- これらの問題を解決するために、専門家はスラブを開発しました。ページ構造を変換してスラブ管理構造のオーバーヘッドを削減し、各 CPU にローカルでアクティブなスラブ (kmem_cache_cpu) を持たせるなどです。小規模な組み込みシステムの場合は、スラブ シミュレーション レイヤー スロブがあり、そのようなシステムではより多くの利点があります。
- cr2:访问到线性地址
- err_code:异常发生时由控制单元压入栈中,表示发生异常的原因
- regs:发生异常时寄存器的值
小内存的问题算是解决了,但还有一个大内存的问题:用伙伴系统分配10 x 4KB的数据时,会去16 x 4KB的空闲列表里面去找(这样得到的物理内存是连续的),但很有可能系统里面有内存,但是伙伴系统分配不出来,因为他们被分割成小的片段。那么,vmalloc就是要用这些碎片来拼凑出一个大内存,相当于收集一些“边角料”,组装成一个成品后“出售”:

之前的内存都是直接映射的,第一次感觉到页式管理的存在:D 另外对于高端内存,提供了kmap方法为page分配一个线性地址。
进程由不同长度的段组成:代码段、动态库的代码、全局变量和动态产生数据的堆、栈等,在Linux中为每个进程管理了一套虚拟地址空间:

在我们写代码malloc完以后,并没有马上占用那么大的物理内存,而仅仅是维护上面的虚拟地址空间而已,只有在真正需要的时候才分配物理内存,这就是COW(COPY-ON-WRITE:写时复制)技术,而物理分配的过程就是最复杂的缺页异常处理环节了,下面来看!
缺页异常
在实际需要某个虚拟内存区域的数据之前,和物理内存之间的映射关系不会建立。如果进程访问的虚拟地址空间部分尚未与页帧关联,处理器自动引发一个缺页异常。在内核处理缺页异常时可以拿到的信息如下:
处理的流程如下:

发生缺页异常的时候,可能因为不常使用而被swap到磁盘上了,swap相关的命令如下:
swapon 开启swap swapoff 关闭swap /proc/sys/vm/swapiness 分值越大越积极使用swap,可以修改/etc/sysctl.conf中添加vm.swappiness=xx[1-100]来修改
如果内存是mmap映射到内存中的,那么在读、写对应内存的时候也会产生缺页异常。
在Linux中,内存管理是一个复杂的主题,但是如果程序员能够理解并充分利用它,他们可以极大地提高他们的程序的性能和可靠性。在本文中,我们介绍了Linux内存管理的基本知识、虚拟内存的概念、内存映射文件以及交换空间等。此外,我们还介绍了一些有助于程序员优化内存使用的技巧和工具。现在,不要再让程序的性能拖慢了你的项目,去掌握Linux内存管理吧!
以上がLinux のメモリ管理をマスターして、プログラムのパフォーマンスを向上させましょう。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Linuxの学習は難しくありません。 1.Linuxは、UNIXに基づいたオープンソースオペレーティングシステムであり、サーバー、組み込みシステム、およびパーソナルコンピューターで広く使用されています。 2。ファイルシステムと許可管理を理解することが重要です。ファイルシステムは階層的であり、許可には読み取り、書き込み、実行が含まれます。 3。APTやDNFなどのパッケージ管理システムは、ソフトウェア管理を便利にします。 4。プロセス管理は、PSおよびTOPコマンドを通じて実装されます。 5. MKDIR、CD、Touch、Nanoなどの基本的なコマンドから学習を開始し、シェルスクリプトやテキスト処理などの高度な使用法を試してください。 6.許可問題などの一般的なエラーは、SudoとChmodを通じて解決できます。 7.パフォーマンスの最適化の提案には、HTOPを使用してリソースを監視すること、不要なファイルのクリーニング、SYの使用が含まれます

Linux管理者の平均年salは、米国で75,000〜95,000ドル、ヨーロッパでは40,000〜60,000ユーロです。給与を増やすには、次のことができます。1。クラウドコンピューティングやコンテナテクノロジーなどの新しいテクノロジーを継続的に学習します。 2。プロジェクトの経験を蓄積し、ポートフォリオを確立します。 3.プロフェッショナルネットワークを確立し、ネットワークを拡大します。

Linuxの主な用途には、1。Serverオペレーティングシステム、2。EmbeddedSystem、3。Desktopオペレーティングシステム、4。開発およびテスト環境。 Linuxはこれらの分野で優れており、安定性、セキュリティ、効率的な開発ツールを提供します。

インターネットは単一のオペレーティングシステムに依存していませんが、Linuxはその上で重要な役割を果たしています。 Linuxは、サーバーやネットワークデバイスで広く使用されており、安定性、セキュリティ、スケーラビリティに人気があります。

Linuxオペレーティングシステムのコアは、コマンドラインインターフェイスで、コマンドラインを介してさまざまな操作を実行できます。 1.ファイルおよびディレクトリ操作は、ファイルとディレクトリを管理するために、LS、CD、MKDIR、RM、その他のコマンドを使用します。 2。ユーザーおよび許可管理は、useradd、passwd、chmod、その他のコマンドを介してシステムのセキュリティとリソースの割り当てを保証します。 3。プロセス管理は、PS、Kill、およびその他のコマンドを使用して、システムプロセスを監視および制御します。 4。ネットワーク操作には、Ping、Ifconfig、SSH、およびネットワーク接続を構成および管理するためのその他のコマンドが含まれます。 5.システムの監視とメンテナンスは、TOP、DF、DUなどのコマンドを使用して、システムの動作ステータスとリソースの使用を理解します。

導入 Linuxは、柔軟性と効率性により、開発者、システム管理者、およびパワーユーザーが好む強力なオペレーティングシステムです。しかし、頻繁に長く複雑なコマンドを使用することは退屈でERです

Linuxは、サーバー、開発環境、埋め込みシステムに適しています。 1.サーバーオペレーティングシステムとして、Linuxは安定して効率的であり、多くの場合、高電流アプリケーションの展開に使用されます。 2。開発環境として、Linuxは効率的なコマンドラインツールとパッケージ管理システムを提供して、開発効率を向上させます。 3.埋め込まれたシステムでは、Linuxは軽量でカスタマイズ可能で、リソースが限られている環境に適しています。

はじめに:Linuxベースの倫理的ハッキングでデジタルフロンティアを保護します ますます相互に接続されている世界では、サイバーセキュリティが最重要です。 倫理的なハッキングと浸透テストは、脆弱性を積極的に特定し、緩和するために不可欠です


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

メモ帳++7.3.1
使いやすく無料のコードエディター
