打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
linux学习之进程篇1
linux学习之进程篇1

今天学习了看了下赵博那本书进程的一部分,搞懂了些东西,现总结如下:

1.进程的时间片
    进程的时间片是由8053的时钟中断实现的,在内核初始化时将8053工作频率设置为100Hz,也就是说每隔10毫秒就发生一次时钟中断,然后由相应的时钟中断程序来实现,这个时钟中断程序名为_timer_interrupt(system_call.s),具体的实现函数是do_timer(),这个C函数在最后执行了sched.c中的schedule()函数。也就是说,每隔10ms执行一次任务切换函数。

2.fork()的实现
    看完这个函数,刚才的程序问题也解决了。只可能打印一个This is header!而且是在父进程中实现的。当父进程执行到
fork()创建子进程时,父进程从fork()的下一条语句执行下去。子进程从fork()执行下去。父进程中的fork返回子进程ID,子进程中的fork返回0。
    fork()是linux的系统调用。
    执行流程如下:
    fork()        //定义在unistd.h
    ->sys_fork()  //sys.h    
    ->system_call0(int,fork) //定义在main.c
    ->_system_call   //system.s
    ->find_empty_process(),copy_process() //fork.c
    
    system_call0其中执行int $0x80,此语句将父进程的cs,eip入栈(这个不理解要去看汇编的int指令执行过程),后面它创建的子进程也是用的这个,这个就是为什么子进程也从fork执行了。_system_call是int $0x80的中断处理函数,这个是在sched_init()中的定义的。_system_call只执行两个函数find_empty_process(),copy_process()。第一个函数在task数组中查找一个空白项。找到后返回数组下标,也就是传说中的PID了。copy_process将这个空白任务数组分配内存,然后将父进程的cs,ip等进程上下文完全复制给它。再把这个新任务的状态设置为就绪态。最后返回这个PID。
这个就是创建进程的执行过程。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
linux中system和exec函数的区别
linux system函数使用详解
linux系统下,c 程序,调用system命令失败,分析过程
【C/C++】Linux下system()函数引发的错误
fork()创建新进程
Linux系统时间设置(附ARM)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服