• 締切済み

マルチタスクの動作の違い

 よく、「Windows9xのマルチタスクはWindowsNTに比べてよろしくない」ということを聞きますが、具体的にどのように違いがあるのでしょう。どちらもOSがプロセスの実行権を強制的に取り上げられるプリエンプティブなマルチタスクであると聞いているのですが、細かな違いがあるのでしょうか。  また、LinuxやUNIXシリーズ、WindowsCEや3.x、PC-DOSやMS-DOS(は論外か)、MacOSについても、ご存知の方いらっしゃいましたら、ぜひともお教えください。よろしくお願いします。

みんなの回答

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.3

Win9Xは32bit部と16bit部が混在しているOSで、32Bit部に関してはわりかしマトモに、マルチタスク動作できるのですが、16bit部はCPUの仕様などから、プリエンプティブなマルチタスクができないようになっています。 またOSの仕様で、16bit部はすべてのプログラムで共通のメモリ領域を使用するようになっていて、例えば、16BitプログラムAがクラッシュすると、他の16BitプログラムBやCにも悪影響を与えます。 あと、DLLの扱いについてもWin9XはNTやLinuxと異なります。 Win9XのDLLは、単一のメモリ領域に配置され、それを複数のアプリケーションから使うようになっています。 この方式は、メモリやCPUキャッシュの使用効率がいいのが特徴ですが、一つのDLLがクラッシュすると、それを使用している複数のアプリが影響を受けます。 それに対し、NTやLinuxなどは、DLLの使用領域をアプリケーションごとに用意しますので、あるDLLがクラッシュしても、影響を受けるアプリは一つにとどまります。 MacOSですが、現段階では、メモリ保護やプリエンプティブなマルチタスクは実装されていないようです。 MS-DOSには、OSレベルではマルチタスク機能は装備されていません。 アプリケーションレベルで、個別に装備することは可能です。 Win3X,2X,1Xのマルチタスクは、インプリエンプティブ(協調型)で、アプリケーションが決めた位置でしかタスクの切り替えができません。

  • shigatsu
  • ベストアンサー率26% (511/1924)
回答No.2

95,98ではプログラムでいくらでもCPUを占領できます。 OSに制御を戻さないような無作法な作りにするのは結構 簡単です。 NTでも・・・NetscapeNavigatorとかが良くやってくれ ますね。 #NTなのにリセットボタンよく押す(T_T) まぁ比べればNTのほうが強いってことになりますが、所 詮は数十MBのパッチあてが必要なOSですし。 MacOSは MacOS X(テン)という新しいやつで、かなり強力 になるようですね。今は過渡期という感じみたいです。

sophia
質問者

補足

