`

linux 经典进程切换实现代码

阅读更多
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剖析学习教案.ppt

    总结来说,Linux进程切换的核心代码`switchto`是操作系统内核实现并发和多任务的关键机制。通过对进程状态的保存和恢复,`switchto`确保了系统可以在多个进程间高效、平滑地进行切换,从而充分利用系统资源,为用户...

    linux进程切换核心代码switchto剖析PPT学习教案.pptx

    Linux进程切换是操作系统内核中的一个关键操作,它涉及到处理器状态的保存与恢复,以及上下文的切换。在Linux系统中,`switchto`函数是实现这一过程的核心代码,它确保了多任务环境下各个进程的平滑运行。下面将详细...

    linux进程源代码分析

    ### Linux进程源代码分析 #### 0. 引言 近年来,随着开源软件运动的兴起,Linux作为一种开放源码的操作系统,在技术社区中获得了广泛的关注和发展。Linux的开放性不仅促进了其自身的发展,也为广大开发者提供了...

    linux进程切换核心代码switchto剖析实用教案.ppt

    Linux进程切换是操作系统中最基本且至关重要的操作之一,它涉及到CPU资源在不同进程间的分配,确保系统的多任务并发执行。`switchto`是Linux内核中的一个关键函数,用于实现这个过程。在这个实用教案中,我们将深入...

    实现进程切换的简单os代码

    这里我们关注的焦点是通过NASM(Netwide Assembler)来实现一个简单的操作系统,模仿Linux的初始化过程,以理解如何进行进程切换。 首先,我们需要了解NASM,这是一个流行的汇编语言编译器,广泛用于x86架构,它...

    linux源代码分析--进程调度部分

    在Linux中,进程调度的实现涉及到多个关键函数,如`schedule()`函数是进行进程切换的主要入口,它会找到下一个应运行的进程并执行上下文切换。`pick_next_task_fair()`函数则用于从红黑树中选择下一个进程,这个过程...

    Linux随机进程调度算法实现.doc

    总的来说,这个实验提供了一个理解Linux内核进程调度机制的实践机会,同时也展示了如何通过修改内核源代码来实现自定义的调度策略。随机调度虽然简单,但它可能会影响到系统的行为和性能,特别是对于需要高响应时间...

    Linux内核设计与实现.pdf

    (如果子进程要执行就需要进程切换,当发生切换时,子进程tss中的eax值就调入eax寄存器,子进程执行时首先会将eax的内容做为返回值) fork()后两个任务同时进行 fork()后,就是两个任务同时进行,父进程用他的tss...

    linux进程调度与进程切换1

    本篇文章主要探讨Linux进程调度的两个主要类型——主动调度和被动调度,以及涉及的关键函数和流程。 1. 主动调度: 主动调度是指进程在运行过程中因自身行为触发的调度,比如进程调用`sleep()`或`exit()`函数进入...

    重庆理工大学操作系统基于Linux0.11内核的实践

    在Linux0.11的环境下完成基于内核栈切换的进程切换、地址映射与共享、终端设备的控制、proc文件系统的实现中的三个及以上实验项目。 在Linux四项任务中成功完成了四项:基于内核栈切换的进程切换,终端设备的控制,...

    Linux的进程管理.doc

    Linux 进程管理 Linux 进程管理是 Linux 操作系统中的一项重要...进程因时间片用完或因等待某个事件而阻塞时,进程调度需要把 CPU 的使用权从当前进程交给另一个进程,这个过程称为进程切换(process switching)。

    Linux0.01版内核源代码

    1. **进程管理**:在早期的Linux内核中,进程管理包括进程创建、调度、上下文切换等。虽然功能相对有限,但可以看到早期进程调度的基本思路和数据结构,如进程控制块(PCB)的实现。 2. **内存管理**:最初的Linux...

    linux0.01版本源代码

    2. **进程管理**:在0.01版本中,进程调度器非常简单,主要处理进程创建、上下文切换等基本操作。了解这部分源码有助于理解现代内核的多任务处理机制。 3. **内存管理**:早期的Linux内核内存管理包括物理内存分配...

    LINUX核心0.01版源代码

    2. **进程管理**:早期的Linux内核实现了基本的进程调度,包括进程创建、上下文切换等。这涉及到进程控制块(PCB)的使用,以及如何在不同的进程间切换执行。 3. **内存管理**:在0.01版中,内存管理机制相对简单,...

    linux-0.11.rar linux0.11版内核源代码 下载

    通过阅读和分析这些源代码,开发者可以深入理解Linux如何调度进程、管理内存、处理中断、实现文件系统,以及与硬件设备的交互等核心机制。 1. **进程管理**:在Linux 0.11中,进程管理包括进程创建、调度、同步和...

    Linux-0.12 源代码

    例如,`kernel/sched.c`文件包含了调度器的实现,展示了Linux如何在多个进程间进行上下文切换以实现多任务并行。 其次,Linux-0.12的源代码中,内存管理是另一个关键部分,可以在`mm/*`目录下找到。这部分代码涉及...

    Linux内核分析(进程与进程调度) 北航软件学院课件

    ### Linux内核分析:进程与进程调度 #### 知识点概述 北航软件学院的Linux内核分析课程深入探讨了Linux操作系统的核心机制之一:进程与进程调度。本课程不仅覆盖了理论知识,还提供了实践指导,通过分析关键源代码...

    LINUX内核源代码情景分析_linux_

    《LINUX内核源代码情景分析》一书深入探讨了Linux操作系统的核心——内核的源代码,揭示了其内部机制和工作原理。Linux内核是开源软件的典范,它的设计和实现为研究操作系统提供了宝贵的资源。以下是根据标题、描述...

Global site tag (gtag.js) - Google Analytics