view slides/2018/04/05/memo.txt @ 22:7143a82401fa

update
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Thu, 05 Apr 2018 11:30:03 +0900
parents
children 9e4ebb0c92bb
line wrap: on
line source

- x86の歴史
    - corei7から64bit modeに変更された
    - 8086 16bit  --> 8086 
        == z84 <- z8000
    - 4004

- CPUは起動すると16bit(8086)が起動する->32->64の順で立ち上がっていく
- 8086で動くものはある程度8086でも動く

その変換はどこでする? EFIあたりで処理をしても良い

- Segment Register と Addr Resgisterを使う

    - Segment Registerは CD,DS,EC,GS,SSの種類があるが、歴史的な理由でUNIXではシステム用とユーザー用の2種類しか使わない
    - CSはスレッドでも利用する。

    rax
    rbx
    rcx
    rdp
    rip
    rsp

    これにr8~r15が追加される

Logical -> Phiの変換表はTLB(キャッシュ)に入る為、キャシュの内部の処理を見ながらアクセスする
Logical + offsetの加算値をTLBで比較して、一致していればアドレスを取得する用になっている

CPUから外の空間にアクセスする時はメモリコントローラの命令として処理される。

データの読み込みはキャッシュのinvalidが担当、コードの書き換え(OSロード時)はキャッシュのrehashが必要となる。
TLBのクリアは特権命令, user側はTLBミスは管理していない. cache crea,pre fetchは用意されている。

[リバースページテーブル](https://www.ibm.com/developerworks/jp/linux/library/l-memmod/index.html)
invarse pagetable

xv6は2段のページテーブルで構築されているはず

[jxxx|yyyyy| ]からそれぞれ2つページテーブルにアクセスしている

デバイスドライバ/filesystemなどを読む必要があります

ページテーブル ==> 単なるメモリ空間なので、ポインタ演算で実装されていた。
物理と論理で同じ区域を確保する

- build build時のもの
- device timer割り込み処理を計算していく
- usr
    clock signal などのregisterを管理している

- buf.h
    ras piが持っているファームウエアの記述
mkfs
    - ファイルシステム作るやつ
memide
    - ディスコントロラーをmemoryにmappingする
spinlock 
    - multiprocessorを管理する奴
swtch.S

vim