操作系统中的线程实现
简介
在传统的操作系统中,进程拥有独立的内存地址空间和一个用于控制的线程,但是,现在的情况更多的是要求在同一地址空间下拥有多个线程并发执行,因此线程被引入操作系统。
为什么需要进程?
如果非要说是为什么需要线程,还不如说为什么需要进程中还有其他进程。这些进程中包含了的其他的其他迷你进程就是线程 线程之所以是迷你进程是因为线程和进程有很多相似之处,比如线程和进程的状态都有运行状态,就绪,阻塞状态。这几种状态理解起来非常简单当进程所需的资源没有到位时会是阻塞状态,当进程所需的资源到位时但CPU没有到位时就绪状态。当进程所需的资源到位又有CPU时就为运行状态。
线程的好处
1.在很多程序中,需要多个线程互相同步火互斥的并行完成工作而将这些工作分解到不同的线程中去无疑简化了编程模型。 2.因为线程相比进程来说,更加的轻量,所以线程的创建和销毁的代价变得更小。 3.线程提高了性能,虽然线程宏观上并行的,但微观却是串行。从CPU角度线程并无法提升性能,但如果某些线程涉及到等待资源(比如IO,等待输入)时,多线程允许进程中的其他线程继续执行而不是整个进程被阻塞,因此提高了CPU的利用率从这个角度会提升性能。 4.在多CPU或多喝的情况下,使用线程不仅仅在宏观上并行,在微观上也是并行的。注意:进程有自己独立的内存地址空间,而线程共享进程的内存地址空间。
经典线程模型
线程是每一个进程中执行的一个条线。线程虽然共享进程中饭的大多数资源,但线程也需要自己的一些资源,比如:用于表示下一条执行指令的程序计数器,以及用于表示执行的历史的zhan 进程是组织资源得最小单位,而线程是安排CPU执行的最小单位。 其实在一个进程中多个线程并行和在操作系统中多个进程并行非常类似,只是线程共享的是地址空间,而进程共享的是物理内存,打印机,键盘等资源....
每个进程个线程所独占有的资源如表
进程占有的资源 线程占有的资源地址空间 栈全局变量 寄存器打开的文件 状态子进程 程序计数器 信号量账户信息
操作系统实现线程的几种模式
在操作系统中,线程可以实现在用户模式下,也可以实现在内核模式下,也可以两者两结合。
线程实现在用户空间下
当线程在用户控件下实现时,操作系统对线程的存在一无所知,操作系统只能看到进程,而不能看到线程。所有的线程都是在用户空间实现。在操作系统看来,每一个进程只有一个进程。过去的操作系统大部分是这种非实现方式,这种实现方式的好处之一就是即使操作系统不支持线程,也可与通过库函数来支持线程。 在这种模式下,每一个进程中都维护着一个县城表来追踪本线程中的线程,这个表中含有表中每个线程独占的资源,比如栈寄存器状态
一对一模型
每条用户线程交由唯一对应的系统线程进行调度,在这种设计下创建线程系统进程的代价是相同的。
多对一模型
多条用户线程交有一条系统线程进行调度,这个系统线程也是唯一一条