线程有自己独立的地址空间么

一个老师说线程没有自己独立的地址空间,对么?
全部评论
我觉得楼上都没回答到点子上,都是按照书上说的,实际自己可以看linux内核源码
4 回复 分享
发布于 2018-04-15 10:23
(搬运工) 线程的基本概念 引入进程的目的,是为了使多道程序并发执行,以提高资源利用率和系统吞吐量;而引入线程,则是为了减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能。 线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。 引入线程后,进程的内涵发生了改变,进程只作为除CPU以外系统资源的分配单元,线程则作为处理机的分配单元。 线程与进程的比较 1) 调度。在传统的操作系统中,拥有资源和独立调度的基本单位都是进程。在引入线程的操作系统中,线程是独立调度的基本单位,进程是资源拥有的基本单位。在同一进程中,线程的切换不会引起进程切换。在不同进程中进行线程切换,如从一个进程内的线程切换到另一个进程中的线程时,会引起进程切换。 2) 拥有资源。不论是传统操作系统还是设有线程的操作系统,进程都是拥有资源的基本单位,而线程不拥有系统资源(也有一点必不可少的资源),但线程可以访问其隶属进程的系统资源。 3) 并发性。在引入线程的操作系统中,不仅进程之间可以并发执行,而且多个线程之间也可以并发执行,从而使操作系统具有更好的并发性,提高了系统的吞吐量。 4) 系统开销。由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、 I/O设备等,因此操作系统所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程CPU环境的保存及新调度到进程CPU环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销很小。此外,由于同一进程内的多个线程共享进程的地址空间,因此,这些线程之间的同步与通信非常容易实现,甚至无需操作系统的干预。 5) 地址空间和其他资源(如打开的文件):进程的地址空间之间互相独立,同一进程的各线程间共享进程的资源,某进程内的线程对于其他进程不可见。 6) 通信方面:进程间通信(IPC)需要进程同步和互斥手段的辅助,以保证数据的一致性,而线程间可以直接读/写进程数据段(如全局变量)来进行通信。 线程的属性 在多线程操作系统中,把线程作为独立运行(或调度)的基本单位,此时的进程,已不再是一个基本的可执行实体。但进程仍具有与执行相关的状态,所谓进程处于“执行”状态,实际上是指该进程中某线程正在执行。线程的主要属性如下: 线程是一个轻型实体,它不拥有系统资源,但每个线程都应有一个唯一的标识符和一个线程控制块,线程控制块记录了线程执行的寄存器和栈等现场状态。 不同的线程可以执行相同的程序,即同一个服务程序被不同的用户调用时,操作系统为它们创建成不同的线程。 同一进程中的各个线程共享该进程所拥有的资源。 线程是处理机的独立调度单位,多个线程是可以并发执行的。在单CPU的计算机系统中,各线程可交替地占用CPU;在多CPU的计算机系统中,各线程可同时占用不同的CPU,若各个CPU同时为一个进程内的各线程服务则可缩短进程的处理时间。 —个线程被创建后便开始了它的生命周期,直至终止,线程在生命周期内会经历阻塞态、就绪态和运行态等各种状态变化。
4 回复 分享
发布于 2018-04-15 09:08
线程栈,进程地址空间
3 回复 分享
发布于 2018-04-14 22:08
线程拥有所属进程的地址空间
3 回复 分享
发布于 2018-04-14 22:07
线程不拥有系统资源
2 回复 分享
发布于 2018-04-14 22:06
线程是调度执行的最小单位,进程是资源分配的最小单位(如虚拟内存资源)
点赞 回复 分享
发布于 2018-04-14 22:27
地址空间就是内存空间吧,进程有被分配内存空间,同一个进程下的线程共享这些内存,进程是分配资源,线程是执行命令
点赞 回复 分享
发布于 2018-04-14 22:13
地址空间都是按进程分配的,但在地址空间里有专属于线程的线程栈
点赞 回复 分享
发布于 2018-04-14 22:10
对的,一个很简单的现象可以证明:多线程环境下一个线程崩了,其他线程跟着崩;多进程环境下,一个进程崩了,其他进程没影响
6 回复 分享
发布于 2018-04-15 10:33
翻一下csapp或者qupe很难吗
点赞 回复 分享
发布于 2020-05-24 14:04
没有,地址空间指的是独立的逻辑空间映射吧
点赞 回复 分享
发布于 2018-04-17 12:06
进程由一个task_struct结构体表示,其中有一个字段指向内存管理结构体,内存管理结构体包含了页表基址寄存器的值、指向段内存链表的头指针。一个进程通过这些字段控制地址映射信息和段的大小。
点赞 回复 分享
发布于 2018-04-15 01:16
共享
点赞 回复 分享
发布于 2018-04-15 00:12
线程有自己的栈、寄存器值,硬要说有自己的地址空间只能认为是这些数据占的空间。
点赞 回复 分享
发布于 2018-04-14 23:38

相关推荐

孙艹肘:校招不给三方直接让实习我都去了,,主打一个在学校呆着也是闲着,不如出来实习一下
点赞 评论 收藏
分享
评论
4
10
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务