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

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

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

機械語とは、プロセッサが直接解釈・実行できる状態の言語です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

Q&A

解決済

3回答

1092閲覧

windowsOSのカーネルの機能について

nowanowa

総合スコア1

機械語

機械語とは、プロセッサが直接解釈・実行できる状態の言語です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

0グッド

0クリップ

投稿2021/12/19 05:32

windowsOSのカーネルについて勉強している初心者です。
windowsOSのカーネルは、機械語で書かれたハードウェアを操作する部分と、その機械語で書かれた部分を呼び出す形でC言語で記述された、ハードウェアを操作等する部分があり、アプリケーションは、そのカーネルの機能を、windowsAPIという形で利用し、アプリケーションが稼働する。
上記の考え方であってますでしょうか...?

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

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

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

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

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

Bull

2021/12/19 07:05

Windows のカーネルに関する情報は詳細には公開されていないように思いますが、どのような資料を参考にしていますか?
nowanowa

2021/12/19 07:40

ネット上でwindowsのカーネル周辺を説明している記事をいくつか見て、勉強している状態です。
Bull

2021/12/19 08:20

ネットの記事はいいかげんなものもありますからね。 私の持っている書籍 ( https://www.amazon.co.jp/dp/4822253570 ) によると、Windows の大半は C言語で書かれていて、一部 C++ が使われているようです。 機械語は必要な部分のみ使われているそうです。 ところで、カーネルとはどの部分を指していますか? Windows にはカーネルと呼ばれるコンポーネントがあるのですが、それのことですか?
nowanowa

2021/12/19 08:32

本のリンクありがとうございます。 カーネルは、OSを稼働させる機能とアプリケーションとハードウェアの仲介をする機能の両方を持っているイメージで、特に後者の機能をもつ部分について、カーネルと呼んで質問させていただいた形です。 アプリケーションが動作するときに、どのようにwindowsOSのカーネルやハードウェアと関わって動作するのか、全体のイメージがもてたらよいなと思って勉強してました。
nowanowa

2021/12/19 08:36

@radian プログラミングに関する質問を扱っているところなんですね。IT全般を扱っていると思ってました。失礼しました。
thkana

2021/12/19 09:12

感想の次元ですが、 > 特に後者の機能をもつ部分について、カーネルと呼んで質問させていただいた形 ハードウェアとの仲介をする部分を「特にカーネルと呼ぶ」ことについて強い違和感があります。
dodox86

2021/12/19 09:15

@質問者 nowanowaさん 「OS」と言うタグがあるくらいなので、プログラミングに直結しないものは即禁止、という訳でもないです。OSを理解することで適切なプログラミングができるようになる、と言うこともあるので。ただ、質問の内容が漠然としていると回答が避けられがちとなります。「プログラミング何でも相談室」ではないことは確かです。
ikadzuchi

2021/12/19 09:57

OSのカーネルの機能について勉強するのがプログラミングに関係ないとは私には到底思えません。
退会済みユーザー

退会済みユーザー

2021/12/20 04:10 編集

> teratailでは、プログラミングに関して困っていることがないと思われる質問を推奨していません。 少なくともサイトの趣旨には合ってないっすね。
nowanowa

2021/12/25 02:02

@dodox86 ありがとうございます。もう少し疑問が具体的になってから気を付けて質問しようと思います。
ikadzuchi

2021/12/25 08:29

「困っている」ではないという意味でしょうか? 勉強している中で考え方があっているか分からなくなるのは十分に「困っている」でしょう。 「プログラミングに関して困っていることがないと思われる質問」の例は仲間募集や人生の悩み相談です。
退会済みユーザー

退会済みユーザー

2021/12/27 02:57 編集

まあ私は推奨していない質問の内容を確認した上での低評価です。単純に解釈の違いになると思うので、これ以上あなたと議論を続ける気はないですし、低評価取り下げる気もないので、納得行かなければ運営に問い合わせてみてください。
guest

回答3

0

ベストアンサー

回答し辛い質問です。
「そういう部分もあるのか」と言われれば多分 yes ですが、うかつに肯定するとそれで全体を俯瞰した気になられそうで怖いです。

取り敢えずOverview of Windows Componentsというmicrosoft社のページに全体像が載っています。

  • ハードウェアを操作等する部分があり
    上述ページのDevice & File Sys. Drivers や Graphics Drivers が該当するでしょう。
    それを何の言語で記述しているか。機械語が必要になる部分もあるでしょうし、Cや、場合によってはC++等も使われるかも知れません。
    ※何の言語かって重要ですか?
  • カーネルの機能を、windowsAPIという形で利用
    アプリケーションは、最終的にntdllを通じてkernelの機能を利用しますが、そこに介在するOSのdll(図中Subsystem DLLs)内で各種Windows APIが定められてます。なので「カーネルの機能をwindowsAPIという形で利用」で良いと思いますが、「ユーザがwindowsAPI使うとハードを自在に操れる」とか「windowsAPIの機能はハードウェア操作」的に思われるようなら、それは違うだろう、ということになります。
    ※聞き方が偏っているので曲解されそうで怖い

質問されるのであれば、何が焦点なのかはっきりさせないと答える側が怖い思いしますし ( 例えば、うかつに答えると「kernelの機能はハードウェア操作only!」とか曲解されないか、とか )、全体を俯瞰したいなら公式のドキュメントあたるなり、参考書籍にあたる、そういった情報元の提供依頼を出す、というようにした方が良いと思います。

投稿2021/12/19 06:37

angel_p_57

総合スコア1672

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

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

nowanowa

2021/12/19 08:12

詳しくありがとうございます! Subsystem DLLsをアプリケーション側から呼び出すことで、NTdllを介してkernel(の一部の機能を定められた形で)利用できるようにしているのがwindowsAPIで、 kernel上ではハードウェア操作以外の様々な処理も行われている、というイメージでしょうか。(間違っていたらすみません) アプリケーションが動作するときに、どのようにwindowsOSのカーネルやハードウェアと関わって動作するのか、全体のイメージがあまりもてなかったので、今回質問させていただいた形になります。 送っていただいたリンクで全体像が少しわかったので、もう少し本などで勉強してわからないところがはっきりしてから質問するようにしようと思います。
angel_p_57

2021/12/19 12:29

> kernel上ではハードウェア操作以外の様々な処理も行われている、というイメージでしょうか。 はい。そのイメージで良いと思います。 また、アプリケーションからの依頼に応えるだけでなく、各アプリケーションへのCPU時間やメモリの割り当てを制御するなど、kernel自身が能動的に行う仕事もあります。 > 全体のイメージがあまりもてなかったので、今回質問させていただいた形になります。 そういった目的であれば、Windowsに限らずOS一般に求められる機能ということで、解説書なり(例えばOSを自作するような話の書籍も世の中にはあります)大学の講義資料を眺めてみるというのもあるかも知れません。 ※あんまり深入りして混乱すると元も子もないので、どの程度掴めれば十分か見極めながらどうぞ
nowanowa

2021/12/25 01:55

> 解説書なり(例えばOSを自作するような話の書籍も世の中にはあります)大学の講義資料を眺めてみるというのもあるかも知れません。 ありがとうございます。その辺りから入ってみようと思います。
guest

0

だいぶ違う。
(質問者さんが思っているような、そんな単純な話ではない。)

これ↓に。全部書いてある。
とっても難しいけど、「根性」出して何度も読み返すと、色々わかってとっても面白いです。
(日本語の第7版下巻は、いまだに発売されていないけど。)

インサイドWindows 第7版
https://www.amazon.co.jp/dp/B07DJ1Q2B4/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

投稿2021/12/22 08:26

Bego

総合スコア69

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

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

nowanowa

2021/12/25 02:05

本のリンクありがとうございます! 見てみようと思います。
Bego

2021/12/27 01:53

ちなみに Microsoft は、NT OS カーネル (ntoskrnl.exe) をはじめとするほぼすべてのプログラム モジュール (exe, dll, sys 等のファイル) のシンボル ファイル (pdb) を無償で公開しています。 なので WinDbg 等のデバッガを使えば、個々のモジュールがどんな API をインポート/エクスポートしているのかを簡単に確認できるし、デバッグトレースすればそれら API にどんなパラメータが渡されているのか、「自分で」確認することができます。 (Windows システムの一番核となる ntoskrnl.exe でさえもデバッガを使えば、どんな関数が実装されているのか確認できます。) 逆説的には、シンボル ファイルの提供が、マルウェアを生み出してしまう温床にもなってしまっている。。。。ってことです。 いわゆる「ハッカー」さん達は、エンジニアとしての「矜持」として、そーいった解析労力を惜しまず調べることで OS の脆弱性やそれに対する最善策を見つけ出している訳で、「作った人に訊け!」というのは、私に言わせればエンジニアとしての「矜持」を捨てているのとおんなじ。
guest

0

そういうことはそれを作ったところに聞きましょう
アカの他人に聞いたところで、それがホンマかどうか誰にもわかりません

投稿2021/12/19 05:57

y_waiwai

総合スコア87774

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

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

nowanowa

2021/12/19 08:20

ありがとうございます。そんな気もしてきました。 回答ありがとうございました。
dodox86

2021/12/19 09:18

低評価はしていませんが、仮にソースが公開されていないようなプロプライエタリな製品、OSでも、公式や信頼ある情報を読み解くことでかなりの部分まで理解することは可能です。
dodox86

2021/12/19 09:22

> そういうことはそれを作ったところに聞きましょう ぶっきらぼうな物言いかもしれませんが、これが「公式の情報にあたれ」と言い換えられなくもないですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問