2000/07/27 01:55JST  なんと、Win9xではそのようなことができるのですか。自分はプログラミングのほうは興味はあるのですが、まだJAVAでテキストを表示させるコンソールアプリ程度しか作れない状態です。さて、OSに制御を戻さないようなつくりというのは、もとよりその機能がOSに組み込まれているのか、それとも予期せずそのような機能がついてしまったのか、気になりますね。どちらでも、とにかくあるんだからいいじゃないかと言われるとそれはそれで納得ですが。  NTではCPU占有は許さないということでしょうか。まあ確かにnetscape.exeはたまにCPUリソースを占有したりしていますが。webブラウジングしつつCD-Rを焼いているときはヒヤヒヤします。  閑話休題、やはりwindows使うならNT系のほうがよりよいということですね。サービスパックは一応無条件に突っ込んでいました。大概新機能が増えていてよいことが多いので。SP4はDLLの不正な再配置で起動できなくなってあせりましたが。  MacOSも今は完全なマルチタスクではないのですね。自分はさわり程度にしか使ったことがないのですが、ユーザの方には「Windowsなど使いたくもない」といわせるほどのもののようで、興味深く思います。しかしMAC界では仮想メモリ機能を使わないのが常識のようですが、なぜメモリが不足したらわざわざ実メモリを買ってくるのでしょう。お医者さんや売れてる漫画家さんだからお金はあるし、レポートや絵をかくには遅いからでしょうか?そんなわけないでしょうな(~~;。

noname#25358
noname#25358
回答No.1

 えとですね。  聞きかじりで申し訳ないのですが、95/98系のWinには、TSSの処理に手抜きがあるのだそうです。  TSSというのは、Time Sharing Systemつまり、時分割で「アプリA、B、Cそれぞれに0.1秒ずるの時間を配布し、時間が来たら実行権強制的に取り上げる。そうすることで均等に処理を実行する」という処理のことですが、NTの場合完全なTSSになっていますから、アプリがハングアップしてもOS自体が影響をうけることはないわけですが(理論上はね(^_^;)、95/98の場合、その、時間になったら処理を取り上げる、という処理が何か簡易的になっている、という話を聞きました。98になってだいぶマシにはなったらしいですがね。  ちなみに、MacOSはよくわかりませんが、LinuxとUNIXはどちらも完全TSSです。これらはどちらも、もともとCUIのOSですから、割と徹底的に作られているようです。  WindowsCE、3.1、PC-DOS、MS-DOS、これらはすべてシングルタスクですから、常駐などの処理をアプリ側が行わない限り、フォーカスの当たっていないアプリは完全に停止していることになるわけです。

sophia
質問者

補足

2000/07/27 01:11JST  なるほど、確かにNTと9xではレスポンスに大した違いがありますね。先日店頭にあったノートパソコンをいじってみたら、自分のデスクトップPC(Windows2000)と同程度のCPUであるのに少し処理をさせるとフォアグラウンドのアプリケーションの処理が、再描画の段階で結構厳しくなっていたのには驚きました。NTでは少しくらいの処理ではフォアグラウンド処理が滞ることなどありませんからね。それとも気のせいでしょうか。  LinuxとUNIXはWindowsでいえばNTのような厳密なTSSを実装しているのですね。どうもDOSになれてしまった自分としては、バックグラウンドで誰かが処理を行っているというのがイメージが湧きにくいところではありますが。  しかし、WindowsCEがWin3.1などと同じとは驚きました。見た目からWin9xに近いものだとばかり思っていましたので、大変勉強になりました。本当にありがとうございました。

関連するQ&A

  • dos2unix(コード変換)をしなくてもも済むLinuxの設定

    RedHat Linux9でWebサーバーをつくり、Perlを使ったCGIプログラムもアップしています。しかし、CGIプログラムはWindowsで作成し、Linuxにアップしているので、そのままだとコードが違い表示されないので、 dos2unix < DOS_FILE >UNIX_FILE とLinux側でやってコードを変換しています。 これをいちいちやらないようにするためにはどうすれば良いのでしょうか。 何かをLinuxにインストールするなどしたら大丈夫になりますか?

  • プロセスとスレッドの違いについて(Cプログラミングの観点から)

    プロセスとスレッドの違いがしっくりきません。 <プロセス> (1)プログラムの実行単位。Windows や Linux などの汎用 OS 上のアプリケーションは一般にプロセスとして動作している。プロセスは1つ以上のスレッドと、ファイル、ヒープメモリなどのリソースで構成される (2)起動や切り替えのオーバーヘッドが大きい <スレッド> (1)同一プロセス内の複数スレッドを同一メモリ空間上で実行でき、メモリ消費量などが軽減できる。 (2)マルチスレッド処理のプログラミングにおいては、同じデータを複数のスレッドが同時に書き換えることによる不整合に注意し、排他制御を行う必要がある。 等はwiki等調べて理解しています。 何が疑問なのかと申し上げますと、具体的にプログラミングする際に (1)マルチプロセスとマルチスレッド方式では、ソースにどのような違いが出てくるか (2)マルチプロセスとマルチスレッド方式では実行時間がどれだけ変化するか がわからないのです。お仕事で並列処理等について担当されている方などおられましたら、お手数ですがご教授ください。 なお、わかりやすい書籍、webサイト等ありましたらそれも併せて教えていただけると助かります。よろしくお願いします。ちなみに、環境はWindowsXP,VisualC++ExpressEdition2005を使っていますので、UNIXよりはWindowsかつCで動くプログラム例で教えていただけると大変助かります。しかし、当方Javaも多少であれば組めますのでJavaでも構いません。 何卒、よろしくお願い致します。

  • Windowsの後継は

    【Winedows9x(SE)系】 MS-DOS(ベースとなる)→Windows95→Windows98→WindowsME 【WindowsNT系】(クライアント向け) MS-DOS(ベースとなる)→Windows NT3.1→Windows NT4.0→Windows 2000(NT5.0)→Windows XP(NT5.1)→Windows Vista(「NT5.2」?or「NT6.0」?) 【WindowsNT系】(サーバー向け) NT Server → 2000 Server → Server2003 こういう風に思っているのですが合っていますか?間違っていたら訂正や付け加えをお願いします。

  • サーバーのwindows とLinuxの違い

    海外でレンタルサーバーを借りようといろいろ調べたのですが、 サーバーのOSをwindowsにするかlinuxにするかというオプションがあり、どちらのほうがいいのか悩んでいます。 違いはあまりないと聞いたのですが、ホームページ利用の目的が映像(flashやvideo)、画像などを紹介する目的なので、WindowsもしくはLinuxどちらのほうが私の用途に向いているか教えてもらえればうれしいです。一応、自分の使っているOSはWindowsです。 いろいろ調べては見たのですが、細かい違いがわからなくって、ここにきてしまいました。 WindowsとLinux(もしくはUnix)とでは、同じサービスでも、月々のプランの値段が、4ドルくらい違うので、特に、Linuxに問題がないのであれば、Linuxのほうにしようと思っています。 回答よろしくお願いします。

  • windows(DOS)領域にインストールできるlinuxって何?

    要するにもうパーティションを切り直したくないんです。windows(DOS)領域にインストールでき、windowsから起動できて、手軽にXまでいけるやつ。あ、linuxにこだわっているわけではないんです。unix系であれば。

  • コマンドプロンプトとDOSプロンプトの違い

    最近のOSにはDOSプロンプトがなくなり、コマンドプロンプトがふぞくしていますが、具体的にはどのような違いがあるのですか? 私はプロンプトにてプログラムのコンパイルから実行をしているだけなので、違いがよくわからないのです。よろしくお願いします。 そもそもDOSプロンプトとはどのような目的で作られたのでしょう?

  • DOSのデュアルブートってどうやるんですか?

    FreeDOS、MS-DOS6.22があるので使ってみたいのですが、DOS専用パソコンを持てるほどではありません(ジャンク品とかで間に合いそうな気もしますが・・・、パソコンの数が増えるので)。だからデュアルブートで使いたいのですが、どうやったらできるのですか? ちなみにWindows2000とLinuxのデュアルブート、Windows98とWindows2000のデュアルブートはOSを入れる順序だけが問題なので簡単にできました。でもDOSはよく分からないので。 例えば、DOSとWindows98のデュアルブートは難しいよ、とか、こうやると簡単にデュアルブートができるよとかDOS初心者向けのアドバイスがありましたら特にうれしいです。

  • LinuxからWindowsサーバへのrsh

    はじめてですが、Unix/LinuxからWindows2000サーバおよび2003サーバへのrshを起動するために必要な環境について質問をさせていただきます。 逆向き(WindowsからUnix)については実績があります。 リモートホストのWindows側のhostsファイルにUnixのアドレスと名前を登録、ローカルホストのUnix側のhostsや.rhostsファイルにWindowsのアドレス、名前、ユーザ情報を登録するとWindows側でUnixコマンドが遠隔起動できます。 今、実現したいのは、Unix/Linuxをリモートホスト、Windows2000サーバおよび2003サーバをローカルホストとしてUnix/Linux側からWindows側の処理を遠隔起動することです。 hostsや.rhostsファイルは、設定する側が逆になるだけで、考え方は同じと思われます。 Windows側でrshのデーモンプロセスが起動している必要があると思われます。 巷では、WindowsにSFUやSUA(Unixエミュレータ)を導入すればできるという情報が多い様です。 SFUやSUAを導入せず、rshのデーモンプロセスを単独でかつフリーで入手することは可能でしょうか? Windowsのバージョンにより、デーモンプロセスが標準で装備されていたり、別途導入する必要があったりするのでしょうか? よろしくお願いいたします。

  • makeってどうすればいいんですか?

    makeするとか言うけれど、makeってどうすれば実行できるのですか? ただ単にmakeってタイプすればいいって書いてあるサイトとかあったけれど、 どこでタイプすればいいのでしょうか... MS-DOSプロントみたいのがあるんでしょうか? 上の文章を見て、もうおわかりの人もいるかと思いますが、Linuxを使い始めて約1週間の初心者です。(Unix互換OSを使ったのも、これがはじめてで、Windowsしか使ったことがありません。) もしよろしければ、教えてください。 ~環境~ RedHatLinux 7.2 XFree86

  • ワイルドカードの処理(win/dos)

    perlでワイルドカードの処理をするにはどうしたらよいでしょうか? 具体的には、ワイルドカードに該当したファイル分、 下記の処理をしたいのですが。 OSはWindows(DOSプロンプト)です。 (Windows(MS-DOS)はUNIXと違って、 ワイルドカードの展開をアプリケーション任せにしているようです。) -- while (<>) { if ($. == 2) { print; last; } } --

    • ベストアンサー
    • Perl

専門家に質問してみよう