设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
内核与驱动开发
›
linux下进程调度的疑问
返回列表
查看:
897
|
回复:
4
linux下进程调度的疑问
[复制链接]
ningbo
ningbo
当前离线
积分
26
IP卡
狗仔卡
发表于 2004-12-26 18:01:59
|
显示全部楼层
|
阅读模式
看linux内核分析时
对进程调度感到很困惑
linux下是不是一种抢占式调度方法?即当进入运行队列的进程优先级高于正在运行
的进程,就会发生进程切换?
还有我看到这样一句话:linux对CPU的时间划分可以分为两层,第一层CPU时间分为
时间段 ,第二层,在一个时间段,每个进程分到确定的时间片。
我就是不懂这到底是怎么在划分时间段的?时间片又是如何划分?
希望知晓的帮忙一下,谢谢!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
threeseconds
threeseconds
当前离线
积分
65
IP卡
狗仔卡
发表于 2004-12-26 21:02:22
|
显示全部楼层
进程在内核态运行的时候应该是不可以抢占的,运行在用户态才是可以抢占的。
大牛们来解答第二个问题吧,也不太清楚具体划分的依据是什么,应该跟运行的优先级什么的有关系吧?
回复
支持
反对
使用道具
举报
显身卡
icoming
icoming
当前离线
积分
542
IP卡
狗仔卡
发表于 2004-12-29 21:49:54
|
显示全部楼层
时间段不是划分出来的,只要运行队列中所有的进程的时间片都用光,一个时间段也就结束了。一旦所有运行队列中所有的进程都用光了,那么就会用
for_each_task(p)
p->counter = (p->counter >> 1) + NICE_TO_TICKS(p->nice);
的语句给所有的进程重新分配一个时间片,如果是一个SCHED_RR调度策略进程的时间片用光了,那么NICE_TO_TICKS(p->nice)重新给他分配一个时间片,在把这个进程放到运行进程队列的最后面
基本上就是这个样子
回复
支持
反对
使用道具
举报
显身卡
ningbo
ningbo
当前离线
积分
26
IP卡
狗仔卡
楼主
|
发表于 2005-1-3 12:36:47
|
显示全部楼层
时间段不是划分出来的,只要运行队列中所有的进程的时间片都用光,一个时间段也就结束了。一旦所有运行队列中所有的进程都用光了,那么就会用
for_each_task(p)
p->counter = (p->counter >> 1) + NICE_TO_TICKS(p->nice);
的语句给所有的进程重新分配一个时间片
我就是这里搞不懂,“只要运行队列中所有的进程的时间片都用光,一个时间段也就结束了”,既然是所有进程的时间片用完了,时间段才结束,那么 “p->counter = (p->counter >> 1) + NICE_TO_TICKS(p->nice);” 而这个代码中,p->counter 代表的是时间片,怎么还会有“ (p->counter >> 1)”,这不是意味着时间片还有剩余吗? 这个问题搞得我很迷惑!
回复
支持
反对
使用道具
举报
显身卡
icoming
icoming
当前离线
积分
542
IP卡
狗仔卡
发表于 2005-1-3 21:56:59
|
显示全部楼层
你看代码里用的是for_each_task(p),也就是说这里在重新分配时间片的时候是把是给所有的进程重新分配时间片,所以这里运行队列里的进程的时间片都用光了,可是等待队列里的进程的时间片还是有的啊!
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表