質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

5回答

1633閲覧

CPUのコンテキストスイッチについて

curl

総合スコア19

CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2018/11/05 13:25

お世話になります。

CPUが処理するプロセスを切り替えるために使用するコンテキストスイッチについて質問があります。

  • まず、コンテキストスイッチが発生した際に、切り替わる前に使用していたコンテキストデータは物理的にどこに退避されるのでしょうか。

個人的にはCPU上のキャッシュメモリ(L1等)に保存されるのかと思っています。

また、上記認識が正しかった場合に、疑問があります。

  • コンテキストはプロセスごとに作成されるため、プロセス数が多くなるとコンテキストの情報が多くなり

CPUのキャッシュメモリだけではデータを格納しきれないと思っています。その様な場合には
新たなプロセスは作成されない、またはコンテキストデータをメモリに退避するなどの処理が発生するのでしょうか。

いろいろネットを検索したのですが、該当する情報を得ることができなかったため質問させて頂きます。

以上、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

キャッシュメモリについての理解が間違っています。
この件についてはキャッシュメモリは忘れてください。

コンテクストスイッチの方法は、OSによって異なると思いますが、例えば、
・スタックポインタ以外のレジスタなどを全てスタックにプッシュする
・スタックポンタをそのプロセスの情報を管理する構造体に保存する
・切り替え先のプロセスの情報管理構造体からスタックポインタをロードする
・レジスタなどをポップする

投稿2018/11/05 14:07

otn

総合スコア84503

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2018/11/06 13:44

> そのプロセスの情報を管理する構造体 これって OSの管理領域ですね。 書かないと分からない人もいるのではないかと。
otn

2018/11/06 13:48

コンテクストスイッチ自体が、OSの機能なので、OSの中の話と分かると思います。
curl

2018/11/08 15:25

ご回答ありがとうございます。 いろいろ記載頂きありがとうございます。 知識がなかったので大変助かります。
guest

0

CPU上のキャッシュメモリ(L1等)に保存される

コンテキストデータをメモリに退避する

結果的にはそうなるでしょう。
ただ、どのデータをどこに保存するかはプログラムは(基本的には)関知しません。
プログラムはあくまでコンテキストデータをメモリに保存しようとしますしメモリから読み出そうとします。
どのデータをキャッシュに保持しておくかはCPUのハードウェアが考えることです。

投稿2018/11/06 01:06

ikadzuchi

総合スコア3047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2018/11/06 13:43

> どのデータをキャッシュに保持しておくかはCPUのハードウェアが考える OS(カーネル)も共犯だと思います。 (最近の見て無いですが)
curl

2018/11/08 15:24

ご回答ありがとうございます。 >どのデータをキャッシュに保持しておくかはCPUのハードウェアが考えることです。 自分の方でも、OSも共犯なのか調べてみます。 勉強になりました。
guest

0

ベストアンサー

・まず、(略)物理的にどこに退避されるのでしょうか。

→物理的にはまずCPU上のメモリライトキャッシュに乗り、メインメモリに書き出されます。

・コンテキスト(略)

→上記の通り最初からメインメモリに書き出されるものですので、発生しません。

 おそらく、退避と復帰がパフォーマンスに影響する点を気にされているのではないかと思われますが、そもそもプログラム自体がメインメモリから命令とデータを読み込んで動作するものですので、コンテキストスイッチで退避した部分だけがL1キャッシュから読み込めたとしても大差はありません。

投稿2018/11/08 03:17

himazin.blm

総合スコア581

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

curl

2018/11/08 15:22

ご回答ありがとうございます。 ずばり知りたかったことを記載して頂きありがとうございました。
guest

0

こんにちは。

386以降、その辺りの仕組みが非常に複雑化したので性能改善のためのより複雑な機構がある筈ですが、基本的にはコンテキスト情報(アドレス・レジスタやデータ・レジスタ、ページ・レジスタ等)はスタックへ待避されます。

投稿2018/11/06 01:27

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

curl

2018/11/08 15:23

ご回答ありがとうございます。 スタックについて、あまり理解していなかったので再度調べてみます。
guest

0

なにを対象としての質門なのか提示されてないので、ふわっとした回答しかできませんが、
FreeRTOSとかToppersとか、ソースが公開されているマルチタスクOSはいくつかあるので、そういうのを読んで、どうしてるのかを見てみればどうでしょう。

投稿2018/11/06 00:52

y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

curl

2018/11/08 15:24

ご回答ありがとうございます。 確かにソースコードを読んでみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問