ろんりアドレスせんけいアドレス

4295 ワード

オペレーティングシステムはコンピューター人一人一人の専門技術分野での究極の目標であり、このような観点は偏っているが、コンピューター科クラス出身の人にとって、オペレーティングシステムを掌握することは少なくとも基本的な仕事の一つである.
于渊のこの《Orange‘S 1つのオペレーティングシステムの実现》は1册のとても良いオペレーティングシステムの本で、本科の教室の上で言うのはすべてあのような理论のもので、问题をするのはやはりできて、しかし抽象的なものは结局よくなくて、特に工科にとって、工科は実践します.于渊のこの本は、みんなに最初からオペレーティングシステムを书くことを教えて、集编からCまで、一歩一歩オペレーティングシステムの基本原理に深く入り込んで、前のいくつかの章を読んだだけで、しかし缲り返し読んで、以前の疑惑はだんだん散って、基本的な概念はだんだん根付いて、これはとても奇妙な感じで、1つの巨大なソフトウェアの大幕はだんだん开きます.
余計なことは言わないで、すぐに本題に入って、今日本の中の第三章について話して、保護モードのものについて話します.
保護モードは前朝に残された産物であり、淵に用いられると、実モードから保護モードまでは王朝交代の過程であり、王朝交代の大部分の時間が進歩を意味するため、イメージ的である.実モードはdos時代の産物であり,16ビットレジスタ,16ビットデータ線,32ビットのアドレス線であるが,時代は召喚し,CPUは結局進化し,プログラムも結局大きくなるので,このオペレーティングシステムに対してより高い要求を提出した.
第一に、32ビットのCPUがあったのか、元の16ビットは全面的に否定しなければならない.ソ連がスターリンのパターンを逆に否定することができないように.そこでここで実モデルと保護モデルを導入した.つまり、実モデルと保護モデルが同時に現れたのは、文化の革命と鼎新、収穫と蓄積の過程である.
オペレーティングシステムの起動過程はまず実モードに入り、それから保護モードに入り、保護モードの一節が始まったばかりで、于淵はジャンプのコードを与えた.このコードは一見めまいがして、めまいは良いことで、めまいは自分がまだ分からないことを説明して、もし未知の恐怖を克服することができれば、私たちは成長することができます.
16ビットのコードセグメントでは、著者らはグローバル記述子を初期化し、グローバル記述子は多くのシステムレベルの書籍で言及される概念であり、ここではまず深く研究しないで、セグメントストレージメカニズムを提供するために使用されていることを覚えておけばよい.上記の16ビットのコードセグメントに戻ると、このセグメントでは、すべての命令が古いシステム、つまり16ビットであり、私たちはこの16ビットのシステムの中で将来の保護モードの32ビットシステムのために準備しなければなりません.何を準備しますか.グローバル記述子の準備(GDT).この点はよく理解されています.32ビットシステムでは、セグメントベースのストレージメカニズムでは、GDTを利用しなければなりません.つまり、GDTは保護モードに入るときに成形されなければなりません.はい、直接使用することができますが、私たちは今、開機後に16ビットのシステムを通過しなければなりません.歴史的な問題です.では、この16ビットの段階ではああ、私たちは何をすべきですか.答えは32ビットシステムに必要なものを用意することです.このコードは次のとおりです.
	mov	ax, cs
	shl	eax, 4
	add	eax, LABEL_SEG_CODE32
	mov	word [LABEL_DESC_CODE32 + 2], ax
	shr	eax, 16
	mov	byte [LABEL_DESC_CODE32 + 4], al
	mov	byte [LABEL_DESC_CODE32 + 7], ah
