⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 system_invoke.cpp

📁 哈工大的几个人开发的操作系统pyos的部分源码
💻 CPP
字号:
#include "system_invoke.h"
#include "system.h"
#include "video.h"
#include "system_lib.h"

/****************************************************************************************
* pyos 有关系统调用处理的说明
* 编写:谢煜波
* 说明:pyos 的系统调用由两个单元文件,及一个汇编文件构成,
*       注:单元文件即指.cpp文件及其相对应的.h文件,
*       system_invoke.cpp:这个单元文件主要负责初始化内存所需的调用门结构
*       system_lib.cpp:这个单元文件是真正的系统调用处理函数
*       system_invoke.asm:这个汇编文件主要是产生系统调用的汇编壳
*       上面的三个处理系统调用的东东,不链接入每个进程,只链接入内核。
*
*       比如:系统提供了 class_pyos_Video 这个类,它是被链入每个进程的,处理每个进程
*       的调用要求,而在其内部通过调用门调用系统函数,而调用门是固定的直接写入这个类
*       的成员函数的实现中的,因此不需要链入上述三个系统调用的处理的东东,也不应当,
*       不能链入
*****************************************************************************************/

/* 定义系统调用号 */
const unsigned int VIDEO_PRINT_INVOKE_NUMBER = 0 ;
const unsigned int VIDEO_CLEAR_INVOKE_NUMBER = 1 ;

/* 保存系统真实光标位置所在 */
static unsigned int cursor_x_pos = 0 ;
static unsigned int cursor_y_pos = 0 ;

/* 系统调用类初始化 */
void class_pyos_SystemInvoke::Init()
{
  /* 生成设置打印的系统调用门 */
  struct_pyos_InvokeGate gate ;
  gate.Offset_0_15 = ( unsigned int )pyos_asm_invoke_video_print ;
  gate.DPL = 0 ;
  gate.DT_0 = 0 ;
  gate.P = 1 ;
  gate.Saved_0 = 0 ;
  gate.SegSelector = 0x8 ; /* 代码段 */
  gate.Type_1100 = 0xC ;
  gate.Offset_16_31 = ( unsigned int )pyos_asm_invoke_video_print >> 16 ;

  class_pyos_System::m_gdt.InvokeGate[ VIDEO_PRINT_INVOKE_NUMBER ] = gate ;

  /* 生成清屏的系统调用门 */
  gate.Offset_0_15 = ( unsigned int )pyos_asm_invoke_video_clear ;
  gate.Offset_16_31 = ( unsigned int )pyos_asm_invoke_video_clear >> 16 ;

  class_pyos_System::m_gdt.InvokeGate[ VIDEO_CLEAR_INVOKE_NUMBER ] = gate ;
}

/* 真实的系统调用接口函数,此函数由调用门调用,而此函数调用真正的系统函数来处理系统调用 */
extern "C" void pyos_true_invoke_video_print( unsigned int x_pos , unsigned int y_pos , char ch , char color )
{
  class_pyos_SystemLib_Video::Print( x_pos , y_pos , ch , color ) ;  
}

extern "C" void pyos_true_invoke_video_clear()
{
  class_pyos_SystemLib_Video::Clear() ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -