• 締切済み

ソフトウェア工学でわからないことがあります。

WindowsやLinuxなどのOSでは、複数のアプリケーションプログラムを同時に動作させることができます。 (1) この並列に動作する単位を何と呼びますか? (2) (1)は、それぞれに独立した論理メモリ空間を割り当てるため、その制御はオーバーヘッドが大きい。よって、1つの(1)の中で論理メモリ空間を共有した並列処理単位を実現する機構がある。 この単位を何と呼びますか? (3) (2)には、その処理の実行に必要な変数や関数の呼び出しの戻り番地を格納するためのメモリ領域として割りつけられるものは何ですか? ソフトウェアに詳しい方、回答お願いします。

みんなの回答

  • Toshi0230
  • ベストアンサー率51% (836/1635)
回答No.4

なんか学校の宿題くさいけど… このあたりの内容って全部教科書に書いてあるはず。 んな、どこの誰かもわからん人の回答と、教科書の内容と、どちらを信用するのかな?

  • yakan9
  • ベストアンサー率54% (2204/4055)
回答No.3

ソフトウェア工学の基礎、入り口、特にOSの序論のところです。 要は、コンピュータのOSそのものの理論を解説していくために理解しておく必要がある部分です。 もし学校の宿題とかであれば、教科書、講義内容の復習でしょう。 ジョブ、タスクの違いを説明されたと思います。 そこで、リエントラントルーチン、シリアルリユーザブルルーチン、待ち合わせ理論、同期管理、キューイング理論等がこれから出てくると思います。 ここでの最初の、ジョブもしくは、プログラムということです。 このジョブやプログラムが一旦コンピュータの中に入ると、細分化された仕事(task:タスク)になります。 このタスク管理がI/O完了待ち合わせ理論や、キューイング理論となってきます。 タスクを制御するためのブロック、すなわち、Task Control Block 略して、TCBと呼ばれます。 この中に全て答えが含まれています。

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

(3)はスタックじゃないですかね?

回答No.1

(1)プロセス (2)スレッド (3)キャッシュ 自信無いですが

