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

公司要做网站去哪里网站界面(UI)设计

公司要做网站去哪里,网站界面(UI)设计,江苏网站建设定制,wordpress面包屑文字大小如何调整合作微信#xff1a;xydf321456Linux是一套免费使用和自由传播的类Unix操作系统#xff0c;是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。1.前言处理机#xff08;CPU#xff09;是整个计算机系…合作微信xydf321456Linux是一套免费使用和自由传播的类Unix操作系统是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。1.前言处理机CPU是整个计算机系统的核心资源在多进程的操作系统中进程数往往多于处理机数这将导致各进程互相争夺处理机。进程调度对系统功能的实现 及各方面的性能都有着决定性的影响其实质就是把处理机公平、合理、高效地分配给各个进程。调度是实现多任务并发执行的必要手段不同的操作系统有着不同 的调度目标。在传统的Unix类分时系统中保证多个进程公平地使用系统资源提供较好的响应时间是调度的主要目标;而在强实时操作系统中总是优先级高 的任务优先获得处理机的使用权。Linux具有内核稳定、功能强大、可裁减、低成本等特点非常适合嵌入式应用。但是Linux内核本身并不具备 强实时特性且内核体积较大因此想要把Linux用于嵌入式系统必须对Linux进行实时化、嵌入式化。Linux结合实时进程和非实时进程普通 进程自身的特点综合了上述几种调度策略实现了高效、灵活的进程调度。2.Linux进程调度分析2.1 Linux进程状态的描述Linux将进程状态描述为如下五种TASK_RUNNING可运行状态。处于该状态的进程可以被调度执行而成为当前进程。TASK_INTERRUPTIBLE可中断的睡眠状态。处于该状态的进程在所需资源有效时被唤醒也可以通过信号或定时中断唤醒。TASK_UNINTERRUPTIBLE不可中断的睡眠状态。处于该状态的进程仅当所需资源有效时被唤醒。TASK_ZOMBIE僵尸状态。表示进程结束且已释放资源但其task_STruct仍未释放。TASK_STOPPED暂停状态。处于该状态的进程通过其他进程的信号才能被唤醒。2.2 调度方式Linux中的每个进程都分配有一个相对独立的虚拟地址空间。该虚存空间分为两部分用户空间包含了进程本身的代码和数据;内核空间包含了操作系统的代码和数据。Linux采用“有条件的可剥夺”调度方式。对于普通进程当其时间片结束时调度程序挑选出下一个处于TASK_RUNNING状态的进程作为当前进程 自愿调度。对于实时进程若其优先级足够高则会从当前的运行进程中抢占CPU成为新的当前进程强制调度。发生强制调度时若进程在用户空间中运 行就会直接被剥夺CPU;若进程在内核空间中运行即使迫切需要其放弃CPU也仍要等到从它系统空间返回的前夕才被剥夺CPU。3.调度策略3.1 三种调度策略1SCHED_OTHER。SCHED_OTHER是面向普通进程的时间片轮转策略。采用该策略时系统为处于TASK_RUNNING状态的每个进程分配一个时间片。当时间片用完时进程调度程序再选择下一个优先级相对较高的进程并授予CPU使用权。2SCHED_FIFO。SCHED_FIFO策略适用于对响应时间要求比较高运行所需时间比较短的实时进程。采用该策略时各实时进程按其进入可 运行队列的顺序依次获得CPU。除了因等待某个事件主动放弃CPU或者出现优先级更高的进程而剥夺其CPU之外该进程将一直占用CPU运行。3SCHED_RR。SCHED_RR策略适用于对响应时间要求比较高运行所需时间比较长的实时进程。采用该策略时各实时进程按时间片轮流使用CPU。当一个运行进程的时间片用完后进程调度程序停止其运行并将其置于可运行队列的末尾。3.2 进程调度依据Linux只有一个可运行队列处于TASK_RUNNING状态的实时进程和普通进程都加入到这个可运行队列中。Linux的进程调度采用了动态优先级 和权值调控的方法既可实现上述三种调度策略又能保证实时进程总是比普通进程优先使用CPU。描述进程的数据结构task_struct中用以下几个数 据作为调度依据Struct task_struct {……volaTIle lONg need_resched; /*是否需要重新调度*/long counter; /*进程当前还拥有的时间片*/long nice; /*普通进程的动态优先级来自UNIX系统*/unsigned long policy; /*进程调度策略*/unsigned long rt_priority; /*实时进程的优先级*/……};counter的值是动态变化的进程运行时每一个时钟滴答后其值减1。当counter值为0时表示该进程时间片已用完该进程回到可运行队列中等待再次调度。为保证实时进程优于普通进程Linux采取加权处理法。在进程调度过程中每次选取下一个运行进程时调度程序首先给可运行队列中的每个进程赋予一个权 值weight。普通进程的权值就是其counter和优先级nice的综合而实时进程的权值是它的rt_priority的值加1000确保实时进 程的权值总能大于普通进程。调度程序检查可运行队列中所有进程的权值选取权值最大者作为下一个运行进程保证了实时 进程优先于普通进程获得CPU。 Linux使用内核函数goodness对进程进行加权处理StaTIc inline goodness struct task_struct * pint this_cpu struct mm_struct *this_mm{Int weight;Weight-1;/*判断如果任务的调度策略被置为SCHED_YIELD的话则置权值为-1返回。系统调用SCHED_YIELD表示为“礼让”进程其权值为最低*/If p-》policy SCHED_YIELDgoto out;/*先对普通进程进行处理由于多数是普通进程这样做有利于提高系统效率*/If p-》policySCHED_OTHER{weightp-》counter; /*返回权值为进程的counter值*//*如果当前进程的counter为0则表示当前进程的时间片已用完直接返回*/If weightGoto out;#Ifdef CONFIG_SMPIf p-》processorthis_cpuWeightPROC_CHANGE_PENALTY;#Endif/*对进程权值进行微调如果进程的内存空间使用当前正在运行的进程的内存空间则权值额外加1*/If p-》mmthis_mm|| p-》mmWeight1;/*将权值加上20与进程优先级nice的差。普通进程的权值主要由counter值和nice值组成*/Weight20-p-》nice;Goto out;}/*对实时进程进行处理返回权值为rt_priority1000确保优先级高于普通进程*/Weight1000p-》rt_priority;Outreturn weight;}从goodness函数可以看出对于普通进程其权值主要取决于剩余的时间配额和nice两个因素。nice的规定取值范围为19-20只有特 权用户才能把nice值设为负数而表达式20-p-》nice掉转方向成为140。所以综合的权值在时间片尚未用完时基本上是两者之和。 如果是内核进程或者其用户空间与当前进程相同则权值将额外加1作为奖励。对于实时进程其权值为1000p-》rt_priority当 p-》counter达到0时该进程将移到队列的尾部但其优先级仍不少于1000。可见当有实时进程就绪时普通进程是没机会运行的。由此可以看出通过goodness函数Linux从优先考虑实时进程出发实现了多种调度策略的统一处理其设计思想可谓非常巧妙。3.3 进程调度Linux的进程调度由调度程序schedule完成通过对schedule的分析能更好理解调度的过程。schedule首先判断当前运行进程是否具有SCHED_RR 标志本文取一部分加以分析if prev-》policySCHED_RR /*如果是轮转调度先作goto特殊处理*/Goto move_rr_last;……Move_rr_lastIf prev-》counter{ /*如果counter减至0*/Prev-》counterNICE_TO_TICKS prev-》nice;Move_last_runqueue prev;}Goto move_rr_back;prev-》counter代表当前进程的运行时间配额其值逐渐减小。一旦减至0就要从可执行队列runqueue中当前的位置移到末尾宏操 作NICE_TO_TICKS根据系统时钟的精度将进程的优先级别换算成可以运行的时间配额即恢复其初始的时间配额。把该进程移到末尾意味着如果没有 权值更高的进程但是有一个权值与这相同的进程存在那么那个权值相同而排列在前的进程就会被选中从而顾全了大局。接下来调度函数查询当前运行进程的状态是否改变Move_rr_backswitchprev-》state{ /*查看进程当前的状态*/Case TASK_INTERRUPTIBLEif signal pendingprev{ /*判断运行期间是否收到信号*/Prev-》stateTASK_RUNNING;Break;}default /*当前运行进程处于非TASK_RUNNING状态*/Del_from_runqueue prev;Case TASK_RUNNING}Prev-》need_resched0;容易理解如果发现进程处于TASK_INTERRUPTIBLE状态且有信号等待处理则内核将其状态设为TASK_RUNNING让其处理完信号 接下来仍有机会获得CPU;如果没有信号等待则将其从可运行队列中撤下来;如果处于TASK_RUNNING状态则继续进行。然后将 prev-》need_resched的值恢复成0因为所需的调度已经在运行。Repeat schedule nextidle_taskthis_cpu; /*next指向最佳候选进程*/c-1000;  /*进程的综合权值初始时是0号进程-1000是可能的最低值*/If prev-》stateTASK_RUNNINGGoto still_running;Still_running_backList_for_each tmp runqueue_head{Plist_entry tmp struct task_struct run_list;if can_schedulepthis_cpu{ /*计算p指向的进程的权值*/Int weightgoodness p this_cpu prev-》active_mm;if weight》c /*比较权值大小*/Cweight nextp;}}调度之前将待调度的进程默认为0号进程权值置为-1000。0号进程比较特别既不会睡眠又不能被杀死。接下来内核遍历可执行队列run queue中的每个进程为每个进程通过goodness函数计算出它当前所具有的权值然后与当前的最高值c相比。如果两个进程具有相同权值的话 那么排在前面的进程胜出。Still_runningCgoodness prev this_cpu prev-》active_mm;Nextprev;Goto still_running_back;上面的代码告诉我们如果当前进程想要继续运行那么在挑选进程时以当前进程此刻的权值开始。这意味着相对于权值相同的其他进程来说当前进程优先。若发现当前已选进程的权值为0则需要重新计算各个进程的时间配额schedule将转入recalculate部分。限于篇幅在此不再展开。4.结束语以上结合代码简要介绍了Linux中进程调度的基本思想、依据和策略容易发现Linux高效率和较强支持并发进程等特点。近年来嵌入式Linux的研 究正在成为一个热点理解Linux进程调度的原理并在此基础上改进调度算法可能存在的缺陷可以进一步增强其对实时性的支持使之进一步适应在嵌入式 系统领域内的应用。
http://www.zqtcl.cn/news/775833/

