この時代、あなたの携帯端末はどんどんアップグレードされて良くなっていきます。 私たちは一貫して、メモリ部門で (実際に必要な量以上に) アップグレードを受け続けてきました。 以前の特集「どのくらいの RAM が多すぎるのか」をお読みいただければ、スマートフォンがシームレスに動作するために実際に必要な RAM の量がわかり、それを超えるとただのオーバーキルです。
今の時代、あなたの携帯電話が遅れたり遅くなったりする場合は、アップグレードが必要かもしれません。 しかし、なぜ、そしてより重要なことに、それがどのように起こっているのか不思議に思ったことはありませんか? この特集では、これがどのように起こるのかをDeCodeします。 そして、より多くの。 読み進めてください!
なぜ私たちの世界は RAM を中心に回っているのか
Androidオペレーティング システムの中心には、Linux カーネルがあります。 新しいアプリケーションを起動するたびに、Linux の内部にプロセスが作成されます。 プロセスは、カーネルが異なるアプリに割り当てる可能性のあるすべての異なるリソースを担当するようになります。 CPU 時間、入出力プロセス、および RAM はすべてリソースと見なされます。
CPU 時間と I/O は、ほとんどの場合、無限のリソースと見なされます。 CPU がビジー状態で、新しいタスクを実行する場合、そのタスクもその CPU 時間のスライスを取得します。 タスクが実行されることは確かですが、CPU時間に過負荷がかかっているため、遅延する可能性があります。 同様に、CPU の負荷が低い場合は、タスクの実行が少し早くなるかもしれません。
I/Oの場合、大きなファイルをダウンロードしたり、内部ストレージに何かを書き込んだり、他の処理を同時に行うと、完了が遅くなることがありますが、いずれは完了するでしょう。 それは有限です。 RAM を使い切った場合、少し待てば RAM が解放されるような魔法はありません。 したがって、Android と Linux は、この制限に取り組むためのシステムを必要としていました。
スマートフォンの RAM はどのように機能するか
デバイスでアプリケーションを起動すると、新しいプロセスが起動し、Linux カーネルに、アプリケーションをロードするだけで(たとえば)「X」の量の RAM を必要とすることが要求されます。 その後、アプリはさらにファイルをロードしたり、インターネットから何かをダウンロードしたりするために、さらにメモリを要求することがあり、Linux カーネルは必要なメモリを提供します。 このように、基本的な RAM の委譲が行われます。
お使いのデバイスには、空きメモリとは異なる利用可能なメモリのプールがあります。 利用可能なメモリとは、実際には、スワップなしで新しいアプリケーションを開始したり、他のアプリケーションを処理したりするために利用可能なメモリのことです。 マルチタスク オペレーティング システムでは、メモリがアイドル状態であるため、空きメモリは悪いことです。例えば、空きメモリは、ファイル I/O やネットワーク I/O のキャッシュの改善に使用したり、その余分なメモリを有効に活用できる他のプログラムに与えることができます。 同時に、それは利用可能なメモリとしてマークされています。 したがって、任意の時点で、バッファまたはキャッシュとしての使用を停止し、プロセスによって利用することができます。
4GB RAM デバイスでは、メモリの一部がハードウェア ドライバーによって使用され、一部が Android によって使用されます。 新しいシステムを再起動した後に利用可能な残りのメモリは、約 1.7 GB になります。 アプリが起動すると、デバイスは利用可能なメモリを見て、プロセスに使用するいくつかのチャンクを提供します。
実際には、メモリをページに分割し、1 ページは約 4 KB です。 これらのページは、必要に応じて、システムによって異なるプロセスに委任されます。 メモリが豊富にあれば、すべてのプロセスは問題なく動作します。 しかし、アプリの数が増えるにつれて利用可能なメモリが減少すると、何らかの問題が発生し始めます。 ある時点で、新しいプロセスを開始するのに十分な利用可能なメモリがなくなります。 この問題に対処するために、スワッピングを行うか、アプリを終了させてメモリを解放する。 スワッピングの概念はサーバーやデスクトップから得ている。 メモリが足りないとき、現在RAMにあるアクティブなメモリの一部を取り出して、ハードディスクに書き出すことができるのです。 そうすることで、そのブロック/ページのメモリを解放することができます。 その後、そのページが再び必要になった場合は、ハードディスクから取り戻すことができます。 しかし、Androidは少し違っていて、ハードディスクにメモリを保存しません。
AndroidはZRAM(Unix用語で「Z」は圧縮RAMのシンボル)を使用します。 ZRAMスワップは、メモリページを圧縮し、メモリの動的に割り当てられたスワップ領域に置くことで、システムで利用可能なメモリ量を増やすことができます。 その圧縮されたメモリに何かが書き込まれると、アクセスできなくなり、どこかZIPファイルのような状態になる。 もしそれを使いたければ、圧縮を解き、メインメモリに書き戻す必要がある。 この作業がスワップアウトとスワップバックです。 この永遠に続くスワッピングのサイクルを「スラッシング」と呼びます。 Android は、飽和状態になると、つまり、スワップするためのスペースがなくなると、プロセスの強制終了を開始するだけなので、スラッシングの問題はありません。 そのアプリが使用していた領域が解放され、新しいアプリまたは既存のアプリが拡張するための領域が利用可能になります。 すべてのアプリは、アプリがバックグラウンドに入ると二度と開かなくなる可能性が常にあるように設計されています。 そのため、現在の状態は保存されます。
アプリを再び開くと、再読み込みされます。 時々、このプロセスはシームレスではありません。 たとえば、ゲームをプレイしていた場合、中断したところから開始されず、同じレベルから開始されるかもしれません。 このような状況にアプリがどのように対処するかは、アプリとそのアプリを書いた人によります。 より大きなメモリを必要とする場合、複数のプロセスが停止される可能性があります。 だからRAMが多いほうがユーザーから見て望ましい。 スワップするタイミングとかニュアンスは全てややこしいけど。 しかし、スマホに負荷がかかると、スマホの動作を維持し、フリーズしないようにするために、いくつかのアプリをキルすることになります。 Killingは基本的に必要悪で、Androidのシステムで採用されています。 このような記事がもっと来るのを楽しみにしていてください。 それでは、またお会いしましょう!