「物理学のための計算機とオープンソース」の版間の差分
削除された内容 追加された内容
→計算機との情報伝達手段: 誤字、また「ただ2通りだけの信号を用いて英語のアルファベットを 表現する方法を表わしている」とモールス符号を説明しているが、モールス符号は可変長符号なのでこの説明は甚だ不適切で2進機の説明をより適切な例に置換える必要がある。 タグ: 2017年版ソースエディター |
近視眼的な推敲。ところで、近年では数値計算はFORTRAN一辺倒でもないような気がしている。 |
||
2 行
----
==始めに==
この文書は、理学系の学部を卒業した
考えた場合の教科書の役割を果たすものとして
また、計算機そのものに興味は無くとも研究の手段として計算機に関わる
必要が出来、それに関する知識を得たいと考える
この文書では、出来る限り計算機科学の原理的な部分も扱っていきたいと考えて
いる。しかし多くの部分はすでに完成しているプログラムの使い方だけを示して、
その原理にまでは
計算機の関係を表わしてもいる。例えば、現在ではFortranによる数値計算は
物理研究に
コンパイラを
物理学者はコンパイラをブラックボックスとして扱い、それによって物理的な
結果を得ているのである。
28 行
それらの原理や設計の思想を出来る限り紹介して行きたい。
また、コンパイラの中でも構文解析と呼ばれる部分は、計算機を扱う上で
いろいろな部分で
==計算機との情報伝達手段==
49 行
まず、メモリとCPUだけからなっている理想的な計算機を
考える。ここで、メモリはそれぞれの部分が0と1だけの情報を
ものであり、CPUは加算、減算などの処理をすることが出来る電子回路であるとする。
実際にはメモリとCPUの実際の設計は計算機科学というよりも工学部の特に
電気電子系で扱われることが多い内容であり、その詳細には
直観的にはメモリはただ2つの量子状態からなる電子スピンのようなものを
想像し、CPUに関しては、AND回路やOR回路が標準的な仕方で
ものを想像すればよい。例えば、2進数の1桁の数に対する加算回路を考えてみる。
このとき、2進数の1桁の数は0と1のみであり、これらの足し算の結果の
1桁
:{| class="wikitable"
| +
71 行
が得られる。これは回路としてはXOR回路と呼ばれる回路であり、
ある回路によって作ることが出来ることが知られている。
更に、1桁
2桁めの数値を計算する回路も考えてみる。このとき、2桁めの数値は、
:{| class="wikitable"
97 行
さて、ここまでで計算機に命令と命令を実行するのに必要なデータを与える
手段が分かった。理想的にはここからの話で、CPUへの命令は全てモールス信号的な
2進数の信号で行なわれており、2進数
行なっているとしてもよい。しかし、それはあくまでも実用的に役立つ
文書を作るという本来のこの文書の目標に反している。例えば、
文書の執筆を行なうという大事業を2進数で
ASCIIコードも全て手作業で2進数に直さなくてはならないし、
漢字が加わると更にその作業は難度を増す。
114 行
それについては個々のCPUメーカーの作る文書を読むしかその内容を知る
方法は無い。しかし、実際にはそれでは問題が生じて来る。
あるソフトウェアをあるCPU向けに
あるそのCPUが理解できる命令の集まりとなっている。
このソフトを、他のCPUに対しても使いたいと思ったとしよう。
このとき、CPUごとに
このことは、そもそもCPUごとの命令に定まった意味が無く、信号ごとの意味の
当てはめ方が任意であったことを考えると、全く当然のことと言えるのだが、
それでも、1つのCPUに対して
2進数プログラムに全く互換性が無いとすると、それぞれのCPUに対して
全く別のプログラムを書くことをしなければならず、このことは非常に大変な
作業になると考えられる。
実際にはこの問題は、CPUに対してだけに留まらない。昨今ではそれぞれの
機器、例えばハードディスクやサウンドカードなどが
それぞれが個別の命令の体系を持っており、それら自身もある程度それを
作るメーカーに信号の受け方を決める権限が任されている。
164 行
別の統一された名前を与え、それらの名前だけを用いてプログラムを作製する
ことである。このことは実際にはコンパイラに関する話題とも密接に関係する
のだが、つまり、そのような名前をある文法にしたがって
プログラムをより汎用的な形で書くことが出来るのである。
もちろん書き上げたプログラムを2進数のプログラムに変換する簡単な方法が
ないのなら、これは全く無意味な事であるが、
幸いにもそのような作業を行なうプログラムが実際に
知られており、また広く流通してもいる。このような抽象化された
名前によって作られたプログラムを、あるCPUに向けた2進数プログラムに
プログラムをコンパイラと呼ぶのである。
しかし、このことはある機器が持つ標準的でない機能はコンパイラを使って
185 行
これは、例えばハードディスクに対する命令を抽象化することを
考えてみるとわかりやすい。ハードディスクはその中に磁気的なしくみで
する機能を持っている
writeするという言葉で抽象化することが出来るのである。
もちろんreadやwriteという言葉は人間にとって直観的に意味が把握でき
便利
もっと分かりづらい名前にしてもよいのである。例えば、readは英語であるが、
これを日本語にしたり、別の言語にしたり、何の意味も持たない文字の羅列と
してもよい。ただ、コンパイラとそれを用いる人間の間に共通の情報であれば
それで用は足りているのである。
実際には、ハードディスクが扱える0と1の情報を用いて人間に
分かり易い仕方で情報を
例えば、昨今どのような計算機においても用いられているツリー状の
ディレクトリ構造も計算機に分かる仕方でそれを構成するのは、例え
202 行
これ以降どのようなファイル構造が主流になるかは、今の時点では
よく分からないといえる。このように計算機の機能を用いて、
情報を
一分野となっている。また、この部分は実際のOSメーカーの力も強く
アカデミックな研究とメーカーとの距離が近い分野であるといえよう。
208 行
上ではread(),write()の命令を持っている機器としてハードディスクを
記憶装置だけにとどまらない。実際にはグラフィックカードやサウンドカードも
このような命令を持っているのである。例えば、Linuxの重要なサウンドカード
を扱う命令群に[[w:
があげられるが、そのコードの中には各々のメーカーのディレクトリがあり
それぞれのメーカーの機器の命令を抽象化するようなread命令とwrite命令が
226 行
ある定まった形式のデータを送り込む命令である。このデータは
サウンドカードによって音楽を表わすデータと解釈され、それが本物の
音楽であるなら音楽を
ノイズを
計算機上に
知るのは困難だが、各々の形式のデータを扱う音楽プレーヤーそれぞれの
仕方で圧縮されたデータを元のデータに変換しそれを用いて音楽を
行なわれるにしても、計算機の側からはその機器は
通常の記憶装置の一種にしか見えないというやや非直観的な側面を持っている。
241 行
特許が取得されている場合があり、そのような場合はこれらの情報を
容易に用いることは出来ず、必ず特許取得者に対して何らかの額のお金を
払わなくてはならない。このことは
観点から当然視されているが、あまりにも特許の内容が簡単な事であり
その特許の適用範囲が広大である場合には、その特許を守ること自体が
研究の進行を
なることが起こることもあり、そのような場合について様々な議論が
かわされているようである。
301 行
そのような事は既に設定されていることが普通なので、
ここからはそのような機能が既に得られているとする。
一方、計算機からユーザーに対しても文字を表示したり音楽を
様々な方法が考えられる。ただし、特に音楽や動画については現時点では
OSごとに移植性が無い場合も多く、今後の発展が期待されるところである。
321 行
やや難しい場合が多い。例えば、OSによっては標準的な仕方でグラフィックカードを
動かせるとは限らないし、動かせたとしてもそれに対応するライブラリが存在するとは
限らないのである。ライブラリが無いときにはそれを
それには通常多くの人手や予算がかかり、実際にそれを行なうのは困難であることが
多いのである。しかし、幸いにしてそのようなライブラリ等の問題を
330 行
その間には互換性がないということである。それぞれのグラフィックライブラリは
製造元も発生の歴史的経緯も異なっているため、これらに互換性が無いのは
当然であるが、昨今ではLinuxが用いている
グラフィックライブラリを様々なOSに移植する計画が進んでいる。
Mac OS Xに対する[[w:Xdarwin|Xdarwin]]と呼ばれるプロジェクトはこの一種である。
ただし、実際には移植はただ一度だけではすまず、ライブラリが新機能を
加える
どのような仕方でこのプロジェクトが進行していくかは今の時点では分からない。
このように、GUIは様々な問題をかかえているが、特に初心者向けの
374 行
それ以上に詳しく知ることが許されないものでもあり、あまり一般的な事は
知ることが出来ないのが現状である。一方、実験で得たデータを
加工する技術は計算機技術の一種としても非常に
またコンパイラの理論との関連にも興味
詳しく述べたいと思う。
393 行
方法である。
ただし、OSの種類によってはそのような機能をサポートしていないことがあり、
やや移植性に
まず第1に、外部プログラムのコードを自分が作成したコードの中から直接
呼び出す方法がある。つまり、自分が作成したコードが外部プログラムの
439 行
プロセス間通信とは複数のプロセスの間でデータの電送を行なう手法の
ことである。これは、実際にはある計算機で動いている2つのプロセスの
間だけでなく、他の計算機で動いているプロセスに対してもお
統一されていればデータを送ることが出来る。例えば、Webサーバーなどは
この仕組みを用いて作成されている。
445 行
プログラムの設計上重要となるものと思われるが、実際にはそのような仕組みを
採用しているプログラム自体が少ないため、あまりどの仕組みが重要なのかは
ソケットについて説明する。ソケットは、プロセス間通信の規格の1つであり
現在では数多くのOSにおいて使用可能となっている。
ソケットの仕組みは、OSのメモリ上にある領域を作成しておき、
その地点で2つのプロセスから来る信号を
ここで、2つの信号がうまくであったならその2つの信号を発した
プロセス間にデータを送受信するトンネルを開いて、各々の間で
468 行
この手法が使えるOSを用いている場合はもっとも手軽な方法である。
ここで、プロセスを生成する方法を見るために、プロセス管理の手法を
通常、OSは複数のプロセスを管理するためにプロセステーブル
と呼ばれる表を持っている。プロセス生成を行なうためには、
482 行
====概説====
理論的な研究手法に役立つ計算機技術の1つとして、計算機代数を
ものであることが多いが、その構成自身も非常に興味
多く、ここでは
計算機によって数式を扱うことは、計算機によって通常の数を扱う場合とは
やや異なった性質を
数に対する四則演算は、CPU自体がそのような命令を持っていることが普通であり、
そのような手法を利用者はいかなる意味でも書き下すことは無い。
589 行
プログラムは通常何らかのデータを他の形に加工するために作製されるため、
データの処理は常に必要となる。もちろんこの分野はアカデミックな研究分野としても
重要と思われるのだが、
ここでは、データの扱い方を
ここでいうデータは、
625 行
====正規表現====
[[w:正規表現]]とは次の規則で生成される文字列のことである。
(1)用いたい文字を全て導入し、それらを<math>a _1</math>,<math>a _n</math>とする。
(2)それらの任意の並びを文字列と呼ぶ。
(3)更に、ある文字列が任意の回数だけくり返されてできる文字列も
|