20242828-《Linux内核原理与分析》第九周作业

20242828-《Linux内核原理与分析》第九周作业

Linux 系统中进程调度的时机

在 Linux 系统中,进程调度是由内核完成的,用于管理进程的执行顺序和资源分配。调度的时机是指内核决定从当前进程切换到另一个进程的时刻,主要包括以下几种场景:

  1. 时间片用尽
    **触发机制:**定时器中断(clock interrupt)。
    Linux 使用时间片轮转(time slicing)调度策略,每个进程被分配一定的 CPU 时间片。当时间片用尽时,内核触发调度器选择下一个合适的进程运行。
    **典型场景:**抢占式多任务系统中,确保所有进程都能公平使用 CPU。

  2. 进程主动让出 CPU
    **触发机制:**进程调用特定系统调用。
    如果一个进程因某种原因需要等待(如 I/O 操作、信号或获取锁),它会主动进入睡眠(阻塞)状态。此时,内核会触发调度器选择其他进程运行。
    常见系统调用:
    sleep():进程主动休眠。
    wait():等待子进程结束。
    阻塞式 I/O 调用:如 read()、write()。

  3. 高优先级任务唤醒
    **触发机制:**有更高优先级的进程从睡眠状态被唤醒。
    如果某个优先级较高的进程从阻塞状态被唤醒,内核可能会立即中断当前的低优先级进程,切换到高优先级进程。
    **典型场景:**实时任务、I/O 完成通知。

  4. 系统调用返回或中断处理结束
    **触发机制:**进程从内核态返回用户态时。
    每当进程完成系统调用或中断处理时,内核会检查是否需要进行进程切换。
    典型场景:
    某进程完成 I/O 操作。
    中断处理完成时触发调度器。

  5. 新进程创建或进程终止
    触发机制:
    调用 fork() 或其他进程创建函数后。
    某进程调用 exit() 终止后。
    新进程创建后,调度器会决定是否切换到新进程执行。
    如果当前运行的进程终止,调度器会选择其他进程运行。

  6. 总结
    Linux 的进程调度是多任务操作系统的核心功能,其调度时机由内核态的各种事件驱动,主要包括时间片用尽、进程状态变化以及系统资源条件变化等。Linux 通常采用 CFS(完全公平调度器) 和特定场景下的实时调度策略来实现这些调度行为。

实验:使用 gdb 跟踪分析一个 schedule()函数

1、启动MenuOS系统

cd LinuxKernel
rm -rf menu  # 无法克隆,可使用侧边栏上传代码将代码压缩包传入实验楼环境中
git clone https://github.com/mengning/menu.git
cd menu
mv test_exec.c test.c
make rootfs

图

2、配置gdb,远程调试并设置断点;

cd ..
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
gdb  # 打开另一个终端,使用gdb调试
file linux-3.18.6/vmlinux
target remote:1234
b schedule
b context_switch
b switch_to
b pick_next_task

图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值