Linux--线程与进程的总结

来源:互联网 发布:c语言为什么叫c语言 编辑:程序博客网 时间:2024/05/30 19:33

什么是进程?

进程:进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
简单点说:进程就是正在执行的程序。就是包换上下文切换的程序执行时间总和 = CPU加载上下文+CPU执行+CPU保存上下文。

进程的所有信息被放到进程控制块中(PCB),并由它维护管理相关信息。
在Linux中,这叫做task_struct。
task_struct是Linux内核的一种数据结构,它会被装载到RAM里并且包含着进程的信息。
每个进程都把它的信息放在 task_struct 这个数据结构里。可以在include/linux/sched.h 里找到它。

task_struct 包含了这些内容:
标示符 : 描述本进程的唯一标.示符,用来区别其他进程。
状态 :任务状态,退出代码,退出信号等。
优先级 :相对于其他进程的优先级。
程序计数器:程序中即将被执行的下一条指令的地址。
内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下文数据:进程执行时处理器的寄存器中的数据。
I/O状态信息:包括显.示的I/O请求,分配给进程的I/O设备和被进程使.用的文件列表。
记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。

什么叫线程?

线程(tcb),有时被称为轻量级进程,是程序执行流的最小单元。
线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。
每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。

线程是在进程地址空间内运行的,强调的是资源共享。(多个线程共享一份地址空间)。

在Linux下并无真正的的线程,是用进程来模拟线程的

一个地址空间内部多个线程共享一下资源和环境:
1.文件描述符表
2.每种信号的处理方式
3.当前工作环境
4.用户id与组id
但是有些资源是每个线程各有一份的
1.线程id
2.上下文,包括各种寄存器的值,程序计数器和指针。
3.栈空间
4.信号屏蔽字
5.优先调度级

进程与线程的区别?

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。

1.是否会相互影响:进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响。而线程只是一个进程中的不同执行路径。

2.健壮性:线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮。

3.效率:进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。并且进程在执行过程中拥有独立的内存单元,而多个线程又共享内存,从而极大地提高了程序的运行效率。

4.一个程序至少有一个进程,一个进程至少有一个线程.

5.进程是分配资源的基本单位,线程是调度资源的基本单位。