当前位置: 首页 > news >正文

毕业设计可以做哪些简单网站苏州万户网络科技有限公司

毕业设计可以做哪些简单网站,苏州万户网络科技有限公司,php网站转移,平顶山高端网站建设作者#xff1a;韦东山前言#xff1a;本文#xff0c;4200字#xff0c;研究代码花了一天#xff0c;写出来花了一天#xff1b;录视频估计又得花半天#xff1b;真怀念以前简单粗暴的生活啊#xff1a;拿起话筒就录视频#xff0c;先画好图#xff1f;那是不需要的… 作者韦东山前言本文4200字研究代码花了一天写出来花了一天录视频估计又得花半天真怀念以前简单粗暴的生活啊拿起话筒就录视频先画好图那是不需要的文档那是不存在的真是洒脱现在要写文档又要画流程图十几、二十分钟的视频真是沤心沥血做出来的各位别浪费了欢迎享受韦东山老师正在录本文配套的视频明天发布。咱们先预习。分为7点Linux对中断的扩展硬件中断软件中断中断处理原则1不能嵌套中断处理原则2越快越好要处理的事情实在太多拆分为上半部下半部下半部的事情耗时不是太长tasklet下半部要做的事情太多并且很复杂工作队列新技术threaded irq从2005年我接触Linux到现在15年了Linux中断系统的变化并不大。比较重要的就是引入了threaded irq使用内核线程来处理中断。Linux系统中有硬件中断也有软件中断。对硬件中断的处理有2个原则不能嵌套越快越好。参考资料https://blog.csdn.net/myarrow/article/details/9287169 01Linux对中断的扩展硬件中断、软件中断Linux系统把中断的意义扩展了对于按键中断等硬件产生的中断称之为“硬件中断”(hard irq)。每个硬件中断都有对应的处理函数比如按键中断、网卡中断的处理函数肯定不一样。为方便理解你可以先认为对硬件中断的处理是用数组来实现的数组里存放的是函数指针注意上图是简化的Linux中这个数组复杂多了。当发生A中断时对应的irq_function_A函数被调用。硬件导致该函数被调用。相对的还可以人为地制造中断软件中断(soft irq)如下图所示注意上图是简化的Linux中这个数组复杂多了。问题来了a. 软件中断何时生产由软件决定对于X号软件中断只需要把它的flag设置为1就表示发生了该中断。b. 软件中断何时处理软件中断嘛并不是那么十万火急有空再处理它好了。什么时候有空不能让它一直等吧Linux系统中各种硬件中断频繁发生至少定时器中断每10ms发生一次那取个巧在处理写硬件中断后再去处理软件中断就这么办有哪些软件中断查内核源码include/linux/interrupt.h怎么触发软件中断最核心的函数是raise_softirq简单地理解就是设置softirq_veq[nr]的标记位怎么设置软件中断的处理函数后面讲到的中断下半部tasklet就是使用软件中断实现的。 02 中断处理原则1不能嵌套官方资料中断处理不能嵌套https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?ide58aa3d2d0cc中断处理函数需要调用C函数这就需要用到栈。中断A正在处理的过程中假设又发生了中断B那么在栈里要保存A的现场然后处理B。在处理B的过程中又发生了中断C那么在栈里要保存B的现场然后处理C。如果中断嵌套突然暴发那么栈将越来越大栈终将耗尽。所以为了防止这种情况发生也是为了简单化中断的处理在Linux系统上中断无法嵌套即当前中断A没处理完之前不会响应另一个中断B(即使它的优先级更高)。 03 中断处理原则2越快越好妈妈在家中照顾小孩时门铃响起她开门取快递这就是中断的处理。她取个快递敢花上半天吗不怕小孩出意外吗同理在Linux系统中中断的处理也是越快越好。在单芯片系统中假设中断处理很慢那应用程序在这段时间内就无法执行系统显得很迟顿。在SMP系统中假设中断处理很慢那么正在处理这个中断的CPU上的其他线程也无法执行。在中断的处理过程中该CPU是不能进行进程调度的所以中断的处理要越快越好尽早让其他中断能被处理──进程调度靠定时器中断来实现。在Linux系统中使用中断是挺简单的为某个中断irq注册中断处理函数handler可以使用request_irq函数在handler函数中代码尽可能高效。但是处理某个中断要做的事情就是很多没办法加快。比如对于按键中断我们需要等待几十毫秒消除机械抖动。难道要在handler中等待吗对于计算机来说这可是一个段很长的时间。怎么办04要处理的事情实在太多拆分为上半部、下半部当一个中断要耗费很多时间来处理时它的坏处是在这段时间内其他中断无法被处理。换句话说在这段时间内系统是关中断的。如果某个中断就是要做那么多事我们能不能把它拆分成两部分紧急的、不紧急的在handler函数里只做紧急的事然后就重新开中断让系统得以正常运行那些不紧急的事以后再处理处理时是开中断的。中断下半部的实现有很多种方法讲2种主要的tasklet(小任务)、work queue(工作队列)。 05 下半部要做的事情耗时不是太长tasklet假设我们把中断分为上半部、下半部。发生中断时上半部下半部的代码何时、如何被调用当下半部比较耗时但是能忍受并且它的处理比较简单时可以用tasklet来处理下半部。tasklet是使用软件中断来实现。写字太多不如贴代码代码一目了然使用流程图简化一下假设硬件中断A的上半部函数为irq_top_half_A下半部为irq_bottom_half_A。使用情景化的分析才能理解上述代码的精华。a. 硬件中断A处理过程中没有其他中断发生一开始preempt_count 0上述流程图①⑨依次执行上半部、下半部的代码各执行一次。b. 硬件中断A处理过程中又再次发生了中断A一开始preempt_count 0执行到第⑥时一开中断后中断A又再次使得CPU跳到中断向量表。注意这时preempt_count等于1并且中断下半部的代码并未执行。CPU又从①开始再次执行中断A的上半部代码在第①步preempt_count等于2在第③步preempt_count等于1在第④步发现preempt_count等于1所以直接结束当前第2次中断的处理注意重点来了第2次中断发生后打断了第一次中断的第⑦步处理。当第2次中断处理完毕CPU会继续去执行第⑦步。可以看到发生2次硬件中断A时它的上半部代码执行了2次但是下半部代码只执行了一次。所以同一个中断的上半部、下半部在执行时是多对一的关系。c. 硬件中断A处理过程中又再次发生了中断B一开始preempt_count 0执行到第⑥时一开中断后中断B又再次使得CPU跳到中断向量表。注意这时preempt_count等于1并且中断A下半部的代码并未执行。CPU又从①开始再次执行中断B的上半部代码在第①步preempt_count等于2在第③步preempt_count等于1在第④步发现preempt_count等于1所以直接结束当前第2次中断的处理注意重点来了第2次中断发生后打断了第一次中断A的第⑦步处理。当第2次中断B处理完毕CPU会继续去执行第⑦步。在第⑦步里它会去执行中断A的下半部也会去执行中断B的下半部。所以多个中断的下半部是汇集在一起处理的。总结a. 中断的处理可以分为上半部下半部b. 中断上半部用来处理紧急的事它是在关中断的状态下执行的c. 中断下半部用来处理耗时的、不那么紧急的事它是在开中断的状态下执行的d. 中断下半部执行时有可能会被多次打断有可能会再次发生同一个中断e. 中断上半部执行完后触发中断下半部的处理f. 中断上半部、下半部的执行过程中不能休眠中断休眠的话以后谁来调度进程啊06下半部要做的事情太多并且很复杂工作队列在中断下半部的执行过程中虽然是开中断的期间可以处理各类中断。但是毕竟整个中断的处理还没走完这期间APP是无法执行的。假设下半部要执行1、2分钟在这1、2分钟里APP都是无法响应的。这谁受得了所以如果中断要做的事情实在太耗时那就不能用中断下半部来做而应该用内核线程来做在中断上半部唤醒内核线程。内核线程和APP都一样竞争执行APP有机会执行系统不会卡顿。这个内核线程是系统帮我们创建的一般是kworker线程内核中有很多这样的线程kworker线程要去“工作队列”(work queue)上取出一个一个“工作”(work)来执行它里面的函数。那我们怎么使用work、work queue呢a. 创建work你得先写出一个函数然后用这个函数填充一个work结构体。比如b. 要执行这个函数时把work提交给work queue就可以了上述函数会把work提供给系统默认的work queuesystem_wq它是一个队列。c. 谁来执行work中的函数不用我们管schedule_work函数不仅仅是把work放入队列还会把kworker线程唤醒。此线程抢到时间运行时它就会从队列中取出work执行里面的函数。d. 谁把work提交给work queue在中断场景中可以在中断上半部调用schedule_work函数。总结a. 很耗时的中断处理应该放到线程里去b. 可以使用work、work queuec. 在中断上半部调用schedule_work函数触发work的处理d. 既然是在线程中运行那对应的函数可以休眠。 07 新技术threaded irq使用线程来处理中断并不是什么新鲜事。使用work就可以实现但是需要定义work、调用schedule_work好麻烦啊。太懒了太懒了就这2步你们都不愿意做。好内核是为懒人服务的再杀出一个函数你可以只提供thread_fn系统会为这个函数创建一个内核线程。发生中断时内核线程就会执行这个函数。说你懒是开玩笑内核开发者也不会那么在乎懒人。以前用work来线程化的处理内核一个worker线程只能由一个CPU执行多个中断的work都由同一个worker线程来处理在单CPU系统中也只能忍着了。但是在SMP系统中明明有那么多CPU空着你偏偏让多个中断挤在这个CPU上新技术threaded irq为每一个中断都创建一个内核线程多个中断的内核线程可以分配到多个CPU上执行这提高了效率。☆ END ☆扫码或长按关注回复「 加群 」进入技术群聊
http://www.huolong8.cn/news/407420/

