2010年08月11日

メインメモリーの確保・解放とメモリーリーク

 プログラムが何かしらのデータを使用するとき、プログラムは「このサイズの容量が必要だから確保せよ」とOSに指示します。指定された容量のメモリー領域をOSが確保できたら、その領域を使用できるようになります。そして、プログラムがその領域を使い終わったら、今度は使い終わったことをOSに知らせます。すると、その使い終わった領域は、どのプログラムでも(OSに指示すれば)使用できるようになります。これをメモリーの確保に対して解放と呼びます。この流れを表したのが次の図です。
MemoryNewDelete.png

 これらの処理は、レンタサイクルに近いところがあるかと思います。自転車に乗りたいときには店から借りる(メモリーを確保する)わけです。乗りわったら店に自転車を返します(メモリーを解放する)。もし返し忘れると、他の人が自転車に乗ることができなくなります。
人気ブログランキング
 レンタサイクルと違うのは、メモリー確保の場合はPCのメモリーすべてがなくなるまで好きな量だけ確保できる(お金がかからない)ことと、解放するまでの期限がないことがあります。さらに、レンタサイクルの場合、自転車が盗まれたら買い足すことも可能ですが、メモリーの確保ではそれに相当する対策はありません。

 単に確保したデータを解放するというだけなのですが、プログラムは数万行もあり、しかも記号や英単語の複雑な羅列で、命令する順番なども非常に複雑なので、確保→解放という単純な順番も崩れるような場面が出てくるのです。

 このように、メモリーの解放処理が不足していることが原因で、解放されずに誰も使えない領域が出てきてしまう現象をメモリーリークといいます。

 OSにもよるのですが、起動してからすぐに終了してしまうプログラムの場合は、メモリーリークが問題になることはあまりありません。というのは、プログラムが終了した時点で、そのプログラムが確保していた領域をOSが自動的に解放してくれるためです。

 一方、ずっと動き続けていなければならないプログラム(サーバーなど)の場合、メモリーリークは深刻な問題です。正常に動いているように見えて、起動してから数日経過したらサーバーが止まってしまう……などという事件が起きたりします。
web拍手 by FC2
posted by 北条利彦 at 20:58 | Comment(0) | TrackBack(0) | データ記憶・保存 | このブログの読者になる | 更新情報をチェックする

2010年05月01日

ROM

 私見ですが、ROM(Read Only Memory)は2通りの意味で使われます。ひとつは、名前通り「読み取り専用記憶装置」という意味です。たとえばDVD-ROMというのは、読み取りしかできない、データ用のDVDのことです。このほかに、不揮発性の(電源を切ってもデータが消えない)半導体メモリーのことを指す場合があります。後者の意味では“Read Only Memory”という名前とは全く関係がなさそうに思えますが、技術の進歩の元をたどると、なぜこのような単語になったのかが分かります。

人気ブログランキング


 当初、半導体メモリーといえば揮発性のRAM(Random Access Memory)と不揮発性のROMでした。これら2つを用途によって使い分けるわけです。

 コンピューターを出荷してから、一度も書き換えなくても良いデータというのもそれなりにあるので、そういう部分にはROMが使用されていました。しかし、それでも書き換えられないというのは不便なものです。そこで、ROMに似通った技術を使って、1度だけ書き込むことのできるメモリーや、書き換えが可能なメモリーが作られていきます。これらの書き込みができるメモリーにもROMという名前がついているのがややこしいところです。「読み取り専用のメモリーだからROM」という名前なのではなく、「ROMと名前のつけたデータ記録技術」だと納得するしかないと思います。ROMと名をつけた技術が、技術の進歩によって名前に反する技術になっていったわけです。

 1度だけ書き込みができるROMというのが、PROM(Programable ROM)です。プログラムというのは、その他の一般的なデータとは違い、一度作ってしまえば内容を更新しなくても使えるものです。そうやってPROMの名前を覚えるのが良いかと思います。もっとも、現実には、プログラムを作った後でバグが発覚するなどして更新の必要が出てくることはあります。

 1度だけの書き込みというのも不便ですから、今度はデータ書き換え可能なROMというのが出てきます。これがEPROM(Erasable PROM)です。“Erasable”という名前は「消去可能」ということを意味します。「書き換え」と「消去」では言葉自体の意味は異なりますが、ソフトウェア的には同じ意味です。“0”や“1”のデータが意味のある並びになっているのが普通のデータですが、これを消去するというのは、“0”や“1”をバラバラに書き込むことであったり、すべて“0”にするという操作を意味します。つまり、書き換えと同じことです。

 EPROMは書き換えができるから、もう十分だろう……というと、そうではありません。書き換えはできても、一度に全部を書き換えることしかできません。そこで、部分的に消去できるROMというのが出てきます。これがEEPROM(Electrically EPROM)です。Electricallyはもちろん、「部分的に消去可能」という意味ではありません。「電気的に消去可能」という意味です。EPROMは紫外線で消去していたのですが、EEPROMは電気で消去するため、この名前です。

 さて、EEPROMで部分消去可能になりましたが、さらに技術は進歩していきます。EEPROMよりも高速に書き換えが可能なフラッシュメモリーの登場です。素早く書き換えができるのは非常に便利なようで、今はフラッシュメモリーがいろいろなところで使用されています。フラッシュメモリーは、USBメモリーや、iPodに使用されていることが有名です。

 この記事で書いたROMを以下にまとめます。

