タスクやプロセス管理について

私が運営している掲示板で下記の質問があって、回答をしました。

質問
**************************************

私は今までの仕事で、某セキュリティ会社の防犯監視システム開発、某携帯電話開発(UI)に携わってきました。
そこではリアルタイムOSマルチタスク環境でのプログラム開発だったのですが、マルチタスクといっても当然タスク毎に"実行可能状態"、"待ち状態"、"実行中状態"等(その他いろいろ)、各種状態を持ち、タスクプライオリティに従いOSがタスクのスケジューリングを行い順次タスクが切り替わって制御されているという感じだったのですが(何が言いたいかというと優先順位の違う複数のタスクが並列で動くことはないですよね?と言いたいのですが)、

今回LinuxOS(MontaVista)でのプログラム開発を行ってみて違いに戸惑いを感じました。(マルチ)プロセスとは何ぞや?から始まり、さらにそのプロセス内で作成されるスレッド、そのプロセス・スレッドは他のプロセス・スレッドと並列で動く等等。(正確にはあたかも同時に動作しているかのように見えるってことですよね?)

前半の"タスク"と後半の"プロセス"とはこのように別物なのですよね?
今までの経験では並列動作という概念が無かったもので、どうもしっくりこなく意見をあおぐ為投稿させていただきました。

かなり漠然としたことで恐縮なのですが、今まで述べたことでなにか勘違いしているんじゃないかとか間違えていることとかありますか?
長文となり申し訳ありません。

**************************************


回答
**************************************
タスクやプロセスという言葉に厳密な定義はない、と思って以下を読んでください。

あなたが、いままでやってきた環境やオペレーティングシステムにおいては、システムの中で同時に動かしたい仕事の単位を「タスク」と定義してあった。
linuxwindowsでは「プロセス」と定義してあった。
...だけの話です。

リアルタイムOSでは、「タスク」と呼ぶことが多いし、タスク生成や起動のシステムコールもtaskXX()とかいう名前になっています。
linuxwindowsでは、明らかに「プロセス」と呼ばれています。(敢えて、ここではまだスレッドを出しません。)


また、別の特徴として、

リアルタイムOSでは、システムの中のメモリを全タスクから参照したり書き換えたりできるようなメモリ管理となっていたり、カーネルとタスクが出来る範囲をあまり区別していない。(どのタスクから見ても0x89ABCDEFというアドレスのメモリは全く同一)
linuxwindowsでは、カーネル空間とユーザ空間に分け、ユーザ空間のプロセスは1つ1つのプロセスは独自のメモリ空間を持って動く。(Aというプロセスから見える0x89ABCDEFというアドレスのメモリと、Bというプロセスから見える0x89ABCDEFというアドレスのメモリは、実は違うもの)
また、カーネルが出来ることと、ユーザ空間プロセスが出来ることを分けている。(これの詳細は割愛します。)

がありますが、タスクとプロセスという言葉とはホントは関係のない話なのです。


同時実行うんぬん(スケジューリング)の話の方も、同様です。
あなたがいままでやってきたお仕事でも、OSが優先順位というポリシーに基づいて、たった1つのプロセッサ資源を、複数のタスクにどう分割して使わせるかを決めていた。
linuxwindowsのプロセスでも同じです。OSが優先順位や時分割というポリシーに基づいて、たった1つのプロセッサ資源を、複数のプロセスにどう分割して使わせるかを決めている。
ほら、たいした違いはないでしょ?

「スレッド」という言葉は「プロセス」という言葉と一緒に使われます。
プロセスの仕事の流れをある時点から分岐させて複数の仕事を同時実行(厳密には、同時実行しているかのように、というのはご理解されている通りです)させることができます。スレッドを生成するとか、スレッドを起動するとかです。
1つのプロセスは1つ以上のスレッドから成ります。
ここまでくるとお気づきでしょう。
ちょっと上に書いたlinuxwindowsがプロセスを同時実行させるというのは厳密には間違いで、スレッドがスケジューリングの対象となっています。
あるプロセスの中のスレッドたちは、そのプロセスの資源を共有します。
先に述べたカーネル空間にはプロセスという概念はありませんが、スレッドの概念はあります。カーネルスレッドと呼ばれます。


以上のように、メモリ1枚板で、万能のタスクのマルチタスキングが一般的なリアルタイムOSと、
仮想メモリをプロセスごとに切り替えて動作させることまでサポートしているlinuxwindowsでの、ユーザ空間マルチプロセッシング、マルチスレッディングとの違いはご理解いただけたでしょうか?

**************************************

頑張って回答してみたのですが、、、
上記の回答でわかるもんですかねえ〜。。。
掲示板での質疑応答って難しいですね。