関連するQ&A

  • 仮想記憶方式に関する問

    プログラムにおける2つの並列実行単位(タスク)が動作する論理記憶空間を同一にした場合と、分離した場合のメリットとデメリットを説明せよ。 という問題です。 スーパースカラ方式(多重並列命令制御の中でも、複数の命令を同時処理する方式)とVLIW(1つの大きな命令を作り出して実行する方式)の比較ということでしょうか? ご教示お願い致します。

  • スレッドの意味

    マルチスレッドについて良い資料が見当たらず、教えて下さい。 OSにおけるマルチスレッドと言うと、同一プロセス内でメモリ空間を 共有して独立に動く一連の手続き、と捉えています。(シングルCPU シングルコアだとOSで時分割によって作られた仮想的な並列計算) Javaのようなマルチスレッドのプログラミング言語では「一つの プログラムから作られた二つの一連の手続き」と言うイメージが あります。※裏側の動作ではOSに依頼してJavaのプロセス内で OSのスレッドを生成して処理を渡しているだけ?と思っています。 CPUコアの内部で説明される「マルチスレッド」と言うのは、 どのようなレベルのスレッド(何が並列処理?何処まで並列?) なのでしょうか。

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

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

  • メモリの占有率を調べるには?

    PerlやPHPでサーバーサイドプログラムを書いています。いずれはC++にも手を出す予定です。 プログラムを動作させる上で処理速度は大事なポイントですよね。 ある動作をさせるのに複数の方法があれば、膨大な回数ループさせてベンチマークテストして、もっともパフォーマンスが良いものを選ぶということは最近覚え、よく使っています。 しかしこの処理速度と「メモリの占有率」って別物ですよね? こんなページを見つけたのですが http://hakuhin.hp.infoseek.co.jp/main/as/bit.html これによると変数は32ビットのデータを格納でき、変数を用意する度に32ビットのメモリを確保してしまうので無駄がある、使用する変数(数値や文字列など)のビット数が大きくないのなら1変数がもつ32ビットのメモリを分割して使用することができる、というものらしいのです。しかしこれを実行させようとコードを書くと冗長になってしまいます。普通に必要な個数、変数を用意したくなってしまいますが、このページの方法は有用なものなのでしょうか?それを知りたく、皆様にメモリの占有率の調べ方をお聞きしたいのです。もしかして「結局は動作速度に関わってくるから従来のベンチマークテストで構わない」なんてことだったりしますか? ちなみにリンク先の内容は言語がActionScriptですが、論理演算の話なので他の言語でも流用できますよね?

  • 論理・物理アドレスに関する問題(まとめて)

    以前にうpしたのですが、明確な答えが返ってこないので、まとめていきます。 まず、物理メモリ容量128Mバイトしかないパソコンで1Gバイトの論理メモリ空間を実現する場合について、以下の問題について (1)ページサイズ4Kバイトのページング方式を採用した場合、物理メモリページは何ページ格納できるか?(物理メモリに) (2)論理/物理変換用のページテーブルの大きさは何エントリになるのでしょうか?

  • スレッドのロックに関するアルゴリズム

    今、プロセッサの並列処理に関する英文を読んでいるのですが、歯が立たなくて困っております。どなたか、知恵をお貸しください。 並列処理で発生する競合を検出するアルゴリズムの動作を示している箇所で、次の英文が出てきました。このアルゴリズムは、共通のロックを保持していない複数のスレッドが、共有サービス(メモリ?)にアクセスした場合に発生することのある競合をみつけるアルゴリズム、とのことです。 Set S(v) = S(v) intersection locks(th). If S(v) == NULL set, then raise an error. vは共有メモリ変数、C(v)は空でないロックのセット、locks(th)はすべてのロックを表すようです。 2つめの文章は、S(v)がNULLのときはエラーが発生、という意味だと思うのですが、1つめの文章の意味がよくわかりません。 intersectionとは論理積のことでしょうか? どなたか、知恵を貸してください!

  • エクセルのvbaが変数を使用すると上手く動作しない

    ものすごく初歩的な質問で恐縮ですが、教えて下さい。 やりたいことは、 「a」を変数として設定して、Cells(1, 1)を「a」に格納して、 セル番地A1に山という文字を入力しようとしています。 <test>の方は上手く動作してセル番地A1に山という文字列を入力できるのですが、 <test2>の方は、セル番地A1に入力してくれません。 おそらく変数の使い方がおかしいのだと思います。 a = Cells(1, 1)ではなく、test2のように、変数を使ってコードを記載したいのですが良い方法はありませんでしょうか? *************************************************************** Sub test () a = Cells(1, 1) Cells(1, 1) = "山" End Sub **************************************************************** Sub test2 () a = Cells(1, 1) a = "山" End Sub

  • 指定アドレスにジャンプさせたい場合【C言語】

    こんにちわ。 この度、初めてOK Waveから質問させて頂きます。どうぞ宜しくお願い致します。 現在、ルネサス製RX62Nを使ったマイコンボードを使用して、C言語によりプログラムを組んで様々な動作をさせているのですが、「RX62N内部のFlashROMの指定したアドレスにジャンプさせる方法」がうまくいかず、どなたか良い方法を教えて頂きたいと思います。 具体的には、変数Aに格納した値(32bit)をアドレスとして扱い、そのアドレスにジャンプしたいと考えています。 以前、他のかたの質問の回答で、  typedef void (*FN_PROGRAM)(void);  FN_PROGRAM pg = (FN_PROGRAM)0x20000000;  (*pg)(); という記述方法で20000000番地にジャンプできると記載があったため、早速、アドレスを0xFFFC0000に変更して動作させてみたところ、0xFFFC0000番地にジャンプさせる事ができ、大いに役に立ちました。 今回、私の方では、始めから0xFFFC0000番地と決め打ちせず、色々と計算をした後、最終的に決まったアドレスを変数Aに格納し、その格納した値をアドレスとして扱い、そこにジャンプさせる方法をとりたいと考えています。 お手数ですが、上記方法で、良い記述方法があればアドバイス頂けないでしょうか。できれば、使う変数Aの宣言文から教えて頂けると有難いと考えています。 説明が下手で申し訳ありません。C言語初心者ですので皆さまから色々とアドバイス頂けると助かります。よろしくお願い致します。、

  • GlobalAlloc について

    GlobalAlloc について 質問させて下さい。 VC++ 2005 MFC で開発しております。 仕様の概要と致しまして、 ::GlobalAlloc()でHGLOBALを取得し、 メンバ変数に格納(Arrayでリサイクルしていくイメージ)した後、スレッドを走らせ格納したHGLOBALを 使い処理をした後に、GlobalFree()でメモリを開放します。 アプリの仕様上、スレッドの処理に少々時間がかかり GlobalAlloc()とGlobalFree()が必ずしも一対一で実行されず、 スレッドのGlobalFree()が実行される前に別のGlobalAlloc()がくることがあります。 このような場合、下記のように確保するヒープ領域の取得したアドレスが 少しずつ増えてしまい、最終的には取得できなく(GlobalLockでNULLポインタ)なってしまいます。(4GB越え) 8バイトずつアドレスが増えていくとして ------------------------------------------------- ・一対一の場合 (同じアドレスが使用できる) 確保 開放 (1)0008 (2)0008 (3)0008 (4)0008 (5)0008 ・一対一でない場合 (開放される前に確保するので新しいアドレスを使用してしまう) 確保 開放 (1)0008 (2)0008 (3)0008 (4)0016 (5)0008((3)メモリ) (6)0024 (7)0032 (8)0040 (9)0016((4)メモリ) (10)0024((6)メモリ) (11)0032((7)メモリ) (12)0048 : : : ------------------------------------------------- GlobalFree()がもれているのではなく メモリを確保したものは遅れはするものの必ず開放はしています。 このような場合、上記の「一対一でない場合」の (6)で「0024」番地ではなく「0008」番地からメモリを確保することは出来ないのでしょうか? 確保と開放が一対一に統合されていればこのような問題はない(常に同じアドレスを使用できるため)のですが、 アプリの使用上、仕方ないと考えております。 説明が複雑になってしまい、わかりにくいとは思いますが、 お詳しい方がおられましたら、ご教授の程宜しくお願い致します。

  • Delphi6 DLL内でのメモリ共有(?)

    こんにちは、honiyonです。  複数アプリケーションからそれぞれコールバック関数を登録してもらい、状況に応じてそれぞれのコールバック関数を呼び出す、というDLLを作成しています。  しかし現在、呼び出しアプリケーションごとにメモリ空間が独立してしまい、コールバック情報を同一空間内で管理出来ずに困っています。  旧VerのDelphiで16bit DLLなら、interface部に定義した変数、オブジェクトはDLL内で同一空間内で共有出来るようですが、これをDelphi6 32bitDLLで行う事は不可能でしょうか? もしくは、その他の方法で独立メモリ空間を作らないようにする方法はありますでしょうか?  不可能な場合、CreateFileMappingが次に有効な手段として候補に挙がると思います。CreateFileMappingで管理クラスのポインタを渡してクラス共有というのは現実的な手法でしょうか?  よろしくお願いいます(..