- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
学习LINUX内核 一个典型的Linux操作系统的结构 Linux 基本概念 系统调用 内存管理 进程管理 虚拟文件系统(VFS) 信号机制 内核初始化过程 提纲 用户态和内核态 系统调用意义 系统调用方法 用户态和内核态 用户程序如何同设备打交道? 系统调用过程: 执行陷阱异常指令trap 0 ? 进入异常后,处理器PSR最高位被硬件置1,实现 普通用户 到 特权用户 的转变 ? 根据系统调用号(r1传入),调用相应函数,满足用户需求? 系统调用返回,重新回到用户态,用户获得资源。 API和系统调用完全不同: API只是一个函数定义 系统调用通过“软中断”向内核发出一个明确的请求 Linux 2.6 提供了300多个系统调用,用户可以通过这些系统调用,及它们的组合实现对设备的操作。 通常,应用程序开发并不直接和系统调用打交道,而是用C库提供的一层包装函数。 如,malloc() ? sbrk() ? sys_brk ? 内核函数 sys_brk 是45号系统调用, C库中它的系统调用方式可能是: … movi r1, 45 trap 0 … 提纲 虚拟内存 虚拟内存到物理内存映射方法 物理内存和虚拟空间的管理 页面异常处理 页面交换策略 slab分配器 ioremap Ckcore的MMU虚拟地址空间 虚拟地址到物理地址转换 虚拟地址到物理地址转换:多级映射 缺页异常处理 物理页面并不预先分配,而是用到时发现缺少再分配。 典型的页面分配过程: 用户程序访问虚拟空间 ? 未建立映射,产生缺页异常 ? 异常处理函数分配物理页面,并填好页表 ? 异常返回,用户程序再次访问该虚拟空间 ioremap() :外部设备存储空间的地址映射 通常的内存页面的管理,都是先分配虚存空间,再为此区间分配物理内存页面,并建立映射。 ioremap()则相反:要先有一个物理存储区间,如外设卡上的存储器出现在总线上的地址。再“反向”从该总线地址出发找到一片虚存区间,并建立映射。 因为只有内核才能对外部设备进行操作,所以相应的虚存区间是内核空间(2GB以上)。 提纲 进程描述符 进程的状态 进程调度 进程的切换 创建和撤销进程 0号线程和1号进程 Linux2.6最新进程状态特性: 1. TASK_DEAD状态区分两个不同的exit_state: EXIT_ZOMBIE:进程已终止,它正等待其父进程收集关于它的一些统计信息。 EXIT_DEAD:最终状态。其父进程已经通过 wait4() 或 waitpid() 调用收集所有统计信息,为了防止其他执行线程对同一进程也执行wait()类系统调用。 2. 添加TASK_WAKEKILL 用于在接收到致命信号时唤醒进程: #define TASK_KILLABLE (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE) #define TASK_STOPPED (TASK_WAKEKILL | __TASK_STOPPED) #define TASK_TRACED (TASK_WAKEKILL | __TASK_TRACED) TASK_KILLABLE可以替代TASK_UNINTERRUPTIBLE在某些地方的应用。 Linux 2.6 新引入O(1)调度算法 调度时机 用户进程自愿放弃CPU,如执行sleep()系统调用; 系统调用中,需要等待时,直接调用schedule()进行调度; 系统调用、中断或异常处理完成后,返回到用户空间前,若当前进程的描述符中的need_resched = 1,则发生调度; 内核是否为preemptible:视 C中的中断处理完成,但返回内核空间时,是否仍有调度时机。 current task 用current宏获取当前task_struct: 进程的创建 Linux提供了几个系统调用来创建: fork,vfork和clone系统调用创建新进程 在内核中,它们都是调用do_fork实现的 fork:父进程的所有数据结构复制一份给子进程 clone:有选择的复制,其它通过指针共享 vfork:只复制task_struct和内核堆栈,所以子进程只是线程(没独立的用户空间)。 execve系统调用 通常,子进程从fork返回后会调用exec来开始执行新的程序,如: If (result = fork() == 0){ /* 子进程代码 */ … if (execve(“new_program”,…)0) perror(“execve f
您可能关注的文档
最近下载
- 产品设计开发控制程序.docx VIP
- 西门子S7-1500系列PLC技术及应用.pptx VIP
- 现代工程图学习题集葛常清习题答案.pdf VIP
- 金融市场与金融机构 第9版 pdf.docx
- 生猪屠宰兽医卫生检验人员理论考试题库资料及答案.pdf VIP
- 爱国、爱校、爱家教育主题班会课件.pptx VIP
- (高清版)B/T 13813-2023 煤矿用金属材料摩擦火花安全性试验方法和判定规则.pdf VIP
- 3.2《文学作为语言艺术的独特地位》教学设计-中职高二语文(高教版2024拓展模块上册).pdf VIP
- 4s店销售月度总结报告ppt模板.pptx VIP
- 上海科技版小学三年级上册综合实践活动教案(全册).pdf VIP
文档评论(0)