博客
关于我
浅谈操作系统中的进程和线程
阅读量:293 次
发布时间:2019-03-01

本文共 1754 字,大约阅读时间需要 5 分钟。

操作系统中的

一、小栗子:

我们生活中有许多关于进程和线程的小栗子,比如:我们使用打开微信软件,这时候就开启了一个进程,当我们在微信里面进行各种操作(查看朋友圈,扫一扫…),这么多的操作都是线程。

所以我们可以说**“进程”是包含“线程”的,“线程”是“进程”的一个子集。**

二、简单总结进程和线程:

进程:

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

线程:

系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程—程序执行的最小单位。(站在程序维度上)

在这里插入图片描述

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端口来实现

TCP/IP三次握手:(需要实现能相互能接受发送消息,而且验证消息是正确的

第一次握手:客户端发送一段消息给服务器

第二次握手:服务器收到客户端发的消息,并且发送一段自己的消息,和返回刚才接受的消息给客户端。

第三次握手:客户端收到消息,验证之前自己发送的消息是否正确,并且返回服务器发送的一段消息,服务器收到该消息判断是否正确。完成建立连接。

在这里插入图片描述

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

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

5.小结:

1.进程要分配一大部分的内存,而线程只需要分配一部分栈就可以了.

2.一个系统至少有一个进程,一个进程至少有一个线程.
3.进程是资源分配的最小单位,线程是程序执行的最小单位。
4.一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行.

转载地址:http://qcao.baihongyu.com/

你可能感兴趣的文章
NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
NIFI同步MySql数据源数据_到原始库hbase_同时对数据进行实时分析处理_同步到清洗库_实际操作06---大数据之Nifi工作笔记0046
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_处理器介绍_处理过程说明---大数据之Nifi工作笔记0019
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_实际操作---大数据之Nifi工作笔记0020
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_实际操作_02---大数据之Nifi工作笔记0032
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
查看>>
NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
查看>>
NIFI大数据进阶_使用NIFI表达式语言_来获取自定义属性中的数据_NIFI表达式使用体验---大数据之Nifi工作笔记0024
查看>>
NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
查看>>
NIFI大数据进阶_内嵌ZK模式集群2_实际操作搭建NIFI内嵌模式集群---大数据之Nifi工作笔记0016
查看>>
NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
查看>>