社区首页 >问答首页 >Linux源代码-用于运行que的任务交换开关的位置

Linux源代码-用于运行que的任务交换开关的位置
EN

Stack Overflow用户
提问于 2014-10-13 05:26:29
回答 1查看 225关注 0票数 1

我试图定位Linux的调度程序,并在其中找到将下一个进程添加到run que (CPU的交换控制)的函数。

环顾四周,我“认为”这将是sched.c,我“认为”prepare_task_switch是基于它的描述的这个函数,但我不能百分之百肯定。

概览定义是有意义的,但是我似乎找不到关于它的内部方法的任何其他信息:fire_sched_out_preempt_notifiers(prev,next)prepare_lock_switch(rq,next)prepare_arch_switch(next),,因此我怀疑这些函数是否是导致任务交换发生的原因(更改CPU所有权)。

如果我在正确的代码位置,有人能给我提供一些明确的这三个功能做什么吗?否则,有人能提供一些关于我应该在哪里寻找调度程序在哪里切换任务控制CPU的运行que吗?

位置:/source/linux/内核/linux.c

代码语言:javascript
代码运行次数:0
复制
/**
* prepare_task_switch - prepare to switch tasks
* @rq: the runqueue preparing to switch
* @prev: the current task that is being switched out
* @next: the task we are going to switch to.
*
* This is called with the rq lock held and interrupts off. It must
* be paired with a subsequent finish_task_switch after the context
* switch.
*
* prepare_task_switch sets up locking and calls architecture specific
* hooks.
*/
2770 static inline void
2771 prepare_task_switch(struct rq *rq, struct task_struct *prev,
2772                     struct task_struct *next)
2773 {
2774         fire_sched_out_preempt_notifiers(prev, next);
2775         prepare_lock_switch(rq, next);
2776         prepare_arch_switch(next);
2777 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-14 14:33:20

在C中,函数被标记为“静态”这一事实告诉您,它只能从同一个文件中调用。因此,如果在内核中搜索prepare_task_switch,您会发现它是从context_switch调用的。(prepare_task_switch本身并不是在做有趣的事情:它只是“准备”。)

如果您依次搜索context_switch (也标记为“静态”),您会发现它是从__schedule调用的,这是调度程序的实际核心。实际上,在调用context_switch时,__schedule已经计算出要运行的下一个任务,因为这将作为参数传递给context_switch。

请注意,要运行的任务实际上是在context_switch中控制CPU (从这里调用,从技术上讲是在switch_to()中)。确切的工作方式有点棘手,因为当switch_to返回时,您将不再在同一任务中执行。CPU现在实际上正在运行一个不同的任务。堆栈指针和整个调用堆栈与输入context_switch时不同,因此“当前”调用堆栈中的每个局部变量都可能与以前不同。

至于选择下一个要运行的任务,pick_next_task会这样做。__schedule()中的关键位是:

代码语言:javascript
代码运行次数:0
复制
   put_prev_task(rq, prev);    /* Put old task at end of queue */
   next = pick_next_task(rq);  /* Get next task to run */
   ...
   if (prev != next) {         /* Nothing to do if it's the same task */
      ...
      context_switch(rq, prev, next);  /* Switch to new task */
      [now running in new task]
   }

其余的是锁定细节和簿记(尽管非常重要)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26341120

复制
相关文章
dotnet 删除只读文件
如果直接通过 File.Delete 删除只读文件会出现没有权限提示,可以先设置文件不是只读然后删除文件
林德熙
2019/03/13
2.8K0
dotnet 删除只读文件
dotnet 删除只读文件
如果直接通过 File.Delete 删除只读文件会出现没有权限提示,可以先设置文件不是只读然后删除文件
林德熙
2022/08/04
1.8K0
Ubuntu下U盘只读文件系统,图标上锁,提示无法修改
Ubuntu下有时候插入U盘,发现不能修改其中的内容。例如不能新建文件和文件夹,不能向U盘中复制文件等,系统提示:只读文件系统。
知忆
2021/06/09
3K0
盘点只读压缩文件系统
在存储容量有限的嵌入式设备上,一般对于系统分区在使用过程中没有数据写入需求,同时希望可以节省存储空间——只读压缩文件系统应运而生。另外,只读压缩文件系统也可用于归档文件。相比tar,zip等压缩软件,只读压缩文件系统的性能和灵活性都更好。Linux早期的只读文件系统有CramFS和SquashFS,以及参考了上述两个文件系统设计的用户态只读压缩文件系统CromFS。另外,最近两年在Android平台上实现商用的EROFS也值得关注。EROFS针对手机使用场景,对读放大和内存占用过多从设计理念上带来了一些新的优化。
233333
2020/10/29
3.4K0
盘点只读压缩文件系统
rm: 无法删除"/mnt/cdrom/
[root@redhatAS6 home]# mount -o loop rhel-server-6.3-x86_64-dvd.iso /mnt/cdrom
py3study
2020/01/07
2.3K0
【6】VScode 无法在终端输入问题,提示:无法在只读编辑器中编辑
2.在设置中输入 run code config 找到里面的 run in terminal 打勾即可,往下滑动几秒就看到了
汀丶人工智能
2022/12/21
7.2K0
【6】VScode 无法在终端输入问题,提示:无法在只读编辑器中编辑
修改目录proc下的tcp_tw_recycle报“只读文件系统”
该错误的原因是因为以只读(ro)方式mount了tcp_tw_recycle所在目录,比如因为目录“/proc/sys”以只读方式mount了:
一见
2020/02/13
1.4K0
fat文件系统查找、删除、创建目录
查找一个文件是通过文件名查找的,对于fat文件系统,可以直接从vfat_lookup函数看
哆哆jarvis
2022/11/21
1.8K0
Linux文件系统只读Read-only file system的快速解决方法
问题描述:上周公司的私有云(底层架构是Openstack+KVM,目前稳定性还不够好,开发团队在改进中)一个计算节点挂掉,之后恢复后发现这个计算节点的所有Linux虚拟机系统都变成只读了,复制文件提示
小小科
2018/05/02
10.1K1
Linux文件系统只读Read-only file system的快速解决方法
linux强制删除只读文件夹,强制删除文件夹linux的方法是什么
之所以对于目录文件的删除加上了强制参数是因为在linux对目录文件的删除是递归式的;
全栈程序员站长
2022/07/01
12.1K0
【君正T31】只读rootfs文件系统squashfs的解压和打包
unsquashfs root-glibc-toolchain4.7.2-1.1.squashfs 会解包到当前目录下的squashfs-root文件夹
TSINGEYE清眸物联
2023/01/04
2K0
Kubernetes容器netns无法删除问题
近日摸鱼,出现问题 在k8s+containerd的环境上删除容器失败,容器一直保持在terminating状态containerd日子显示”failed to check network namespace closed: remove netns:unlinkat *: device or resource busy” ,不影响新创建的容器运行。
王先森sec
2023/04/24
2.3K1
解决kafka无法删除topic问题
使用kafka命令删除某个topic之后,查看集群的topic列表时,被删除的tpoic依然存在
全栈程序员站长
2022/11/03
1.7K0
解决kafka无法删除topic问题
Docker---(9)Docker中容器无法停止无法删除
问题:mysql容器如法停止,无法删除,也无法连接。docker stop,docker kill等命令都无效。
IT云清
2019/01/22
6.5K0
git无法删除本地分支_git如何删除远程分支
转载:https://blog.csdn.net/benben_2015/article/details/79782202
全栈程序员站长
2022/11/07
2.2K0
【君正T31】squashfs格式只读rootfs文件系统的解压和打包
先来安装工具: # 安装mksquashfs工具 apt install mtd-utils # 查看压缩信息 unsquashfs -s root-glibc-toolchain4.7.2-1.1.squashfs # 显示 Found a valid SQUASHFS 4:0 superblock on root-glibc-toolchain4.7.2-1.1.squashfs. Creation or last append time Tue Feb 23 08:42:12 2021 Files
TSINGEYE清眸物联
2022/11/03
1.4K0
Linux系统重启或无故变为只读造成网站无法正常访问的简单临时的做 根目录只读不能写处理:
Linux系统重启或无故变为只读造成网站无法正常访问的简单临时的做 根目录只读不能写处理: 一、 1、mount: 用于查看哪个模块输入只读,一般显示为: /dev/hda1 on / type ext3 (rw) none on /proc type proc (rw) usbdevfs on /proc/bus/usb type usbdevfs (rw) none on /dev/pts type devpts (rw,gid=5,mode=620) /dev/hda5 on /home type ext3 (rw) none on /dev/shm type tmpfs (rw) /dev/hda2 on /usr/local type ext3 (rw) /dev/nb1 on /EarthView/RAW type ext3 (ro)(变为只读了)
拓荒者
2019/03/11
2.2K0
创建只读集合
真正的人生,只有在经过艰难卓绝的斗争之后才能实现。——塞涅卡 在java8中 我们可以使用下面的函数创建只读集合 Collections.unmodifiableCollection(Arrays.asList("")); Collections.unmodifiableList(Collections.singletonList("")); Collections.unmodifiableMap(new HashMap<>(1 << 4)); Collections.unmodifiableSet
阿超
2022/08/17
1.5K0
mysql主从只读
# mysql使用mycat读写分离报错 Connection is read-only. Queries leading to data modification are not allow #
summerking
2022/10/27
3K0
EDB无法删除分区子表的错误
最近某个应用,连接的是EDB数据库,测试环境是EDB 9.2版本,在删除一张inherit方式创建的分区子表(例如主表a,子表b),先用alter table b no herit a删除关联,再drop删除子表,提示无法删除,从错误提示看,主表a要依赖子表b,建议删除主表a,达到删除子表b的效果。可我都删除了主子关系,为什么无法删表?
bisal
2019/02/28
1.7K0

相似问题

修复:如何在从多个文档中获取数据后,将数据再次存储在正确的文档中

14

如何修复输出显示,使其显示正确排序的数据

24

如果未定义,则在获得正确的输出后显示NaN。

12

在=> IllegalStateException身份验证后查询uid文档的修复

11

用mongoose和node.js存储查询后的变量数据

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文