相关文章:

  • 企业免费网站模板设计公司画册模板
  • 苏州网联盛网站建设wordpress lamp lnmp
  • 企业网站托管注意事项网络营销推广方案有哪些
  • 租用服务器做视频网站网站自动采集更新
  • rp如何做网站网站群 米拓
  • 便利的网站建设公司全球营销策划公司排名
  • 口碑好的聊城网站建设动画设计稿
  • 12306网站能不能用银河二计算机做服务器啊慢得要死域名需要备案吗?
  • 安阳网站建设官网无锡建设网站公司
  • 网站的数据库有什么用网站运营推广方案设计
  • 个人备案怎么做旅游网站自己怎么做云购网站吗
  • 晓风彩票网站建设软件什么地图能看到实时全景免费
  • 大连平台网站建设seo推广网站有哪
  • 百度做网站吗公司备案查询网站
  • 大连做网站的科技公司windows虚拟主机
  • 设计旅游网站的主色调泰顺网站建设
  • 福州网站设计大概多少钱苏州企业网站制作开发
  • 两学一做 山西答题网站外贸网站contact
  • 基于jsp的网站开发了解网站开发流程
  • 网站首页备案号链接做网页和网站一样吗
  • 网站开发英文什么什么设计英文网站
  • 广州建设网站公司简介潍坊网站定制 优帮云
  • 网站开发与推广方向长春网站设计价格
  • wordpress企业网站seo如何给网站建设提意见
  • 高端网站建设免费分析商城推广 网站建设
  • 上海网站制作哪家奿河北建设工程信息网官方网站
  • 东莞网站排名价格商城网站开发时间
  • 网站维护明细报价表网亿(深圳)信息科技有限公司
  • 能源科技网站建设100个游戏代码
  • 网站怎么做图片轮播360建筑网证书估价