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

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

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

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

OS

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

Q&A

解決済

2回答

1057閲覧

セグメント、セグメントディスクリプタ、OS、CPUの関係を教えてください。

nvcpg_198

総合スコア25

CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

OS

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

0グッド

0クリップ

投稿2018/02/20 13:44

セグメントの情報について記述されているのが
セグメントディスクリプタ、CPUはセグメント単位で
情報の読み書きや実行を行う。
セグメントディスクリプタ及び
セグメントディスクリプタテーブルはOSが作る。

この理解で合っていますか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

セグメントとは何で存在しているのか、をまず理解しないと多分こんがらがりますね……

そもそも 8bit CPU であった 8080/8085 から、16bit CPU である 8086 を作る際に、8080/8085 を使ってきた人や資産が移行しやすいようにと、
「折角増えたメモリ領域(64KBから1MBに)を、今までと似た感覚で使えるように64KB単位で分割して管理しよう」ってので考案されたのがセグメントです。セグメントによって 00000~FFFFF までの 1MB を、
0000~FFFF のセグメントと、0000~FFFF のアドレス値で扱えるようにしようというもの。

 8000  セグメントレジスタの値 + 1234  アドレス値 -------  81234  実アドレス

この方式の弊害として、同時に64KB以上のデータを扱うのには苦労することになるのですが(セグメント境界をまたぐと面倒なことになる)、8086 の導入当初はそれほど気にはなりませんでした。

さて、16bit CPU がこなれてくると、今度はよりモダンな、「特権レベルの制御も含めた保護機能の強力な CPU」が必要となり、80286 が出てきます。
ここでメモリが「仮想化」されます。それまでの8086は、アドレス=物理アドレスでしたが、80286からのプロテクトモードでは、アドレスは論理アドレスであって、物理アドレスではなくなります。利用できるメモリの総量も16MBまで(仮想的には1GBまで)まずは強化されました。
そこで、セグメントの「意味」が変化します。セグメントが直接物理アドレス(の上位部分)を指定していたリアルモードとは異なり、セグメントはセグメントディスクリプタテーブル上のインデックスを指すようになります。そしてセグメントディスクリプタによって、論理アドレスと物理アドレスの結びつきが表現されるようになるのです。
(ただし80286では1セグメントのサイズは64KBのままでした)

そして32bit CPU である 80386 になり、セグメントサイズが物理アドレス限界と同じ 4GB まで拡張され、事実上複数のセグメントを切り替える必要の無いフラットメモリモデルになります。

メモリ管理はOSのカーネル部分(一番コアの部分)のお仕事ですので、セグメントディスクリプタを制御しているのがOSというのもあながち間違いではありません。

投稿2018/02/20 14:46

tacsheaven

総合スコア13703

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

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

0

こんにちは。

セグメントの情報について記述されているのがセグメントディスクリプタ、

その通りです。

CPUはセグメント単位で情報の読み書きや実行を行う。

各セグメントには論理アドレスとそれに対応する物理メモリが割り当てられます。
ただし、まだ一度もメモリ・アクセスされていないセグメントにはメモリが割り当てられていません。CPUがメモリ未割り当てのセグメントにアクセスするとページ・フォルト例外(割り込み)が発生し、そのハンドラーで当該セグメントにメモリを割り当てます。
セグメントには実行やリードオンリ等のフラグがあり、対応するアクセスのみが許可されます。許可されていないアクセス(例えばリードオンリ・セグメントに書き込みなど)をすると不正メモリ・アクセス例外(割り込み)が発生します。

セグメントディスクリプタ及び
セグメントディスクリプタテーブルはOSが作る。

概ねそれでOKと思います。
他にはブートローダが設定する場合もある筈です。

投稿2018/02/20 14:42

Chironian

総合スコア23272

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問