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

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

新規登録して質問してみよう
ただいま回答率
85.48%
アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

Q&A

解決済

3回答

1783閲覧

メモリについて

strike1217

総合スコア651

アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

0グッド

0クリップ

投稿2016/08/24 00:59

例えば、char i = 'A';
とC言語で宣言した場合、メモリ上にchar分の領域が確保されると思うのですが・・・
OS側はどのようにしてメモリを確保しているのでしょうか??
メモリ用のデバイスドライバがあるのでしょうか??
CPUにもデバイスドライバのようなものが存在するのですか??

周辺機器にはデバイスドライバが必要ですが・・・CPUやメモリといったメインのハードウェアの制御はどうやっているんですか?

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

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

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

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

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

guest

回答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

KenjiToriumi

総合スコア344

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

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

0

こんにちは。

CPUにもデバイスドライバのようなものが存在するのですか??

そのように考えても間違いではないです。パソコンやそれ以上に大きなコンピュータのOSは大抵仮想記憶を制御するハードウェアを持っています。多くはCPUと非常に密に連携して動作します。(インテルのPC用CPUは内部に仮想記憶制御回路を持っています。)

それを制御するソフトウェアは通常OSのカーネルと密に連携しています。
なので、ここを「動的」に変更する必要がなく、カーネルと強く結びついてます。
ですので、ハードウェアを制御すると言う意味ではデバイス・ドライバと同じですが、作りはかなり異なっています。

char i = 'A';と記述した時にメモリがどこにどのように確保されるのかについては、メモリ管理について深く勉強されると良いと思います。

char i = 'A';はグローバル変数、ローカル変数、ヒープに確保された構造体くらいを想定すれば概ね網羅していると思います。それぞれの領域をOSがどのようにしてプロセスへ割り当てているのか?を勉強されると本当に力が付くと思います。

linuxのカーネル・コードを適切な参考書(できれば実列とそれを使った演習付き)を見ながら一通り理解できると上記全てを理解できるだろうと思います。

投稿2016/08/24 02:44

Chironian

総合スコア23272

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

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

strike1217

2016/08/24 03:28

CPU内部に仮想制御回路を持っているんですね! ありがとうございます。
guest

0

ベストアンサー

この質問は、ハードウェアよりの低レイヤからオペレーティングシステム(OS)まで、さまざまなレイヤの話が混ざってしまっているようです。

メモリ用のデバイスドライバがあるのでしょうか??
CPUにもデバイスドライバのようなものが存在するのですか??

「デバイスドライバのようなもの」が何をイメージしているかにもよりますが、メモリやCPUを制御する"ソフトウェア"という意味であれば、存在しないという答えが適切かと思います。たとえばメモリの制御は「メモリ管理ユニット(MMU)」というハードウェアが担います。CPUはそれ自身が計算主体ですから、CPUを制御するのはCPU自身と言えるでしょう。

OS側はどのようにしてメモリを確保しているのでしょうか??

モダンなOSでは、ハードウェアに搭載される"物理メモリ"とプロセスに割り当てる"仮想メモリ"を区別し、OS上で動作するプログラムに対しては物理メモリの一部を仮想メモリとして割り当てます。詳細は解説記事や書籍をあたってください。

例えば、char i = 'A'; とC言語で宣言した場合、メモリ上にchar分の領域が確保されると思うのですが

厳密な答えは「常にメモリが確保されるとは限らない」ですが、話を単純化すれば「OSがプロセスに割り当てた仮想メモリから、プロセス自身がその中の一部領域を変数iの領域として扱う」となります。

投稿2016/08/24 02:18

yohhoy

総合スコア6191

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

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

strike1217

2016/08/24 03:31

MMUはハードウェアなんですか! ありがとうございます。 最近のCPUはワイヤーロジックで組んであるようですが・・・ Linuxのカーネルソースをザッと見てみると・・・CPU.c というファイルがありましたので、CPUと関わりのある低レイヤのソフトウェアがあるのかなぁ と思ったのですが、、、
yohhoy

2016/08/24 04:00 編集

CPUとMMUは役割が異なるハードウェアですが、最近は同一パッケージ内(外から見たら1つの部品)に搭載されますね。ちなみに、Chironianさん回答にある「仮想記憶制御回路」がMMUに対応します。 http://lxr.free-electrons.com/source/kernel/cpu.c のことでしょうか。斜め見した感じだと、CPUホットプラグ関連の処理のようです。 "CPUやメモリというデバイスを制御するソフトウェア"という意味では、OSがまさにその役割を負います。(OS自身をデバイスドライバとは呼びませんけど)
strike1217

2016/08/24 03:55

ほおおお。 なるほど! ありがとうございます。 確かに、メモリやCPUの制御はOSの役割ですね。 デバイスドライバはOSの一部ですよね
yohhoy

2016/08/24 04:00

回答中ではOS=カーネル部のニュアンスで書いていましたが、たしかにデバイスドライバもOSの一部ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問