![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
《Linux Kernel Development》
《Linux Kernel Development》
Neilo_chen
这个作者很懒,什么都没留下…
展开
-
LKD:内存管理
内核本身不能像用户空间那样奢侈地使用内存。 页:内核把物理页作为内存管理的基本单位。 MMU:内存管理单元,管理内存并把虚拟地址转换为物理地址的硬件。 内核用struct page结构表示系统中的每个物理页。 区:由于硬件的限制,内核并不能对所有页一视同仁。内核把页划分为不同的区。Linux必须处理两种由于硬件缺陷而引起的内存寻址问题: 一些硬件只能用某些特定的内存地址来执行DMA 一些体...原创 2020-01-15 22:33:47 · 713 阅读 · 0 评论 -
LKD:定时器和时间管理
内核函数:事件驱动和时间驱动 相对时间和绝对时间 周期性产生的事件——都是由系统定时器驱动的。系统定时器是一种可编程硬件芯片,它能以固定频率产生中断,该中断就是所谓的定时器中断,它所对应的中断处理程序负责更新系统时间和执行需要周期性运行的任务。 内核的时间概念 内核必须在硬件的帮助下才能计算和管理时间。 节拍(tick):两次时钟中断的间隔时间。,它等于节拍率分之一 利用时间...原创 2019-08-25 22:48:06 · 276 阅读 · 0 评论 -
LKD:下半部
在2.6版本中,内核提供了三种下半部实现机制:软中断、tasklets和工作队列。 内核定时器:把操作推迟到某个确定的时间段之后执行 软中断 <a>软中断由softirq_action表示,softirq.c中定义了包含有32个该结构体的数组。 struct softirq_action{ void (*action)(struct softirq_act...原创 2019-08-24 13:19:10 · 152 阅读 · 0 评论 -
LKD:内核同步
临界区:访问和操作共享数据的代码段。 竞争条件:如果两个执行线程有可能处于同一个临界区中同时执行,那么这就是程序的一个bug。 同步:避免并发和防止竞争条件。 各种锁机制之间的区别主要在于:当锁已经被其他线程持有,因而不可用时的行为表现——一些锁被争用时会简单地执行忙等待,而另外一些锁会使当前任务睡眠直到锁可用为止。 内核中可能造成并发执行的原因: 中断、软中断和tasklet、内核抢占、...原创 2019-08-24 13:16:31 · 266 阅读 · 0 评论 -
LKD:进程管理
进程 进程:处于执行期的程序,包括:可执行程序代码、打开的文件、挂起的信号、内核内部数据、处理器状态、一个或多个具有内存映射的内存地址空间及一个或多个执行线程、用来存放全局变量的数据段等。实际上,进程就是正在执行的程序代码的实时结果。 执行线程:简称线程,是在进程中活动的对象。每个线程都拥有一个独立的程序计数器、进程栈和一组进程寄存器。内核调度的是线程,而不是进程。 进程提供两种虚拟机...原创 2019-08-24 13:12:00 · 509 阅读 · 0 评论 -
LKD:中断
中断请求(IRQ)线:不同设备对应的中断不同,而每个中断都通过一个唯一的数字标志。重点在于特定的中断总是与特定的设备相关联,并且内核要知道这些信息。 异常:常常也称为同步中断。如处理器执行到由于编程失误导致的错误指令(如被0除),或者执行期间出现特殊情况(如缺页),处理器就会产生一个异常。 中断处理程序(ISR):上半部——接收到一个中断,它就立即开始执行,但只做有严格时限的工作,例如对接收的...原创 2019-08-24 13:10:16 · 244 阅读 · 0 评论 -
LKD:工作队列
工作队列 工作队列由内核线程执行,在进程上下文中执行。 工作队列允许重新调度甚至是睡眠 在工作队列和软中断/tasklet中做出选择非常容易。如果推后执行的任务需要睡眠,就选择工作队列。不需要睡眠,就选择软中断或tasklet 唯一能在进程上下文中运行、睡眠的下半部机制。在需要获得大量内存、需要获取信号量、需要执行阻塞式的I/O操作时,工作队列会非常有用。 工作队列的实现 工作者线...原创 2019-08-24 12:45:14 · 657 阅读 · 0 评论