【操作系统笔记八】任务调度&信号处理&CPU上下文

任务调度

何时需要调度执行一个任务?

  • 第一:当任务创建的时候,需要决定是继续执行父进程,还是调度执行子进程

  • 第二:在一个任务退出时,需要做出调度决策,需要从 TASK_RUNNING 状态的所有任务中选择一个任务来执行

  • 第三:当一个任务阻塞在 I/O 上,或者因为其他原因阻塞,必须调度另一个任务执行

  • 第四:在一个 I/O 中断发生时,必须做出调度决策。

    I/O 中断来源于 I/O 设备,说明 I/O 的工作结束了,需要唤醒正在阻塞在这个 I/O 上的进程,这个时候,调度程序要决定是否调度这个被唤醒的任务。

  • 第五:时钟中断发生的时候

在这里插入图片描述

问题:如何实现对响应时间敏感的调度程序?

  • 轮转调度(Round-Robin, RR)

  • 基本思想:在一个时间片内运行一个任务,时间片结束,然后切换到下一个任务,而不是运行一个任务直到结束。这样反复执行,直到所有任务完成。

  • RR 有时被称为时间切片,时间片长度必须是时钟中断周期的倍数。如果时钟中断是每 10ms 中断一次,则时间片可以是 10ms20ms10ms 的任何倍数。

信号处理

什么是信号?

例如 kill -9 2334,内核先找到pid = 2334的进程,并杀掉这个进程以及 tgid = 2334 的线程。

  • 给进程2334发送9号信号:SIGKILL

  • 一共有 64 个信号:kill -l

  • 信号是很短的消息,可以被发送到一个进程或一组进程

  • 每个信号,本质上就是一个数字而已

在这里插入图片描述

信号处理大体流程:

在这里插入图片描述

信号发送:

  • kill(pid, sig):向 pid 所在的线程组发送一个sig号信号

  • tkill(pid, sig):向 pid 进程(或线程)发送一个sig号信号

  • tgkill(pid, sig, tgid):向 pid 进程(或线程)发送一个sig号信号(检查下这个进程的tgid是否等于参数中的 tgid

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

川峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值