Linux内核分析与高级编程.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux内核分析与高级编程

页表项 31 0 12 11 其它控制位 禁止缓存位 访问位 保护位 修改位 存在位 1=只读 0=读写 页内编移量 查表最终得到 页帧号 + 页帧号  页内偏移量 页帧号 1=存在 0=不存在 物理地址送地址线 MMU在页表的支持下完成 地址映射和虚实转换 线性地址32位 10 位 10位 12位 0 1 1 1 0 1 0 虚存空间页存在位 2 0 1 3 … … 虚拟空间页 … … 0-4k 5-8k 9-12k 13-16k 17-20k 21-24k 61-64k 64k 虚存 1 2 3 7页帧 0页帧 32k 物理内存 0-4k 9-12k 13-16k 29-32k 某时刻的虚实映射 5-8k … 虚实地址映射 0页面 1 2 3 4 5 6 … 15 入口地址高16位 D DPL ODXXX 000 8765 0 段选择码 入口地址低16位 中断门、陷入门及调用门的基本格式定义 31 0 31 用户进程调用系统调用getuid ( ) 执行宏调用_syscall0(int,getuid) 即: 调用getuid() 产生陷入异常(模式切换到进入内核) traps.c 内核初始化时trap_init( ) 建立了调用门 执行系统调用处理函数system_call( ) 保护现场,由系统调用号(24)查系统调用表(sys_call_table) 找到该系统调用的内核处理函数(sys_getuid16( )) 调用sys_getuid16( ) 返回uid, uid →eax,并压入堆栈 执行ret_from_sys_call ( ) 恢复现场,并从堆栈获得(uid)→eax eax →_ _res , uid返回给用户程序 系统调用结束 将系统调用号(_ _NR_getuid=(24)) 送 (eax) ,并执行int $0x80 unistd.h entry.S getuid()函数中的 return _ _res int main ( ) { int uid; ┆ uid=getuid ( ); ┆ printf (“┄”); } int getuid (void) { long _ _res; ┆ movl 调用号,%eax int $0x80; movl %eax,_ _res ┆ return _ _res; } ENTRY (system_call) pushl %eax SAVE_ALL ┆ call sys_getuid 16 (void) ┆ RESTORE_ALL ┆    asmlinkage long \ sys_getuid16 (void) { return 用户UID; } 用户程序 标准C库(系统调用) 系统调用处理函数 内核处理函数 系统调用实现中各程序间的关系示意图 1 0 读锁 SN_READ 写锁 SN_WRITE 0 1 信号量数组(初始状态) 使用信号量(semaphore) 实现读进程\写进程互斥访问共享内存的方法: 1 0 (-1) LOCK 读锁 写进程获取IPC资源 0 0 写共享内存 (+1) UNLOCK 写锁 释放IPC资源 0 1 0 1 (-1) LOCK 写锁 读进程获取IPC资源 0 0 读共享内存 (+1) UNLOCK 读锁 释放IPC资源 1 0 读进程、写进程互斥访问共享内存的流程: 写进程进入临界区 写数据 先写满管道可用空间 唤醒等待的读进程 管道空间=所需空间? N 退出临界区 唤醒读进程 写数据量很大? Y Y Y 阻塞式写操作? 写进程进入等待队列 读进程读数据 N N 写进程写管道的规则和流程 #include stdio.h #include stdlib.h void main() { char str[10]; pid_t pid; pid=fork(); if(pid0) { printf(daemon on duty now!\n); exit(0); } for(; ;) { printf(I am the daemon!\n);

文档评论(0)

linsspace + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档