首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于操作系统TCB的几点澄清

关于操作系统TCB的几点澄清
EN

Stack Overflow用户
提问于 2013-04-17 21:00:28
回答 1查看 306关注 0票数 0

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

我正在为TCB创建一个结构。根据我的课堂讲稿,我的TCB中可以有:

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

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

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

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

请帮帮忙。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-04-17 22:01:26

OS可通过监视来自位于地址空间的堆栈部分周围的不可访问页面的页面故障来控制堆栈增长。这有助于检测少量的堆栈溢出。

但是,如果您将堆栈指针移到地址空间的堆栈区域之外并使用它来访问内存,您可能会进入全局变量,或者进入堆、代码或其他线程的堆栈,并破坏那里的任何东西。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16060760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档