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

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

操作系统中的进程和线程

一、小栗子

在我们日常生活中,进程和线程的概念就像两个相似的但又不完全相同的东西。比如说,当我们打开微信软件时,就启动了一个进程。进程一旦运行起来,就会包含里面所有的操作,比如查看朋友圈、扫一扫等等。这些操作都是通过线程来完成的。从这个小例子可以看出,“进程”是包含“线程”的,“线程”是“进程”的一个子集。

二、简单总结进程和线程

进程

进程是指在系统中正在运行的一个应用程序。程序一旦运行起来,就变成一个进程。从操作系统的角度来看,进程是系统资源分配的最小单位。它负责管理程序运行所需的内存、文件和网络句柄等资源。

线程

线程是系统处理器时间资源分配的基本单元,也是程序执行的最小单位。线程是进程之内独立执行的一个执行流。它允许多个线程在同一个进程内并发执行。

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

从图片内容可以看出,进程不仅包含线程,还包含内存和文件/网络句柄。内存在这里指的是逻辑内存,而不是物理内存。每个进程都有自己的内存空间,这样就能避免进程之间的干扰。文件和网络句柄则是所有进程共享的资源。

内存

内存是我们日常使用的物理内存(如2G/4G/8G/16G),但在进程的内部,它指的是逻辑内存。每个进程都有自己的内存空间,这样可以防止进程之间的干扰。如果内存不是隔离的,其他进程可能会访问到我们的内存,这会带来安全隐患。

文件/网络句柄

文件和网络句柄是进程共享的资源。比如,多个进程可以同时打开同一个文件或占用同一个网络端口。这种共享机制允许多个进程同时进行文件读写或网络通信。

线程

线程是进程内独立执行的单元。一个进程可以包含多个线程,这些线程可以并发执行。线程通过栈、程序计数器(PC)和线程本地存储(TLS)来实现其独立性。

2.2.1 栈

栈是线程执行的核心结构。它用于管理函数调用和返回地址。当一个线程开始执行时,栈会初始化并保存主线程(main)的入口参数和返回地址。随着函数调用,更多的数据会被压入栈中。

2.2.2 PC(程序计数器)

PC是线程执行的核心指针。它指向当前线程正在执行的指令。由于内存中的程序和数据是存放在一起的,PC既指向程序代码,也指向数据变量。每个线程都有自己的PC,确保线程之间不会干扰。

2.2.2.1 缓冲区溢出

缓冲区溢出是一种常见的安全漏洞。攻击者通过向输入缓冲区中输入过长的数据,导致程序运行到超出分配内存区域。这样攻击者就可以注入恶意代码来破坏系统。

2.3 TLS(线程本地储存)

TLS是线程内独立存储的机制。它允许每个线程有自己的数据存储区域。这种存储方式是线程隔离的一种实现方式,确保线程之间不会互相干扰。

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

进程之间的交互主要通过网络端口实现。TCP/IP协议的三次握手机制确保了进程之间能够安全地发送和接收消息。

TCP/IP三次握手

TCP/IP三次握手包括客户端和服务器之间的消息交换。第一次握手是客户端发送SYN包给服务器,表示请求连接。第二次握手是服务器回复ACK包并发送SYN包,表示同意连接。第三次握手是客户端发送ACK包确认消息完整性,完成连接。

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

线程之间的交互主要通过共享内存实现。所有线程共享同一个内存空间,只要它们的指针一致,就可以访问彼此的内存。这种方式简单且高效,适合多线程程序的通信需求。

5 小结

1. 进程需要分配一大部分内存,而线程只需要分配一小部分栈空间。

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

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

你可能感兴趣的文章
python 录音左右声道_Python分离立体声wav压缩文件的左右声道
查看>>
Python 循环异或对文件进行加解密
查看>>
Python开发环境搭建(附VMware安装包及虚拟机环境)
查看>>
python 微信扫码登录_python实现微信第三方网站扫码登录(Django)
查看>>
Python 快速下载依赖
查看>>
python实现非参数统计的Cochran检验 (附完整源码)
查看>>
python 怎么验证是否安装成功 scrapy
查看>>
Python 手写数字识别-1
查看>>
Python实现接口自动化测试库(JSON与Requests)详解
查看>>
Python 手写数字识别-3-sklearn中的几种算法
查看>>
python实现SSIM和MSSSIM计算 (附完整源码)
查看>>
Python 打开文件注意事项
查看>>
python 批量修改文件名_python windows下批量修改文件名
查看>>
Python 抓取网页乱码问题 以及EXCEL乱码
查看>>
python 抓取网页内容
查看>>
python 按照当前日期创建文件
查看>>
Python 接口并发测试详解
查看>>
Python 接口自动化 —— requests框架
查看>>
python 接口自动化数据结构(如列表、字典、元组)
查看>>
Python 接口自动化测试中的深拷贝与浅拷贝~
查看>>