30天自制操作系统(第16天)

本文详细介绍了自制操作系统中任务管理的自动化过程,包括任务初始化、分配、运行和切换,以及任务的休眠和唤醒机制。此外,还探讨了任务优先级的概念,如何通过设置超时时间影响任务的运行顺序,并提出了优化方案以实现特定任务的绝对优先响应。
摘要由CSDN通过智能技术生成

一、任务管理自动化

为了提高复用性(新增任务数量,不用修改task_switch),也不用考虑GDT的情况,所以做了代码的优化。

1、task_init

在此函数内主要执行了以下几个动作:

 ①为taskctl分配内存空间

② 自动初始化所有GDT

③创建了一个task,并开始运行,由于taskctl->running等于1,所以并不会任务切换。只有一个任务在正常运行。

struct TASK *task_init(struct MEMMAN *memman)
{
	int i;
	struct TASK *task;
	struct SEGMENT_DESCRIPTOR *gdt = (struct SEGMENT_DESCRIPTOR *) ADR_GDT;
	taskctl = (struct TASKCTL *) memman_alloc_4k(memman, sizeof (struct TASKCTL));
	for (i = 0; i < MAX_TASKS; i++) {
		taskctl->tasks0[i].flags = 0;
		taskctl->tasks0[i].sel = (TASK_GDT0 + i) * 8;
		set_segmdesc(gdt + TASK_GDT0 + i, 103, (int) &taskctl->tasks0[i].tss, AR_TSS32);
	}
	task = task_alloc();
	task->flags = 2; /* 動作中マーク */
	taskctl->running = 1;
	taskctl->now = 0;
	taskctl->tasks[0] = task;
	load_tr(task->sel);
	task_timer 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值