进程与线程

本文深入探讨了进程和线程的概念,进程作为资源分配的基本单位,线程则是执行调度的最小单元。阐述了它们在内存、栈、程序计数器和线程局部存储方面的差异,并介绍了线程间的通信以及缓冲区溢出的安全问题。同时,强调了进程与线程在内存独立性和执行效率上的权衡。
摘要由CSDN通过智能技术生成

进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。

线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。


进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。
线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程——程序执行的最小单位。


进程(线程+内存+文件/网络句柄)

进程内的空间是逻辑内存,是内存的寻址空间,每个进程的内存是相互独立的。


线程(栈+PC+TLS)
栈:
通常都是说调用堆栈,其实这里的堆是没有含义的,调用堆栈就是调用栈的意思。从主线程的入口main函数,会不断的进行函数调用, 每次调用的时候,会把所有的参数和返回地址压入到栈中。


PC:
PC,即程序计数器。操作系统真正运行的是一个个的线程, 而进程只是它的一个容器。PC就是指向当前的指令,而这个指令是放在内存中。 每个线程都有一串自己的指针,去指向自己当前所在内存的指针。 计算机绝大部分是存储程序性的,就是指数据和程序是存储在同一片内存里的,这个内存中既有数据变量又有程序。所以PC指针就是指向内存的。

缓冲区溢出:
例如我们经常听到一个漏洞:缓冲区溢出 这是什么意思呢? 例如:我们有个地方要输入用户名,本来是用来存数据的地方。 然后黑客把数据输入的特别长。这个长度超出了我们给数据存储的内存区,这时候跑到了 我们给程序分配的一部分内存中。黑客就可以通过这种办法将他所要运行的代码 写入到用户名框中,来植入进来。我们的解决方法就是,用用户名的长度来限制不要超过 用户名的缓冲区的大小来解决。

TLS:
全称:thread local storage 
每个进程都有自己独立的内存,线程也有一块独立的内存,就是TLS。 可以用来存储线程所独有的数据。 可以看到:线程才是操作系统所真正去运行的,而进程呢,则是像容器一样他把需要的一些东西放在了一起,而把不需要的东西做了一层隔离,进行隔离开来。

 

 线程之间的通信 线程的通信比较简单,有一大块共享的内存,只要大家的指针是同一个就可以看到各自的内存。

 

小结: 1.进程要分配一大部分的内存,而线程只需要分配一部分栈就可以了. 2.一个程序至少有一个进程,一个进程至少有一个线程. 3.进程是资源分配的最小单位,线程是程序执行的最小单位。 4.一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值