例えば、char i = 'A';
とC言語で宣言した場合、メモリ上にchar分の領域が確保されると思うのですが・・・
OS側はどのようにしてメモリを確保しているのでしょうか??
メモリ用のデバイスドライバがあるのでしょうか??
CPUにもデバイスドライバのようなものが存在するのですか??
周辺機器にはデバイスドライバが必要ですが・・・CPUやメモリといったメインのハードウェアの制御はどうやっているんですか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
既に他の方の回答にあるように、一言にメモリ管理と言っても複数のレイヤの話があります。
現在の一般的なOSである Windows,VCなど例では、以下のような感じですかね。
- ハードウェア(CPU内のメモリ管理ユニット)が、物理メモリ<->仮想メモリの機能をOSのカーネルに提供
- OSは、物理メモリ・仮想メモリを管理して、ドライバやユーザプロセスに対してメモリ管理機能を提供
- Cなどランタイムは、OSのメモリ管理機能を使ってヒープ領域の確保を行う。
ヒープ内の細かなメモリ管理はOS提供のヒープ機能をほぼそのまま使う場合もあれば、独自のメモリ管理が行われる場合もある。(mallocはユーザー自作のコードに置き換える事ができる) char i = 'A';
で、iをどこに記憶するかはCコンパイラが決定する。
ローカル変数はスタックに領域確保される可能性は高いが、C言語の仕様ではなくコンパイラの実装仕様なので、ヒープに確保されているかもしれない。リリース版ビルドなどで最適化が行われると、CPUのレジスタが割り当てられてメモリ領域は使用しないことも普通に発生する。
メモリ用のデバイスドライバがあるのでしょうか??
特定CPUに特化したOSでない限り、HAL(Hardware Abstraction Layer)でCPUやハードを抽象化するので、MMUを直接制御するのはHALという事になります。
ただ、HALは最低限必要な抽象化処理に留まるのが基本なので、細かな物理メモリ・仮想メモリの管理は、上記の通り、OSカーネルの仕事となるのが一般的です。
投稿2016/08/24 15:09
総合スコア344
0
こんにちは。
CPUにもデバイスドライバのようなものが存在するのですか??
そのように考えても間違いではないです。パソコンやそれ以上に大きなコンピュータのOSは大抵仮想記憶を制御するハードウェアを持っています。多くはCPUと非常に密に連携して動作します。(インテルのPC用CPUは内部に仮想記憶制御回路を持っています。)
それを制御するソフトウェアは通常OSのカーネルと密に連携しています。
なので、ここを「動的」に変更する必要がなく、カーネルと強く結びついてます。
ですので、ハードウェアを制御すると言う意味ではデバイス・ドライバと同じですが、作りはかなり異なっています。
char i = 'A';
と記述した時にメモリがどこにどのように確保されるのかについては、メモリ管理について深く勉強されると良いと思います。
char i = 'A';
はグローバル変数、ローカル変数、ヒープに確保された構造体くらいを想定すれば概ね網羅していると思います。それぞれの領域をOSがどのようにしてプロセスへ割り当てているのか?を勉強されると本当に力が付くと思います。
linuxのカーネル・コードを適切な参考書(できれば実列とそれを使った演習付き)を見ながら一通り理解できると上記全てを理解できるだろうと思います。
投稿2016/08/24 02:44
総合スコア23272
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
この質問は、ハードウェアよりの低レイヤからオペレーティングシステム(OS)まで、さまざまなレイヤの話が混ざってしまっているようです。
メモリ用のデバイスドライバがあるのでしょうか??
CPUにもデバイスドライバのようなものが存在するのですか??
「デバイスドライバのようなもの」が何をイメージしているかにもよりますが、メモリやCPUを制御する"ソフトウェア"という意味であれば、存在しないという答えが適切かと思います。たとえばメモリの制御は「メモリ管理ユニット(MMU)」というハードウェアが担います。CPUはそれ自身が計算主体ですから、CPUを制御するのはCPU自身と言えるでしょう。
OS側はどのようにしてメモリを確保しているのでしょうか??
モダンなOSでは、ハードウェアに搭載される"物理メモリ"とプロセスに割り当てる"仮想メモリ"を区別し、OS上で動作するプログラムに対しては物理メモリの一部を仮想メモリとして割り当てます。詳細は解説記事や書籍をあたってください。
例えば、char i = 'A'; とC言語で宣言した場合、メモリ上にchar分の領域が確保されると思うのですが
厳密な答えは「常にメモリが確保されるとは限らない」ですが、話を単純化すれば「OSがプロセスに割り当てた仮想メモリから、プロセス自身がその中の一部領域を変数iの領域として扱う」となります。
投稿2016/08/24 02:18
総合スコア6191
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/24 03:31
2016/08/24 04:00 編集
2016/08/24 03:55
2016/08/24 04:00
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。