2012-08-25 121 views
0

在进程执行过程中,fork()ids被调用,一个新的进程具有单独的内存空间但存储内容相同。因此,由于它们是不同的进程,它们将具有不同的进程描述块,因此它们将根据调度算法给出的机会执行(PCB将保存它们的程序计数器值)。执行多个线程

但是当一个进程在执行另一个线程时,线程共享它的地址空间。 我的问题是关于这个线程的执行: - 线程是否给出了具有不同程序计数器的值的单独PCB以及线程接下来将执行的调度算法调度。 如果是,然后线程在分配给它的函数完成执行后如何停止执行。 这是因为该函数是子线程堆栈中的唯一一个,当它返回时没有其他函数要去?

回答

1

通常,调度程序/调度程序处理线程。线程是具有执行和线程控制块(或任何操作系统上调用的任何操作系统)的系统对象,它们将拥有自己的堆栈,注册保存(特别是堆栈指针,即PC在中断时被推入的位置),线程优先级,其他线程特定的数据以及它所属进程的PCB指针。 PCB具有内存管理数据,访问控制数据,权限等。特定于进程的数据。除了每个进程必须拥有至少一个线程(通常,但不是唯一的,在创建进程时由加载程序引发的线程)之外,进程没有任何执行。

如果线程代码通过从创建时使用的顶级函数返回而退出(绝不是线程被终止的最常见方式),它会弹出放置的返回地址在创建时在其堆栈上创建一个'TerminateThread'(或其他)系统调用,导致它自杀。

显然,一个'典型'操作系统的非常广泛的概述。细节取决于操作系统(实际上,随版本的变化而变化)。