hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

天天3分钟操作系统修炼秘笈(9):栈空间之用户栈和内核栈

2019-11-18杂谈搜奇网34°c
A+ A-

点我检察秘笈连载

栈空间:用户栈和内核栈

顺序的实行流程

历程实在都是在实行使命,而使命实在就是函数定义的(函数也称为要领、子顺序等,实质都一样),所以历程的作用就是不停的实行函数。顺序启动时,第一个要实行的函数是main()函数(有些言语隐蔽了这个函数,但任何顺序肯定会有一个顺序进口函数),然后在main()函数中挪用别的函数,每当挪用别的函数时,都邑先举行函数跳转,转而让历程去实行被挪用的函数,当被调函数实行完成后又回到挪用函数的位置继承向下运转。

顺序实行的基础流程如下图所示。右侧是顺序的伪代码,左侧是顺序运转历程。起首历程跳转到main函数处最先实行,然后实行一个赋值语句a=1,继承往下发现是挪用一个函数func1(),因而跳转到func1(),同时还会保留好main中是从这个位置(假定称为位置1)处跳转的,以便实行完func1()后可以跳回到main()。然后最先实行func1()中的代码,在CPU实行func1()实行的时刻,main()函数就没法继承向下实行了,它必需守候func1()实行完成后的返回,当func1()实行完后依据跳回到位置1,因而main函数继承向下实行,也就是赋值语句x=2,然后又以一样的流程挪用func2()函数并返回,终究main()函数实行完成,历程停止,顺序退出。

用户栈和内核栈

用户栈

每当历程挪用一次函数,都邑在用户栈中为该函数分派一个栈帧(stack frame),也称为挪用栈(call stack),当该函数返回时又会开释该栈帧。开释的栈帧不会从虚拟内存中移除,它可以被以后挪用的函数从新运用,所以栈空间的大小是不会减小的。

依据这个特征并连系上图所形貌的顺序实行历程,可以推断出一个主要的结论。因为函数内部挪用函数时,外部函数的栈帧不会开释,只要内部函数悉数退出了才会继承实行外部函数并在实行完成的时刻开释外部函数的栈帧,所以,递归函数(即函数内部挪用函数本身)假如递归挪用的条理太多(比方无穷递归),会分派大批的栈帧,而且不会开释,直到栈空间不足,没法再分派新的栈帧,这时候会报栈溢出(stack overflows)毛病。所以,必须要合理编写递归函数,使得递归函数可以在到达某些前提时返回,从而开释栈帧,防止无穷递归。

栈帧中保留了传递给该函数的参数、该函数中定义的局部变量、函数的返回值、挪用该函数的顺序计数器副本,以及一些别的主要信息。这里有必要诠释下栈帧中的顺序计数器副本。

什么是顺序计数器(Program Counter,PC)?这是CPU中的一个寄放器,在这个寄放器中保留了下一个要实行指令的指针。所以,CPU每实行一个指令的时刻,就会设置这个寄放器使它指向下一个指令。

前面形貌顺序实行流程的时刻说过,当main()函数挪用func1()函数的时刻,须要保留main()函数中挪用func1()的位置,以便func1()返回时可以跳转回main()函数继承向下实行。实在,main()函数在最先挪用func1()函数的时刻,PC寄放器就已指向了这个指令,CPU可以将这个指令的指针的值(也就是PC的副本)保留在func1()函数的栈帧中,如许func1()实行完成后就能将这个指针从新放回到CPU的PC寄放器中,使得CPU从新回到main()函数挪用func1()的位置处,从而挪用者main可以获得函数func1()栈帧中的返回值(这时候刻func1()的栈帧被开释),并继承实行下面的代码。

内核栈

操作系统还为每一个历程保护另一个栈:内核栈。这个栈的位置在内核的内存区域中,只要内核可以接见,用户历程没法接见。

内核栈的作用是寄存上下文切换时的历程信息。

当历程A要切换到历程B时,起首要堕入内核,然后内核将CPU中关于历程A的历程信息(即某些寄放器中的值)保留在历程A的内核栈中,然后从历程B的内核栈中恢复历程B的信息到CPU的某些寄放器中,再退出内核形式回到历程B,如许CPU就最先实行历程B了。

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
天天3分钟操作系统修炼秘笈(9):栈空间之用户栈和内核栈

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/281988.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>