linux 0.11 源码一些函数的理解

最近在看linux 0.11 源码,在这里记录一下某些函数的自己的一些理解,其中有*号的地方是还没完全搞懂的,需要后面再去看一下,后续还会继续更新

 

system_call:

   1. 原寄存器入栈保存

   2. 通过sys_call_table取得系统函数地址,跳转到系统调用(返回值存到eax)

   3. 跳转到schedule调度程序 

 

schedule(kernal/sched.h):

    ******1. 对所有任务进行检查,如果alarm过期,则重置为0,并吧可中断睡眠状态的任务置为就绪状态

    2. 在所以就绪状态的任务中选择一个counter值最大的任务,并用switch_to切换到该任务

    3. 如果所有counter都为0, 则重置所有任务的counter为任务的priority,既优先级高的任务获得更大counter,可以优先运行

 

switch_to(linux/include/sched.h): 判断当前进程是否是要切换的进程如果是就不操作,否则执行ljmp  tmp.a,其实是ljmp  tmp.b: tmp.a,tmp.b 已被赋值为TSS选择符,而tmp.a 无用,这是Intel 处理器规定(https://blog.csdn.net/fukai555/article/details/41912735

 

set_system_gate(kernel/sched.c): 设置中断号和函数的关联关系

 

_syscall(include/unistd.h):  进入0x80中断,跳转到系统函数调用,其中函数索引(通过宏定义)放在eax中,返回结果也是放在eax中,该函数在sched_init中设置0x80中断与system_call关联

 

*****copy_process(kernal/fork.c): sys_fork才push了5个参数,而函数有那么多参数,是因为调用system_call 的时候push了一部分参数

 

******get_free_page(mm/mermory.c): 在mem_map中找出mem_map[i]==0的项作为分配空间(https://www.cnblogs.com/lcchuguo/p/5231735.html

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值