これらの文の主な役割はGDTの初期化であり、すなわち、本プログラムのコードセグメントのメモリ内のアドレスを宣言することである.GDTはセグメントストレージメカニズムのために設定されたデータ構造であることが知られており、GDTテーブル項目の重要な内容の一つは、セグメント全体のプログラム空間におけるアドレスである.はい、ここでやっと住所の2つの字を導入して、ついにあれらの教科書の上のものに着いて、ついに自分のふだんした問題と関係があって、はい、ここでGDTの中から得たセグメントの住所にプログラムの中で提供したオフセットの住所をプラスして以前私达が学んだ線形の住所で、線形の住所は私达の脳の中の住所のチェーンの冒頭ではありませんて、冒頭は論理の住所で、論理アドレスは何ですか?論理アドレスは、GDTテーブルの入力を調べます.はい、今私たちは少し手がかりがあります.皆さんに直感的な解釈を与えるために、絵を描いて表します.
はい、論理アドレスと線形アドレスはすでに家が彼らの関係を知っていますが、論理アドレスの値はいったい何なのか、線形アドレスの値はいったい何なのか.まず答えを出しましょう.論理アドレスの中には【選択子:オフセットアドレス】、線形アドレスは【セグメントアドレス:オフセットアドレス】が入っています.選択子は何ですか.私たちはDFSに入ったような気がしますが、大丈夫です.試験点はそれぞれ破られますか.見慣れない概念を恐れないでください.選択子は16ビットの構造で、そのうち上位13ビットは本セグメントを表していますGDTでのオフセット量、下位3桁で表される優先度等量の設定は、しばらくは気にしないでください.はい、論理アドレスとは、このセグメントの全局記述子テーブルを与えることです.(GDT)でのオフセット量と、このセグメントでのオフセットが与えられています.さて、1分間、上記の知識から論理アドレスから線形アドレスへの変換を自分で推理してみましょう.
sleep(1000);
分かったか?論理アドレスはサブとオフセットアドレスを選択し、オフセットに基づいてGDTのセグメントのテーブル項目を見つけることができます.GDTには何が格納されていますか.このセグメントのプログラム空間全体の先頭アドレス、すなわちセグメントアドレスであり、セグメントアドレスがあり、論理アドレス上のオフセットがあり、この2つの量を加算すると線形アドレスと呼ばれます.【セグメントアドレス:オフセットアドレス】です.上図に示す手順に連絡して、はっきりしているかどうか見てみましょう.
さて、このプロセスでは、GDTのベースアドレスがレジスタcr 0に格納されているなど、多くの詳細を省略しました.保護モードのセクションで、著者がどのようにプログラミングを通じて、この変換をより理解しているかを見てみましょう.
次のコードは、前に貼ったコードと一致して、説明を容易にするために、もう一度貼ります.
	mov	ax, cs
	shl	eax, 4
	add	eax, LABEL_SEG_CODE32
	mov	word [LABEL_DESC_CODE32 + 2], ax
	shr	eax, 16
	mov	byte [LABEL_DESC_CODE32 + 4], al
	mov	byte [LABEL_DESC_CODE32 + 7], ah
上のコードは、実モードでのGDTテーブルの初期化プロセスから出ています.まず説明しますが、コードに表示される4つのmov命令のうちの3つはGDTテーブル項目への入力であり、他の詳細は先に無視できます.では、具体的に埋め込まれた内容を見てみましょう.csレジスタの内容は、左に4ビット移動し、32ビットコードセグメントの開始アドレスを加えて、得られたこのアドレスを対応するテーブル項目に格納します.このような簡単な一言で、一つの表項の充填が完了し、実モードの条件では、アドレス線のアドレス空間は1 MBであり、20ビットのアドレスを満たすために、CPUの処理方式はちょうど、CSが4ビット左にシフトし、いわゆる「セグメント」を得て、オフセットを加えることで、得られたアドレスは16ビットの条件での線形アドレスと呼ぶことができる.そしてこのアドレスを,コードセグメントGDTのアドレスに記入し,32ビットコードセグメントのエントリアドレス,すなわちセグメントアドレスとした.
では、これで、私たちのセグメントの初期化説明は終わります.次に,具体的にどのように論理アドレスを介して線形アドレスを得るかを見る.
        mov	ax, SelectorVideo
	mov	gs, ax			
	mov	edi, (80 * 11 + 79) * 2	;
	mov	al, 'P'
	mov	[gs:edi], ax

上記のプログラム機能は、表示メモリに文字Pを1文字書いたものである.詳細は無視し、最初の行を見て、論理アドレスが提供するのは【選択子:オフセットアドレス】であることはすでに知られているので、第1、第2の2行の仕事は、現存する選択子をgsレジスタにロードし、第3行でedi、すなわちオフセットアドレスを決定し、第4行は文字列Pをレジスタalに書き込み、最後の行は在庫のある行であり、alレジスタの内容を書き込んだものである【gs:edi】指し示すメモリにおいて、保護モードにおいて、【gs;edi】はコンパイル時に、論理アドレスの線形アドレスへの変換が完了したことを認識することができる.すなわち、保護モードにおいて、CPUはgsの内容により、GDTのテーブル項目を見つけ、セグメントベースアドレスを取得し、オフセットアドレスに加算して線形アドレスを得る.
では、これで論理アドレスと線形アドレスの解釈が完了し、物理アドレスと線形アドレスの関係、およびより多くの保護モードの内容が次のログで説明されます.