20242822《Linux内核原理与分析》第三周作业
张晓攀+原创作品转载请注明出处+《Linux内核分析》MOOC课程https://mooc.study.163.com/course/1000029000
一、实验楼上实验二——mykernel实验指导(操作系统是如何工作的)
1.使用实验楼的虚拟机打开shell输入所给命令
这段代码的意思是应用一个补丁文件到Linux内核源代码,配置并编译内核,然后使用QEMU虚拟机启动该内核。
·cd ~/LinuxKernel/linux-3.9.4
:进入Linux内核3.9.4的源码目录。注意路径区分大小写。
·rm -rf mykernel
:删除名为“mykernel”的文件或文件夹(如果存在的话)。
pa·tch -p1 < ../mykernel_for_linux3.9.4sc.patch
:应用补丁文件“mykernel_for_linux3.9.4sc.patch”,该补丁位于上级目录。-p1
表示忽略补丁路径中的第一级目录。
·make allnoconfig
:生成一个包含所有选项默认关闭的配置文件。这是为了快速配置一个最小化的内核。
·make
:编译内核,这个过程可能需要一些时间。
·qemu --kernel arch/x86/boot/bzImage
:使用QEMU启动编译生成的内核镜像“bzImage”。
输入最后一条指令可以看到程序陷入了死循环:
2.完成一个简单的时间片轮转多道程序内核代码
①创建mypcb.h文件,定义进程控制块的结构,并提供一个调度函数的原型
②修改mymain.c文件,实现内核代码的入口,负责初始化内核的各个组成部分
③修改myinterrupt.c文件,实现中断控制,并增加对进程切换时的my_schedule函数
④完成上述操作后重新进行make编译内核
可以看到:一个简单的时间片轮转多道程序内核代码成功实现。
二、相关问题
问:Linux中的时间片轮转是什么,有何作用?
答:时间片轮转(Round Robin, RR) 是 Linux 等操作系统中常用的进程调度算法之一,主要用于多任务系统中调度多个进程的执行顺序。
1. 时间片轮转的基本概念
- 时间片(Time Slice/Quantum):每个进程在 CPU 上运行时,被分配到的时间长度,称为时间片。它是一个固定的时间单位,例如 10 毫秒。
- 轮转(Round Robin):操作系统按照一个循环队列的方式,将各个就绪态的进程轮流分配到 CPU 上执行。每个进程在其时间片用完后,如果还没有完成任务,就会被置于就绪队列的末尾,等待下一次被调度。
2. 时间片轮转调度的工作原理
时间片轮转调度的基本流程如下:
①**初始状态**:所有就绪态的进程按照进入队列的顺序排成一个循环队列。
②时间片分配:调度器从队列头部选择一个进程,并分配一个时间片让它运行。
③执行与切换:
- 如果进程在时间片内完成任务(例如,I/O请求或退出),则调度器会选择队列中的下一个进程。
- 如果进程在时间片结束时还未完成,则会被挂起并放回队列末尾,同时调度器选择下一个进程执行。
④重复:调度器不断重复这个过程,从而在多个进程之间进行切换。
3. 时间片轮转的作用
时间片轮转在操作系统中的作用包括以下几点:
- 提高系统响应速度:由于每个进程都能在短时间内获得 CPU 时间片,用户可以感觉到系统反应很快。对于交互式系统,时间片轮转可以让用户任务(如按键、点击)得到快速响应。
- 公平性:每个进程按照顺序得到执行时间,没有进程会被长时间地独占 CPU,这使得各个任务能够公平地获得执行机会。所有进程都能按顺序获得时间片,即使某些进程需要更多的时间来完成工作。
- 避免饥饿(Starvation):时间片轮转的方式确保每个进程都能够在一定时间内得到执行,不会出现某些进程长期得不到执行的情况,从而避免了饥饿现象。
- 适用于时间敏感任务:由于时间片轮转调度器会在每个时间片结束后切换到下一个进程,因此它特别适用于那些需要频繁响应的任务(如用户界面程序)。
4. 时间片长度的选择
时间片长度的选择对系统性能有很大影响:
- 时间片过短:
- 进程在 CPU 上运行的时间很短,频繁的进程切换会导致大量的上下文切换开销,浪费系统资源。
- 系统的整体吞吐量可能下降,因为 CPU 花费更多时间在切换进程而非实际工作上。
- 时间片过长:
- 进程长时间占据 CPU,可能会导致其他进程等待的时间变长,降低系统的响应速度。
- 系统不再表现为“轮转”式调度,变得更像是先来先服务(FCFS)的调度方式,影响到交互式任务的体验。
一般来说,时间片长度需要在系统响应速度和上下文切换开销之间进行权衡。现代操作系统中,时间片的长度通常设定为 10 到 100 毫秒之间。
5. 时间片轮转的适用场景
- 多任务系统:时间片轮转特别适合多任务环境,如桌面操作系统(Windows、Linux)和智能手机系统(Android、iOS)。
- 交互式任务:适用于图形用户界面程序和需要快速响应用户操作的任务,因为它可以保证每个用户任务都能快速得到CPU执行。
- 没有明确优先级的任务:对于任务没有显著优先级差异的情况,时间片轮转可以均衡处理每个任务的执行时间。
总结
时间片轮转是一种简单而有效的调度算法,它通过为每个进程分配一定的时间片并按顺序轮流调度,确保了多任务系统中每个任务的公平性和系统的快速响应。它在保证公平性和避免饥饿方面非常有用,但在高负载情况下,时间片的选择需要谨慎,以避免过多的上下文切换。