{0,1,2.....}
VM系统将虚拟存储器分割为虚拟页,虚拟页面的集合分为三个不相交的子集:html
按需页面调度和独立的虚拟地址空间的结合简化了连接和加载、代码和数据共享,以及应用程序的存储器分配。git
MAP(A)= A':若是虚拟地址A处的数据在PAS的物理地址A处' 空:若是虚拟地址A处的数据不在物理存储器中 - CPU中的一个控制寄存器页表基址寄存器指向当前页表,n位的虚拟地址包含两个部分:一个p位的虚拟页面偏移(VPO) 和一个(n-p)位的虚拟页号,页表条目中的物理页页号和虚拟地址中的VPO串联起来,就获得了相应的物理地址。 - 在MMU中包括了一个关于PTE的小的缓存,称为翻译后备缓冲器(TLB),其中每一行都保存着一个由单个PTE组成的块。
CPU产生一个虚拟地址。
MMU从TLB中取出相对应的PTE。
MMU将这个虚拟地址翻译成一个物理地址,并将它发送到高速缓存/主存。
高速缓存/主存将所请求的数据字返回给CPU。数组
- 多级页表:用来压缩页表的经常使用方法是使用层次结构的页表。 ####存储器映射 Linux经过将一个虚拟存储器区域与一个磁盘上的对象关联起来,以初始化这个虚拟存储器区域的内容,这个过程成为存储器映射。具体能够映射的对象有两种: - Unix文件系统中的普通文件。一个区域能够映射到一个普通磁盘文件的连续部分。 - 匿名文件。匿名文件由内核建立,包含的全是二进制的0。 一旦一个虚拟页面被初始化了,它就在一个由内核维护的专门的交换文件之间换来换去。交换文件也叫交换空间,或交换区域。 #####共享对象 - 一个对象被映射到虚拟存储器的一个区域,要么做为共享对象,要么做为私有对象。 - 一个映射到共享对象的虚拟存储器区域叫作共享区域,相似的,也有虚拟区域。 - 私有对象时使用一种叫作写时拷贝的技术被映射到虚拟存储器中的,相应私有区域的页表条目都被标记为只读,而且区域结构被标记为私有的写时拷贝。 #####execve函数 - 使用execve函数将a.out程序加载到存储器的过程 ``` Execve("a.out",NULL,NULL); ``` 具体通过的步骤以下:
删除已存在的用户区域。
映射私有区域。
映射共享区域。
设置程序计数器。缓存
#####使用map函数的用户级存储器映射 - Unix进程可使用mmap函数来建立新的虚拟存储器区域,并将对象映射到这些区域当中
void mmap(void start,size_t length,int prot,int flags,int fd,off_t offest);
若成功则为指向映射区域的指针,若出错则MAP_FAILD(-1)
`- munmap函数删除虚拟存储器的区域。 ``` int munmap(void *start,size_t length); 若成功则返回0,若失败则返回-1.
安全
当运行时须要额外虚拟存储器时,使用动态存储器分配器维护一个进程的虚拟存储器区域。分配器有两种风格。函数
void *malloc(size_t size); 若成功则为指针,若出错则为NULL。
void free(void *ptr);
处理任意请求序列。 当即响应请求。 只使用堆。 对齐块(对齐要求)。 不修改已分配的额块。
最大化吞吐率:吞吐率定义为每一个单位时间里完成的请求数。 最大化存储器利用率:最有用的标准是峰值利用率。
ptr isPtr(ptr p):若是p指向一个已分配块中的某个字,那么就返回一个指向这个块起始位置的指针b,不然返回NULL。 int blockMarked(ptr b):若是已经标记了块b,就返回true。 int blockAllocated(ptr b):若是块b是已分配的,就返回true。 void markBlock(ptr b):标记块b。 int length(ptr b):返回块b的以字为单位的长度(不包括头部)。 void unmarkBlock(ptr b):将块b的状态由已标记的改成未标记的。 ptr nextBlock(ptr b):返回堆中块b的后继。
https://git.oschina.net/20145304/computer-systems工具
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第五周 | 30/60 | 1/5 | 10/32 | |
第七周 | 0/160 | 1/7 | 8/48 | |
第八周 | 0/160 | 1/8 | 5/53 | |
第九周 | 157/317 | 1/9 | 7/60 | |
第十周 | 647/964 | 1/10 | 6/66 | |
第十一周 | 1086/2050 | 1/11 | 9/75 | |
第十二周 | 10/2060 | 7/18 | 10/85 | |
第十三周 | 473/2533 | 1/19 | 10/85 | |
第十四周 | /2533 | 220 | 10/95 |