+ -
当前位置:首页 → 问答吧 → 关于“进程上下文”的理解 不知道对不对

关于“进程上下文”的理解 不知道对不对

时间:2011-08-21

来源:互联网

Linux, 进程上下文, kernel
鄙人初探linux kernel,在阅读LKD时,对进程上下文这个概念不是十分明白:

我认为一个进程的上下文分三种情况:

1)只位于user space,如:

  #include <string>
  int main()
  {
  return 0;
  }

  没有调用任何system call,不会进入kernel space,因此只会运行于user space,所以这个应用程序对应的进程的进程上下文就不妨理解为整个user space。

2)只位于kernel space,如操作系统本身就是运行于kernel的,所以向进程调度进程的进程上下文就不妨理解为整个kernel space。

3)横跨user space和kernel space,如:
   
  int main()
  {
  fork();
  ...
  }

  调用了system call fork,会从user space进入kernel space,因此这个应用程序对应的进程的进程上下文就理解为整个内存空间。

  不知道这样理解对不对。 谢谢指点。 

作者: yujixi123   发布时间: 2011-08-21

第一个应该不会吧,楼主那个main是你程序的入口函数,但是程序并不是从main开始的,肯定会被系统调用,有一个kenel到User的转换,就是程序退出时也要调用内核函数,内核对你的进程信息进行处理
第二个我不知道对不对,感觉也是这样的
第三个一样同感

作者: hnwyllmm   发布时间: 2011-08-21

上下文就是cpu在执行时的一系列状态,比如current,进程结构体,需要的内存页等等。每个进程都以一分独立的的。
当A进程被执行时cpu根据他的上下文进行处理,如果没有处理完就需要切换,那他的上下文被保存,cpu转而去执行B进程的上下文。
先抛开写时拷贝不论,fork后进程A的整个上下文会被复制一份,A和A+两个进程独立,上下文也独立,cpu此时就可以在两个进程间切换,调度执行了。这是我的理解

作者: yiyaaixuexi   发布时间: 2011-08-21

谢谢你的解答 不过有一个疑问:
"如果没有处理完就需要切换,那他的上下文被保存" 请问那些信息,如当前寄存器的值等,保存在哪里?内核栈? 谢谢
引用 2 楼 yiyaaixuexi 的回复:
上下文就是cpu在执行时的一系列状态,比如current,进程结构体,需要的内存页等等。每个进程都以一分独立的的。
当A进程被执行时cpu根据他的上下文进行处理,如果没有处理完就需要切换,那他的上下文被保存,cpu转而去执行B进程的上下文。
先抛开写时拷贝不论,fork后进程A的整个上下文会被复制一份,A和A+两个进程独立,上下文也独立,cpu此时就可以在两个进程间切换,调度执行了。这是我的理……

作者: yujixi123   发布时间: 2011-08-21

热门下载

更多