- 1、本文档共21页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux内核和用户态介绍要点
Linux 用户态和内核态 Linux 发展史 内核态和用户态 文件 Linux 的世界观(和windows不同) 文件的操作 文件的种类 文件的控制 系统调用 学好“什么”走遍天下都不怕? 用户态访问内核的入口 为什么要访问内核 内核的作用 库lib、shell 谁在访问内核(进程) 进程 房子的主人是软件 进程状态 进程的资源(内存、文件、硬件和CPU) 进程的调度(内核调度) 进程的调度 一个人和多个人干活是不一样的 多进程环境(多进程、SMP、中断) 调度时机(等待资源、时间片、中断、抢占) 调度策略 用户态和内核态进程的内存资源 你在我心里永远排第一,换一页而已。 空间共享和独立(硬件RAM和逻辑内存) 内核空间和用户态空间 踩内存了,打堆栈了 内存的使用 out of memory的时代过去了吗? page管理 slab(kmalloc、内存池) 用户态内存使用(malloc、文件映射、共享内存) 程序的内存map(栈、堆、code、data) 内核和用户态的数据传递(copy_from_user、copy_to_user) 内存映射(硬件寄存器、保留内存) 进程间通信 通信基本靠吼out了,我们有云了。 进程间通信的目的 用户态进程间通信的方式(管道、FIFO、共享内存、socket、信号量) 内核态进程互斥(信号量、互斥量、自旋锁、原子变量) 内核进程等待(等待、唤醒、I/O阻塞) 文件的I/O 同步还是异步 内核时间 时间就是金钱,效率就是生命 定时器,时间片 jiffies 时间度量(do_gettimeofday) 中断 烧开水了 硬件做了什么? 中断处理(禁止同级别中断) 中断的底半部(softirq、tasklet、工作队列) tasklet、工作队列 体力活总要有人去做吧 tasklet(中断上下文) 工作队列(系统公共的、或是私有的,多核并行) DMA 谁动了我的奶酪 哪里有这么多DMA DMA使用准备(CPU和DMA都能访问内存) 物理地址是什么?(怎样取到物理地址?) 内核和用户态通信 ioctl netlink socket 内核模块、驱动模块 用户态有什么? 内核里有什么? QA THANKS 谢谢 ◆运行状态(TASK_RUNNING) 当进程正在被CPU执行,或已经准备就绪随时可由调度程序执行,则称该进程为处于运行状态(running)。进程可以在内核态运行,也可以在用户态运行。当系统资源已经可用时,进程就被唤醒而进入准备运行状态,该状态称为就绪态。这些状态(图中中间一列)在内核中表示方法相同,都被成为处于TASK_RUNNING状态。 ◆可中断睡眠状态(TASK_INTERRUPTIBLE) 当进程处于可中断等待状态时,系统不会调度该进程执行。当系统产生一个中断或者释放了进程正在等待的资源,或者进程收到一个信号,都可以唤醒进程转换到就绪状态(运行状态)。 ◆不可中断睡眠状态(TASK_UNINTERRUPTIBLE) 与可中断睡眠状态类似。但处于该状态的进程只有被使用wake_up()函数明确唤醒时才能转换到可运行的就绪状态。 ◆暂停状态(TASK_STOPPED) 当进程收到信号SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU时就会进入暂停状态。可向其发送SIGCONT信号让进程转换到可运行状态。在Linux 0.11中,还未实现对该状态的转换处理。处于该状态的进程将被作为进程终止来处理。 ◆僵死状态(TASK_ZOMBIE) 当进程已停止运行,但其父进程还没有询问其状态时,则称该进程处于僵死状态。 当一个进程的运行时间片用完,系统就会使用调度程序强制切换到其它的进程去执行。另外,如果进程在内核态执行时需要等待系统的某个资源,此时该进程就会调用sleep_on()或sleep_on_interruptible()自愿地放弃CPU的使用权,而让调度程序去执行其它进程。进程则进入睡眠状态(TASK_UNINTERRUPTIBLE或TASK_INTERRUPTIBLE)。 只有当进程从“内核运行态”转移到“睡眠状态”时,内核才会进行进程切换操作。在内核态下运行的进程不能被其它进程抢占,而且一个进程不能改变另一个进程的状态。为了避免进程切换时造成内核数据错误,内核在执行临界区代码时会禁止一切中断。 都市类 垂直门户 六省两市:南方都市报 “六个观”、“获奖” ◆运行状态(TASK_RUNNING) 当进程正在被CPU执行,或已经准备就绪随时可由调度程序执行,则称该进程为处于运行状态(running)。进程可以在内核态运行,也可以在用户态运行。当系统资源已经可用时,进程就被唤醒而进入准备运行状态,该状态称为就绪态。这些状态(图中中间一列)在内核中表示方法相同,都被成为处于
文档评论(0)