操作系统是怎么管理寄存器的?? 400 报错
操作系统肯定要管寄存器的,但是是如何管理的呢?操作系统每开始执行一个程序,都需要保存寄存器数据,然后给程序设置权限,已经设置代码段数据段的基址等等,然后。这个容易实现,但是当程序结束后,如果返回给操作系统呢?也就是如何恢复寄存器数据?
第一个想法是,操作系统执行程序的方式,就是调用程序的入口函数,等到函数返回,操作系统就重新得到了控制权,然后恢复寄存器数据。这话方式应该是可行,但是很容易出错吧?程序赖着不退出了,那就完了。而且也不好实现多任务并行。
第二个想法是,没有第二个想法,为了增加字数才列出来的
还有一个问题是,多任务并行是如果实现的?且不说真正的并行,就说分时,是如何实现的呢?就说说,操作系统是如何让一个程序在规定时间内执行再准确的暂停了?这是如何控制的?也没看到x86处理器有过指定程序执行时间的指令啊,就究竟是如何实现的?。难不成操作系统个个神通广大,法力无边,能在不执行内核指令的情况下操作寄存器?
有没有人能普及一下?
说实话这乱七八糟一堆文字我看了两边,然后发现真救不了你.
寄存器操作是汇编级别的最小操作单元,即使是操作系统也不能够管理寄存器.
是计算机有一些指令,能够自己把所有寄存器保存到一个地方.
######计算机基础如此博大精深,几十年高科技结晶,不是三天三夜就能说清的,更何况几句话###### 简单2个字 压栈.
OS的原理很简单, 你可以找一些嵌入式的OS开源代码进行阅读, 相信读完2个系统的代码后, 就对OS核心部分很清楚了.
挑你的一个问题进行回答: "操作系统是如何让一个程序在规定时间内执行再准确的暂停了?这是如何控制的?"
感觉你还不清楚调度算法的实现.简单的说: 硬件中断将其打断,如果需要1ms的进程调度精度,那么就设置时钟中断为1ms. 你可以看下中断部分的代码.
CPU的PC指针即使软件不去设置它也不是固定不变只能向下跑的. 当中断发生的时候,PC指针会自动修改到相应中断向量的物理地址上,并且中断时的重要寄存器的值被硬件自动保存. 于是我们就设置一个时钟中断向量(将这个地址上写入我们的代码函数的地址), 每18ms PC指针会被自动改到这个地方,在这个地方 我们根据调度算法, 看是继续执行被打断的线程 还是切换到更合适的线程上. 感性上, 线程/cpu 的运行 实际上是非常的不连贯, 中途不断的被各种中断疯狂的打断. 尤其高响应的硬实时OS,打断应该更加频繁. 我们想干任何事情都可以在中断处理中去做. 此外除了硬件中断, 因为硬件功能都是api提供,so程序代码实际上经常会很频繁调用一些系统API, 既然调用了系统api, os也完全可以在系统api执行软中断, 执行调度算法, 把pc指针移到别处去, 不再正常的函数返回了(保存好数据, 下次调度它时,模拟这个函数返回, 应用程序完全不知道发生了什么).
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。