边学边干Linux内核指导(6)——虚拟存储

虚拟地址由操作系统维护,由MMU可以进行转换。扩大了内存空间
分页管理,把内存分为页和页桢,大小一样,一个在磁盘,一个在内存。页表就像一个函数,输入是页号,输出是页桢号。
页表可以是多级页表,可以用TLB(Translation Lookaside Buffer)缓存。速度和成本介于内存和寄存器

页表项:禁止缓存,访问位,保护位,修改位,存在位----页桢号

页面置换:最优算法,先进先出和最近最少使用 (Leaset Recently Used)

Linux 虚拟内存的管理
1.缺省页面大小8K,每一个进程维护自己的一张页表。所以,不同进程的虚拟地址可能一样
2.虚拟地址:0x2194 ---> 因为页面大小0x2000,所以此地址在页面1处。页内偏移地址是0x194
如果页1映射为页桢4,那么它的物理地址是0x8000+0x194=0x8194
3.换页,paging ondemand
4.交换 thrashing LRU

5.Linux 总假定处理器支持三级页表结构,PGD, PMD, PTE
在Intel X86的微机上,linux表结构只有两级 PGD, PTE (PMD 只有一个表项)
6.每当启动一个新线程,linux都会为它分配一个task_struct结构体,内含ldt(local descriptor table),tss(task state segment),mm等内存管理信息。其中,mm_struct结构体,包含了用户进程中的存储相关的信息
7.vma
程序执行时,并将执行映像调入进程虚拟地址空间中,共享库也是。但是,实际上没有进入到物理内存中。
在mm_struct,包含一些指向vm_area_struct数据结构描述了虚拟内存的起始与结束位置,进程对此内存区域的权限以及一组内存操作。所以,操作系统对虚拟内存的管理,就是对这个数据结构的管理。而且,vma不是一个是一组,所以需要通过红黑树算法来进行管理,分配和取消

8.页面分配,用Buddy算法来进行,内存分配代码在free_area数组维护的链表中寻找一个满足要求,同时又尽可能小的空闲块
分割的同时,剩余的进行再分配

