写自己的第一个进程有感

[仅供自己参考]

1 第一个进程的书写思路:

  • 前提:申请好相应gdt,idt,tss的内存(可用C写),并进行必要的初始化
  • 申请好proc_table的内存,proc_table包涵了stack_frame(进程切换时候用于存放cpu状态的地方)和ldt表(这个进程对应的ldt)和 ldt_sel(GDT表中的selector)。
  • proc_table进行必要的初始化(这个进程第一次运行之前当然得初始化我们希望进程开始时候的cpu状态
  • 调入一个叫restart的函数,它做得主要工作是:将此进程的ldt赋值为p_proc_ready的ldt_sel.将tss中的esp赋值为自己的proc_table中stack_frame的栈顶,以此让发生中断时候cpu知道在proc_table中保存当前进程的信息。
  • 将当前进程的寄存器pop出来,利用iretd返回我们希望执行的进程地址开始执行

2 中断:

在这过程中较复制的就是中断,这里总结几点如下:

  • 在进入中断处理程序后,默认是关中断的
  • 只有显式的sti,hlt才确定是有效的可以接收中断(估计操作系统在idle的时候也是使用这个hlt来节约能量的吧)。
  • keyboard中断,现阶段只能一次有效,因为还没有学操作系统IO,猜想应该清IO的buffer才能继续发出中断
  • 在收到中断后,要向8259A发回EOI,8259A才能继续接收中断。
posted @ 2011-09-06 22:13  Jack204  阅读(420)  评论(0编辑  收藏  举报