1,2枚目を見るとセグメントという単位でメモリを分けるんだとわかります。3枚目で、セグメントレジスターがあるとわかります。これを使って設定すればセグメントサイズを設定できる。追記された資料は、恐らく8086が持つ「メモリセグメント」の話ですね。30年以上前の技術です。仮想メモリとは事実上無関係です。Dynamics社のロボット」くらいの差があります。https://www.youtube.com/watch?v=_sBBaNYex3E追記された資料は、恐らく8086が持つ「メモリセグメント」の話ですね。30年以上前の技術です。仮想メモリとは事実上無関係です。Dynamics社のロボット」くらいの差があります。編集>仮想メモリとは事実上無関係です。すると、ここではセグメント方式(セグメンテーション)の話をしているわけではない・・・ってことですよね?「メモリセグメント」と「セグメンテーション」は違うみたいですがあたかも同じように書かれているのはなぜでしょうか?>仮想メモリとは事実上無関係です。同じように書かれているのはなぜでしょうか?それは著者さんに聞かないと分からないです。8086のセグメント・レジスタの解説としてはあまり適切な印象は受けません。あれは単に16bitでは不足したメモリ空間を20bitへ増やすための手段です。本来セグメント・レジスタは4bitで足りるのですが、16bitあるので64KBytes境界付近を触る時に便利だった記憶があります。(大昔に触った時の記憶ですが。)しかし、セグメント分割することにメリットはありませんでした。意味があるなら現在でもそのような方式が生き残っている筈です。現在はアドレス空間を下手に分割すると不便になるだけなので「分割のないフラットな空間にする」ことが一般的です。それは著者さんに聞かないと分からないです。8086のセグメント・レジスタの解説としてはあまり適切な印象は受けません。あれは単に16bitでは不足したメモリ空間を20bitへ増やすための手段です。本来セグメント・レジスタは4bitで足りるのですが、16bitあるので64KBytes境界付近を触る時に便利だった記憶があります。(大昔に触った時の記憶ですが。セグメント分割することにメリットはありませんでした。意味があるなら現在でもそのような方式が生き残っている筈です。現在はアドレス空間を下手に分割すると不便になるだけなので「分割のないフラットな空間にする」ことが一般的です。20:56わかりました。2枚目までは”セグメンテーション方式”の解説。3枚目のセグメントレジスターから”メモリセグメント方式”の説明(・・・たぶん)なので、セグメンテーション方式のやつは見なかったことにします。"メモリセグメント方式"では、メモリ全体を複数の種類のセグメントに分割する・・・ってことですよね?わかりました。2枚目までは”セグメンテーション方式”の解説。セグメンテーション方式のやつは見なかったことにします。22:15その通りです。キャンセル完了するlink+1まず、セグメントレジスタのことは忘れましょう。いう大規模なCPUになると、CPUとは別に、メモリを管理するMMUというユニットがくっついてますこいつは何をするかというと、メモリのアクセスを常に監視して、異常なアクセスを検知すると、CPUに対して例外割り込みを発生させ、動作を中断させる役割があります#と書くと心当たりがあるんじゃないでしょうかwとあるコードをメモリに展開、実行させるに当たり、OS(のカーネルは)MMUに対し、そのコードの実行ブロック、データブロック(その他コモンブロックやらスタックのブロックやら)にたいし、アクセス可否、書き込み可否、実行可否、のアクセス設定を課して、そのコードの実行におけるメモリアクセスを監視するように設定します。それに対し、どこかのアホがスタックエリアに実行コードを配置して実行させようとする、あるいはコードエリアを書き換えて別のコードを配置しようとすると、アクセスを監視してるMMUがその実行を強制的に止める、ということになってますということで、アクセス制限を課しているメモリブロック(セグメント)で、異常(フォールト)が起こると、例外が出て実行を止め、ウィンドウを表示させて告知しますね。セグメンテーションフォールトと。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。10:14回答ありがとうございます。メモリ保護がない(仮想アドレスを使っていない)FreeDOSなどなら例外が起きないんじゃないか?という話だったんですね・・・MMUによる「セグメント方式」ではセグメントという可変長のブロックにメモリ全体を分けるそうですがこのひとつひとつのセグメントが上からスタックセグメント・・・とかなっているんですか?(参考書の説明や、用語の乱雑でめっちゃわかりにくいですが・・・)回答ありがとうございます。10:58あ、いや「セグメンテーション」自体が仮想記憶がなかった時に使われていたメモリ分配(いいかたあれだけど)方法のことみたいですね。方法のことみたいですね。編集まあ、Cなんかでも、メモリ配置するのにコードセグメント、データセグメント、という言い方をしてそのセグメントごとにアドレスを設定したりしますまあ、用途ごとのブロックをセグメント、だと思っておけばいいかと。用途ごとのブロックをセグメント、だと思っておけばいいかと。16:32今思いましたが私が知っているCで使われている”スタック”は”スタックセグメント”ではなく”スタック領域”ですね。私が知っているCで使われている”スタック”は”スタックセグメント”ではなく”スタック領域”ですね。17:00他の方も書いてますが、「ブロック」とか「領域」のことだと思っときましょうセグメントという言葉にこだわってもしゃーないですぜ。セグメントという言葉にこだわってもしゃーないですぜ。17:18わかりました。Cで使っているスタックに限っては・・・とりあえず領域”メモリセグメント”とは区別します・・・。”メモリセグメント”とは区別します・・・。17:28まあ、スタックにこだわってるようですが、、PCのメモリってのは、別に区別はないです。4Gのメモリを搭載すれば、4Gのエリアは別に区別のないフラットなすべて読み書き可能なメモリ空間です回答に書いてあるとおり、OSはそこにコードにデータにスタックに、、と配置して、よーいどんで実行させる、というだけの話で、OSがそこはスタックだ!といえばそこはスタック領域(スタックセグメント)になるのです。PCのメモリってのは、別に区別はないです。回答に書いてあるとおり、OSはそこにコードにデータにスタックに、、と配置して、よーいどんで実行させる、というだけの話で、OSがそこはスタックだ!といえばそこはスタック領域(スタックセグメント)になるのです。17:35ありがとうございます。スタック領域に対する疑問は晴れました・・・ありがとうございます。スタック領域に対する疑問は晴れました・・・キャンセル完了するlink+1どうも英語(カタカナ)が出てくると、専門用語と思ってしまう人が多いですが、英語圏では英単語は単なる意味を持った普通の単語です。セグメントという用語も、メモリ以外の分野でも使われています。「(全体と対比しての)部分」という意味です。データセグメント・コードセグメント・スタックセグメント・テキストセグメントなどのメモリセグメント(?)は、メモリの分類で、データセグメント・・・・読み書き可能なデータ領域テキストセグメント・・・読めるが書けないデータ領域コードセグメント・・・・実行できるコード領域。仮想記憶機構のページング方式は、使われ方と関係なく固定長のページ単位で、メモリとディスクの間を移動します。セグメント方式は、固定長でなくOSが各種目的でプロセスに割り振った塊単位でメモリとディスクの間を移動します。いうことで、とくに意味上の関連は無いです。仮想記憶のセグメントの単位と、メモリ分類のセグメントが一致しているということもないです。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。21:01回答ありがとうございます。Cで意識していたスタックは”スタックセグメント”または”スタック領域”と言えるみたいですが”メモリセグメント方式”で出てきた”スタックセグメント”と混合した結果、混乱を生みました。.dataとかも・・・)ひとつ、よろしいでしょうか?メモリの分野である「~セグメント」は”メモリセグメント方式”以外の場面では登場しませんよね?(メモリセグメント特有のもの・・・?)回答ありがとうございます。”メモリセグメント方式”で出てきた”スタックセグメント”と混合した結果、混乱を生みました。21:12データセグメント、コードセグメントなどの用語のことですか?他の分野で見たことは無いですが、特別な意味でもないので、他の分野で使われていてもおかしくないと思います。データセグメントはありそう。ググったらありました。https://genesiscom.jp/utilize-segment-data/4つ固まってつかわれてるのはこのケースだけでしょうね。他の分野で見たことは無いですが、特別な意味でもないので、他の分野で使われていてもおかしくないと思います。データセグメントはありそう。ググったらありました。4つ固まってつかわれてるのはこのケースだけでしょうね。21:17ありがとうございます。(確かに用語といわれればそうかもれない・・・)立て続き悪いのですが仮想記憶で使われる”セグメンテーション方式”では”~セグメント”は一切ないですよね?ありがとうございます。22:06分けるというより、プロセスで必要な「~セグメント」の合計サイズだけ仮想メモリが割り当てられます。分けるというより、プロセスで必要な「~セグメント」の合計サイズだけ仮想メモリが割り当てられます。初めからサイズが決まっているわけではないスタックとして使われているところをスタック領域と言っているだけ・・・)という風に、メモリが使われると思います。いう風に、メモリが使われると思います。ここで出てくる「~領域」と今回の8086CPUで出てくる「~セグメント」は使われ方としては同じなのでしょうか?コードセグメントと、スタックセグメントの2つは両者(8086での意味と、メモリーの分類としての意味)で同じケースが多いと思いますが、同一概念と言うことでもないので、一致しない実装があるかも知れません(ちょっと思いつきませんが)。コードセグメントと、スタックセグメントの2つは両者(8086での意味と、メモリーの分類としての意味)で同じケースが多いと思いますが、同一概念と言うことでもないので、一致しない実装があるかも知れません(ちょっと思いつきませんが)。21:08画像をちゃんと見てませんでしたが、データセグメント・コードセグメント・スタックセグメント・テキストセグメントそれぞれの先頭を指す専用レジスタがあるように書いてありますが、これは特定のCPUの話ですね。一般論で言えば、各セグメントと特定のレジスタが1対1対応しているという限定は無いです。画像をちゃんと見てませんでしたが、データセグメント・コードセグメント・スタックセグメント・テキストセグメントそれぞれの先頭を指す専用レジスタがあるように書いてありますが、これは特定のCPUの話ですね。一般論で言えば、各セグメントと特定のレジスタが1対1対応しているという限定は無いです。22:25少なくとも、8086では”メモリセグメント方式”で使う各セグメントをセグメントレジスターで設定・・・アプリケーションプログラマーはセグメントレジスターを使ってセグメントの大きさを変えることができたそうですが本来、56KBにして8080とかとの互換性を保ちつつ、1MBのメモリ領域を有効利用するために1つのセグメントにつき固定長の56KBを与えていると思うのですがメモリ確保のためとはいえ、56KB長のセグメントにしなかったら互換性はなくなり、メモリセグメント方式をわざわざ使っている理由もなくなってしまうのではないかと思ってしまうのですが・・・。思ってしまうのですが・・・。メモリ確保のためとはいえ、56KB長のセグメントにしなかったら~~~~~以下の、ロジックがよくわかりません。8086のセグメントの概念は、メモリセグメント方式とは直接関係ないです。あと、56KBじゃなくて64KBです。以下の、ロジックがよくわかりません。8086のセグメントの概念は、メモリセグメント方式とは直接関係ないです。あと、56KBじゃなくて64KBです。22:46わかりました。調べなおします・・・。調べなおします・・・。コンピュータ、、特にPCの世界だと、インテルの影響が強く、8086で採用されたセグメント(セグメントレジスタ)なのかと思います。指摘されているように、セグメントは、コンピュータ専用の言葉ではなく、インテルのセグメントとその他のセグメントの意味が混在していると思います。googleで、"セグメント"で検索したら、セグメントとは(グロービス経営大学院)が引っ掛かりました。どれが正しいと、言うより、これらが混在して使われていると思います。方が、より適切かと思います。当時から、無理がある主張でしたが、勝者はインテルでした。(ほかの要因が大きいと思うが)そんなで、「無理が通れば、道理が引っ込む」結果になったと考えます。肝心のセグメントですが、引用されている絵では、それぞれのセグメントが独立していますが、インテルのセグメントレジスタによる方法では、オーバーラップします。それで問題を起こさないか、というとそれは、コードを書く人、コンパイラ等が責任を持つ事になります。色々なセグメントがあるのは、インテルのセグメントの名残りと、英語のセグメントの意味から、メモリ空間を区分するための分類ですね。(セグメントに分けた方が管理が楽、、ここで、上記の経営大学院のセグメントが意味を持つ)さて、こういう視点で見ると、セグメントに分けるという事は、インテルCPUでの定義を離れ、メモリをグループ分けして、管理する手法と考えるのアリとなります。(多分、これが、インテルのセグメントと混在していると思う)その一方、メモリ管理の方法として、ページングがありますが、仮想メモリとかと関係しますが、分けて考える事だと思います。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。05:17回答ありがとうございます。CPUのアーキテクチャによって”セグメント”というのが何を指しているのかが変わるのが厄介です・・・。(当初、そのことに気づけなかった)回答ありがとうございます。何を指しているのかが変わるのが厄介です・・・。解決済ELFファイルのレイアウトとメモリへの読み込まれ方がわからない解決済cloud9に接続できなくなった(読み込み中のまま)。解決済Eclipse環境を一旦アンインストールした後、再度インストールしたが、プラウザが表示されない。思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る閉じるトップOSに関する質問セグメンテーションとは何なのか。セグメントとは?単語の意味から混乱しています。頂いたご意見への回答は行っておりません。