0

我是一名计算机本科生,正在学习操作系统课程。对于我的任务,我需要实现一个简单的线程管理系统。

我正在为 TCB 创建一个结构。根据我的讲义,我可以在 TCB 中拥有的是:

寄存器、程序计数器、堆栈指针、线程 ID 和进程 ID

现在根据我的讲义,每个线程都应该有自己的堆栈。我的问题是这样的:

仅仅通过存储堆栈指针,我可以为每个线程保留一个唯一的堆栈吗?如果我这样做了,一个线程堆栈不会覆盖其他堆栈吗?

我怎样才能防止这种情况?限制每个线程的堆栈???请告诉我这通常在正常操作系统中是如何完成的。

请帮忙。提前致谢。

4

1 回答 1

0

操作系统可以通过监视位于地址空间堆栈部分周围的不可访问页面的页面错误来控制堆栈增长。这有助于检测少量堆栈溢出。

但是,如果您将堆栈指针移出地址空间的堆栈区域并使用它来访问内存,您可能会进入全局变量或堆或代码或另一个线程的堆栈并破坏那里的任何内容。

线程在相同的地址空间中运行是有原因的,以便以最小的开销在彼此之间共享代码和数据,并且它们的堆栈通常不会被共享,被访问。

操作系统通常无法做任何事情来防止程序发生堆栈溢出和损坏并帮助它们从中恢复。操作系统根本不知道也不知道任意程序是如何工作的以及它应该做什么,因此它不知道什么时候开始出错以及如何处理它们。操作系统唯一能做的就是终止一个做错事的程序,比如试图访问不可访问的资源(内存、系统寄存器等)或执行无效或不可访问的指令。

于 2013-04-17T14:01:26.157 回答