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

网站建设应用权限免费空间网站怎么做的

网站建设应用权限,免费空间网站怎么做的,建设一个网站要多少费用吗,百度云盘下载目录 一、调度场景分析 不支持内核抢占的内核 支持内核抢占 二、如何让新进程执行 三、调度的本质 一、调度场景分析 假如内核只有3个线程#xff0c;线程0创建线程1和线程2.当系统时钟到来时#xff0c;时钟中断处理函数会检查是否有进程需要调度。当有进程需要调度时…目录 一、调度场景分析 不支持内核抢占的内核 支持内核抢占 二、如何让新进程执行 三、调度的本质 一、调度场景分析 假如内核只有3个线程线程0创建线程1和线程2.当系统时钟到来时时钟中断处理函数会检查是否有进程需要调度。当有进程需要调度时调度器会选择线程1或者线程2。 执行流程start_kernel运行在线程0里线程0创建线程1和线程2。函数调用关系start_kernel()-kernel_debug()-do_fork 创建新线程并把新线程添加到调度器的就绪队列中。线程0创建线程1和线程2后进入while线程线程0不会退出等待被调度出去。 1、产生时钟中断。处理器采用定时器来周期性地执行。调度器利用时钟中断来定时检测当前运行的线程是否需要调度。当需要调度时设置need_resched标志位 2、当时钟中断返回根据linux内核是否支持内核抢占来确定是否需要调度 不支持内核抢占的内核 不会检查是否调度。即使线程0的need_resched标志位置位了linux内核也不会调度线程1或者线程2。只有发生在用户态的中断返回或者系统调用返回用户空间时才会检查是否需要调度。 1发生时钟中断。触发时钟中断时 当前进程有可能在用户态执行也可能在内核态执行。 如果进程运行在用户态发生了中断那么会进入异常向量表的el0_irq汇编函数 如果进程运行在内核态时发生了中断会进入异常向量表的el1_irq汇编函数中。 进入中断时CPU会自动关闭中断。 2在el1_irq汇编函数里首先会保存中断现场到当前进程的栈中使用pt_regs数据结构来实现pt_regs栈保存中断现场。 中断处理程序过程包括切换到linux内核中断栈、硬件中断号的查询、中断服务程序处理等 3当确定中断源时时钟中断后scheduler_tick()函数会检查当前进程是否需要调度。如果需要调度设置当前进程need_resched标志位TIF_NEED_RESCHED, 4中断返回。这里需要给中断控制器返回一个中断结束信号 5在el1_irq汇编函数恢复中断现场。2的对应操作 在不支持内核抢占的系统里汇编函数不会检查是否需要调度。在返回时CPU打开中断然后从中断的地方继续执行线程0 支持内核抢占 1中断返回会检查当前进程是否设置了need_resched表示位如果置位调用preempt_schedule_irq函数以调度其他进程并运行。 2在el1_irq汇编函数即将返回中断现场时判断当前进程是否需要调度。如果需要调度调度器会选择下一个进程并且进行进程的切换。 3如果选择现场1则从线程1的pt_regs中恢复中断现场并打开中断然后继续执行内核线程1的代码。 二、如何让新进程执行 如果线程1是新创建的它的栈应该是空的第一次运行时如何恢复中断现场呢如果不能从线程1的栈中恢复中断现场那是不是线程1一直在关闭中断的状态下运行 对于内核线程来说在创建时会对如下两部分内容进行设置与保存。copy_thread()函数 进程的硬件上下文。保存在进程的cpu_context数据结构。pt_regs int copy_thread_tls(unsigned long clone_flags, unsigned long stack_start,unsigned long stk_sz, struct task_struct *p, unsigned long tls) {} else {memset(childregs, 0, sizeof(struct pt_regs));childregs-pstate PSR_MODE_EL1h;//5 处理器状态 第0位 栈指针选择符1选择栈之战寄存器SP_EL1 2:3 异常级别值1表示异常级别1if (IS_ENABLED(CONFIG_ARM64_UAO) cpus_have_const_cap(ARM64_HAS_UAO))childregs-pstate | PSR_UAO_BIT;if (arm64_get_ssbd_state() ARM64_SSBD_FORCE_DISABLE)set_ssbs_bit(childregs);if (system_uses_irq_prio_masking())childregs-pmr_save GIC_PRIO_IRQON;p-thread.cpu_context.x19 stack_start;//函数地址用来创建内核线程的函数kernel_thread的第一参数p-thread.cpu_context.x20 stk_sz;//参数 ,用来创建内核线程的函数kernel_thread的第二参数}p-thread.cpu_context.pc (unsigned long)ret_from_fork;//子进程的程序计数器调度入口p-thread.cpu_context.sp (unsigned long)childregs;//sp指向内核栈底部pt_regs起始位置} stack_start指向内核线程的回调函数 x20 指向回调函数的参数 PC寄存器 ret_from_fork  执行入口 三、调度的本质 系统中有一个用户进程A和一个内核线程B在不考虑自愿调度和系统调用情况下请描述这两个进程是如何相互切换并运行的。 进程A在用户空间运行发生中断CPU打断正在运行的用户进程A处于异常模式。CPU会跳转到异常向量表的el0_irq里。在汇编函数el0_irq中首先把中断现场保存到进程A的pt_regs栈处理中断调度滴答处理函数返回el0_irq汇编函数里。即将返回现场前ret_to_user汇编函数会检查当前进程是否需要调度。若当前进程需要调度调用schedule()函数选择下一个进程并切换 switch_to函数切换函数返回CPU开始运行内核线程B进程需要为前一个进程做收尾工作比如调用raw_spin_unlock_irq来释放锁并打开本地中断。见finish_task_switch函数。CPU沿着内核线程B保存的栈帧回溯一直返回。返回路径finish_task_switch-el1_preempt-el1_irq在el1_irq汇编函数里把上一次发生中断时保存在栈里的中断现场进行恢复最后从上一次中断的地方开始执行内核线程B的代码。 以上涉及两个上下文切换中断上下文pt_regs进程上下文task_struct
http://www.laogonggong.com/news/115720.html

