亲宝软件园·资讯

展开

操作系统-核心级线程实现

山丘i 人气:0
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200310204410311-1736236021.png) ### 1. 从某个中断开始 ![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200310204423077-825203289.png) **INT 0X80中断,进入内核 ,调用函数就是system_call**,接下来就是执行system_call ### 2. 五段论中的中断入口和中断出口以及schedule 1. 首先又压栈一些用户态的信息, 2. 接下来就是具体去处理sys_fork,也就是中断要产生的效果,但是在执行sys_fork的时候可能引起切换, 3. 接下来就是看当前PCB中的state是否等于0,如果不是那么就要进行调度,就是靠schedule,完成五端论中的中间三步 4. 看它的时间片是否等于0,时间片用光了也要进行调度 5. 最后就是执行中断返回的函数ret_from_sys_call,iret也就是从内核栈到用户栈的切换 6. 下图,在ret_from_sys_call中,首先popl一些信息,就是和压栈的信息对应,然后就是iret ![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200310204455102-1302015864.png) ![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200310204512959-1206572582.png) **关于schedule** 1. 调度的话首先要找下一个线程,这个在后面讲调度的时候详细说 2. switch_to里面完成切换 3. 把当前cpu中的所有指令放在当前TR指向的段中,也就是把当前执行的信息拍下来放到原tss中, 4. 开始执行长跳转指令, 5. 把TSS(n)指给TR,也就是把新tss里的信息扣到cpu上 ![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200310204526906-930371439.png) **关键三步骤:** 1. INT中断 进入内核 2. schedule的里的switch_to里的ljmp完成切换 3. ret_from_sys_call里的iret中断出口 ### 3. ThreadCreate tss是寄存器,TCB(线程控制块) 创建一个线程就是做出能切换的样子,核心就是上面切换时用到的tss 首先要有TCB,然后是内核栈,把tss做好就行了 copy_process函数在进程创建的fork函数中调用,主要完成进程数据结构,各种资源的初始化。初始化方式可以重新分配,也可以共享父进程资源,主要根据传入CLONE参数来确定。 ![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200310205314015-1257468436.png) 1. 申请内存空间,注意这是在内核中,用get_free_page(),而不是malloc ![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200310205323133-1693700695.png) ![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200310205326810-409486499.png) ### 4. 如何执行我们想要的代码? 从exec这个系统调用开始 exec函数提供了一个在进程中启动另一个程序执行的方法 ![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200310205340567-1927277090.png) ![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200310205346165-221009330.png) ![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200310205350087-891439339.png) ### 5. 总结 ![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200310205421778-32583363.png)

加载全部内容

相关教程
猜你喜欢
用户评论