kernel/global.c

本文详细介绍了操作系统内核中全局变量的定义与用途,包括GDTR、IDTR、TSS等关键数据结构及其对应的指针变量,展示了进程控制块(PCB)、进程堆栈空间的分配情况,并列举了系统调用处理函数表及外中断处理程序表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Code:
  1. /*  
  2.     By Marcus Xing  
  3.     kernel/global.c  
  4.     全局变量的分配  
  5. */  
  6.   
  7. #include "type.h"   
  8. #include "const.h"   
  9. #include "ipc.h"   
  10. #include "protect.h"   
  11. #include "console.h"   
  12. #include "tty.h"   
  13. #include "proc.h"   
  14. #include "proto.h"   
  15.   
  16. u8          GDT_Ptr[6];             /* GDTR的6字节填充值 */  
  17. Descriptor  GDT[GDT_SIZE];          /* GDT的结构数组,有GDT_SIZE个Descriptor */  
  18. u8          IDT_Ptr[6];             /* IDTR的6字节填充值 */  
  19. Gate        IDT[IDT_SIZE];          /* IDT的结构数组,有IDT_SIZE个Gate */  
  20. u32         d_Disp_Pos  = 0;        /* 显示位置 */  
  21. TSS         tss;                    /* TSS,低特权级的段跳转到高特权级的段使用 */  
  22. PCB         PCB_Table[MAX_PROC];    /* PCB表 */  
  23. PCB*        p_Next_PCB;             /* 指向下一个运行的进程的PCB */  
  24. int         d_Flag_Reenter;         /* 判断是否中断重入 */  
  25. u32         d_Cur_Proc_Num;         /* 当前进程的个数 */  
  26.   
  27. /* 各个进程的堆栈空间 */  
  28. u8          All_Proc_Stack_Space[ALL_PROC_STACK_SPACE];   
  29.   
  30. /* 进程的与众不同的部分的表 */  
  31. Proc_Unique Proc_Unique_Table[MAX_PROC] =    
  32. {                                   /   
  33.     {(u32)Proc_A,STACK_A,"PROC A"}, /   
  34.     {(u32)Proc_B,STACK_B,"PROC B"}, /   
  35.     {(u32)Proc_C,STACK_C,"PROC_C"}, /   
  36.     {(u32)Proc_TTY,STACK_PROC_TTY,"PROC_TTY"}, /   
  37.     {(u32)Proc_Send_Receive,STACK_PROC_SR,"PROC_SR"} /   
  38. };   
  39. /* 记录是否是系统进程的表 */                                                                                      
  40. int Is_System_Proc[MAX_PROC] = {0,0,0,1,1};    
  41.   
  42. /* 外中断处理程序的表,共16个 */  
  43. IRQ_Handler IRQ_Handler_Table[IRQ_NUM];   
  44.   
  45. /* 系统调用处理函数表,共3个 */  
  46. System_Call_Handler System_Call_Handler_Table[SYSTEM_CALL_HANDLER_NUM] =    
  47. {                                 /   
  48.     (u32)Prepare_To_Real_Mode,    /   
  49.     (u32)System_Call_Write,       /   
  50.     (u32)System_Call_Send_Receive /   
  51. };         
  52.   
  53. /* Ticks,每发生一次时钟中断,自增1,无论是否重入 */  
  54. int d_Ticks = 0;   
  55.   
  56. /* TTY表 */  
  57. TTY TTY_Table[TTY_NUM];   
  58.        
  59. /* Console表 */  
  60. Console Console_Table[TTY_NUM];   
  61.   
  62. int Current_Console;            /* 当前的控制台 */  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值