相关文章:

  • 网投网站制作中国建设教育协会报名网站
  • 做外贸需要做网站吗上海中建建筑设计院有限公司
  • 网站源代码免费下载苏州seo网络优化公司
  • 建网站跟建网店的区别pico笔克品牌介绍
  • 网站设计小技巧西安网站建设网站
  • 做听书网站怎么做网站留言板带后台模板
  • 石家庄网站建设王道下拉棒厦门橄榄网站建设
  • 赤峰网站建设培训建筑资格证书查询官网
  • 共和县公司网站建设seo网络推广招聘
  • 网站怎样做外链百度网站地图提交
  • 瑞安联科网站建设中国做网站公司排名
  • jsp网站开发详解 赵增敏jsp网站首页怎么做
  • 有哪些可以做图的网站啊莱芜金点子广告电子版2024
  • 免费营销型网站模版南宁比较有好的网站制作公司
  • 做外贸上什么网站什么什么设计英文网站
  • 嘿客免费网站建设网站对联图片
  • 一件代发48个货源网站韶关最新消息
  • 网站都需要备案吗安徽建设通网站
  • 外包公司 网站建设 深圳电子商务公司设计网站建设
  • 怎么添加网站背景音乐定制建站
  • 西安网站建设和推广公司php企业网站开发实训报告
  • 市网站制作番禺绿叶居
  • 网站漂浮物怎么做电子商务网站开发实训体会
  • 电商网站建设定制济南网站建设及推广
  • 网站标签化wordpress 输出评论内容 函数
  • 明星个人网站设计汕头网络推广公司
  • 深圳有哪些做网站公司好武夷山建设局网站
  • 怎么设立网站赚广告费一个网站可以做多少关键字
  • 网站刚建好怎么做能让百度收录成都定制网站建
  • thinkphp网站开发技术做电脑租赁网站