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

接网站建设单子注意事项深圳市住房和城乡建设局网站首页

接网站建设单子注意事项,深圳市住房和城乡建设局网站首页,wordpress更换文章背景色,网站建设应用后台目录 三 内核的运行 5-中断子系统 6 锁、延迟与原子上下文 7 内存管理子系统 8 驱动的两类框架 三 内核的运行 5-中断子系统 中断子系统的数据结构及设计思想。 中断子系统需要解决中断管理的问题。 如果系统中断较少的话#xff0c;其管理就不用设计这样一个中断子系统这…目录 三 内核的运行 5-中断子系统 6 锁、延迟与原子上下文 7 内存管理子系统 8 驱动的两类框架 三 内核的运行 5-中断子系统 中断子系统的数据结构及设计思想。 中断子系统需要解决中断管理的问题。 如果系统中断较少的话其管理就不用设计这样一个中断子系统这么麻烦了。 但是现代CPU功能越来越强大越来越复杂自然支持的中断数量也不断增加。 中断由专门的中断控制器在硬件层面管理另外还存在中断嵌套的问题这样中断号就可能冲突重叠或重复 为了总揽中断处理内核设计了多个数据结构完善对中断的管理。这些数据结构包括 irq_desc中断描述结构包含中断的数据中断的处理函数指针列表以及相关的其他信息比如父中断、任务相关信息 一个实际的中断会对应到一个irq_desc,结构系统创建时候会初始化一个irq_desc全局列表数组每当驱动调用request_irq请求中断时 就在irq的全局列表中找到一个对应的节点如果申请的中断号存在的话则复用已有的如果没有的话就新分配一个给当前中断号 当前申请中断的回调函数就会挂载到该描述符的action列表上当中断产生后会根据硬件中断号找到软件中断号进而找到该描述符遍历执行挂接其上的回调函数 irq_data中断数据结构体该数据结构包含了当前软件中断号及其对应的硬件中断号也包含了irq_chip和irq_domain结构指针。 这个数据结构会在多个接口的参数中传递用于把整个中断链条粘起来 irq_chip结构表示了一个中断控制器这个结构里预定义了多个函数指针主要用来进行中断控制器的一些操作比如屏蔽、取消中断屏蔽等 irq_domain结构表示了一个中断控制器管理的中断。通过该接口中断控制器要建立该中断控制器管理的中断的映射关系。 主要的映射关系有三种包括线性映射radix树映射直接映射。 中断子系统的构建启动代码 内核启动时完成中断系统的构建也就是描述符表的初始化中断控制器驱动的加载完成中断子系统的初始化。 中断是系统正常运行的基础子系统许多模块的正常运行依赖该子系统所以需要较早初始化。 即使这样中断也有其依赖的部分比如内存分配所以内存的初始化要放在其前面另外CPU本身的初始化也是最初要做的。 上述工作会在CPU中断关闭的情况下进行。因为这个阶段即使产生中断也是没有意义的没有谁去处理它。 笼统的来讲所有中断子系统用到的东西都必须先于其构建比如像radix树之类的。 这之后内核调用early_irq_init();和init_IRQ();构建中断子系统。 第一个接口完成中断描述符相关内容的构建第二个接口一般是平台相关的调用。比如接口中进一步调用machine_desc-init_irq();完成具体平台的中断初始化。 对于海思平台在其march-hisi中的core.c中定义了这里用到的machine进一步的会调用hi3536_gic_init_irq完成平台中断的初始化。 平台部分会做一些额外或者也可能不做最终会调用通用中断初始化接口gic_init_bases 网上介绍的gic_of_init初始化接口也会调用到上述接口上殊途同归吧。 在这个接口里会完成CPU内置中断0-31号的配置完成GIC通用中断控制器的创建和映射关系建立以及用户定义中断的配置 另外这里会使用CPU的中断相关寄存器地址。hisi平台machine在调用通用中断初始化接口时会传递海思平台的寄存器地址完成海思平台中断子系统的初始化 中断子系统的运行如何使用上述构建的中断世界结构 现在我们来看中断系统的运行流程过程。 系统启动时已经完成了基本的中断系统构建。 驱动申请中断时主要是根据中断类型、中断号等信息将当前设备的中断处理程序挂接到中断描述符结构上全局的中断描述符。 当中断产生后会一级一级向上传导到中断控制器最终到CPU。CPU响应中断后会获取到当前最终一级的中断号。 这个中断号是硬件的通过该中断号一级一级向下传导。先通过irq_chip这个代表中断控制器的结构关闭或者屏蔽当前中断控制器的中断 进一步的结合中断数据查找到软件中断号找到中断描述符 遍历并调用中断描述符上的处理函数指针列表。 具体是那个最下一级设备最终产生的中断这就要交给中断处理函数了。 在驱动申请中断时预先定义了中断处理函数。驱动需要判断当中断处理函数被调用时是否是当前设备产生了中断这可以通过读取设备的中断寄存器来完成判决。 其实中断的申请分共享和非共享对于非共享中断此时应该就是也必须是设备的中断触发其中断处理函数否则说明系统中断部分的映射有问题。 6 锁、延迟与原子上下文 软中断上下文中调用msleep进行调度出错 tasklet 中调用msleep产生调度出错 struct work 全局共享队列不能延迟调度,因为是默认内核专门的线程,该线程应该是不能延迟操作? 专有共享队列可以延迟调度? 这里的延迟是延迟固定时间后放到队列中? 因为队列中的work什么时候执行要看之前的work什么时候执行完成 定时器执行上下文是软中断所以也是属于原子上下文 4 msec to jiffies is 100 3BUG: scheduling while atomic: swapper/1/0/0x000001004Modules linked in: testdrv(O) hi_rtc(O) hi_ir(O) hi3536_adec(PO) hi3536_aenc(PO) hi3536_ao(PO) hi3536_ai(PO) hi3536_aio(PO) acodec(PO) gpioi2c(O) hi3536_ive(PO) hi3536_vda(PO) hi3536_jpege(PO) hi3536_h264e(PO) hi3536_chnl(PO) hi3536_venc(PO) hi3536_rc(PO) hi3536_hdmi(O) hifb(PO) hi3536_vou(PO) hi3536_vpss(PO) hi3536_viu(PO) hi3536_vgs(PO) hi3536_region(PO) hi3536_tde(PO) hi3536_jpegd(O) hi3536_vfmw(PO) hi3536_vdec(PO) hi3536_sys(PO) hi3536_base(PO) hiuser(O) hi_media(O) mmz(O) stmmac [last unloaded: testdrv]4CPU: 1 PID: 0 Comm: swapper/1 Tainted: P O 3.10.0_hi3536 #384[c0019d30] (unwind_backtrace0x0/0xf4) from [c0016de4] (show_stack0x10/0x14)4[c0016de4] (show_stack0x10/0x14) from [c0546340] (__schedule_bug0x50/0x64)4[c0546340] (__schedule_bug0x50/0x64) from [c054c454] (__schedule0x4f0/0x5d8)4[c054c454] (__schedule0x4f0/0x5d8) from [c054a9e0] (schedule_timeout0x130/0x1ac)4[c054a9e0] (schedule_timeout0x130/0x1ac) from [c00322d8] (msleep0x2c/0x38)4[c00322d8] (msleep0x2c/0x38) from [c0032374] (call_timer_fn.isra.300x24/0x88)4[c0032374] (call_timer_fn.isra.300x24/0x88) from [c003256c] (run_timer_softirq0x194/0x210)4[c003256c] (run_timer_softirq0x194/0x210) from [c002bb54] (__do_softirq0x124/0x204)4[c002bb54] (__do_softirq0x124/0x204) from [c002bf6c] (irq_exit0x9c/0xd0)4[c002bf6c] (irq_exit0x9c/0xd0) from [c0013ea0] (handle_IRQ0x44/0x90)4[c0013ea0] (handle_IRQ0x44/0x90) from [c0008514] (gic_handle_irq0x34/0x8c)4[c0008514] (gic_handle_irq0x34/0x8c) from [c0012bc0] (__irq_svc0x40/0x50)4Exception stack(0xcf867f98 to 0xcf867fe0)47f80: c09ae930 0000000047fa0: 002a87a4 00000000 c077f3e5 c074dd50 c054fe6c cf866000 c077f3e5 cf86600047fc0: cf866000 c074dcf0 00000000 cf867fe0 c00142a4 c00142a8 60000013 ffffffff4[c0012bc0] (__irq_svc0x40/0x50) from [c00142a8] (arch_cpu_idle0x2c/0x30)4[c00142a8] (arch_cpu_idle0x2c/0x30) from [c005b360] (cpu_startup_entry0xfc/0x140)4[c005b360] (cpu_startup_entry0xfc/0x140) from [40542804] (0x40542804)3bad: scheduling from the idle thread!4CPU: 1 PID: 0 Comm: swapper/1 Tainted: P W O 3.10.0_hi3536 #384[c0019d30] (unwind_backtrace0x0/0xf4) from [c0016de4] (show_stack0x10/0x14)4[c0016de4] (show_stack0x10/0x14) from [c0050ab4] (dequeue_task_idle0x34/0x40)4[c0050ab4] (dequeue_task_idle0x34/0x40) from [c054c240] (__schedule0x2dc/0x5d8)4[c054c240] (__schedule0x2dc/0x5d8) from [c054a9e0] (schedule_timeout0x130/0x1ac)4[c054a9e0] (schedule_timeout0x130/0x1ac) from [c00322d8] (msleep0x2c/0x38)4[c00322d8] (msleep0x2c/0x38) from [c0032374] (call_timer_fn.isra.300x24/0x88)4[c0032374] (call_timer_fn.isra.300x24/0x88) from [c003256c] (run_timer_softirq0x194/0x210)4[c003256c] (run_timer_softirq0x194/0x210) from [c002bb54] (__do_softirq0x124/0x204)4[c002bb54] (__do_softirq0x124/0x204) from [c002bf6c] (irq_exit0x9c/0xd0)4[c002bf6c] (irq_exit0x9c/0xd0) from [c0013ea0] (handle_IRQ0x44/0x90)4[c0013ea0] (handle_IRQ0x44/0x90) from [c0008514] (gic_handle_irq0x34/0x8c)4[c0008514] (gic_handle_irq0x34/0x8c) from [c0012bc0] (__irq_svc0x40/0x50)4Exception stack(0xcf867f98 to 0xcf867fe0)关于锁需要关注一些跟硬件相关的特性或者手段更为贴切。 原子操作汇编层面使用CPU内部特性保证 内存屏障汇编层面使用CPU内部特性保证 RCU https://zhuanlan.zhihu.com/p/88883239 https://blog.csdn.net/cfy_phonex/article/details/12090943 RCU 宽限期的概念参考英文及知乎文档 也可参见博主的文章 学内核之十三关于RCU锁的一些思考_rcu 写锁_龙赤子的博客-CSDN博客 如果CPU层面没有相关手段软件层面可能需要特别处理中断比如关闭中断保证当前代码执行不被打断。 7 内存管理子系统 内存管理子系统在内核中占据了非常重要的位置 内存管理子系统也是系统中非常基础的模块许多其他模块都依赖该模块所以内存管理子系统在系统中初始化的位置很靠前 现代操作系统都采用了虚拟内存系统以此提供进程间的共享、隔离和独立的不依赖物理内存大小的地址空间 Linux对物理内存进行了分区管理提供了DMA区域、正常区域和高端区域 DMA区域针对某些物理设备可访问物理内存地址范围受限的情况一般是在低地址区 正常区域为分页划分后供系统使用的内存这部分内存的映射一般是固定映射通常为一个固定偏移。内核地址空间3G到4G之间的低地址部分会映射到物理内存的对应低地址区域。 高端内存为正常区域之外的物理内存这部分内存需要时单独映射到内核地址空间该映射非固定映射需要时通过系统接口建立映射用完释放。 上述区域的划分在不同平台可能有不同的实现有的平台可能不存在高端内存也可能不存在DMA区域。 内核对内存的分配有三层 1 是获取和释放页面。这是最底层的接口。通过这类接口可直接获取物理内存页并使用。一般不建议通过该方法获取内存。 2 是通过kmalloc获取内存buffer。该接口基于1中的接口但是中间增加了slab管理算法。通过slab算法可以有效的管理物理内存。 相比第一种的页为单位的内存通过该接口获取内存更灵活。当然slab也是先通过1接口获取空闲页再进行管理后提供给kmalloc调用者。 3 是通过vmalloc获取内存buffer。跟2比较该接口获取的内存在虚拟空间中连续物理地址不连续。可能是多个零散的物理页面通过映射表产生虚拟空间的连续内存。 显然该接口获取内存对性能有一定损耗所以一般也不用该接口除非需要获取较大的物理内存。模块加载时通常通过该接口获取内存。 除了操作系统自身的内存管理需要Linux操作系统还需要提供进程的内存管理。 进程的内存管理通过挂接到task结构体上的mm结构体进行管理。mm结构体进一步挂接vma结构体链表具体对应用户进程的地址空间。 用户进程的/proc/xxx/mmap文件就是vma的对应其中包括共享库、堆、栈、进程自身动态库、代码段、数据段等区块。一般栈向下增长堆向上增长。 对于内核进程来讲是不存在上述mm结构体的内核进程不需要共享库以及其他部分。内核进程之间是全局共享的此处用内核线程更好理解。内核一个大进程有很多线程。 内核堆栈代码段数据段等是在内核加载后逐步建立的堆栈占用物理内存的固定区域一般栈在最高地址处。其他内存通过调用分配函数完成。内存的使用没有差异只是内核的内存映射在内核地址空间。 可以想象内核是一个大进程所有内核线程和用户进程都共享内核地址空间。 对内存的使用还需要考虑缓冲和CACHE。 虚拟内存通过MMU访问但是也要看到建立物理映射需要多次访问内存对性能影响不小特别是进程切换等操作映射很容易失效。 系统提供TLB用于页表映射的CACHE对性能提升有很大影响。一般页面的大小在4KB及以上使用内存过程中根据空间相关性同一页面的高频访问概率还是很大的CACHE带来的效率提升会比较高。 随着现代64位系统的流行和应用的不断复杂化、膨胀化应用对内存的消耗也在不断地增加。使用4KB的页面可能导致出现频繁的页分配释放和CACHE miss。为应对这一情况内核提供了巨页和透明大页的支持。 使用更大的的页面可以减少分配次数可以减少cache line 占用对性能的提升有不少帮助。但同时也要看到大页也有其不利的一面比如利用率可能造成浪费、分配成功率等。需要平衡考虑。 8 驱动的两类框架 框架一模板化 框架二抽象化、分层化 open 设备节点到驱动接口 4[c054d1b4] (mutex_lock0xc/0x4c) from [bf882174] (cdevdev_open0x20/0x3c [testdrv])4[bf882174] (cdevdev_open0x20/0x3c [testdrv]) from [c00c2f38] (chrdev_open0xc4/0x1ac)4[c00c2f38] (chrdev_open0xc4/0x1ac) from [c00bd2a0] (do_dentry_open.isra.160x164/0x258)4[c00bd2a0] (do_dentry_open.isra.160x164/0x258) from [c00bd3b4] (finish_open0x20/0x38)4[c00bd3b4] (finish_open0x20/0x38) from [c00cb3c0] (do_last.isra.540x3bc/0xc24)4[c00cb3c0] (do_last.isra.540x3bc/0xc24) from [c00cbcd4] (path_openat.isra.550xac/0x470)4[c00cbcd4] (path_openat.isra.550xac/0x470) from [c00ccce4] (do_filp_open0x2c/0x80)4[c00ccce4] (do_filp_open0x2c/0x80) from [c00be320] (do_sys_open0xe8/0x170)4[c00be320] (do_sys_open0xe8/0x170) from [c0012f80] (ret_fast_syscall0x0/0x30)
http://www.dnsts.com.cn/news/210426.html

