Nachos LAB1 线程机制和线程调度实现

本文详细介绍了在Nachos操作系统中实现线程机制和调度算法的过程,包括线程数据结构扩展、全局线程管理、优先级抢占和时间片轮转调度。通过阅读和修改源代码,实现了限制线程数量、显示线程状态等功能,并针对遇到的问题进行了讨论和解决。
摘要由CSDN通过智能技术生成

LAB1 线程机制和线程调度实现

任务完成情况

任务 Y/N
调研Linux的PCB Y
Exercise1 源代码阅读 Y
Exercise2 扩展线程的数据结构 Y
Exercise3 增加全局线程管理机制 Y
Exercise4 源代码阅读 Y
Exercise5 实现优先级抢占调度算法 Y
*Chalenge 实现时间片轮转算法 Y

调研Linux的进程控制块

五个互斥状态

状态 描述
TASK_RUNNING 表示进程正在执行,或者已经准备就绪,等待处理机调度
TASK_INTERRUPTIBLE 表示进程因等待某种资源而被挂起(阻塞态),一旦资源就绪,进程就会转化为TASK_RUNNING态
TASK_UNINTERRUPTIBLE 与TASK_INTERRUPTIBLE状态类似,同样表示进程因等待某种资源而阻塞。二者唯一的区别在于:前者可以通过一些信号或者外部中断来唤醒,而后者只能通过等待的资源就绪被唤醒。这种状态很少被用到,但是不代表它没有用,实际上这种状态很有用,特别是对于驱动刺探相关的硬件过程至关重要。
TASK_STOPPED 进程被停止执行,当进程接收到SIGSTOP、SIGTTIN、SIGTSTP或者SIGTTOU信号之后就会进入该状态
TASK_TRACED 表示进程被debugger等进程监视,进程执行被调试程序所停止,当一个进程被另外的进程所监视,每一个信号都会让进城进入该状态

两个终止状态

状态 描述
EXIT_ZOMBIE 僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源,但如果父进程不退出,子进程所占有的进程ID将不会被释放,如果系统中僵尸进程过多,会占用大量的PID,导致PID不足,这是僵尸进程的危害,应当避免
EXIT_DEAD 进程正常结束的最终状态

进程的转换过程

在这里插入图片描述

调度策略

字段 描述 所在调度器类
SCHED_NORMAL (也叫SCHED_OTHER)用于普通进程,通过CFS调度器实现。SCHED_BATCH用于非交互的处理器消耗型进程。SCHED_IDLE是在系统负载很低时使用 CFS
SCHED_BATCH SCHED_NORMAL普通进程策略的分化版本。采用分时策略,根据动态优先级(可用nice()API设置),分配 CPU 运算资源。注意:这类进程比上述两类实时进程优先级低,换言之,在有实时进程存在时,实时进程优先调度。但针对吞吐量优化 CFS
SCHED_IDLE 优先级最低,在系统空闲时才跑这类进程(如利用闲散计算机资源跑地外文明搜索,蛋白质结构分析等任务,是此调度策略的适用者) CFS
SCHED_FIFO 先入先出调度算法(实时调度策略),相同优先级的任务先到先服务,高优先级的任务可以抢占低优先级的任务 RT
SCHED_RR 轮流调度算法(实时调度策略),后者提供 Roound-Robin 语义,采用时间片,相同优先级的任务当用完时间片会被放到队列尾部,以保证公平性,同样,高优先级的任务可以抢占低优先级的任务。不同要求的实时任务可以根据需要用sched_setscheduler()API 设置策略 RT
SCHED_DEADLINE 新支持的实时进程调度策略,针对突发型计算,且对延迟和完成时间高度敏感的任务适用。基于Earliest Deadline First (EDF) 调度算法

Linux与Nachos的异同

Linux中的task_struct
PID
特征信息(name, tID, tgID等)
进程状态
优先级
通信状态
现场保护区
资源需求、分配控制信息
进程实体信息
其他(工作单位、工作区、文件信息)
Nachos中的PCB实现
成员变量 描述
name 进程名字
status
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值