关于C语言的程序的运行机制的问题?

qiao2020 2012-03-12 09:55:46
正常情况下,应用程序首先将程序镜像放入内存。

运行的时候,尤其是多线程程序运行的时候,系统是如何知道寄存器是哪一个程序的值。?
是不是有一个空间,专门存放程序当前状态时所有寄存器的值?
对于多线程或者说有进程的调度,而不是简单的单线程。每个进程可以独立开来,同时运行,那么是CPU还是OS做到的?

缓冲区又是怎么回事?

也就是说,我还不能理清 程序内部运行的具体过程。
我表示我是小白,希望有大神从头理一理,或者推荐可能的读物。。。



我看过的部分资料。。
http://wenku.baidu.com/view/ac658cc758f5f61fb736668a.html
http://zhidao.baidu.com/question/352922195.html
...全文
172 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dlut414 2012-08-16
  • 打赏
  • 举报
回复
都是操作系统负责分配的吧
malon 2012-08-03
  • 打赏
  • 举报
回复
这个完全是有操作系统来完成的,操作系统就是连接硬件和用户的桥梁,内部的调度和分配都有操作系统实现!
liubingqian 2012-05-11
  • 打赏
  • 举报
回复
看看操作系统的内容吧。这是操作系统切换的。
石头翔子 2012-05-11
  • 打赏
  • 举报
回复
Lactoferrin说得对
线程创建时,会创建一个栈,就是一块内存,这个内存存储两部分内容,一是函数调用时传参,二是线程切换时,保存所有(有几个不保存)寄存器的值。
线程切换时,会先将所有寄存器的值保存到当前线程的栈中,然后从目标线程的栈中取数据存到寄存器。再然后,线程切换就完成了。

线程切换,都是OS做的,不是CPU做的。在你探讨这个问题的时候,把双核、四核CPU忘记吧。
逻辑上,软件实现了多线程,而实际硬件上,CPU只负责从PC取指令,并按指令操作,它那没有多线程的概念。
W170532934 2012-05-10
  • 打赏
  • 举报
回复
我也是来学习的。我也分的不是太清楚。
godwind1123 2012-05-10
  • 打赏
  • 举报
回复
我不是大神,但你说的问题我接触过,稍微说点,正确与否有待考证。
在物理上单个的CPU 不可能实现真正的多线程并发,只不过是高速的轮转模拟的并发。那么必然就有一个线程切换的过程。你说的那个空间也必然存在。“上下文”指得就是线程切换时寄存器中的值。无论线程是轮转还是优先级抢占,都会先保存其线程的“上下文”
Lactoferrin 2012-05-10
  • 打赏
  • 举报
回复
每个任务会保留一块地方,每次任务切换时把当前任务的各个寄存器值保存在那里,调度此任务时恢复
调度肯定需要操作系统支持,但cpu也可以提供帮助,不然效果不好,抢占式的还需要一个时钟中断
赵4老师 2012-05-10
  • 打赏
  • 举报
回复
参考Linux内核源代码

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