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

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

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

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

Q&A

解決済

1回答

1990閲覧

メモリの分割で混乱しています。

strike1217

総合スコア651

アーキテクチャ

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

1グッド

2クリップ

投稿2016/09/22 09:01

よく本で。論理アドレス → リニアアドレス(仮想アドレス)→ 物理アドレス
という順で変換しています・・・・みたいに書いてあるのですが、

1、セグメントで分割しているというのは、プログラムの内部単位ぐらい細かく分割しているのでしょうか??
例えば、 readelf --segments hello のコマンドを打って出てくるセグメントとメモリを分割しているセグメントとは別物でしょうか?

2、現在のLinux,WindowsなどのOSはセグメント方式とページング方式の両方を採用しているのでしょうか?
時々、「現在のOSはセグメント方式は採用されていません。」という情報を目にするのですが・・・
結局のところどうなんですか?

3、objdump -d hello のコマンドで出てくるアセンブリコードの右側に出てくるアドレスというのは論理アドレスですか? リニアアドレスですか?

00000000004003e0 printf@plt:
4003e0: ff 25 12 05 20 00 jmpq *0x200512(%rip)
4003e6: 68 00 00 00 00 pushq $0x0
4003eb: e9 e0 ff ff ff jmpq 4003d0 <_init+0x28>

4、リニアアドレスと論理アドレスとは、結局何が違うのでしょうか?
int s = 9;
printf("%x", &s);
このプログラムで見ることができるアドレスはリニアアドレスの方であっていますか?

どなたかお願いします。

kazuyakazuya👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。

readelf --segments hello のコマンドを打って出てくるセグメントとメモリを分割しているセグメントとは別物でしょうか?

その通り別物です。

MMUのセグメント方式はWikipediaにもありました。ページング方式もありました。

さて、リンカはプログラムが使用しているメモリの種別毎(初期化領域やコード領域など)に「セグメント」として分割しリンクします。この場合のセグメントとMMUのセグメント方式は全く別物です。そしてreadelfのセグメントは前者です。

「現在のOSはセグメント方式は採用されていません。」

実際の採用状況は把握していませんが、セグメント方式は複雑ですし、それ使いこなすソフトウェアはかなり複雑になる(信頼性が必要な部分を複雑にするのはあまり良くない設計です)ので、採用しているOSが少ないというのは納得できます。最近はメモリを潤沢に使えますから、採用しているOSが皆無でも驚きません。

objdump -d hello のコマンドで出てくるアセンブリコードの右側に出てくるアドレスというのは論理アドレスですか? リニアアドレスですか?

この辺の用語は統一されていませんので、あまり厳密に考えてもしかたがないと思います。
概ねリニア・アドレス=論理アドレスと考えて良いと思いますよ。

投稿2016/09/22 11:00

Chironian

総合スコア23272

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

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

strike1217

2016/09/22 12:04

ふむふむ・・・ なるほど。 ありがとうございます。
strike1217

2016/09/22 12:22

最近の低レイヤーの基本形はi386系から来ているものなんですかね?? i386を調べれば、そのあたりのことがわかりますかね?
Chironian

2016/09/22 13:00

> 最近の低レイヤーの基本形はi386系から来ているものなんですかね?? 80386は1985年から生産されてますが、ページング方式の仮想記憶は1960年頃からあるようです。https://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E8%A8%98%E6%86%B6#.E6.AD.B4.E5.8F.B2 > i386を調べれば、そのあたりのことがわかりますかね? 良い参考書を見つけることがベストと思いますよ。 386だとセグメント方式も入っているのでそれに惑わさるかも知れません。
strike1217

2016/09/22 13:04

むむ・・・ 歴史が絡んでくるとやはり難しくなってしまいますね〜 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問