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

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

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

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

Q&A

解決済

3回答

1342閲覧

linuxのユーザモード時にはカーネルは動作していないですか?

Sonono

総合スコア85

Linux

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

0グッド

1クリップ

投稿2021/09/20 02:32

linuxの勉強を始めたばかりの初心者です。

OSとカーネルの関係がよくわかっていなかったのですが、本を読んでいたところ、「OSを構成するプログラムのうちカーネルモードで動作するプログラムの総称がカーネル」という意味のことが書いてありました。

なるほど!と思ったのですが、では、ユーザモードでCPUが動いている時にはカーネルは動いていないという解釈で良いでしょうか。「カーネルが動く」という表現をしばしば目にしますが、「カーネルが動く」=「カーネルモードでCPUが動作している」と解釈しています。

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

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

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

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

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

guest

回答3

0

ベストアンサー

ユーザモードでCPUが動いている時にはカーネルは動いていないという解釈で良いでしょうか。

いいえ。捉え方次第なところはあると思いますが、Linuxのようなマルチタスク、マルチユーザー、プリエンプティブなOSでは各プロセスの実行時間の配分に時分割(タイムスライス)も行います。ユーザーモードでプログラムが動いていてもタイマー割込み等やディスク、ネットワークアダプターなど他のデバイスからのI/Oで起動する割込みハンドラー、デバイスドライバーの実行で、カーネルモードのプログラムも実質的に常時、動いているかたちです。そうでないとマルチタスクが実現できないし、非同期に割り込んでくる外部デバイスからのデータの送受にも対応できません。

余談ですが、過去にはマイクロソフトWindows 3.x というノンプリエンプティブなGUI OSがありました。これなどはほとんどユーザーモードのプログラムで動いていますが、そのプログラムが明示的にCPUの利用権を手放さないと他のプログラムが動かないかたちでした。それでもマウス入力やネットワーク、ディスクI/Oなどはあるので、やはりカーネルモードでWindowsカーネルが強制的に動作する部分はあるものです。

完全にユーザーモードだけで動くOSだと、そのユーザーモードで動いているプログラムが暴走したときに対処できなくなるので、それを制御できるカーネルモードでのプログラムは消えることなく常に存在し、稼働し続けます。

投稿2021/09/20 03:03

dodox86

総合スコア9256

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

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

dodox86

2021/09/20 03:11

ハイパースレッディングすらない完全にシングルコアの昔のIntel CPUであれば、ある時間を切り取ってみれば必ず一つのプログラムしか動いていないでしょうから、そのCPUで動くLinuxであれば「ユーザーモードで動いているときはカーネルモードのプログラムは動いていない」と言えたかもしれません。
Sonono

2021/09/20 03:46

詳しい解説ありがとうございます!! マルチタスクに見えてもミクロで見るとシングルタスクでユーザモードとカーネルモードが高速で切り替わっているのかと思ったのですが、そうではないのですね。 まだOSの用語に詳しくなく、自分の知っている用語でdodoxさんの言っていることをとりあえず解釈してみたのですが、以下の解釈はあっていますでしょうか?(図々しくすみません。) >プリエンティブなコンテキスト切り替えのためにはスケジューラ(カーネルモードで動作)が常に動いている必要があるはずなので、カーネルは常に動いているといえる。
dodox86

2021/09/20 04:06

>プリエンティブなコンテキスト切り替えのためにはスケジューラ(カーネルモードで動作)が常に動いている必要があるはずなので、カーネルは常に動いているといえる。 言葉の使い方の問題になりますが、「必要があるはず=そう動いていると言える」と判断するのは早計な話になってしまいます。推測と事実は違います。が、まぁ、良いのではないでしょうか。「Linux スケジューラ タイマー割込み」などとキーワード検索すれば関係が分かると思います。 前後しますが、 > マルチタスクに見えてもミクロで見るとシングルタスクでユーザモードとカーネルモードが高速で切り替わっている > のかと思ったのですが、そうではないのですね。 これはこれで状況によっては合っている気もします。しかしながら今時のマルチコア、メニイコアなCPU環境で見ると、そのように相互排他な状況になっているとは考えづらいです。そのような実行環境ではある時間を切り取ってみてもまさに同時に複数のコアで動いていると推測しています。その辺りの最新事情も探ってみると面白いかと思います。
Sonono

2021/09/20 04:28

``` 「必要があるはず=そう動いていると言える」と判断するのは早計な話になってしまいます。推測と事実は違います。 ``` 確かにそうですね汗 とりあえずはそう理解することにしますが、いつかちゃんと理解するようにします。 色々教えていただいてありがとうございました!今はまだよくわからない話も多いですが、勉強して理解するのが楽しみです!ありがとうございました。
guest

0

カーネルは動いています。
その管理下でユーザーモードのプログラムが動きます
大雑把にいえば、、、

投稿2021/09/20 02:57

winterboum

総合スコア23567

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

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

0

CPUのカーネルモードのことであれば、

・マルチコアCPUにおいては、ある瞬間において1つのコアがユーザーモードであっても、同じ瞬間に別のコアがカーネルモードということは普通のことでしょう。

・特定の1つのコアに注目した場合、ある瞬間においてユーザ-モードのプログラムが動いているのであれば、同じ瞬間にはカーネルモードのプログラムが動いていないことは明かでしょう。

という自明のことを聞いているのでは無いと思いますので、質問ポイントを整理された方が良いと思います。
あるいは、上記の前者があり得るかという意図の質問でしょうか?

投稿2021/09/20 04:38

otn

総合スコア85901

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

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

Sonono

2021/09/21 03:04

回答ありがとうございます。私も自分の混乱の元がよくわからなくなってしまったのでもう一度考えてみました。 >・マルチコアCPUにおいては、ある瞬間において1つのコアがユーザーモードであっても、同じ瞬間に別のコアがカーネルモードということは普通のことでしょう。 ・特定の1つのコアに注目した場合、ある瞬間においてユーザ-モードのプログラムが動いているのであれば、同じ瞬間にはカーネルモードのプログラムが動いていないことは明かでしょう。 ↑について、元々はそのように理解していました。ただ、「OSを構成するプログラムのうちカーネルモードで動作するプログラムの総称がカーネル」と知ってから混乱してしまいました...。 「OSがCPUを操作する」「CPUのモードにはカーネルモードとユーザモードがある」というのが元々理解していたことです。 ただこれに「OSを構成するプログラムのうちカーネルモードで動作するプログラムの総称がカーネル」という知識を追加しようとすると、「CPUではなくOSを構成するプログラムがカーネルモードなのか?」と混乱してしまいました。 「OSを構成するプログラムのうちカーネルモードで動作するプログラムの総称がカーネル」というのはどう理解すればいいのでしょうか?
Sonono

2021/09/21 03:05

そもそも、OSを構成するプログラムというのが具体的にイメージできていないです...。
Sonono

2021/09/21 04:03

すみません、カーネルとカーネルモードの区別がついておらず混乱していました。カーネルはOSの一部で、カーネルモードはCPUの話。「カーネルが動いている」という場合はカーネルモードではなくカーネルの話をしているということですね。 お騒がせしました。
otn

2021/09/21 15:33

> すみません、カーネルとカーネルモードの区別がついておらず混乱していました。 なるほど。別の概念を混同していたのでは混乱するばかりですね。何故混同したのかを自己分析することが成長につながります。
Sonono

2021/09/22 00:16

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問