相关文章:

  • 如何把图片放到网站后台最新国内你新闻
  • 个人可以做网站维护吗ftp如何导入wordpress 主题
  • 济南企业网站推广方法长葛网站制作
  • 用网站做数据库网站产品推广制作
  • 长沙教育网站开发网站建设网站定制开发
  • 网站上线发布流程wordpress用户名或密码错误
  • 手机网站域名哪里注册龙华网站公司
  • 中国美食网站模板免费下载广州网络运营课程培训班
  • 免费的作文网站wordpress页头铺不满
  • pc端网站自适应代码博文阅读网站建设
  • 清华建设工程有限公司公司网站网页浏览器电视版
  • 数据交易网站源码网站建设管理汇报
  • 阿里巴巴网站装修桂林软件开发
  • 流量对网站排名的影响因素几级分销属于合法
  • 网站建设 比选好玩的微信小程序游戏排行榜前十名
  • 一个大学网站做的好坏于否的标准个人怎么注册一家公司
  • 什么样的网站利于百度优化网站建设服务费要不要折旧呢
  • 网站获取qqwordpress获取评论用户名
  • 怎么提高网站的访客量农业科技公司网站建设
  • 浙江省建设厅网站在哪里怎么在招聘网站做评估
  • 莱芜四中网站设计开发建设网站平台
  • 江山建设工程信息网站优设网设计服务平台
  • 艺术设计类网站广州影视制作公司
  • 帮忙做简历的网站多功能wordpress主题
  • 电子商务网站建设 教案广州商务网站建设电话
  • lwip在stm32上做网站广州网站建设费
  • 芒市网站建设珠海建设网站公司简介
  • asp模板网站定制营销型网站公司
  • 主机屋网站搭建设置网站建设的脑图规划
  • 关于电商网站建设与管理的书籍做网站怎么销售