操做系统之线程和进程

如下内容转自于html

https://www.cnblogs.com/coder-programming/p/10595804.html面试

 

  • 1.进程与线程之间有什么区别?
  • 2.进程、线程都各有什么特色?
  • 3.进程之间的是怎么进行交互的呢?
  • 4.什么是缓冲区溢出?
  • 5.进程之间如何进行交互?
  • 6.线程之间如何进行交互?

上面的面试题能够看出,其实都是一回事,只是换了一种提问方式,只要咱们能掌握核心要点,随便面试官怎么提问,咱们都能轻松应对!微信

1. 小栗子:

咱们生活中有许许多多关于进程与线程的小栗子,好比:1.咱们使用打开一个微信软件,这个时候就开启了一个进程, 当咱们在微信里面进行各类操做(查看朋友圈,扫一扫...),这么多的操做就是线程。 因此咱们能够说“进程”是包含“线程”的,“线程”是“进程”的一个子集。

来源百度百科:网络

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

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

咱们简单总结下:spa

进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。操作系统

线程:系统分配处理器时间资源的基本单元,或者说进程以内独立执行的一个单元执行流。线程——程序执行的最小单位。线程

2. 深刻理解:

进程

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

咱们经过上面的图片进行进一步理解:设计

“内存”:
咱们一般所理解的内存是咱们所见到的(2G/4G/8G/16G)物理内存,它为何会在进程之中呢?
实际上,这里的内存是逻辑内存。指的是内存的寻址空间。每一个进程的内存是相互独立的。
不然的话会出现一个问题:咱们把指针的值改一改就指向其余进程的内存了,经过这样咱们岂不是就能够看到其余进程中"微信"或者是"网上银行"的信息,
这样的话,那咱们的微信聊天记录或者是银行帐户的信息就都被别人找到了,这是一个很危险的信号!显然这样是不可能的。

“文件/网络句柄”:
它们是全部的进程所共有的,例如打开同一个文件,去抢同一个网络的端口这样的操做是被容许的。

“线程”:
接下来,咱们就要介绍一下咱们的“线程”有关知识

线程

2.2 线程(栈+PC+TLS)

2.2.1 栈:

咱们一般都是说调用堆栈,其实这里的堆是没有含义的,调用堆栈就是调用栈的意思。
那么咱们的栈里面有什么呢?
咱们从主线程的入口main函数,会不断的进行函数调用,
每次调用的时候,会把全部的参数和返回地址压入到栈中。

2.2.2 PC:

Program Counter 程序计数器,操做系统真正运行的是一个个的线程,
而咱们的进程只是它的一个容器。PC就是指向当前的指令,而这个指令是放在内存中。
每一个线程都有一串本身的指针,去指向本身当前所在内存的指针。
计算机绝大部分是存储程序性的,说的就是咱们的数据和程序是存储在同一片内存里的
这个内存中既有咱们的数据变量又有咱们的程序。因此咱们的PC指针就是指向咱们的内存的。

2.2.2.1 缓冲区溢出

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

2.3 TLS:

全称:thread local storage
以前咱们看到每一个进程都有本身独立的内存,这时候咱们想,咱们的线程有没有一块独立的内存呢?答案是有的,就是TLS。
能够用来存储咱们线程所独有的数据。
能够看到:线程才是咱们操做系统所真正去运行的,而进程呢,则是像容器同样他把须要的一些东西放在了一块儿,而把不须要的东西作了一层隔离,进行隔离开来。

3. 进程之间的是怎么进行交互的呢?

经过TCP/IP的端口来实现

4. 线程之间又是怎样进行交互?

线程的通讯就比较简单,有一大块共享的内存,只要你们的指针是同一个就能够看到各自的内存。

5.小结:

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

相关文章
相关标签/搜索