9.asmlinkage do_page_fault(struct pt_regs *regs, unsigned long error_code);
编译器不要使用寄存器,而是使用堆栈来传递参数
当MMS发现错误了,就调用这个函数。当缺页时,CPU将会发生缺页异常的地址拷贝到cr2控制寄存器中,然后进入缺页异常的处理过程。
如果发生异常时的系统状态EFLAGS的中断位置位,那么在保存了cr2之后便可以允许终端发生,底层过程调用sti指令开中断。
handle_fault_mm()->handle_pte_fault()->do_no_page()->do_swap_page() 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 了解Linux内核 1. 1 Linux内核 1. 2 查看Linux内核状况 1. 3 编程序检查系统状况 1. 4 Linux编程环境 第2章 shell 2. 1 she11 2. 2 实现一个简单的shell程序 2. 3 shell编程 第3章 内核时钟 3. 1 关于时钟和定时器 3. 2 Linux系统时钟 3. 3 Linux系统定时器 3. 4 时钟命令介绍 3. 5 定时器的应用 第4章 内核模块 4. 1 概述 4. 2 模块实现机制 4. 3 实例 第5章 系统调用 5. 1 一个简单的例子 5. 2 系统调用基础知识 5. 3 相关数据结构. 源代码分析及流程 5. 4 详细讲解一个系统调用的实现 5. 5 简单系统调用的添加 5. 6 较高级主题:添加一个更复杂的系统调用 第6章 共享内存 6. 1 进程间通信和共享内存 6. 2 共享内存的APl 6. 3 实现共享内存的源代码 6. 4 利用共享内存进行进程间通信 第7章 虚拟存储 7. 1 虚拟内存管理 7. 2 Linux虚拟内存管理 7. 3 实例 第8章 进程的同步 8. 1 同步机制 8. 2 Linux中几种同步机制的实现 8. 3 设计我们自己的同步机制 第9章 进程调度 9. 1 进程调度简介 9. 2 进程调度的策略与算法 9. 3 进程调度的实现 9. 4 改进进程调度算法的实现 第10章 设备驱动 lo. 1 Linux下驱动程序的相关概念 10. 2 传统的设备管理方式 10. 3 块设备的请求队列 lo. 4 设备文件系统devfs 10. 5 驱动程序的框架及实例分析 10. 6 设计自己的驱动程序 第11章 文件系统 11. 1 文件和目录 11. 2 文件系统的框架 11. 3 VFS文件系统 11. 4 ext2文件系统 11. 5 open. Close和read. write操作 11. 6 buffer cache 11. 7 实验:添加一个文件系统 11. 8 附录:优秀的日志文件系统--ext3
目 录 第一部分 Linux 操作环境 第1章 Linux基础 1.1 登录Linux系统 1.2 Linx的shell 1.3 shell的一些基本命令 第2章 文本编辑 2.1 vi文本编辑器 2.2 emacs文本编辑器 第3章 Linux文件系统操作 3.1 文件类型 3.2 文件系统目录结构 3.3 目录操作的基本命令 3.4 文件操作的基本命令 3.5 显示字符串echo 3.6 命令行中使用扩展符 第4章 文件权限与文件共享 4.1 存取权限 4.2 改变文件的存取权限 4.3 特殊权限位SUID、SGID、Sticky 4.4 硬链接 4.5 符号链接 第5章 文件管理工具 5.1 正则表达式 5.2 排序文件 5.3 查找文件 5.4 搜索文件内容 5.5 命令记录 5.6 压缩文件、解压缩文件与打包文件 5.7 RPM包管理 第6章 Linux进程、管道和重定向 6.1 进程的属性 6.2 进程的终止 6.3 进程和作业控制 6.4 命令行中使用操作符 6.5 Linux系统启动和进程层次结构 6.6 系统启动和关机 6.7 输入、输出重定向 6.8 使用文件描述符 6.9 输入和输出重定向的组合使用 6.10 管道(pipe) 第7章 C语言开发工具 7.1 编写程序的工具 7.2 编C语言程序 7.3 make工具 7.4 gdb调试工具 第8章 Bourn Again Shell编程 8.1 bash脚本的建立和运行 8.2 shell的变量 8.3 shell脚本位置参数的传递 8.4 控制结构语句 8.5 其他几个有用的语句 8.6 数值处理 8.7 数组 8.8 函数 8.9 here文档 8.10 exec命令 8.11 trap命令 8.12 调试脚本程序 第二部分 Linux 内核分析与实践 第9章 编译Linux内核 9.1 Linux内核 9.2 查找并且下载一份内核源代码 9.3 部署内核源代码 9.4 配置内核 9.5 编译内核和模块 9.6 了解Linux内核的启动 9.7 应用grub配置启动文件 9.8 编写制作Linux启动盘的shell脚本程序 9.9 Linux源程序的目录分布 9.10 学习Linux的常用工具 9.11 查看Linux内核状况 9.12 编程序检查系统状况 9.13 Linux编程环境 第10章 系统调用 10.1 一个简单的例子 10.2 系统调用基础知识 第11章 进程创建 11.1 进程是什么 11.2 进程的产生 11.3 进程的消亡 / 退出 11.4 实验1 11.5 实验2 11.6 实验3 第12章 /proc文件系统 12.1 /proc文件系统 12.2 现有proc文件系统中各个文件的含义 12.3 怎样使用/proc文件系统 12.4 seq file 12.5 proc文件系统的内部实现机制 12.6 实验一:使用proc文件系统的一个简单例子 12.7 实验二:利用/proc文件系统显示缺页状态 12.8 实验三:seq file使用例子 第13章 内核模块 13.1 什么是内核模块 13.2 模块实现机制 13.3 使用内核模块 13.4 实例 第14章 内存管理 14.1 虚拟内存管理 14.2 Linux虚拟内存管理 14.3 实例 14.4 综合实验的原理 14.5 综合实验的实施 第15章 内核时钟与定时器 15.1 关于时钟和定时器 15.2 Linux系统时钟 15.3 Linux系统定时器 15.4 时钟命令 15.5 实验一:一个应用定时器的简单例子 15.6 实验二:统计关于进程的时间 15.7 实验三:更进一步的进程时间统计 第16章 共享内存 16.1 进程间通信和共享内存 16.2 共享内存的API 16.3 共享内存在Linux中的实现 第17章 同步机制 17.1 同步机制 17.2 Linux中几种同步机制的实现 17.3 设计我们自己的同步机制 第18章 文件系统 18.1 文件系统基本概念 18.2 文件系统的抽象 18.3 VFS文件系统 18.4 ext2文件系统 18.5 对文件的操作 18.6 块读写与页缓存 18.7 本章总结 18.8 实验:添加一个文件系统 18.9 附录:优秀的日志文件系统——ext3

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值