写自己的第一个进程有感

[仅供自己参考]

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才能继续接收中断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值