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

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

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

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

Q&A

解決済

2回答

1077閲覧

linux スレッドの切り替えについて

akiyama3284pga

総合スコア186

Linux

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

0グッド

0クリップ

投稿2022/03/06 02:38

プロセスの切り替えとスレッドの切り替えにつきまして整理しておきたいと存じます。


スレッドの切り替えは、
プロセスの切り替えと違い、アドレス空間を切り替える必要がないため
ユーザ空間内で切り替えができる。

つまりは、
カーネルモードへの切り替えも必要ないし、
当然カーネルスレッドに切り替えるためのコンテキストスイッチも起きないし、
プロセスを切り替えるコンテキストスイッチも起きない。


大雑把ではありますが、このような認識でよろしいでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

「ユーザ」スレッドであればそうです。
「ユーザ」を書かないあたりよくわかってないようにも見えます。
前の質問(https://teratail.com/questions/ey8b3zgguxzw7v) でカーネルモードへの遷移を考えない方がいいと言ったのは、それが本質ではないからで、遷移しないからではありません。念のため。

スレッドモデルについて参考ページを挙げておきます。
https://www.ibm.com/docs/ja/aix/7.2?topic=processes-thread-models-virtual-processors
https://docs.oracle.com/cd/E19620-01/805-5818/6j5g78lkj/index.html

投稿2022/03/06 03:37

sigsegv

総合スコア895

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

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

akiyama3284pga

2022/03/06 04:25

失礼いたしました。 ユーザスレッドと書くべきでした。 ------------------------------------------ あるプロセスのユーザスレッド同士の切り替えはユーザ空間内で行われる。 つまりプロセス切り替え時のように、ユーザメモリ空間の切り替えが不必要であるから、カーネル空間で行われるコンテキストスイッチのためにカーネルモードへの移行が必要ない。 1:1の対応では、カーネルスレッドにより直接実行される(linuxではこの方式であり、タイムスライスでcpu時間を使い果たすとタイム割り込みが入り、カーネルスレッドとユーザスレッドのセットが切り替わる。)ので、カーネル空間のカーネルスレッドの切り替えについてはコンテキストスイッチをする必要があるので、つまりはユーザ空間でのプロセスのユーザスレッドの切り替え時には、コンテキストスイッチが発生ということ。 だから最初の資料で、N:1の場合にはコンテキストスイッチのコストが削減できる。(コンテキストスイッチが起きないので) ------------------------------------------ このような理解でよろしいでしょうか? あと、追加で申し訳ございません。<(_ _)> 頂きました資料中、 「M:1 モデルでは、すべてのユーザー・スレッドが 1 つのカーネル・スレッドにマップされ」 という部分がありましたが、この点は1つのプロセス内で生成されたスレッドに対しての意味でつまりはそれぞれのプロセスという箱に一つずつのカーネルスレッドの対応があるという認識でよろしいのでしょうか?
sigsegv

2022/03/06 23:09

>このような理解でよろしいでしょうか? 問題ありません。 >この点は1つのプロセス内で生成されたスレッドに対しての意味でつまりはそれぞれのプロセスという箱に一つずつのカーネルスレッドの対応があるという認識でよろしいのでしょうか? 合っていると思います。1:1, N:1, M:N などのスレッドモデルは一つのプロセスの中の話です。 OSの中では複数のプロセスが動いていますが、その並列性の話ではありません。 あるプロセスは 1:1、あるプロセスは N:1 モデルで動いていたってかまいません。
akiyama3284pga

2022/03/07 02:41

ありがとうございます。 大変勉強になりました。<(_ _)> また機会がありましたらよろしくお願いいたします。
guest

0

大雑把ではありますが、このような認識でよろしいでしょうか?

全然違うと思いますが…。何を見てそう思いましたか?
そもそもの問題として「切り替え」を行う主体は誰ですか? とか、何に対して何から何へ切り替えるんですか? というのを考えてみてください。設問自体がおかしいことに気付くと思います。

投稿2022/03/06 03:02

angel_p_57

総合スコア1672

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問