首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux基础>经验技巧>正文

Linux系统执行程序时内存管理的情景

http://www.oklinux.cn  2006-01-01  来源: chinaunix  qtdszws   会员收藏  游客收藏  【 】 

do_execve

->open_exec->dentry_open

....

f->f_dentry = dentry;

....

f->f_op = fops_get(inode->i_fop);

....

设置f->f_dentry和f->f_op,我们考察执行ext2的情景,因此f_op将是ext2_file_operations

->search_binary_handler->load_elf_binary->elf_map->do_mmap->do_mmap_pgoff

....

vma->vm_file = file;

get_file(file);

error = file->f_op->mmap(file, vma);

....

设置vm_file,执行f_op->mmap,在ext2_file_operations中的mmap是generic_file_mmap,在generic_file_mmap中主要是设置vma->vm_ops = ops,绝大多数情况下ops是file_private_mmap

static struct vm_operations_struct file_private_mmap = {

nopage: filemap_nopage,

};

执行do_mmap时,如果是代码段,一般只允许读和执行,如果是数据段,一般允许读和写,但是vma->vm_page_prot中只设置有可读和可执行位(没有深入研究)

sys_execve做完映射后就退出了.当调度到该进程时并执行代码时,立即产生page fault,依次do_page_fault->handle_mm_fault->handle_pte_fault->do_no_page

...

new_page = vma->vm_ops->nopage(vma, address & PAGE_MASK, (vma->vm_flags & VM_SHARED)?0:write_access);

...

从前面知道,此处将调用filemap_nopage(基本所有这类的情景都执行这个函数)

filemap_nopage->page_cache_read

.....

page = page_cache_alloc();

if (!page)

return -ENOMEM;

if (!add_to_page_cache_unique(page, mapping, offset, hash)) {

int error = mapping->a_ops->readpage(file, page);

page_cache_release(page);

return error;

}

....

共2页: 上一页 1 [2] 下一页

上一篇:Linux操作系统:LVS ipvsadm命令参考   下一篇:Linux命令:改变文件或目录的访问权限


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Linux操作系统:LVS ipvsadm命令参考
·Linux命令:改变文件或目录的访问权限
·Linux操作系统下的串口通信学习笔记
·优化策略:从头开始对ubuntu进行优化
·如何在外置 USB 硬盘中安装 breezy
·实用技巧:巧用FC5的“添加/删除程序”
·Vim实用技术第一部分:实用技巧
·轻松玩转:Red Hat9.0安装配置指南
·用Linux操作系统包管理器简化生活
·Linux操作系统:快速内存操作技术
·Linux攻略:正确安装VMWARE TOOLS
·linux下乱码问题的终极解决方法!
·RedHat提供ADSL共享上网的解决办法
·管理技巧篇:红旗Linux DNS的优化
·在Linux环境下玩PlayStation模拟器
·你必须选择我:UNIX操作系统优势总结
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·成功升级到红旗Linux6.0 SP1经验分享
·Ubuntu游戏之平行球的安装
·Ubuntu与Windows双系统使用时的注意事
·Ubuntu下安装矩阵实验室Matlab
·Ubuntu 7.10下wine-0.9.57的中文配置
·Linux初学指南 Ubuntu下rpm包的安装方
·Fedora 8正式版下载地址分享
·惠普笔记本6510B中安装Fedora 8成功例
·Fedora 8 下JDK 6.0 配置技巧
·Ubuntu 3D桌面特效展示!超绚目(图)
·解析Linux系统下GRUB故障修复
·Linux终端模式下查看电脑的硬件配置情
  阅读排行
·Linux爱好者入门教程
·Linux操作系统下的串口通信学习笔记
·从硬盘安装RHEL 5(Red Hat Enterprise
·Vim实用技术第一部分:实用技巧
·Vmware Workstation 5.0.0使用说明
·VM中Linux虚拟机下安装VMware Tools
·新手看招:调试工具GDB基本知识全接触
·Gentoo版Linux操作系统的前世今生
·Linux进程间通信:管道及有名管道
·如何在Linux/FreeBSD下玩模拟器游戏
·探索Linux 操作系统内存模型和管理
·Linux系统中用ALSA驱动声卡流程详解
·并不绝对安全:Linux下安全十二法则
·Linux操作系统网络驱动程序编写详解
·将Linux代码移植到Windows的简单方法
网摘收藏: