![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux kernel
文章平均质量分 77
zhw888888
这个作者很懒,什么都没留下…
展开
-
绪论
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> Unix内核概述Unix内核提供了应用程序可以运行的执行环境。因此,内核必须实现一组及相应的接口。应用程序使用这些接口,而且通常不原创 2011-07-06 14:56:58 · 759 阅读 · 0 评论 -
避免竞争条件的实例
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 人们总是期望内核开发者确定和解决由内核控制路径的交错执行所引起的同步问题。但是,避免竞争条件是一项艰巨的任务,因为这需要对内核的各个成分如何相互作用有原创 2011-07-14 16:50:10 · 1171 阅读 · 0 评论 -
信号量
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 我们在第一章”同步和临界区”一节引入了信号量。从本质上说,它们实现了一个加锁原语,即让等待者睡眠,直到等待的资源变为空闲。实际上,Linux提供两种信原创 2011-07-14 13:50:20 · 854 阅读 · 0 评论 -
对内核数据结构的同步访问
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 可以使用前面所述的同步原语保护共享数据结构避免竞争条件。当然,系统性能可能随所选择同步原语种类的不同而有很大变化。通常情况下,内核开发者采用下述由经验原创 2011-07-14 16:49:34 · 790 阅读 · 0 评论 -
Linux 计时体系结构
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> Linux必定执行与定时相关的操作。例如,内核周期性地:更新自系统启动以来所经过的时间。更新时间和日期。确定当前进程在每CPU上已经运行了多长时间,如原创 2011-07-15 14:47:35 · 1275 阅读 · 1 评论 -
更新系统统计数
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 更新时间和日期用户程序从xtime变量中获得当前时间和日期。内核必须周期性地更新该变量,才能使它的值保持相当的精确。全局时钟中断处理程序调用updat原创 2011-07-15 14:50:45 · 1304 阅读 · 0 评论 -
自旋锁
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 一种广泛应用的同步技术是加锁。当内核控制路径必须访问共享数据结构或进入临界区时,就需要为自己获取一把”锁”。由锁机制保护的资源非常类似于限制于房间内的原创 2011-07-14 10:33:25 · 1143 阅读 · 0 评论 -
单处理器系统上的计时体系结构
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 在单处理器系统上,所有与定时有关的活动都是由IRQ线0上的可编程间隔定时器产生的中断触发的。同样,在Linux中,某些活动都尽可能在中断产生后立即执行原创 2011-07-15 14:49:03 · 1002 阅读 · 0 评论 -
软定时器和延迟函数
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 定时器是一种软件功能,即允许在将来的某个时刻,函数在给定的时间间隔用完被调用。超时表示与定时器相关的时间间隔已经用完的那个时刻。内核和进程广泛使用定时原创 2011-07-15 14:51:33 · 3278 阅读 · 0 评论 -
进程调度
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> Linux与任何分时系统一样,通过一个进程到另一个进程的快速切换,达到表面上看来多个进程同时执行的神奇效果。进程切换本身已在第三章中讨论过,本章讨论进原创 2011-07-16 10:05:27 · 1014 阅读 · 0 评论 -
补充原主和禁止中断
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 补充原语Linux2.6还使用了另一种类似于信号量的原语:补充。引入这种原语是为了解决多处理器系统上发生的一种微妙的竞争条件,当进程A分配了一个临时信原创 2011-07-14 16:48:43 · 842 阅读 · 0 评论 -
软中断及tasklet
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 我们前面在”中断处理”一节提到,在由内核执行的几个任务之间有些不是紧急的的;在必要情况下它们可以廷迟一段时间。回忆一下,一个中断处理程序的几个中断服务原创 2011-07-13 13:19:27 · 2770 阅读 · 0 评论 -
异常处理
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> CPU产生的大部分异常都是由Linux解释为出错条件。当其中一个异常发生时,内核就向引起异常的进程发送一个信号向它通知一个反常条件。例如,如果进程执行原创 2011-07-12 10:48:20 · 1018 阅读 · 0 评论 -
创建进程
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> Unix操作系统紧紧依赖进程创建来满足用户的需求。例如,只要用户输入一条命令,shell进程就创建一个新进程,新进程执行shell的另一个拷贝。传统的原创 2011-07-11 14:10:52 · 2048 阅读 · 0 评论 -
内存寻址
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 内存寻址内存地址使用用80x86微处理器时,必須区分以下三种不同的地址逻辑地址包含在机器语言指令中用来指定一个操作数或一条指令的地址。这种寻址有80x原创 2011-07-07 14:39:55 · 4357 阅读 · 0 评论 -
进程
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 第三章进程进程是任何多道程序设计的操作系统中的基本概念。通常把进程定义为程序执行的一个实例,因此,如果16个用户同时运行vi,那么就有16个独立的进程原创 2011-07-09 15:06:19 · 1025 阅读 · 0 评论 -
进程切换
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 为了控制进程的执行,内核必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行。这种行为被称为进程切换,任务切换或上下文切换。下面几节描原创 2011-07-11 09:09:08 · 6397 阅读 · 0 评论 -
撤消进程
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 很多进程终止了它们本该执行的代码,从这种意义上说,这些进程“死”了。当这种情况发生是,必须通知内核以便内核释放进程所拥有的资源,包括内存,打开文件及其原创 2011-07-11 17:32:58 · 827 阅读 · 0 评论 -
中断和异常处理程序的嵌套执行
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 每个中断或异常都会引起一个内核控制路径,或者说代表当前进程在内核态执行单独的指令序列。例如:当I/O设备发出一个中断时,相应的内核控制路径的第一部分指原创 2011-07-12 10:46:03 · 3348 阅读 · 0 评论 -
从中断和异常返回
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 我们通过考察中断和异常处理程序的终止阶段来结束本章。尽管终止阶段的主要目的很清楚,即恢复某个程序的执行;但是,在这样做之间,还需要考虑几个问题:内核控原创 2011-07-13 13:20:22 · 1891 阅读 · 0 评论 -
中断处理
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 正如前面解释的那样,内核只要给引起异常的进程发送一个Unix信号就能处理大多数异常。因此,要采取的行动被廷迟,直到进程接收到这个信号。所以,内核能很快原创 2011-07-12 17:15:57 · 1722 阅读 · 0 评论 -
初始化中断描述表
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 现在,我们知道了80x86微处理器在硬件级对中断和异常做了些什么,接下来,我们可以继续描述如何初始化中断描述表。内核启用中断以前,必须把IDT表的初始原创 2011-07-12 10:47:43 · 865 阅读 · 0 评论 -
调度算法
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } --> 早期Linux版本中的调度算法非常简单易懂;在每次进程切换时,内核扫描可运行进程的链表,计算进程的优先级,然后选择”最佳”进程来运行。这个算法的主要缺原创 2011-07-16 10:41:26 · 782 阅读 · 0 评论