(备战招聘)操作系统之进程与线程的关系与区别
博主最近在加强一些基础知识的学习,今天来讲讲进程与线程之间的区别与联系,尽量做到通俗易懂
首先我们看上面的一张图,当一个计算机程序运行的时候,每个程序可以有一到多个进程,而每个进程里面又可以包含一个到多个线程,一个程序至少有一个进程和一个线程,那么进程与线程到底是什么呢?
首先,进程(Process)从官方角度来讲,就是一个应用程序的一次运行活动,从操作系统的角度,进程是资源分配的基本单位,同时又是调度运行的基本单位,举例说明,用户运行一个程序,那么系统会创建至少一个进程,并为其分配资源(内存空间、磁盘空间、I/O设备)然后将其放入进程的就绪队列,当进程调度程序选中该进程时,为其分配CPU计算和其他资源,该进程才开始真正运行。
如上图所示,为一个进程所包含的信息,它包括多个进程,逻辑内存(32位或者64位操作系统,其理论上的寻址空间分别为4G和64TB),不同进程间的内存是独立的,不然例如 你通过操作指针,从一个进程中跑到了另一个进程的地址中去查看资源(万一这个地址是你的支付宝银行软件的进程),那就导致了重要信息泄露了。文件网络资源是所有进程共享的,所有进程都可以打开同一个文件,或者去争夺同一个端口。
好,讲完了进程,我们再讲讲线程,线程是进程中执行运算的最小单位,也是CPU调度处理的基本单位,如下图所示为一个线程所包含的内容
一个线程包括调用堆栈,PC(Program Counter)程序计数器、
主线程的入口main函数会不断进行函数调用,每次调用都会把参数和返回地址压到栈里面去。PC中放入的是当前或者下一条指令执行的地址,而该指令实际放在内存里面(计算机数据和程序同时存储在同一片内存里)。
TLS(Thread Local storage)线程本地存储,可以存放线程一些独有的数据。
由上面的概念,我们可以得知,操作系统真正运行的都是线程,进程只是相当于一个容器。
总结:
1、一个程序最少一个进程和一个线程
2、一个进程最少包括一个线程
3、进程之间内存独立,进程间的交互常用办法TCP/IP端口
4、同一个进程内的多个线程可以共享该进程的所有资源,同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量
5、进程拥有自己独立的地址空间,而线程没有