`

(第6章 1)最简单的进程

 
阅读更多


 

 

第一步——ring0 --> ring1

(汇编和C的相互调用,见P121. )

 

r/kernel/kernel.asm ==>

...

extern   p_proc_ready     ; 这里是怎么在调用的啊??? 

 

restart:

     mov  esp,  [p_proc_ready]   ; r/include/global.h有EXTERN PROCESS* p_proc_ready,r/include/有如下定义:

                                                       ; typedef struct s_proc {

 

                                                       ;  STACK_FRAME regs;          /* process registers saved in stack frame */

                                                       ; 

 

                                                       ;  u16 ldt_sel;               /* gdt selector giving ldt base and limit */

 

                                                       ;  DESCRIPTOR ldts[LDT_SIZE]; /* local descriptors for code and data */

                                                       ; 

 

                                                       ;         int ticks;                 /* remained ticks */

 

                                                       ;         int priority;

                                                       ; 

 

                                                       ;  u32 pid;                   /* process id passed in from MM */

 

                                                       ;  char p_name[16];           /* name of the process */

 

                                                       ; }PROCESS;

     lldt    [esp+P_LDT_SEL]       ; 把“内核栈”中一个“进程表”的u16 ldt_sel的内容载入ldtr

 

     lea    eax,  [esp+P_STACKTOP]     ; eax被赋予esp+P_STACKTOP

     mov  dword  [tss+TSS3_S_SP0],  eax

restart_reenter:

     dec   dword  [k_reenter]

     pop  gs

     pop  fs

     pop  es

     pop  ds

     popad

     add  esp,  4

     iretd

 

 

r/kernel/main.c ==>

#include "proto.h"    // 声明了 void restart(); 因此在下面的C代码中可以直接用汇编函数restart (r/kernel/kernel.asm中)

...

 

PUBLIC int kernel_main(){

     restart();

}

  • 大小: 17 KB
分享到:
评论

相关推荐

    一个进程池的服务器程序

    当父进程发现请求数 >= 子进程数时,父进程创建新的子进程,并把子进程数加1(当然子进程数有个预先上限);当父进程发现子进程数大于请求数加1时,父进程杀死多余的子进程。 总的来说,思想是让子进程accept并处理...

    《计算机应用基础》第四章课后答案.doc.doc

    正确答案是:嵌入式 ----------------------- 《计算机应用基础》第四章课后答案全文共4页,当前为第1页。 《计算机应用基础》第四章课后答案全文共4页,当前为第2页。 《计算机应用基础》第四章课后答案全文共4页...

    自己动手写操作系统

    第1章 马上动手写一个最小的"操作系统"1 1.1 准备工作1 1.2 10分钟完成的操作系统1 1.3 Boot Sector3 1.4 代码解释3 1.5 水面下的冰山5 1.6 回顾6 第2章 搭建你的工作环境7 2.1 虚拟计算机(Virtual PC)7 ...

    操作系统精髓与设计原理答案

    第一章 计算机系统概述 复习题: 1.1、 列出并简要地定义计算机的四个主要组成部分。 答:主存储器,存储数据和程序;算术逻辑单元,能处理二进制数据;控制单元,解读存储器中的指令并且使他们得到执行;输入/输出...

    SOC设计UML实务手册完整版

    本书通过一个录音芯片的仿真实例,从最简单的芯片设计,到更复杂的芯片组装设计,从UML图:NSystemC代码,一应俱全,解说详尽。本书适合作为初学UML—SystemC的入门书,也适合芯片设计工作者参考。 前言 第1章 新式...

    Perl 语言入门 第六版

    第六章哈希 第七章漫游正则表达式王国 第八章用正则表达式进行匹配 第九章用正则表达式处理文本 第十章其他控制结构 第十一章Perl模块 第十二章文件测试 第十三章目录操作 第十四章字符串与排序 第十五章...

    操作系统判断题.docx

    操作系统判断题全文共3页,当前为第1页。操作系统判断题全文共3页,当前为第1页。二、判断题(共 14 道试题,共 28 分。) 操作系统判断题全文共3页,当前为第1页。 操作系统判断题全文共3页,当前为第1页。 1. ...

    MFC Windows程序设计(第二版) 源代码 任哲编著 [评价可免费]

    第1章 Windows应用程序基础知识  1.1 Windows应用程序的基本概念  1.2 Windows应用程序的结构  1.3 用函数封装Windows程序  1.4 窗口函数的另一种结构  小结  练习题  思考题 第2章 Windows应用程序的类封装 ...

    Linux与Unix Shell编程指南(PDF格式,共30章)

    第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以选择使用符号模式或绝对模式 7 ...

    炼数成金 课程+教材 Oracle数据库职业直通车-Oracle入门学习教学视频 谭怀远老师.txt

    第6课 Oracle数据库的对象(1) 第7课 Oracle数据库的对象(2) 第8课 复杂一些的SQL语句 第9课 学写存储过程和函数 第10课 数据字典 第11课 数据库的备份和恢复 第12课 DBA日常工作内容和职责 第13课 Oracle的...

    shell教程-30章,下了之后会让你大吃一惊,相当好

    第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以选择使用符号模式或绝对模式 7 ...

    自己动手写操作系统 电子工业出版社 pdf

    第1章 马上动手写一个最小的“操作系统”1 1.1 准备工作1 1.2 10分钟完成的操作系统1 1.3 Boot Sector3 1.4 代码解释3 1.5 水面下的冰山5 1.6 回顾6 第2章 搭建你的工作环境7 2.1 虚拟计算机(Virtual PC)7 2.1.1 ...

    python入门到高级全栈工程师培训 第3期 附课件代码

    第1章 01 计算机发展史 02 计算机系统 03 小结 04 数据的概念 05 进制转换 06 原码补码反码 07 物理层和数据链路层 08 网络层和arp协议 09 传输层和应用层 第2章 01 上节课复习 02 arp协议复习 03 字符编码 第3...

    TCPIP详解--共三卷

    第1章 概述 1 1.1 引言 1 1.2 分层 1 1.3 TCP/IP的分层 4 1.4 互联网的地址 5 1.5 域名系统 6 1.6 封装 6 1.7 分用 8 1.8 客户-服务器模型 8 1.9 端口号 9 1.10 标准化过程 10 1.11 RFC 10 1.12 标准的简单服务 11 ...

    TCP_IP详解卷1

    第1章 概述 1 1.1 引言 1 1.2 分层 1 1.3 TCP/IP的分层 4 1.4 互联网的地址 5 1.5 域名系统 6 1.6 封装 6 1.7 分用 8 1.8 客户-服务器模型 8 1.9 端口号 9 1.10 标准化过程 10 1.11 RFC 10 1.12 标准的简单服务 11 ...

    Shell脚本专家指南

    第1章 shell脚本的错误检测 1.1 shell跟踪选项 1.2 简单输出语句 1.3 根据调试层次控制输出 1.4 用函数简化错误检查 1.5 手动单步执行 第2章 标准函数库 2.1 库文件 2.2 一些有用的函数 2.3 使用库 第3章 日期和时间...

    TCPIP详解卷[1].part04

    第1章 概述 1 1.1 引言 1 1.2 分层 1 1.3 TCP/IP的分层 4 1.4 互联网的地址 5 1.5 域名系统 6 1.6 封装 6 1.7 分用 8 1.8 客户-服务器模型 8 1.9 端口号 9 1.10 标准化过程 10 1.11 RFC 10 1.12 标准的简单服务 11 ...

    TCPIP详解卷[1].part09

    第1章 概述 1 1.1 引言 1 1.2 分层 1 1.3 TCP/IP的分层 4 1.4 互联网的地址 5 1.5 域名系统 6 1.6 封装 6 1.7 分用 8 1.8 客户-服务器模型 8 1.9 端口号 9 1.10 标准化过程 10 1.11 RFC 10 1.12 标准的简单服务 11 ...

    TCPIP详解卷[1].part03

    第1章 概述 1 1.1 引言 1 1.2 分层 1 1.3 TCP/IP的分层 4 1.4 互联网的地址 5 1.5 域名系统 6 1.6 封装 6 1.7 分用 8 1.8 客户-服务器模型 8 1.9 端口号 9 1.10 标准化过程 10 1.11 RFC 10 1.12 标准的简单服务 11 ...

    TCPIP详解卷[1].part05

    第1章 概述 1 1.1 引言 1 1.2 分层 1 1.3 TCP/IP的分层 4 1.4 互联网的地址 5 1.5 域名系统 6 1.6 封装 6 1.7 分用 8 1.8 客户-服务器模型 8 1.9 端口号 9 1.10 标准化过程 10 1.11 RFC 10 1.12 标准的简单服务 11 ...

Global site tag (gtag.js) - Google Analytics