- ベストアンサー
cpu、プログラムカウンタについて
cpuやプログラムカウンタについてお伺いしたいです。例えば、 cpuコア1つのコンピューター上で2つのwebアプリAとBが動いているとします。 アプリAの次にアプリBの命令を処理するとき、Aの終了時にはBの命令のアドレスがプログラムカウンタに入っているのでしょうか? そうだとして、AはどのようにBのアドレスを知るのでしょうか
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
どちらでもないとおもいますが。。 マルチタスクシステムの下で、AとBは動きます。 なので、Aの実行中に、AのPCを含むすべてのレジスターを Aが持っているSPに退避、そしてBのSPに切り替え その後Bは、SPから全レジスターを復元Bの実行が始まり、 Bの切り替えが発生する時、同じようにBのPCを含むすべての レジスターがBが持ってるSPに退避。 後は繰り返し。 各タスク側のレジスターが全部保存された後は、 マルチタスク側のレジスタで処理ができるので、 そのまま計算。SPを切り替えたら復元するわけなので、 マルチタスク側のレジスタはそこで破壊されるので、 適切に保存してからスイッチ。 この辺の概念は、アセンブラで、CALL命令をやればスタックにPCが 保存される様子がわかるとは思いますよ。 いわゆる単純なTSSシステムではこんな感じで 実行が続いていきます。 やってみれば簡単ですよ。
その他の回答 (2)
- bardfish
- ベストアンサー率28% (5029/17766)
今はそれを受け持っているのはOSです。 AプログラムがBプログラムのアドレスやメモリを参照できてしまうとセキュリティ的に非常にまずいので出来ないようにOSは作られています。 パソコンで使われているようなCPUの話ではなくシングルコアでアドレス空間がMBレベルのPICの親分みたいなCPUならアーキテクチャ次第です。 ですが、そういうCPUを使用しているものではマルチタスクではなくイベント起動型シングルスレッドかもしれません。 それなら絶対アドレス指定でデータを記憶しておくという作り方も出来るでしょう。 いずれにしろ、組み込みコンピューターでの話になると思います。
- wormhole
- ベストアンサー率28% (1626/5665)
OSによるのですがWindowsNT系やUnix,Linuxなどは プロセスはそれぞれの仮想アドレス空間で動作しているため、 通常、プロセスが他のプロセスのアドレスを知ることはできません。 この辺が参考になるかと。 https://docs.microsoft.com/ja-jp/windows-hardware/drivers/gettingstarted/virtual-address-spaces