【Linux内核】解析一个简单的PCB块内部结构

PCB块,理解为一个结构体,如下所示:

struct PCB {
	struct Trapframe env_tf;	// Saved registers
	struct Env *env_link;		// Next free Env
	envid_t env_id;			// Unique environment identifier
	envid_t env_parent_id;		// env_id of this env's parent
	enum EnvType env_type;		// Indicates special system environments
	unsigned env_status;		// Status of the environment
	uint32_t env_runs;		// Number of times environment has run
	pde_t *env_pgdir;		// Kernel virtual address of page dir
};

env_tf
这个结构体是用于保存进程寄存器的值。当从user转变到kernel模式的时候,kernel将寄存器的值保存下来,这样子这个进程可以从它离开的地方重新开始。

env_link
指向空闲进程链表上的下一个空闲的进程,env_free_list是指向list中第一个空闲进程。

env_id
唯一标志着当前正在使用这个PCB结构体的进程(可以理解成PID)。

env_parent_id
代表创建这个environment的environment的env_id(相当于一个进程中的父进程id)。通过这种id,environment可以成一个“family tree”,这在决定一个environment允许给谁做什么的时候是相当有用的

env_pgdir
页目录的内核虚拟地址

类似Unix 内核,一个JOS environment也将“thread”和“address space”的概念耦合起来。
thread主要由保存的寄存器值定义(env_tf),addree space>由页目表和页表来定义(env_pgdir)。
要想真正的运行一个环境,kernel必须用保存的寄存器的值和合适的address space设置好CPU。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于一个300字的回答来说,涵盖整个 Linux 内核调度器的详细步骤是不太可能的。然而,我可以给你一个大致的概述,让你了解一些关键步骤。 首先,要开始编写一个 Linux 内核调度器,你需要对操作系统的基本原理有一定的理解。你需要了解进程与线程的概念,以及它们在操作系统中的调度和执行。你还需要了解调度算法以及其在进程选择方面的应用。 其次,你需要研究 Linux 内核调度器的源代码。这将涉及到理解 Linux 内核的整体结构以及调度器在其中的位置和功能。你可以从 Linux 的官方源代码仓库中获取这些信息。 一旦你了解了基本原理和调度器的源代码,你可以根据你的需求进行修改或编写新的调度器。这可能包括更改调度算法、优化调度策略或添加新的功能。你可能还需要做一些基准测试,以确保你的调度器在不同的负载情况下表现良好。 最后,你需要将你的调度器集成到 Linux 内核中,并进行测试和验证。这可能涉及到构建和安装整个 Linux 内核,然后在实际系统中运行调度器以进行测试。你可能还需要一些调试工具来帮助你找出任何问题并进行修复。 总结起来,编写一个 Linux 内核调度器是一个复杂的过程,需要深入了解操作系统原理和 Linux 内核的工作机制。这只是一个概述,涉及的步骤远远超过300字的限制。希望这个简短的回答能够给你提供一些指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值