博客URL:www.shicoder.top
微信:18223081347
欢迎与小组聊天:452380935
这次我们将改进内核,主要包括加载,任务调度,中断等
让我们回顾一下,是否有关于中国全球描述符的一些代码?
Duan,一个是代码段,数据段,总共8,192个部分。然后,当内核中使用其他片段时,如何加载它,因此我们需要重新定义内核中的一个数组和初始8,192(当然,在我的Mein中,这个内核,事实上,只有128个初始化),然后将寄存器的值分配给以前的保护模式为此数组,然后加载数组tolet的启动的地址
首先定义结构,因为在内核中,我们可以用C语言编写,因此此处的定义不使用这样的汇编,是否觉得它更简单,最重要的是一个函数,这是我们的正当步骤我们刚刚实施
它仍然很简单。就是这样。请注意,我们的核心只有一个128个阵列,尚未达到8192,但正常,必须是8192
简而言之,可以想象一个任务是一个过程,因此每个过程都需要拥有自己的堆栈来保存运行时所需的信息。在此代码写作中,为了简化一个过程,一个过程占据了一个堆栈之一。页面内存,结构如下
因此,任务计划是此时将堆栈切换到下一个过程的堆栈,因此您必须知道切换后要保存什么。这是由ABI指定的。一个过程有自己的寄存器值。ABI法规,例如流程,例如CrocessESA切换到进程B,然后处理A应保存以下三个以下三个
处理B以保存以下5用于进程A
知道上面的理论,我们可以切换
我们上面提到一个过程需要堆栈,因此我们为此堆栈创建一个结构
目前,根据上图,设置一些值
在最重要的功能中,由于需要操作寄存器,因此可以通过汇编实施
几乎在这个时候,堆栈开关完成一次,一次,过程A将可用
可以在上面看到,我们使用它来切换,并且正常情况将用于切换。例如,在某些情况下,例如打印机需要纸张,它将自动切换该过程。
因为中断是一个函数,所以有一个表可以存储此功能的地址。当调用中断时,请转到表查询呼叫功能序列号以了解调用什么函数。在实际模式下,处理器需要其入口点的入口,从物理地址0x000和0x3ff的末端存储在内存中。在总共1 KB空间中,总共256个中断向量。中断向量是指中断函数的指针。一个向量包括4个字节。前两个字节在段落中被偏移到跳跃至
关键是这三行
实际上,当我们使用呼叫中断时,我们首先注册要调用的功能。如前所述,有256个,每个字节,例如,上面的一个是
您可以看到成功打印出来
但是,在保护模式下,由于我们很少使用段地址和内部偏移,因此我们很少使用上述方法,但是我们仍然保留此想法。让我们谈谈下面保护模式的中断
实际模式下的中断矢量表变为“保护模式”中的中断描述符表,而实际模式下的中断向量变成了保护模式下的中断描述符。让我们来谈谈
我们知道,中断向量实际上是指功能的地址,但是中断描述符增加了,因为空间变大,因此添加了许多其他内容。首先查看其结构的结构
其中,可以想象要定向的功能的地址。当然
同样,一个表将所有中断描述的聚合分别是中断描述符表。同样,有一个特殊寄存器可以指向此中断描述符表。正是还有两个说明。
下面我们将意识到系统中的中断描述符句柄
让我们谈谈它的过程。首先,在主函数的主要函数中,创建了一个128中断描述符表,并初始化每个中断描述。此函数正在打印,然后注意,当功能返回时,它是函数,是哪个功能在里面使用。实际上,目前无需指定,因为128个中断描述符相同。
结果出来了
原始:https://juejin.cn/post/7097558120959836174