「オペレーティングシステム」の版間の差分

削除された内容 追加された内容
Kyube (トーク | 投稿記録)
著者は一人というつもりなのだろうか? 他に「X86系CPU」って具体的にはどれ? 古い80386などではないことは明らかだろう。ほかにも突っ込みたいところはいろいろあるが、時間もないので目についた部分だけ指摘する。
編集の要約なし
110 行
{{コラム|CPUとメモリ間のバス|
 
:※ なお、CPUとメモリの間の通信方法は、CPUにアドレスピンというピンが何本かあって<ref>ダニエル・P・ボベットおよびマルコ・サセティ著『詳解Linuxカーネル 第3版』、高橋浩和監訳、2011年5月20日 初版 第5刷、40ページ </ref>、その組み合わせで、メモリにどのアドレスのデータを出力/入力するかを送受信している。
:たとえば 36本のアドレスピンのあるCPUなら、2<sup>36</sup> =2<sup>4</sup> ×2<sup>32</sup> =2<sup>4</sup> × 4GB = 64 GB(ギガバイト)までのアドレスを指定できる。
 
272 行
 
 
なお、ポートアドレスで指定したIOポートにデータを送信できます<ref> 白崎博生『新装改訂版 Linuxのブートプロセスをみる』、株式会社 KADOKAWA、2014年10月2日 初版発行、55ページおよび66~67ページ</ref>。
PIC そのものを操作するときには、割り込みコントローラー 8259A の場合、
 
out 0x21 、 ax
のように書きます。(※ 参考文献: [[:en:b:X86 Assembly/Programmable Interrupt Controller]])
 
つまり、
out ポートアドレス 、 ax
 
の書式になります。
 
要するに、「0x21」とは下記の意味のポートアドレスです。
 
302 ⟶ 305行目:
 
の割り当てがあります。(※ 参考文献『作って理解するOS』、276ページ。 )
 
 
あらかじめ直前に move 命令で、axレジスタに送信したいデータを入れておく必要があります。
 
つまり、
mov ax 、 送信したいデータ
out ポートアドレス 、 ax
 
の書式になりますl。
 
さらに、データサイズが何ビットかにしたがってmovやoutの末尾に b (1バイトの場合)または w (2バイトの場合)がつくので、
movb ax 、 送信したいデータ
outb ポートアドレス 、 ax
のようになります。
 
なおC言語の outb() 関数は、上述のようなアセンブリ言語のoutb命令に相当するものです<ref>ダニエル・P・ボベットおよびマルコ・サセティ著『詳解Linuxカーネル 第3版』、高橋浩和監訳、2011年5月20日 初版 第5刷、244ページ </ref>。