Windows在
%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data
Mac OS X在
~/Library/Application Support/Google/Chrome/
Linux在
$HOME/?.config/google-chrome
用编辑器打开Local State这个文件, 找到以下两行
"last_known_googleurl": "http://www.google.***/",
"last_prompted_googleurl": "http://www.google.***/",
将它们改为:
"last_known_googleurl": "http://www.google.com/",
"last_prompted_googleurl": "http://www.google.com/",
打开Chrome以后随便搜索个东西...他会提示你正在使用google.com, 要不要更换到google.***|.
选择继续使用, 大功告成! 嘿嘿
和TLB有关的, 需要解决的问题有这么几个:
然后一个一个说…
TLB基本就这么多= =||`没啥东西…
This is the fun part…哈哈哈
这部分, 需要, 灰常严谨的逻辑和计算…`还要对page loading的步骤非常清晰. 任何一点对内存地址或者file offset的计算错误, 或者理解错误, 都会mess up.
所以, 咱们重新来列一遍从程序开始运行, 到page loading结束的整个过程:
本身, 整个过程还是很straight forward的. 可有一些special case需要handle…
多写两句和as有关的
很多人在刚开始写这个assignment的时候, 最先纠结的就是, as的结构要不要改...
这是个好问题, 但答案是: 不一定要改as, 但肯定需要+东西.
在解释为什么之前, 咱们先来看看dumb_vm的as里, 每个东西都是干嘛用的.
struct addrspace {
#if OPT_DUMBVM
vaddr_t as_vbase1;
paddr_t as_pbase1;
size_t as_npages1;
vaddr_t as_vbase2;
paddr_t as_pbase2;
size_t as_npages2;
paddr_t as_stackpbase;
#else
/* Put stuff here for your VM system */
#endif
};
dumb_vm里只保存两个segment/region的内存信息
然后咱们再研究下, 可能需要记录哪些信息. (并不一定全部都需要记录, 有些可以相互计算)
为了计算写入TLB的值, 需要
为了On-Demand Loading, 需要
对比一下上下两个列表, 我们缺点什么呢?
原来的as没有记录reg的permissions, 没有记录page/frame是不是被load过了, 没有分别记录每个page/frame的vaddr+paddr(当然, 可以通过seg的数据进行计算), 也没有每个reg对应的ELF信息...stack也是固定大小
所以原本的as是100%缺少东西的, 但这些额外的东西, 具体应该保存到哪里就自由发挥了.
补充1: OS161里假设了一个ELF程序只包括两个segment. 虽然实际可能不止2个, 但现阶段, 只支持2个也没问题.
更新1: 叫seg不太确切, 还是叫region好了. 另补充了一些需要记录的内容.
在dumbvm里, Physical Memory的分配机制非常简单. 在first和last之间, 一页一页的把内存分配出去, first逐次往后移动, 直到first = last, 就没有memory可用了. 也不回收, 不重复使用.
要想改变优化这个机制, 首先需要增加一个能够tracking所有可用Physical Frame使用状态的table. 在进行malloc或者free某个frame的时候, 在table中记录下来这个frame的状态. 这样, 如果存在free过的page, 这些page就可以优先被malloc, 从而重复利用已经free了的内存.
整体流程:
除此之外, 还需要修改allocation和free时候的操作, 让alloc能够通过某种algorithm来重复使用已经被free的内存位置. (用什么样的Algorithm就看各位了, 实在不行做liner search也是方法之一, 嘿嘿)
个别要点:
Instrumentation实在没什么好写的, 把declaration和initialization放对地方就好了.
]]>Db2=>CONNECT TO db_name
Db2=>EXPORT TO absolute_file_path OF DEL SELECT * FROM "table_name"
Db2=>IMPORT FROM absolute_file_path OF DEL INSERT_UPDATE INTO "table_name"
]]>