⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000012.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;coolzhang&nbsp;(coolzhang),&nbsp;信区:&nbsp;Linux&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;linux&nbsp;bible&nbsp;第十一章&nbsp;核心机制&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Mon&nbsp;Oct&nbsp;25&nbsp;17:58:00&nbsp;1999)&nbsp;<BR>&nbsp;<BR>发信人:&nbsp;coolzhang&nbsp;(coolzhang),&nbsp;信区:&nbsp;UNIX&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;linux&nbsp;bible&nbsp;第十一章&nbsp;核心机制&nbsp;<BR>发信站:&nbsp;武汉白云黄鹤站&nbsp;(Mon&nbsp;Oct&nbsp;25&nbsp;17:11:11&nbsp;1999),&nbsp;站内信件&nbsp;<BR>&nbsp;<BR>第十一章&nbsp;核心机制&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>本章主要描叙Linux核心为使核心其他部分能有效工作而提供的几个常用任务与机制。&nbsp;<BR>&nbsp;<BR>11.1&nbsp;&nbsp;底层部分处理机制&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>某些特殊时刻我们并不愿意在核心中执行一些操作。例如中断处理过程中。&nbsp;<BR>当中断发生时处理器将停止当前的工作,操作系统将中断发送到相应的设备驱&nbsp;<BR>动上去。由于此时系统中其他程序都不能运行,所以设备驱动中的中断处理过程&nbsp;<BR>不宜过长。有些任务最好稍后执行。Linux底层部分处理机制可以让设备驱动和&nbsp;<BR>Linux核心其他部分将这些工作进行排序以延迟执行。图11.1给出了一个与底层&nbsp;<BR>部分处理相关的核心数据结构。&nbsp;<BR>&nbsp;<BR>系统中最多可以有32个不同的底层处理过程;bh_base是指向这些过程入口的指&nbsp;<BR>针数组。而bh_active和bh_mask用来表示那些处理过程已经安装以及那些处于&nbsp;<BR>活动状态。如果bh_mask的第N位置位则表示bh_base的第N个元素包含底层部分&nbsp;<BR>处理例程。如果bh_active的第N位置位则表示第N个底层处理过程例程可在调度&nbsp;<BR>器认为合适的时刻调用。这些索引被定义成静态的;定时器底层部分处理例程&nbsp;<BR>具有最高优先级(索引值为0),控制台底层部分处理例程其次(索引值为1)。&nbsp;<BR>典型的底层部分处理例程包含与之相连的任务链表。例如immediate底层部分处&nbsp;<BR>理例程通过那些需要被立刻执行的任务的立即任务队列(tq_immediate)来执行。&nbsp;<BR>&nbsp;<BR>有些核心底层部分处理过程是设备相关的,但有些更加具有通用性:&nbsp;<BR>&nbsp;<BR>TIMER&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每次系统的周期性时钟中断发生时此过程被标记为活动,它被用来驱动核&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;心的定时器队列机制。&nbsp;<BR>CONSOLE&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;此过程被用来处理进程控制台消息。&nbsp;<BR>TQUEUE&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;此过程被用来处理进程tty消息。&nbsp;<BR>NET&nbsp;此过程被用来做通用网络处理。&nbsp;<BR>IMMEDIATE&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这是被几个设备驱动用来将任务排队成稍后执行的通用过程。&nbsp;<BR>&nbsp;<BR>当设备驱动或者核心中其他部分需要调度某些工作延迟完成时,它们将把这些任&nbsp;<BR>务加入到相应的系统队列中去,如定时器队列,然后对核心发出信号通知它需要&nbsp;<BR>调用某个底层处理过程。具体方式是设置bh_active中的某些位。如果设备驱动将&nbsp;<BR>某个任务加入到了immediate队列并希望底层处理过程运行和处理它,可将第8位置1。&nbsp;<BR>每次系统调用结束返回调用进程前都要检查bh_active。如果有位被置1则调用处于&nbsp;<BR>活动状态的底层处理过程。检查的顺序是从0位开始直到第31位。&nbsp;<BR>&nbsp;<BR>每次调用底层处理过程时bh_active中的对应位将被清除。bh_active是一个瞬态&nbsp;<BR>变量,它仅仅在调用调度管理器时有意义;同时它还可以在空闲状态时避免对底&nbsp;<BR>层处理过程的调用。&nbsp;<BR>&nbsp;<BR>11.2&nbsp;&nbsp;任务队列&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>任务队列是核心延迟任务启动的主要手段。&nbsp;Linux&nbsp;<BR>提供了对队列上任务排队以及处理它们的通用机制。&nbsp;<BR>&nbsp;<BR>任务队列通常和底层处理过程一起使用;底层的定时器队列处理过程运行时对&nbsp;<BR>定时器队列进行处理。任务队列的结构很简单,它由一个tq_struct结构链表构&nbsp;<BR>成,每个节点中包含处理过程的地址指针以及指向数据的指针。&nbsp;<BR>&nbsp;<BR>处理任务队列上元素时将用到这些过程,同时此过程还将用到指向这些数据的指针。&nbsp;<BR>&nbsp;<BR>核心的所有部分,如设备驱动,&nbsp;<BR>都可以创建与使用任务队列。但是核心自己创建与管理的任务队列只有以下三个:&nbsp;<BR>&nbsp;<BR>timer&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;此队列用来对下一个时钟滴答时要求尽快运行的任务进行排队。每个时钟滴&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;答时都要检查此队列看是否为空,如果不为空则定时器底层处理过程将激活&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;此任务。当调度管理器下次运行时定时器队列底层处理过程将和其他底层处&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;理过程一道对任务队列进行处理。这个队列不能和系统定时器相混淆。&nbsp;<BR>immediate&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;immediate&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;底层处理过程的优先级低于定时器底层处理过程,所以此类型任务将延迟运行。&nbsp;<BR>scheduler&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;此任务队列直接由调度管理器来处理。它被用来支撑系统中其他任务队列,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;此时可以运行的任务是一个处理任务队列的过程,如设备驱动。&nbsp;<BR>&nbsp;<BR>当处理任务队列时,处于队列头部的元素将从队列中删除同时以空指针代替它。这&nbsp;<BR>个删除操作是一个不可中断的原子操作。队列中每个元素的处理过程将被依次调用。&nbsp;<BR>这个队列中的元素通常使用静态分配数据。然而并没有一个固有机制来丢弃已分配&nbsp;<BR>内存。任务队列处理例程简单的指向链表中下一个元素。这个任务才真正清除任何&nbsp;<BR>已分配的核心内存。&nbsp;<BR>&nbsp;<BR>11.3&nbsp;&nbsp;定时器(TIMER)&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>操作系统应该能够在将来某个时刻准时调度某个任务。所以需要一种能保证任务较&nbsp;<BR>准时调度运行的机制。希望支持每种操作系统的微处理器必须包含一个可周期性中&nbsp;<BR>断它的可编程间隔定时器。这个周期性中断被称为系统时钟滴答,它象节拍器一样&nbsp;<BR>来组织系统任务。&nbsp;<BR>&nbsp;<BR>Linux的时钟观念很简单:它表示系统启动后的以时钟滴答记数的时间。所有的系统&nbsp;<BR>时钟都基于这种量度,在系统中的名称和一个全局变量相同-jiffies。&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -