回答受付が終了しました

ID非公開

2021/1/21 14:14

22回答

Linuxのswapとは何ですか?

Linux系11閲覧

回答(2件)

0

日本語で言うと仮想記憶と呼ぶ機能があります。 主記憶装置(メインメモリー)が不足する場合(不足する恐れがある場合) 補助記憶装置(HDD,SSDなど)を代用する仕組みです。 平易に言えば、「今言われても覚えていられないからメモするよ」 という感じの仕組みを、より大規模に強力に行う機構です。 その実際の処理において、ある番号を与えられたメモリーの一区画を HDDなどの一区画と入れ替えるためswapと呼ばれます。 またページングという言葉もありますが、違いの説明は割愛します。 (わかりやすく語弊なく正確に説明することは難しいからです) UNIXや、もっと巨大なコンピューターでの仮想記憶の歴史は 調べるのも面倒くさいものなので割愛しますが パソコンでは、1990年代のOS/2やWindowsなどで 広く使われるようになりましたが、どこから実装されていたのかは よくわかりません。MS-DOS自体には無かった仕組みです。 大多数の当時のパソコンユーザーは、気づいたら それを備えたOSがあったわけですが、ほとんどは UNIXなどの知識は無く、仮想記憶の歴史も知りません。 逆に、OSがマルチタスクに対応したことによって メモリーの過不足を、効率的に管理する必要があり 高度なメモリー管理の仕組みが実装されたわけですが 必須と考えられたのは2000年代くらいまでで 2006年に64bit CPUがパソコンで一般化し その後数年で、メモリーを4GBや8GB搭載し 足りなくなりにくくなり、仮想記憶はオフにしたほうが… といった主張も出てくるようになりました。 私も数年16GBのメモリーがある環境なので 通常それを使い果たすことがなく 仮想記憶は必須では無くなっています。 仮想記憶は、メモリー不足自体を解消しますが HDDはメインメモリーに比べて絶望的に遅く 速いと言われているSSDも、メインメモリーと比べれば かならず、かなり遅い代物であり続けています。 通常の仕様表で使う単位が違うので CPUのメモリーアクセスの速度と SSDの速度を比較するのはめんどうくさいんですが 数年前のi7-8700のメモリーが42GB/sとする記事をあてにしますが "NVMe 速度"でググると、出てくるのは1730MB/s これが、SATA SSDと比べればかなり速いんですが 数年前のCPUのメモリーアクセスは、その数十倍速いのです。 ですからメインメモリーが42GBあれば CPUは40GBのデータを1秒で処理ことができます。 (HDD,SSDに対する読み書きの無い処理の場合←普通無い) メモリーが2GBしかなくて、仮想記憶にNVMe SSDを使ったら 少なくとも二十数秒かかります。 実際には、入れ替えは読み出しと書き込みを行うので 五十秒はかかるはずですし、OS自体がそのSSDに入っていれば OSやアプリケーションなどのためのアクセスとかち合うことになり さらに速度は遅くなります。 実際にはメインメモリーの十倍もの仮想記憶を使うなど 通常ありえない話ですが、1GBの仮想記憶利用でも 全体の性能を、著しく妨げることがあるのです。 ゆえに、メモリーが足りるように増設するのが理想となっています。 Linux系OSは、古いPCの再利用目的での導入も盛んですが 知名度の高いUbuntuは2GB程度のメモリーでは足りないと言われていて 軽量のXubuntuなどでも、1GBは無いと厳しくなっています。 OSを軽量化しても、セキュリティ対応を含むアプリケーションの肥大化 コンテンツの肥大化によって、10年前と同じメモリーではなりたちません。 ただし、Linuxカーネルにはzramという機能も用意されているので Ubuntuなどではzram-configパッケージを追加するだけで 手軽にzram機能を使うことができますし 軽度のメモリー不足を、HDDに対する仮想記憶より 良好に緩和できる場合があります。 私もUSBメモリーにインストールして さまざまな実験機で動かすことを想定したXubuntu環境には zramを有効にして使っています。 これはUSBメモリーは書き換えの耐久性の低さから 仮想記憶に使うべきでは無いためでもあります。 具体的な運用管理については、Linux系OSでもいろいろ違いはあり Ubuntuなどは、最近はswapパーティションを廃止し swapファイルを作成するという運用に切り替わっています。 (Windowsでもそういった運用が行われています) 管理のためのコマンドや基礎知識を身に着けていれば メモリー512MBのPCで起動し、起動済み次第 内蔵HDDにあるWindows用のパーティションに swapファイルを作って、仮想記憶を有効にするようなこともできます。 OSの再起動無しに、わりと気軽に仮想記憶を追加したり 複数のHDDに割り当てたり、逆にとりはずしたりできるようになります。 ただ、関連したまとまった情報がどこにあるかは知りませんし UbuntuとArchの違いの大きさを理解する必要はありますが Arch LinuxのWikiは、有力な情報源になるんじゃないかと思います。 https://wiki.archlinux.jp/index.php/%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97

0

Windowsのページファイルと同じ目的の物です。立ち上げたプログラムの総メモリー容量が実メモリーに入りきらないプログラムをswapファイル上に持ちます。