相关文章:

  • 国内工程机械行业网站建设现状电子商务如何做网站销售
  • 医联媒体网站建设网站首页的功能
  • 模版型网站是怎样的国内营销公司排名
  • 上饶市住房和城乡建设部网站达浒镇网站建设公司
  • 重庆网站设计找重庆最佳科技一键生成网站
  • 网站企业备案代理工商注册核名
  • 买外贸服装去哪个网站最好的网站建设机构
  • 济南网站建设外包公司哪家好温州电力建设有限公司网站
  • 哪些网站是做设计的网站开发公司安心加盟
  • 苏州知名高端网站建设济南网络公司注册
  • 做彩票网站lamp网站开发黄金组合下载
  • 哈尔滨网站设计定制聊天网站制作教程
  • 就业网站建设泰州快速建站模板
  • 网站建设先进个人自荐网站流量指的是什么意思
  • 长春做网站 长春万网网站程序预装
  • 沈阳企业网站建设公司重庆施工许可证查询系统
  • 企业网站建设的趋势昆明专业做网站多少钱
  • 泰州建设网站制作网页完整步骤手机版
  • 网站模板整站做网站的公司怎么做业务
  • 郑州做网站优化运营商多种语言网站建设
  • asp源码 自助建站网站内容板块调换位置
  • 合江县住房建设规划局网站汽车门户网站 源码
  • 做境外的网站网站违法么佛山微网站建设报价
  • 东莞企业建站平台专业做婚庆的网站有哪些
  • 网站加速cdn软件工程师怎么学
  • 深圳网站开发培训价格广告推广一个月多少钱
  • 青岛网站建设方案维护wordpress 商品模板
  • python做网站实战青海建设协会网站
  • 自己买域名建设网站北京平面设计公司排行榜
  • 去哪网网站设计风格效果图在哪个网站可以找比较好