extern _inline void switch_to(int n)
{
unsigned short __tmp;
__tmp = (unsigned short)_TSS(n);
_asm {
mov ebx, offset task
mov eax, n
mov ecx, [ebx+eax*4]
cmp ecx, current/* 任务n 是当前任务吗?(current ==task[n]?) */
je l1 /* 是,则什么都不做,退出。*/
xchg ecx,current/* current = task[n]; */
/*执行长跳转,造成任务切换 (头大了很长时间,多多包涵)*/
mov ax, __tmp
mov word ptr ds:[lcs],ax
_emit 0xea
_emit 0 // ip
_emit 0
_emit 0
_emit 0
lcs: _emit 0 // cs
_emit 0
// 在任务切换回来后才会继续执行下面的语句。
cmp last_task_used_math,ecx /* 新任务上次使用过协处理器吗?*/
jne l1
clts/* 新任务上次使用过协处理器,则清cr0 的TS 标志。*/
}
l1: ;
}
上面这段函数就是linux用来切换任务的函数。
刚开始阅读时,对红色的这段非常不理解。
在查阅了一些资料后,终于恍然大悟
资料:
jmp far F000:E05B 翻成机器 码就是 0xEA 0x5B 0xE0 0x00 0xF0
_emit指令就是直接将后面的1字节内容输出。
根据资料,我就知道了
_emit 0xEA就是jmp
紧跟在jmp后面的4字节就是IP(偏移值),再接下来的2字节就是段选择符。
mov word ptr ds:[lcs],ax。就是将ax的内容移动到上面提到的cs中,而此时ax内的内容就是tss中当前任务的cs值
分享到:
相关推荐
总结来说,Linux进程切换的核心代码`switchto`是操作系统内核实现并发和多任务的关键机制。通过对进程状态的保存和恢复,`switchto`确保了系统可以在多个进程间高效、平滑地进行切换,从而充分利用系统资源,为用户...
Linux进程切换是操作系统内核中的一个关键操作,它涉及到处理器状态的保存与恢复,以及上下文的切换。在Linux系统中,`switchto`函数是实现这一过程的核心代码,它确保了多任务环境下各个进程的平滑运行。下面将详细...
### Linux进程源代码分析 #### 0. 引言 近年来,随着开源软件运动的兴起,Linux作为一种开放源码的操作系统,在技术社区中获得了广泛的关注和发展。Linux的开放性不仅促进了其自身的发展,也为广大开发者提供了...
Linux进程切换是操作系统中最基本且至关重要的操作之一,它涉及到CPU资源在不同进程间的分配,确保系统的多任务并发执行。`switchto`是Linux内核中的一个关键函数,用于实现这个过程。在这个实用教案中,我们将深入...
这里我们关注的焦点是通过NASM(Netwide Assembler)来实现一个简单的操作系统,模仿Linux的初始化过程,以理解如何进行进程切换。 首先,我们需要了解NASM,这是一个流行的汇编语言编译器,广泛用于x86架构,它...
在Linux中,进程调度的实现涉及到多个关键函数,如`schedule()`函数是进行进程切换的主要入口,它会找到下一个应运行的进程并执行上下文切换。`pick_next_task_fair()`函数则用于从红黑树中选择下一个进程,这个过程...
总的来说,这个实验提供了一个理解Linux内核进程调度机制的实践机会,同时也展示了如何通过修改内核源代码来实现自定义的调度策略。随机调度虽然简单,但它可能会影响到系统的行为和性能,特别是对于需要高响应时间...
(如果子进程要执行就需要进程切换,当发生切换时,子进程tss中的eax值就调入eax寄存器,子进程执行时首先会将eax的内容做为返回值) fork()后两个任务同时进行 fork()后,就是两个任务同时进行,父进程用他的tss...
本篇文章主要探讨Linux进程调度的两个主要类型——主动调度和被动调度,以及涉及的关键函数和流程。 1. 主动调度: 主动调度是指进程在运行过程中因自身行为触发的调度,比如进程调用`sleep()`或`exit()`函数进入...
在Linux0.11的环境下完成基于内核栈切换的进程切换、地址映射与共享、终端设备的控制、proc文件系统的实现中的三个及以上实验项目。 在Linux四项任务中成功完成了四项:基于内核栈切换的进程切换,终端设备的控制,...
Linux 进程管理 Linux 进程管理是 Linux 操作系统中的一项重要...进程因时间片用完或因等待某个事件而阻塞时,进程调度需要把 CPU 的使用权从当前进程交给另一个进程,这个过程称为进程切换(process switching)。
1. **进程管理**:在早期的Linux内核中,进程管理包括进程创建、调度、上下文切换等。虽然功能相对有限,但可以看到早期进程调度的基本思路和数据结构,如进程控制块(PCB)的实现。 2. **内存管理**:最初的Linux...
2. **进程管理**:在0.01版本中,进程调度器非常简单,主要处理进程创建、上下文切换等基本操作。了解这部分源码有助于理解现代内核的多任务处理机制。 3. **内存管理**:早期的Linux内核内存管理包括物理内存分配...
2. **进程管理**:早期的Linux内核实现了基本的进程调度,包括进程创建、上下文切换等。这涉及到进程控制块(PCB)的使用,以及如何在不同的进程间切换执行。 3. **内存管理**:在0.01版中,内存管理机制相对简单,...
通过阅读和分析这些源代码,开发者可以深入理解Linux如何调度进程、管理内存、处理中断、实现文件系统,以及与硬件设备的交互等核心机制。 1. **进程管理**:在Linux 0.11中,进程管理包括进程创建、调度、同步和...
例如,`kernel/sched.c`文件包含了调度器的实现,展示了Linux如何在多个进程间进行上下文切换以实现多任务并行。 其次,Linux-0.12的源代码中,内存管理是另一个关键部分,可以在`mm/*`目录下找到。这部分代码涉及...
### Linux内核分析:进程与进程调度 #### 知识点概述 北航软件学院的Linux内核分析课程深入探讨了Linux操作系统的核心机制之一:进程与进程调度。本课程不仅覆盖了理论知识,还提供了实践指导,通过分析关键源代码...
《LINUX内核源代码情景分析》一书深入探讨了Linux操作系统的核心——内核的源代码,揭示了其内部机制和工作原理。Linux内核是开源软件的典范,它的设计和实现为研究操作系统提供了宝贵的资源。以下是根据标题、描述...