Mercurial > hg > Members > anatofuz > slides
view slides/2018/04/05/memo.txt @ 52:73b27e5c1d79 default tip
auto-Update generated slides by script
author | Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 16 Apr 2019 18:58:24 +0900 |
parents | 9e4ebb0c92bb |
children |
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 arm-linux-gnu-build - U..undefined (別のオブジェクトファイルで定義されているもの) - T. text(テキスト,このオブジェクトで定義されているもの) sys callがよばれる->別のメモリに入るまでにはoffsetが入る 32 bit link register 戻り値 STMIALT 0クリア B. この命令があるブランチを指す(無限ループ) jump_stack CbCで書ける(stackは自前 UART bit列が並んだメモリ電線 シフトレジスタ -> レジスタの中を1bitずらすもの -> 任意のものはvalia メモリの流れでpagetableのどこを引いていくかを決定する(pde) INIT_KAERNMAP カーネルのサイズ pdeはフラグが入る定数 デバイスの場合はキャッシュすると困るため、ページテーブルのモードで判断をする memolayout.hのv2p kernel modeではuserも見えているが,userはkernelは見えない. bhi unsignedで比較する stack pointerの値 = lr+r1をいれた後の保存領域を局種変数として利用している (caller arg) r11からマイ->局所変数,+だと呼び出している元の変数 X86はdisable loadでbinaryを持ってきた場合 bx リンクレジスタの先にジャンプする clear kman{ 最初のページはキャッシュにいれておく ide ( memory block device --> disc controller ) sti() <- 割り込みを許可する }