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

网上做医生哪个网站好郑州中原区最新消息

网上做医生哪个网站好,郑州中原区最新消息,小广告怎么举报,wordpress 图书 主题调度程序是内核的组成部分#xff0c;它负责选择下一个要运行的进程。进程调度程序可看作在可运行态进程之间分配有限的处理器时间资源的内核子系统。多任务操作系统就是能够同时并发的交互执行多个进程的操作系统。多任务系统可以划分为两类#xff1a;抢占式和非抢占式。Li…调度程序是内核的组成部分它负责选择下一个要运行的进程。进程调度程序可看作在可运行态进程之间分配有限的处理器时间资源的内核子系统。多任务操作系统就是能够同时并发的交互执行多个进程的操作系统。多任务系统可以划分为两类抢占式和非抢占式。Linux提供了抢占式的多任务模式。在此模式下由调度程序来决定什么时候停止一个进程的运行以便其他进程能够得到执行机会。这个强制的挂起动作叫做抢占。进程在被抢占之前能够运行的时间是预先设置好的而且有一个专门的名字叫进程的时间片。时间片实际上就是分配给每个可运行进程的处理器时间段。4.1 策略4.1.1 进程优先级进程可以分为I/O消耗型和处理器消耗型。调度算法中最基本的一类就是基于优先级的调度。这是一种根据进程的价值和其对处理器时间的需求来对进程分级的想法。在Linux系统中优先级高的进程使用的时间片也较长。调度程序总是选择时间片未用尽而且优先级高的进程运行。用户和系统都可以通过设置进程的优先级来影响系统的调度。Linux内核提供了两组独立的优先级范围。第一种是nice值范围 -20~19默认是0。值越大优先级越低时间片越短。第二个范围是实时优先级其值可配置变化范围0~99。4.2 可执行队列(运行队列)当内核要寻找一个新的进程在CPU上运行时必须只考虑处于可运行状态的进程(即在TASK_RUNNING状态的进程)因为扫描整个进程链表是相当低效的所以引入了处于可运行状态的进程的双向循环链表也叫运行队列(runqueue)。运行队列容纳了系统中所有可以运行的进程它是一个双向循环队列该队列通过task_struct结构中的两个指针run_list(Pointers to the next and previous elements in the runqueue list to which the process belongs)链表来维持。队列的标志有两个一个是“空进程”idle_task、一个是队列的长度。有两个特殊的进程永远在运行队列中待着当前进程和空进程。前面我们讨论过当前进程就是由cureent指针所指向的进程也就是当前运行着的进程但是请注意current指针在调度过程中(调度程序执行时)是没有意义的空进程是个比较特殊的进程只有系统中没有进程可运行时它才会被执行Linux将它看作运行队列的头当调度程序遍历运行队列是从idle_task开始、至idle_task结束的在调度程序运行过程中允许队列中加入新出现的可运行进程新出现的可运行进程插入到队尾这样的好处是不会影响到调度程序所要遍历的队列成员可见idle_task是运行队列很重要的标志。另一个重要标志是队列长度也就是系统中处于可运行状态(TASK_RUNNING)的进程数目用全局整型变量nr_running表示在/kernel/fork.c中定义如下int nr_running1若nr_running为0就表示队列中只有空进程。在这里要说明一下若nr_running为0则系统中的当前进程和空进程就是同一个进程。但是Linux会充分利用CPU而尽量避免出现这种情况。由于可执行队列是调度程序的核心数据结构体所以有一组宏定义用于获取与“给定处理器或进程”相关的可执行队列。cpu_rq(processor)宏用于返回给定处理器可执行队列的指针。this_rq()宏用来返回当前处理器的可执行队列。宏task_rq(task)返回给定任务所在的队列指针。在对可执行队列进行操作以前应该先锁住它。因为每个可执行队列唯一的对应一个处理器。在其拥有者读取或者改写队列成员的时候可执行队列包含的锁用来防止队列被其它代码改动。锁住运行队列最常见的情况发生在你想锁住的运行队列上恰巧有一个特定的任务在运行。此时需要用到task_rq_lock()和task_rq_unlock()函数struct runqueue *rq;unsigned long flags;rq task_rq_lock(task,flags);对任务队列的操作task_rq_unlock(rq, flags);一个疑问解锁后之前的任务还继续运行吗睡眠和唤醒休眠(被阻塞)的进程处于一个特殊的不可执行状态。进程休眠有种原因但肯定都是为了等待一些事件。事件可能是一段时间从文件I/O读取更多的数据或者是某个硬件事件。一个进程还有可能在尝试获取一个已被占用的内核信号量时被迫进入休眠。休眠的一个常见原因是文件I/O——如进程对一个文件执行了read()操作而这需要从磁盘里读取。还有进程在获取键盘输入的时候也需要等待。无论哪种情况内核的操作都相同进程把它自己标记成休眠状态把自己从可执行队列移出放入等待队列然后调用schedule()选择和执行一个其他进程。唤醒的过程刚好相反进程被设置为可执行状态然后再从等待队列中移到可执行队列。    等待队列休眠通过等待队列来处理等待队列是由等待某些事件发生的进程组成的简单链表。4.3 抢占和上下文切换上下文切换也就是从一个可执行进程切换到另一个可执行进程由定义在kernel/sched.c中的context_switch()函数处理。每当一个新的进程被选出来准备投入运行的时候schedule()就会调用该函数。它完成两项基本工作(1)调用定义在中的switch_mm()该函数负责把虚拟内存从上一个进程映射切换到新的进程中(前面已经提及虚拟内存让进程在获取和使用内存时觉得自己拥有整个系统的所有内存资源)。(2)调用定义在中的switch_to(),该函数负责从上一个进程的处理器状态切换到新进程的处理器状态(虚拟处理器)。这包括保存、恢复栈信息和寄存器信息。4.3.1 用户抢占内核即将返回用户空间的时候如果need_resched标志被设置会导致schedule()被调用此时就会发生用户抢占。内核无论是从中断处理程序还是在系统调用后返回都会检查need_resched标志。如果它被设置了那么内核会选择一个其他进程投入运行。从中断处理程序或系统调用返回的代码都是和体系结构相关的在entry.S(此文件不仅包含内核入口部分的程序内核退出部分的代码也在其中)文件中通过汇编语言来实现。4.3.2 内核抢占只要当前进程没有持有锁内核就可以进行抢占。锁是非抢占区的标志。所以如果没有持有锁那么正在执行的代码就是可重新导入的也就是可抢占的。为了支持内核抢占每个进程的thread_info引入了preempt_count计数器。初始值为0每当使用锁的时候就加1释放锁的时候就减1。当0时内核就可以被抢占。从中断返回内核空间的时候内核会检查need_resched和preempt_count的值。如果前者被设置且后者为0则说明有一个更为重要的任务需要执行并且可以安全的抢占此时调度程序就会被调用。4.4 与调度相关的系统调用
http://www.pierceye.com/news/387856/

