code:mmread - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
- 内存映射文件 的 驱动函数(读)
- u.u_offset 用于 传入物理内存地址
9017 {
9018 register c, bn, on;
9019 int a, d;
9020
9021 if(dev.d_minor == 2)
9022 return;
9023 do {
- "无底洞" 模式,什么都读不出来...
9024 bn = lshift(u.u_offset, -6);
9025 on = u.u_offset[1] & 077;
9026 a = UISA->r[0];
- bn ← 块号
- on ← 块内偏移
9027 d = UISD->r[0];
9028 spl7();
9029 UISA->r[0] = bn;
9030 UISD->r[0] = 077406;
9031 if(dev.d_minor == 1)
9032 UISA->r[0] = (ka6-6)->r[(bn>>7)&07]
9033 + (bn & 0177);
9034 c = fuibyte(on);
- 若 模式为 读取核心态内存,则将 UISA[0] 置核心态地址
9035 UISA->r[0] = a;
- 以 UISA0/UISD0 寻址,第0块第on个字节
9036 UISD->r[0] = d;
9037 spl0();
9038 } while(u.u_error==0 && passc(c)>=0);
9039 }
9040 /* ------------------------- */