元祖ROM …… 工場出荷時に書き込まれる。ユーザーが書き込むことは不可能。
PROM  …… 1度だけ書き込み可能。
EPROM …… 紫外線で消去可能(一度に全消去)
EEPROM …… 電気的に消去可能(全消去、部分消去)
フラッシュメモリー …… 電気的に消去可能(全消去、部分消去)、高速
web拍手 by FC2
posted by 北条利彦 at 09:13 | Comment(0) | TrackBack(0) | データ記憶・保存 | このブログの読者になる | 更新情報をチェックする

2010年01月11日

データの圧縮

概要

 今回は記事名の通り、データの圧縮について書きます。

 まず、データを圧縮してから、再びそのデータを使用するまでには、下図の手順を踏みます。これは、どのような圧縮形式でも同じです。手順といっても、圧縮してデータのサイズを小さくして、展開して元に戻すだけです。

 圧縮すると、サイズの小さい圧縮されたデータが得られるので、この状態のまま保存しておけばディスク容量の節約になります。また、ネットワークのアップロードやダウンロードには時間がかかることが多いですが、圧縮されたデータを転送する場合なら、通信にかかる時間は大幅に短くなります。

Compress.png

可逆圧縮と非可逆圧縮

 圧縮方法の分類はいくつかあるのですが、その中に「可逆圧縮」と「非可逆圧縮」というものがあります。

 可逆圧縮というのは、圧縮前のデータと、一度圧縮して、復号されたデータが完全に一致するものです。これにはLZHやZIPなどがあります。

 一方の非可逆圧縮は、圧縮前のデータと復号されたデータが完全には一致しませんが、その代わりに、可逆圧縮に比べて圧縮されたデータのサイズが非常に小さくなります。大概のファイルは少しでもデータが変わってしまうと正常に読み込めなくなるものですが、音声や画像や映像のデータは音質や画質がいくらか落ちても大きな問題はありません。それを利用して、圧縮しやすいようにデータを少し変更してから圧縮を行うのが非可逆圧縮です。

圧縮・展開の操作

 概要のところで、圧縮することと展開することが必要なのはどのような圧縮形式でも同じだと書きました。このことは間違いないのですが、ソフトウェアや圧縮形式によって、データを圧縮・展開する操作を人が行う必要があるものと、ファイルを保存するときにソフトウェアが自動で圧縮してくれるものがあります。

 JPEGやPNGなどの画像の圧縮形式や、MPEGなどの動画の圧縮形式では、それらを編集するソフトウェアで保存すると、自動的に圧縮を行ってくれます。展開も、ファイルを開いたときにソフトウェアが自動的に行います。つまり、これらの圧縮形式は、普通にファイルを保存したり開いたりするだけで、ソフトウェアが勝手に圧縮・展開してれるわけです。

 一方、Wordの文書をLZHやZIPで圧縮するときは、パソコンを使う人が圧縮の操作する必要があります。実際にやることは簡単で、圧縮解凍ソフトで圧縮したいファイルを開くだけです。LZHやZIPを開くときも、圧縮ファイルを展開する操作を人が行って、ようやく展開されて出てきたファイルを開けるようになります。

