- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
割り込みハンドラ
* ●デバイスドライバサポート □ 割込み制御 ☆ 割込みハンドラ ☆ 割込みハンドラの登録 ☆ 割込みハンドラの起動 ☆ 割込み禁止 □ 遅延処理 ☆ ソフトウェア割込みハンドラ ☆ BHハンドラ ☆ タスクキュー □ 時計 ☆ クロックハンドラ ☆ タイマーリスト ☆ その他のタイマ関連機能 LINUXカーネル読書会 割り込み ハンドラ ソフト割り込み ハンドラ 待ち 起床 ハードウェア割り込み プロセス 典型的な割り込み動作 1. 2. 3. 4. 割り込みハンドラ 割り込みは、タイマーの起動以外にもフォライバの制御、プロセッサ間通信にも使用される。 Linuxでは、CPUに発生した割り込み要因ごとに起動するハンドラを登録することが可能で ある。以下に割り込み管理の特徴を示す。 ●割り込みレベルは存在しない。 ●割り込みハンドラは、いくらでもネストできる(同一IRQの割り込みは禁止)。 ●Intel CPUの場合は、割り込みスタックを用意せず、カーネルスタック上で動作する。 割り込みハンドラの登録 デバイスドライバは、初期化時にrequest_irq()で割り込みハンドラを登録しなければならない。 初期化処理 request_irq() デバイスドライバ 割り込みハンドラ 登録 デバイスドライバ用 割り込みハンドラ 登録 デバイスドライバ用 割り込みハンドラ 登録 複数登録に対応した 構造であれば可能 ■割り込みハンドラ 割り込みハンドラの起動 ●割り込みエントリ関数であるdo_IRQ()から、割り込みコントローラに対して発生した 割り込みレベルのマスクと割り込みに対するACKを返す。 ※処理方式は割り込み制御コントローラごとに固有の方法がとられる。 割り込みレベルマスク 割り込み処理中に同じIRQレベルの割り込みを防ぐ 割り込みに対するACK 割り込み受付を通知し、次の割り込みの発生を防ぐ 割り込みハンドラは以下のようにして起動される。 ●handle_IRQ_event()により、発生した割り込みレベルに対応したドライバの 割り込みハンドラが起動される。 ●全てのドライバの割り込みハンドラの実行が終了した後、割り込み制御コントローラ に対して、発生した割り込みレベルに対するマスクを解除する。 do_interrupt() timer_interrupt() *handler irqaction ハードウェア割り込み du_irq() handle_irq_event() *action *handler *action *handler *action *handler Irq_desc[] (*ack)() (*end)() i8259A_irq_type *handler *handler *handler (*ack)() (*end)() ioapci_level_irq_type IOAPIC foo_interrupt() bar_interrupt() ???_interrupt() irqaction do_foo_irq (割り込み番号IRQ、…) 同種の割り込みが発生しないよう割り込みのマスクを行う。 割り込みに対するACKを割り込みコントローラに返す。 Handle_IRQ_event(割り込み番号IRQ, irq_desc[]に登録されているハンドラのリスト) 割り込みマスク解除 Handle_IRQ_event (割り込み番号IRQ、ハンドラリスト) 割り込みハンドラ開始宣言(irq_enter()) if (割り込みのネストを許すハンドラの場合) CPUの割り込みを許可 ※登録されている全ての割り込みハンドラを呼び出す CPU割り込みを禁止する 割り込みハンドラ終了宣言(irq_exit()) 問題点 Intelの場合、割り込みスタックを設けていない事と、デバイスの数だけネストを許可して いるため、割り込みハンドラの作りによってはカーネルスタックを突き破る可能性がある。 割り込み禁止 - CPUレベルでの割り込み制御 割り込みハンドラ間で競合する資源を操作する場合、CPUへの割り込みを禁止する必要 がある。Linuxでは、割り込みに関する以下の関数が用意されている。 cli () 割り込みを禁止する sti () 割り込みの禁止を解除する save_flags () 現在の割り込み禁止状態を取り出す restore_flags () 割り込み禁止状態を設定する ※Interl CPUでは、eflagsレジスタの割り込み禁止ビットを操作して実現している (シングルプ
您可能关注的文档
最近下载
- 车位所有权人许可建设充电桩证明.pdf VIP
- 红辽卷烟公司品牌竞争力分析结论与参考文献.docx VIP
- 2025贵州省旅游产业发展集团有限公司招聘115人笔试备考试题及答案解析.docx VIP
- 【泛微客户期刊】2023年36期:某医药集团费控管理项目案例分享.pptx VIP
- 区域土地利用土地覆盖遥感调查.pdf VIP
- 泛微软件集团管控解决方案文档资料.pptx VIP
- 廉租房、公租房维修项目方案.pdf VIP
- 2025贵州省旅游产业发展集团有限公司招聘115人笔试备考题库及答案解析.docx VIP
- 农业产业化发展规划-特色农业发展规划.doc VIP
- 采购与供应商控制程序(ISO9001 IATF16949).pdf VIP
文档评论(0)