相关文章:

  • 沧州市做网站价格wordpress构建自己的网站
  • seo外链网站源码新公司注册核名
  • 游戏网站建设的策划方案python做电子商务网站
  • pxhere素材网站网上搞钱的野路子
  • 有没有帮人做数学题的网站9377游戏盒子
  • 微信网站建设报价网站优化提升排名
  • wap网站分享代码自定义网站建设
  • 网站换域名了怎么办seo百度帐号注册
  • 淄博网站建设公司羊肉片机网站模板制作
  • 邯郸网站设计价位南京h5 网站建设
  • wordpress主要函数seo是哪个英文的缩写
  • 自助建站网站seo公司静态网站作品
  • 内部网站建设、北京的网页建设公司
  • 网站建设的后台登录oa信息管理系统
  • 镇江企业网站建设公司wordpress模板如何修改
  • 汕头中文建站模板建设全网营销型网站
  • 外贸网站建设盲区雄安移动网络电视
  • 建站方法友情链接发布平台
  • 做美剧盗版网站国内购物网站案例分析
  • 淄博网站制作哪家公司好东莞网站设计公司哪家好
  • 用dreammwea怎么做视频网站域名注册网站建设
  • 网站关键词用热门的还是冷门注销网站备案时间
  • 苏晋建设集团网站书店网站建设目标调研的方案
  • 下沙建设局网站建设公司内网网站的意义
  • 全屏响应式网站模板污网站公司网站
  • 抚远佳木斯网站建设领动建站
  • 班级网站 建设模板做任务佣金网站源码
  • 网站的关键词库广州建网站培训
  • 好的网页设计网站网站排名提升工具
  • 个人网站需要那些企查查入口网页版