二重圧縮

 JPEG画像をLZH圧縮するなど、既に圧縮されている画像をさらに圧縮した場合、ファイルサイズはほとんど小さくなりません。場合によっては、逆に大きくなる可能性もあります。

 これはちょうど、ふとんの圧縮と同じようなものです。普通の状態のふとんは空気を多く含んでいるので、圧縮袋に入れて圧縮すればかなり小さくなります。しかし、既に圧縮したふとんを、圧縮袋ごと別の袋に入れて圧縮しても小さくなりませんし、逆に、圧縮袋を重ねる分だけ大きくなる可能性があるわけです。

人気ブログランキング
web拍手 by FC2
posted by 北条利彦 at 10:32 | Comment(0) | TrackBack(0) | データ記憶・保存 | このブログの読者になる | 更新情報をチェックする

2009年08月21日

仮想記憶(仮想メモリー)とは

 Windows XPを使っていると「仮想メモリが不足しています」という警告が表示されることがあります。この仮想メモリーについて書きます。

 仮想メモリーの説明をする前に、まず非常に重要な事実を3つ挙げます。

  • データを記憶するためにメインメモリーとハードディスクがパソコンに搭載されている
  • メインメモリーの容量は小さいが、データの読み書き速度は高速
  • ハードディスクの容量は大きいが、データの読み書き速度は低速

 人が何か操作をしたとき即座に応答してほしいので、使用中のデータはできるだけ、メインメモリーに格納しておきたいところです。したがって、実行中のプログラムや、そのプログラムが使っているデータはメインメモリーに格納しておきます。メインメモリーは容量が小さいので、それ以外のデータは基本的にメインメモリーには格納せず、ハードディスクに格納しておきます。

 メインメモリーに記憶する情報はその程度なのですが、それでもメインメモリーが不足することは多々あります。そうなると、それ以上はプログラムを起動できず、既に実行中のプログラムが新たなデータを処理することもできなくなります。

VirtualMemory2a.png


 そうなってしまうと困るので、メインメモリーの領域が不足したら、メインメモリー上にあるデータの一部をハードディスクに移します。

VirtualMemory2b.png


 するとその分だけメインメモリーに新たな空きができるので、プログラムは処理を継続できるようになります。

VirtualMemory2c.png


 これらの図のように、メインメモリーの容量が不足すると、一部のデータをハードディスクに移してメインメモリーの空きを作ります。逆に、ハードディスクに退避したデータが必要になった場合は、メインメモリーにあるデータと、退避しているデータを交換します。

 このように、メインメモリーなどの高速小容量のメモリーが不足したときのために、退避先としてハードディスクなどの低速大容量のメモリーを使う仕組みのことを仮想メモリーと呼びます。

 さて、ここで問題になるのは、メインメモリー上のデータを処理することに比べて、ハードディスクにデータを書き込むことは非常に時間のかかることです。

 待避したデータが少ないときは、アクセスしたいデータがメインメモリー上にある可能性が高いので、たまに処理が遅くなる程度で済みます。メモリー不足でプログラムがエラーになるよりマシなので、処理がいくらか遅くなっても大目に見ようというわけです。

 待避したデータが多くなるほど、アクセスしたいデータがハードディスク上にある可能性が高くなります。そうなると、ちょっとした処理でハードディスクにアクセスすることが多くなり、コンピューター全体の処理が遅くなってしまいます。

 結局はバランスの問題なのですが、ハードディスクに待避できる容量を制限し、極端な速度低下を防ぐようになっています。

 すると、あまりに多くのデータを処理しようとすると、メインメモリーの容量も退避先の容量も不足し、プログラムの動作に差し支えるようになります。冒頭の「仮想メモリが不足しています」というメッセージは、そのような状態になったという警告です。

人気ブログランキング
web拍手 by FC2
posted by 北条利彦 at 23:05 | Comment(1) | TrackBack(0) | データ記憶・保存 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。