そういうわけでは Old_PC_User 2003/08/23 00:08:23 ├MS-DOSやWindows95/98/Meが、CPUとして、ほ... Old_PC_User 2003/08/23 00:18:37 │└ここで、x86といっていますが、 Old_PC_User 2003/08/23 00:21:55 ├8086/8088(MS-DOS)や80286(Window3.1など... Old_PC_User 2003/08/23 00:46:32 │├8086/8088(MS-DOS)や、80286(Windows3.1な... Old_PC_User 2003/08/23 00:54:46 │├一方、 Old_PC_User 2003/08/23 01:03:17 │├さらに、UNIXやLinuxの世界では、 Old_PC_User 2003/08/23 01:08:44 ││└「オフセット」だけで、 Old_PC_User 2003/08/23 10:06:14 │└C/C++では、整数データのサイズも、16ビット... Old_PC_User 2003/08/23 01:16:25 │ └floatやdoubleといった実数型は、常に、 Old_PC_User 2003/08/23 01:18:37 ├WindowsやLinux,NetBSDなどにおける、ハード... Old_PC_User 2003/08/23 10:01:04 │├Windowsは別として、LinuxやNetBSDの場合、... Old_PC_User 2003/08/23 10:16:27 │├MS-DOSやWindows上で動く開発ツール(C/C++... Old_PC_User 2003/08/23 10:22:43 │└Linuxで、任天堂の「ゲームボーイ・アドバン... Old_PC_User 2003/08/23 10:29:28 └私の場合、CPUなんかも、MS-DOS/Windowsでお... Old_PC_User 2003/08/24 08:45:46 ├MS-DOSやWindows3.1で御馴染みの8086/8088/... Old_PC_User 2003/08/24 09:02:20 │├ちなみに、386以降、 Old_PC_User 2003/08/24 09:05:50 │├x86系CPUは、こうした「ややこうしい」構造... Old_PC_User 2003/08/24 09:15:57 │├OSのレベルでも、 Old_PC_User 2003/08/24 09:26:41 ││├同じWindowsでも、 Old_PC_User 2003/08/24 09:31:17 ││├・WindowsNT/2000/XP Old_PC_User 2003/08/24 09:36:22 ││└開発系などでは、オープン・ソース・ソフト... Old_PC_User 2003/08/24 09:55:39 │└DOSエクステンダ Old_PC_User 2003/08/24 20:23:35 │ ├DOSエクステンダには、大きく2種類あります... Old_PC_User 2003/08/24 20:39:13 │ └DOSエクステンダには、16ビット用と32ビット... Old_PC_User 2003/08/24 20:47:25 ├いまの時代、特に個人などで開発系のソフト... Old_PC_User 2003/08/24 09:44:22 │└「オープン・ソース・ソフトウェア」系のソ... Old_PC_User 2003/08/24 09:49:41 └しかしながら、8086/8088、V30や80286のパソ... Old_PC_User 2003/08/24 20:58:36 └MS-DOSでコマンドを解析し実行するプログラ... Old_PC_User 2003/08/24 22:01:17 └WindowsMeの「MS-DOSプロンプト」は、Windo... Old_PC_User 2003/08/24 22:03:12
| そういうわけでは | ||
| >>Windowsなどではハードをいじったプログラムを書くことができない >>のでつまらない WindowsNT/2000/XPやLinux、UNIXなどで、制御や計測などのシステム の開発も、けっこうあるので、決してハードをいじれないわけではあり ません。 最近では、モバイルや組込み用にWindowsNT/2000/XPのライト版とい えるWindowsCEや、WindowsNT/2000/XPそのものを組み込み用にした WindowsNT Embedded, WindowsXP EmbeddedといったOSもあります。 ちなみに、これら用のプログラムの開発には、通常のWindowsNT/2000 /XPが必要です。 Windows系で、デバイスドライバやこうした組込みなどの開発をおこな うには、MSDN(Microsoft Developers Network)に入会するのが よいです。 LinuxやNetBSDなどをはじめとするUNIX系OSも、けっこう、計測、制 御、組込みなどの用途で使われることが多いです。 結局は、あなたが、MS-DOS以外のWindowsやLinux、UNIXの世界を知ら ないのと、食わず嫌い、というだけのことです。 | ||
|
| ▼ Re: そういうわけでは | ||
| MS-DOSやWindows95/98/Meが、CPUとして、ほとんど、インテルのx86 系CPUのみしかサポートできないのに対して、 ・WindowsNT/2000/XP、WindowsCE ・Linux/UNIX といったOSは、x86系CPUとは全くアーキテクチャの異なる、いろいろ なCPU(32ビットあるいは64ビット)をサポートできる、という点で、 ハードいじりなどには、むしろ面白いと思いますよ。 WindowsNT4.0 ・・・ x86以外は、Alpha,MIPS,PowerPC WindowsXP ・・・ x86系以外は、インテルのItaniumシリーズ これのサーバ版のWindows Server 2003では、 x86、Itaniumに加え、AMDのOpteron/Athlon64 WindowsCE ・・・ MIPS,SH-3(日立),XScale(インテル) LinuxやNetBSD ・・・ x86以外に、680x0、Alpha、SPARC、 SPARC64,HPPA、HPPA64、PowerPC、MIPS、 MIPS64、Itanium、AMD Opteron/Athlon64、 SH-3/4など Solais ・・・ x86、SPARC、SPARC64 HP-UX ・・・ HPPA、HPPA64、Itanium という具合です。 | ||
|
| ▼ Re: MS-DOSやWindows95/98/Meが、CPUとして、ほ... | ||
| ここで、x86といっていますが、 MS-DOSは、8086(16ビットx86)をベース ですが、 Windows95/98/Me, WindowsNT/2000/XP、Linux、NetBSD、 Solarisなどいっているx86は、386(いわゆる32ビットx86)以上が 対象です。 | ||
|
| ▼ Re: そういうわけでは | ||
| 8086/8088(MS-DOS)や80286(Window3.1など)は、「純粋の」16 ビットCPUなので、直接、アクセスできるメモリは、 64KBまで 実用上、これでは小さいので、「セグメント」と「オフセット」という 考えを導入して、 8086/8088(MS-DOS) ・・・ 1MBまで 80286(Windows3.1など) ・・・ 16MBまで のメモリ空間を「参照」できるようになっている。 それで、64KB以内のメモリ空間であれば、 「オフセット・アドレス」 だけで指定できます。 これが、C/C++でいう、「nearポインタ」です(サイズは2バイト)。 この場合、 変数領域 ・・・ 64KB以内 モジュール(関数) ・・・ 64KB以内 というサイズ制限があります。 一方、64KB以上のメモリをアクセスするには、 「セグメント・アドレス」と「オフセット・アドレス」 の組で指定する必要があります。 これが、「farポインタ」や「hugeポインタ」です(4バイト)。 この場合、 変数領域 ・・・ 64KB以上可能 モジュール(関数) ・・・ 64KB以上可能 となります。 ただし、1個の配列変数のサイズについては、 farポインタ ・・・ 64KBを超えることができない hugeポインタ ・・・ 64KBを超えることができる といった違いがあります。 なお、LSI-Cでは、hugeポインタはサポートされていないようです。 nearポインタやfarポインタは、変数にも関数にも適用できますが、 hugeポインタのみ、変数にのみ適用できます。 | ||
|
| ▼ Re: 8086/8088(MS-DOS)や80286(Window3.1など... | ||
| 8086/8088(MS-DOS)や、80286(Windows3.1など)のC/C++コンパイラ (MS-C、Turbo-C、LSI-Cなど)では、これによって、複数の 「メモリ・モデル」というものがあります。 これにより、ライブラリなども複数、用意する必要があります。 1)「スモール・モデル」 すべての変数や関数へのポインタが、「nearポインタ」。 変数領域 : 64KB以内 モジュール(関数): 64KB以内 *LSI-C試食版では、この「スモール・モデル」のみがサポート されている。 2)「ラージ・モデル」 すべての変数、関数へのポインタが、「farポインタ」 変数領域 : 64KB以上可能 モジュール(関数): 64KB以上可能 ・ただし、1個の配列変数は64KB以内 3)「ヒュージ・モデル」 「ラージモデル」をベースに、変数へのポインタを「hugeポイ ンタ」にしたもの。 1個の配列変数のサイズとして、64KB以上可能。 *LSI-Cではサポートしていない そして、「スモールモデル」と「ラージモデル」の中間として、 4)「ミディアムモデル」 変数のみ「farポインタ」(64KB以上可) 関数は「nearポインタ」 (64KB以内) 5)「コンパクトモデル」 変数は「nearポインタ」(64KB以内) 関数は「farポインタ」(64KB以上可) というのもあります。 まあ、こうした8086/8088や80286の 「セグメント」 「near/far/huge」 「メモリモデル」 といったものは、初心者には、けっこう厄介なものです。 | ||
|
| ▼ Re: 8086/8088(MS-DOS)や80286(Window3.1など... | ||
| 一方、 386(Windows95/98/Me、WindowsNT/2000/XPやLinuxなど) を含めた32ビットCPUでは、こんな8086/8088(MS-DOS)や80286 (Windows3.1など)のように、初心者などには分かりづらい ・「セグメント」 ・「near/far/huge」 ・「メモリモデル」 などというものを使わなくても、最大で 4GBまで のメモリ空間を直接、アクセスできるのです。 つまり、386を含めた32ビットCPUの世界では、 オフセットだけで、4GBまで だし、 ポインタは、常に4バイト メモリモデルも1個(最大4GB可能)だけ というように、8086/8088(MS-DOS)や80286(Windows3.1など)に 比べ、はるかに シンプル!! な考えで、 64KBを超えて、最大4GBまでの変数、配列、関数がOK!! なのです。 ただし、実際の32ビットのWindowsやLinux/UNIXでは、 1個のプログラムのサイズは、2GB以内 という制約になっています。 また、Windows95/98/Meは、 MS-DOS+Windows3.1(いずれも16ビット)+32ビット というように、16ビットプログラムと32ビットプログラムが混ざって いる構造なので、これらのOSでは、実際には、せいぜい 128MBくらいまでしかアクセスできない!! という制限があります(それ以上のメモリがあっても、リソース不足 という現象が頻発するので、安定性の面で意味がない)。 一方、WindowsNT/2000/XPやLinuxなどの、 「完全な」32ビットOS では、こうした制限が、 一切ない!! のです。 | ||
|
| ▼ Re: 8086/8088(MS-DOS)や80286(Window3.1など... | ||
| さらに、UNIXやLinuxの世界では、 ・Alphaシリーズ(DEC) ・UltraSPARCシリーズ(Sun) ・PA-8000シリーズ(HP) などの64ビットCPUが、1990年代半ばくらいから利用され、いまでは さらに、 ・インテル Itaniumシリーズ ・AMD Opteron/Athlon64シリーズ といった64ビットCPUも登場している。 そして、WindowsXPやWindows Server 2003にも、64ビット版がある。 64ビットCPU+64ビットOSの世界では、32ビットの制限の4GBも越えて 「オフセット」だけで、 最大18億GB(=1800京バイト)までのメモリがアクセスできる のである。 そして、 ポインタのサイズは、8バイトになる のである。 マルチメディアや、高精度な計算、大規模なデータベースなどの用途 では、32ビットでも力不足で、64ビットが必要になるのです。 | ||
|
| ▼ Re: さらに、UNIXやLinuxの世界では、 | ||
| >>「オフセット」だけで、 >> 最大18億GB(=1800京バイト)までのメモリがアクセスできる この最大18億GBというメモリ空間は64ビットCPU+64ビットOSが、将来 最終的にアクセスできるメモリ空間のサイズです。 しかし、現実には、 ・ここまでのメモリは、まだ利用不可。 ・ここまでのメモリは、現実に利用する必要がない。 ということがあります。 しかし、32ビットCPU+32ビットOSの限界である ・4GB では、大規模なデータベースや高精度の科学技術計算、マルチメディ アなどの用途では狭い。 そういったことで、現実に利用できる64ビットCPU+64ビットOS (64ビット版のSolaris、HP-UX、Windows、Linuxなど)では、 現時点では、16T(テラ)バイト=16000GB=16兆バイト くらいまで 利用可能になっています。 | ||
|
| ▼ Re: 8086/8088(MS-DOS)や80286(Window3.1など... | ||
| C/C++では、整数データのサイズも、16ビット、32ビット、64ビット で変わります。 char型は、常に1バイトです。 16ビットのC/C++では、short型とint型が2バイトで、long型が4バイト です。 ポインタは、nearポインタが2バイトで、farポインタとhugeポインタ は4バイトです。 32ビットのC/C++では、short型が2バイトで、int型とlong型が4バイト です。 ポインタは、常に4バイトです。 64ビットのC/C++の場合、short型は2バイト、int型は4バイトです。 long型が、64ビットUNIXでは、8バイトですが、64ビットWindows では4バイトです(64ビットWindowsで、8バイト整数を使うには、 __int64という型を使う)。 ポインタは、常に8バイトです。 このように、C/C++では、16ビット、32ビット、64ビットで、整数型 変数やポインタのサイズが異なるので、移植などには、注意が必要と なります。 | ||
|
| ▼ Re: C/C++では、整数データのサイズも、16ビット... | ||
| floatやdoubleといった実数型は、常に、 float ・・・ 4バイト double ・・・ 8バイト です。 最近の、gcc/g++などには、 long double もあり、これは、 386 ・・・ 12バイト Alpha,SPARC,HPPA,Itaniumなど ・・・ 16バイト になっています。 gcc/g++では、整数型でも、 long long ・・・ 常に8バイト が追加されています。 | ||
|
| ▼ Re: そういうわけでは | ||
| WindowsやLinux,NetBSDなどにおける、ハードウェア制御などの興味 があるなら、CQ出版社の雑誌「インターフェイス」や、その別冊など に、実例を含めての詳しい話がのっているので、それらを参考にして ください。 http://www.cqpub.co.jp/interface/default.asp あと、最近おもしろいのは、ソフトバンクの雑誌「UNIX USER」での 連載記事で、Linuxで、任天堂の「ゲームボーイ・アドバンスト」と いう携帯ゲーム機を制御するプログラムを作る話、というのもあり ます。 http://www.unixuser.jp/ 携帯といえば、最近はC/C++以外にJavaによる制御もあります。 たとえば、NTTドコモのiモード系携帯電話では、iアプリというのが 利用できますが、これは、「Java2 MicroEdition」というもので 作成します。 ただ、携帯電話では開発は無理なので、実際はWindows、Linux、 Solarisなどの環境で動作する「Java2 StandarrdEdition」の環境 に開発環境を用意して作ります。 | ||
|
| ▼ Re: WindowsやLinux,NetBSDなどにおける、ハード... | ||
| Windowsは別として、LinuxやNetBSDの場合、OS自体のソースプログ ラムも公開されているので、デバイス・ドライバどころか、OSの心臓 部であるカーネル・プログラムを見たい、改造することも可能です。 このカーネル・プログラムは、CPUやメモリなどを、直接、いじる プログラムです。 LinuxやNetBSDが、さまざまなCPUやハードウェアに対応できている のは、やはり、OSのソース・プログラムが公開されているからです。 さらに、C/C++でも、GNUのC/C++コンパイラであるgcc/g++も、ソー ス・プログラムが公開され、さまざまなCPU(32ビット以上)やOS に移植されています。 Windowsの場合、例のMSDNに入会すると提供されるキットのなかに、 DDK(デバイス・ドライバ開発キット)と、デバッグ版のWindowsOS があり、これで、かなりハードウェアをいじるプログラムが作れま す。 なお、DDKだけなら、アメリカのマイクロソフトのサイトからダウン ロードできるようです。 | ||
|
| ▼ Re: WindowsやLinux,NetBSDなどにおける、ハード... | ||
| MS-DOSやWindows上で動く開発ツール(C/C++コンパイラやアセンブラ など)は、ほとんどが有料のものです。 一方、LinuxやNetBSDなどでは、GNUのC/C++(GCC/G++)やBINUTILS (GNUのアセンブラであるGASなどが入っている)などをはじめとする、 フリーで使える高機能な開発ツールがあります。 LinuxやNetBSDでハードウェア制御をするには、GCC/G++とBINUTILS は、まず必須でしょう。 あとは、GDB(デバッガ)やGMAKEなども有用です。 | ||
|
| ▼ Re: WindowsやLinux,NetBSDなどにおける、ハード... | ||
| >>Linuxで、任天堂の「ゲームボーイ・アドバンスト」という携帯ゲー >>ム機を制御する ゲーム機といえば、ソニーのPlayStation2(CPUはMIPS系の64ビット CPU採用)や、任天堂のGameCube(CPUはPowerPC系)もありますが、 これらのゲームソフトなども、Linuxで開発しているようです。 マイクロソフトのXBOXは、Windows2000ベースのOSを搭載しています ので、そのゲームソフトはWindows2000あたりで作るのでしょう。 | ||
|
| ▼ Re: そういうわけでは | ||
| 私の場合、CPUなんかも、MS-DOS/Windowsでおなじみのインテルの x86だけでなく、いろいろなCPUを使ってみたい、というタイプでし たし、どちらかというと、UNIXやMacなどで使われているモトローラ の68000シリーズとか、SPARC、HPPA、MIPS、Alpha、PowerPCなどの RISC系CPUの方が好みなんです。 インテルのCPUでも、そんなわけで、x86系CPUより、新しい64ビット のItaniumシリーズや、モバイル用のXScaleなどのCPUの方に興味が あります。 OSも、そんなわけで、ほとんどx86系べったりのMS-DOSやWindows より、いろいろなCPUに対応できる、という意味で、 MS-DOSより、CP/M (CP/Mは、8080/Z80、8086、68000などに対応 していた) Windowsより、Linux/UNIX というタイプです。 マイクロソフトのOSでも、WindowsNT/2000/XPやWindowsCEの系列 は、MS-DOSやWindows3.1/95/98/Meの系列と違って、x86べったりで はなく、RISC系CPUや、インテルのItaniumシリーズ、Xscaleなどの x86系CPUとは、全く異なるCPUにも対応しているので、私自身は、 早くから、WindowsNT系OSやWindowsCEに注目していました。 | ||
|
| ▼ Re: 私の場合、CPUなんかも、MS-DOS/Windowsでお... | ||
MS-DOSやWindows3.1で御馴染みの8086/8088/80286って、やはり、 けっこうややこしいCPUなんです。 64KB以上のメモリを扱おうとしたら、「セグメント」なんていう、 ややこしいものが必要になります。 386以降のCPUの「32ビット(プロテクト)モード」を使えば、「セグ メントなし」で、ダイレクトに4GBまでのメモリ空間がつかえます。 でも、386以降のCPUであっても、起動時は、8086/8088互換の リアルモードで起動します(一般的PCのBIOSなどは、いまだに、 リアルモードで動作しているプログラムです)。 386以降のCPUでも、このリアルモードでは、8086/8088と、まったく 変わりません。 この「リアルモード」から、ダイレクトに4GBのメモリ空間が利用で きる「32ビット(プロテクト)モード」に移行するには、そこで、い ろいろややこしい「おまじない」をしなければならないのです。 そうしたややこしい「おまじない」をして、リアルモードから、 32ビット(プロテクト)モードに、CPUを「変身」させることによ って、「セグメント」なしに、4GBまでのメモリ空間をダイレクトに 利用できるようになります。 いまのWindowsやLinuxなども、起動時、そうしたことをしています。 ああややこしい。。。 ちなみに、386以降のCPUでは、 1)リアルモード ・8086/8088以来の互換モード。 ・メモリ保護機能や仮想メモリの機能はなし ・メモリ空間は最大1MB、ただし、64KB単位のセグメントで区切ら れて「連続していない」 ・MS-DOSが動作する 2)16ビットプロテクトモード ・80286から追加された動作モード ・メモリ保護機能(最大4レベル)と、セグメンテーション方式の 仮想メモリ機能が利用できる ・メモリ空間は、最大で16MB。ただし、1個のセグメントのサイズは 最大で64KBのまま。 ・Windows3.0/3.1や、ver1.3までのOS/2などが、この動作モード をターゲットにしていた。 3)32ビットプロテクトモード ・386以降のCPU専用の動作モード ・メモリ保護機能(最大4レベル)と、セグメンテーション+ペー ジング方式の仮想記憶機能が利用できる ・メモリ空間は最大4GBで、1個のセグメントの最大サイズも4GBま でに拡張された ・このサブモードとして、複数のリアルモード互換環境を提供する 「仮想86モード」という機能が追加されている。 ・Windows95/98/Me、WindowsNT/2000/XP、Linuxなどは、すべ て、この動作モードをターゲットにしている。 といった3種類の動作モードがあります。 386以降のCPUでは、いってみれば、1個のチップの中に、 3種類ものCPU が収まったいる、といった「ややこうしい構造」なのです。 | ||
|
| ▼ Re: MS-DOSやWindows3.1で御馴染みの8086/8088/... | ||
| ちなみに、386以降、 486 Pentium(586) PentiumPro、PentiumII/IIIなど(686) Pentium4、Xeon(786) などの種類のCPUがありますし、さらに、 AMD K6シリーズ、Athlonシリーズ などの互換CPUもありますが、いずれも、こうした動作モードなど の部分は、386以来、全く変化ありません。 しかし、AMDの64ビットCPUのOpteronやAthlon64では、386 以来の3つの動作モードに加えて、 ・ロングモード(=64ビットプロテクトモード) も追加し、4つもの動作モードを備えるようになっています。 | ||
|
| ▼ Re: MS-DOSやWindows3.1で御馴染みの8086/8088/... | ||
| x86系CPUは、こうした「ややこうしい」構造をもつため、特に制御系 の人たちからは、あまり人気や評判がたかくないです。 制御系の人たちの場合、 ・小規模なもので安いシステムなら ・・・ Z80などの8ビットCPU を使う ・16ビット以上のCPUを使うシステムなら ・・・ モトローラの68000シリーズや各種のRISCプロセッサを 使う のです。 なぜなら、これらのCPUには、x86系CPUにみられるような ・セグメント ・複数の動作モード といった「ややこしい」ものがないからです。 かつての8086/8088のライバルだった、モトローラの16ビットCPUの 68000/68010では、8086/8088とちがって、ややこしい「セグメント」 や「動作モード」の考えなしに、 直接、16MBまでのメモリ空間が使える!! のです。 そして、68020以降のCPUや、(32ビット)RISC系CPUでは、これまた、 ややこしい「セグメント」や「動作モード」の考えなしに、 直接、4GBまでのメモリ空間が使える!! のです。 さらに、DECのAlphaや、インテルのItaniumシリーズなどでは、 これまた、「動作モード」なんか考えなくても、 直接、64ビット(最大18億GB)のメモリ空間が使える!! のです。 ちなみに、SPARC、HPPA、MIPS、PowerPCといったRISC系CPUは、 32ビットCPUでスタートして、64ビットCPUに拡張されたので、 最近のものは、 ・32ビットモード ・64ビットモード の2種類の動作モードをもっていますが、これとて、3種類も4種類も の動作モードをもつ、386系CPUやAMDのOpteron/Athlon64などに 比べると、「シンプル」ですね。 こうしたこともあって、制御系などでは、ややこしい構造のx86系 CPUでは、より「シンプルな」構造の68000シリーズや、RISC系、 Itaniumシリーズなどの方が、好まれます。 UNIXも、そうしたこともあって、68000シリーズやRISC系CPUの方で、早くから動作していました。 (x86系CPUでは、実用的なUNIXは、386から) | ||
|
| ▼ Re: MS-DOSやWindows3.1で御馴染みの8086/8088/... | ||
| OSのレベルでも、 MS-DOS(リアルモード=8086/8088互換モードで動作) -> Windows3.0/3.1(16ビットプロテクトモード=80286互換モード で動作) -> Windows95/98/Me(32ビットプロテクトモード=386専用モード で動作) といった系列のOSには、x86系CPU特有の 「セグメント」 「3種類の動作モード」 に対応して発展してきている、ややこうしい構造のOSなのです。 また、そのために、これらのOSは、 ・安定性や性能、将来性の面で、イマイチ ・x86系CPU以外には、「移植できない」 といった欠点もあります。 しかし、まあ、 ・MS-DOS以来のソフトウェアの互換性重視 ・一般のパソコンユーザー向けOS といった特徴ももっています。 一方、 ・WindowsNT/2000/XP ・Linux ・FreeBSD ・NetBSD といったOSは、最初から、386以上の「32ビットプロテクトモード 」でのみ動作する、「(純)32ビットOS」として開発されました。 だから、これらのOSは、 ・MS-DOSやWindows3.1との互換性は、あまりか、全く考えていない (WindowsNT/2000/XPでは、MS-DOSやWindows3.1のソフトでも、 ビジネス系のものや開発系ソフトなどは、動作する) ・一般のパソコンユーザ向けでない といった欠点もありますが、 ・安定性、性能、将来性などの面で優れる ・x86系以外のCPU(RISC系CPUやItanium系CPU)への移植も容易 といった特徴もあります。 私の場合は、そういうこともあって、Windows3.1/95/98/Meより、 WindowsNT/2000/XPやLinux、FreeBSD、NetBSDなどの方をメインに 使ってきています。 | ||
|
| ▼ Re: OSのレベルでも、 | ||
| 同じWindowsでも、 MS-DOSから、拡張される形で作られた、Windows3.1/95/98/Me より、 最初から(完全な)32ビットOSとして、(一から開発された) WindowsNT/2000/XP の方が、OSの構造などは、より「シンプル」 です。 LinuxやFreeBSD、NetBSDも、Windows3.1/95/98/Meより、はるか にシンプルな「構造」をしています。 CPUもOSも、「Simple is Best !!」が大切なのです。 Windows3.1/95/98/Meは、ややこしい構造のOSだから、「安定性や信 頼性、性能、将来性、移植性」などの面で、問題があるのです。 | ||
|
| ▼ Re: OSのレベルでも、 | ||
| >> ・WindowsNT/2000/XP >> ・Linux >> ・FreeBSD >> ・NetBSD >> といったOSは、 ・SunのSolaris ・HPのHP-UX ・SGIのIRIX などの「商用UNIX」は、1980年代一杯までは、モトローラの68000 シリーズのCPUで動作し、1980年代末からは、SPARC、HPPA、MIPS などのRISC系CPUで動作しています。 HP-UXは、今後は、インテルの64ビットCPUのItaniumシリーズで 動作していきます(Solarisも、そのうち、Itaniumシリーズに 移植されるか?)。 あとIBMのAIXという商用UNIXは、IBM自身のPOWERシリーズやPowerPC シリーズ、という、これまたRISC系CPUで動作しています (Itaniumシリーズにも移植されている) | ||
|
| ▼ Re: OSのレベルでも、 | ||
| 開発系などでは、オープン・ソース・ソフトウェアの利用も考え、 いまの時代、 ・WindowsNT/2000/XP ・Linux、FreeBSD、NetBSDなどのPC-UNIX ・Solaris、HP-UX、AIX、IRIXなどの商用UNIX のどれかを使いましょう。 今の時代、 ・MS-DOS ・Windows3.1/95/98/Me は、あまりお勧めではありません。 | ||
|
| ▼ Re: MS-DOSやWindows3.1で御馴染みの8086/8088/... | ||
| DOSエクステンダ MS-DOSは、8088/8086をターゲットにして作られたOSです。 それで、そのメモリ空間は、64KB単位のセグメントに区切られ、最大 1MBまでのサイズです(しかも仮想記憶機能や、メモリ保護機能はない い)。 実際のIBM-PC互換機やPC-98で動いていたMS-DOSにおいて、一般の ユーザープログラムが利用できるメモリ空間は640KBまででした (PC-98XAとかFMRとかでは、768KBまで) 一方、80286以降のCPUでは、8088/8086互換のモードを「リアルモード 」とよび、(80286以降のCPU独自の機能が利用できる)新しい動作 モード「プロテクトモード」が追加されました。 しかし、80286以降のCPUにおいても、MS-DOSでは、リアルモードで しか利用できないのです(現在のPentium4であっても、リアルモード はあるし、MS-DOSが動作します)。 プロテクトモードは、80286から追加され、386以降では、さらに 32ビットプロテクトモードが追加され、80286互換のものは 16ビットプロテクトモードとよばれる。 このプロテクトモードでは、メモリ保護機能や仮想メモリ機能など 後のWindows、OS/2やLinuxなどのOSが動作するための高度な機能もあ りました。 しかし、当時のMS-DOSユーザーからすれば、80286以降のCPUが備える プロテクトモードの機能のうち、最大の魅力といえるのは、 ・1MB以上の(当時としては)広大なメモリ空間が利用できること (80286では16MBまで、386以降は4GBまでのメモリ空間が、利用 できる) ・386以降で追加された32ビットプロテクトモードでは、さらに、 セグメントの最大サイズが64KBから4GBまで拡張され、4GBまで の(セグメント化されていない)連続した広大なメモリ空間が 利用できること (80286では、セグメントの最大サイズは、相変わらず64KB) といったことでした。 こうした機能を利用するには、、本来は、WindowsやOS/2,Linuxなど のプロテクトモード用のOSを利用しなければなりません。 しかし、MS-DOSユーザーにとっては、80286以降のプロテクトモード が提供する1MB以上の広大なメモリ空間を、MS-DOSから利用できるこ とを望んだいました。 それで、出てきたのが、「DOSエクステンダ」とよばれるユーティリ ティ・ソフトです。 この「DOSエクステンダ」というのは、80286以降のCPUがもつ、「プ ロテクトモード」が提供できる1MB以上のメモリ空間を、MS-DOSから 利用できるようにするのです。 ただし、DOSエクステンダの機能に対応したソフトでないと、1MBを 越えるメモリ空間が利用できないのです。 このDOSエクステンダに対応したソフトは、メモリ空間だけ、プロテ クトモードのメモリを利用して、I/O処理は、相変わらずMS-DOS(リ アルモード)の機能を利用します。 したがって、DOSエクステンダに対応したソフトは、CPUの動作モード を、しょっちゅう、リアルモードとプロテクトモードとの間で切替て 実行するわけです。 なお、80286以降のCPUであっても、起動時やリセット直後は、CPU は「リアルモード」で立ち上がります。 そこから、コントロール・レジスタとよばれるレジスタのあるビット をONにすると、プロテクトモードに移行できます。 しかし、80286では、この逆、プロテクトモードからリアルモードに 戻るには、CPUをリセットする方法しかありません。 386以降のCPUでは、コントロール・レジスタのビットをOFFにするこ とで、プロテクトモードからリアルモードに戻れるようになった。 | ||
|
| ▼ Re: DOSエクステンダ | ||
| DOSエクステンダには、大きく2種類あります。 1)16ビットDOSエクステンダ 80286互換のプロテクトモードに対応した、DOSエクステンダです。 特徴は、 ・80286以上のCPUのパソコンで利用できる ・16MBまでの、物理メモリが利用できる ・1個のセグメントのサイズは、64KBのまま ・C/C++の変数の型(char,short,int,long,float,double, ポインタ)のサイズは、16ビット用のものに準拠する ・16ビット用コンパイラ(MS-CやTurbo-Cなど)を、ランタイム ライブラリだけプロテクトモード用に変えるだけで、そのまま 利用できる。 ・PC-98用として、京都マイクロコンピュータがフリーで提供して いる、EXE286が利用できる。 http://www.vector.co.jp/soft/maker/kmc/se002620.html ・ただし、EXE286で用意されているランタイム・ライブラリは、 MS-Cのver 5.1およびver 6.0と、Turbo-C用のものが用意され ています(LSI-C用のものは用意されていない)。 2)32ビットDOSエクステンダ ・386以降の32ビットCPU専用 ・4GBまでの物理メモリが利用できる ・1個のセグメントのサイズも4GBなので、4GBまでのメモリを、 連続して利用できる ・C/C++の変数の型(char,short,int,long,float,double,ポイン タ)のサイズは、32ビット用のものに準拠する ・386以降専用の32ビットのコンパイラやアセンブラが必要となる (MS-CやTurbo-Cなどの16ビット用のものでは、無意味です) ・PC-98では、京都マイクロコンピュータがフリーで提供している EXE386が利用できる。 http://www.vector.co.jp/soft/maker/kmc/se002622.html このEXE386には、FMーTOWNS用 http://www.vector.co.jp/soft/maker/kmc/se002623.html IBM-PC互換機用 http://www.vector.co.jp/soft/maker/kmc/se002624.html も、あります。 このEXE386で利用できる32ビットコンパイラとしては、 ・Watcom C/C++386 ・Watcom Fortran386 などが、以前は発売されていたが、いまでは、ほとんど見かけなく なった。 | ||
|
| ▼ Re: DOSエクステンダ | ||
| DOSエクステンダには、16ビット用と32ビット用の2種類があるが、 利用者にとっては、 16ビットDOSエクステンダは、 ・80286以上のCPUのパソコンで利用できる ・16MBまでのメモリが利用できる ・MS-CやTurbo-Cといった、MS-DOS用コンパイラを流用できる ・しかし、MS-DOSでも御馴染みの、「64KBセグメントの壁」の 問題が解消できない 一方、32ビットDOSエクステンダは、 ・386以上の32ビットCPU搭載のパソコンでしか利用できない ・4GBまでのメモリが利用できる(実際のDOSエクステンダでは、 32MBまで、のものが多い) ・セグメントの最大サイズが4GBになるので、「64KBセグメント の壁」の問題が解消できる。 ・386以上の32ビット専用のコンパイラやアセンブラが必要。 といったことが、メリット、デメリットとして、それぞれあります。 いまでは、386以上の32ビットCPUのパソコンは、価格の面でも容易 で、むしろ、32ビットDOSエクステンダのメリットである、 「セグメントなしの4GBまでのメモリが利用できる」という点が、 大きくクローズアップされると思います。 MS-DOSと32ビットDOSエクステンダとの組合せで、386以上のCPUが もつ、この「セグメントなしの4GBまでのメモリ」という機能を、 MS-DOSからも利用できるのです。 しかし、そのためには、32ビット用のコンパイラやアセンブラが必要 ですが、今日では、32ビットDOSエクステンダ対応のコンパイラの 入手が困難になっています。 | ||
|
| ▼ Re: 私の場合、CPUなんかも、MS-DOS/Windowsでお... | ||
| いまの時代、特に個人などで開発系のソフトが、いろいろ欲しい、 という場合は、一連のGNUシリーズなどの、いわゆる 「オープン・ソース・ソフトウェア」 の利用がお勧めです。 これなら、ソフトが、ソースプログラム付きで、ほとんど「無料」で、 いろいろなソフトが利用できます。 これらのオープン・ソース・ソフトウェアの入手には、 ・ADSL/CATV/光ケーブルなどの「ブロードバンド」 が不可欠です。 そして、この「オープン・ソース・ソフトウェア」を利用できる OSとしては、 ・WindowsNT/2000/XP+「Microsoft Service for UNIX 3.0」 + Exeedなどの商用Xサーバ ・WindowsNT/2000/XP+Cygwin ・Linux、FreeBSD、NetBSDなどのPC-UNIX ・Solaris、HP-UX、AIX、IRIXなどのRISC+商用UNIXのワークステ ーション/サーバ のいずれかがお勧めです。 Cygwinのみは、Windows95/98/Meでも利用できますが、 Windows95/98/Meでは、 ・安定性が悪い ・マルチタスクやネットワークなどの性能が悪い ・OSの機能不足 などの理由で、あまり実用的でないため、お勧めできません。 | ||
|
| ▼ Re: いまの時代、特に個人などで開発系のソフト... | ||
| 「オープン・ソース・ソフトウェア」系のソフトウェアは、 ・MS-DOS+DJGPP(32ビットDOSエクステンダ) で利用できるものも、いくつかあります。 しかし、DJGPP自体が、IBM-PC/AT互換機用なので、 ・PC-98系のMS-DOS で利用できるものは、さらに限られてきます(最低限のものしか 利用できなくなる)。 ずばり、 ・PC-98系のMS-DOS は、「オープン・ソース・ソフトウェア」の利用環境としては、 あまり使いものになりません。 PC-98でも、386以降のCPU+10MB程度のRAM+1GB程度のHDD の構成であれば ・Plamo Linux(PC-98版) ・NetBSD(PC-98版) ・FreeBSD(PC-98版) がありますので、これらを使うことで、「オープン・ソース・ソフト ウェア」の恩恵を、十分に受けることができます。 | ||
|
| ▼ Re: 私の場合、CPUなんかも、MS-DOS/Windowsでお... | ||
| しかしながら、8086/8088、V30や80286のパソコンでは、 ・32ビットDOSエクステンダ ・Linux ・FreeBSD ・NetBSD ・Windows のどれも、利用できない、のは事実です。 さらに、 ・16ビットDOSエクステンダ も、80286の仕様上の欠陥(プロテクトモードからリアルモードに戻る には、CPUをリセットする以外方法がない、こと)により、実用上は、 やはり386以上のCPUが必要です。 したがって、8086/8088、V30、80286といったCPUのパソコンでは、 いまや、 (DOSエクステンダなしの)MS-DOS しか、利用できないわけです。 そして、LSI-C(試食版)では、スモールモデルしか利用できないので、 ・変数領域:64KBまで ・モジュール:64KBまで という、あまりにも小さなプログラムしか作れない。 「マルチタスクは不要!!」というけど、ネットワーク(LANやインタ ーネット)の実用には、いまのWindowsやLinuxなどが提供している 「真の」マルチタスクが不可欠なのです。 | ||
|
| ▼ Re: しかしながら、8086/8088、V30や80286のパソ... | ||
| MS-DOSでコマンドを解析し実行するプログラムは、「COMMAND.COM」 というものです。 Windows3.1/95/98/Meでも、「MS-DOSプロンプト」の名前で、 Windows(プロテクトモード)上で、386以降のCPUが備える 「仮想86モード」の機能を利用して、「COMMAND.COM」を動作させる ことができます。 これにより、MS-DOSと全く互換のコマンド環境を利用できます。 また、Windows98SEまでは、「シングルMS-DOSモード」(リアルモー ド)というものがあり、Windowsの機能を全て止めて、かつてのMS-DOS そのものと、全く同じコマンド環境を利用することもできます。 (これにより、Windows上の「MS-DOSプロンプト」で動作しない、 MS-DOS用のゲームソフトなどを動かすことができた) 一方、WindowsNT/2000/XPでは、Windows3.1/95/98/Meの「MS-DOS プロンプト」に相当するものとして、「コマンド・プロンプト」という ものがあります。 Windows3.1/95/98/Meの「MS-DOSプロンプト」は、16ビットのプロ グラムで、その本体はCOMMAND.COMです。 その機能も、全くMS-DOSのものと変わりません。 一方、WindowsNT/2000/XPの「コマンド・プロンプト」は、32ビット のプログラムで、その本体CMD.EXE、というものです。 その機能も、MS-DOSやWindows3.1/95/98/Meの「MS-DOSプロンプト」 のものより、かなり拡張・強化されています。 たとえば、「コマンド・プロンプト」では、ネットワーク関係のもの が強化されていたり、ヒストリー機能(カーソルキーで、過去に入力 したコマンドを呼び出して、編集・再入力できる機能)などが利用で きます。 ヒストリー機能は、MS-DOSや「MS-DOSプロンプト」では、無い機能で す。 さて、Windowsでも、C/C++言語などで、GUIなしの文字と数値だけの プログラムを作れて、それは、 「コンソール・プログラム」 といっています。 そのスタイルは、MS-DOS上のものと、ほとんど変わりません。 これには、 ・MS-DOS互換のプログラム ・32ビット・コンソール・プログラム の2種類があり、多くのものは、Windows95/98/Meの「MS-DOSプロン プト」でも、WindowsNT/2000/XPの「コマンド・プロンプト」でも、 実行できます。 | ||
|
| ▼ Re: MS-DOSでコマンドを解析し実行するプログラ... | ||
| WindowsMeの「MS-DOSプロンプト」は、WindowsNT/2000/XPの 「コマンド・プロンプト」に近いものになっています。 また、WindowsMeやWindowsNT/2000/XPでは、「シングルMS-DOS」 は利用できません。 | ||
|
このノートはこれ以上発言できません。
新しくノートを作成
して、続きを書いてください。