博客
关于我
浅谈操作系统中的进程和线程
阅读量: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/

你可能感兴趣的文章
OpenCV与AI深度学习 | 使用Python和OpenCV实现火焰检测(附源码)
查看>>
OpenCV与AI深度学习 | 使用PyTorch进行小样本学习的图像分类
查看>>
OpenCV与AI深度学习 | 使用YOLO11实现区域内目标跟踪
查看>>
OpenCV与AI深度学习 | 使用YOLOv8做目标检测、实例分割和图像分类(包含实例操作代码)
查看>>
OpenCV与AI深度学习 | 使用单相机对已知物体进行3D位置估计
查看>>
OpenCV与AI深度学习 | 初学者指南 -- 什么是迁移学习?
查看>>
OpenCV与AI深度学习 | 十分钟掌握Pytorch搭建神经网络的流程
查看>>
OpenCV与AI深度学习 | 基于GAN的零缺陷样本产品表面缺陷检测
查看>>
OpenCV与AI深度学习 | 基于OpenCV和深度学习预测年龄和性别
查看>>
OpenCV与AI深度学习 | 基于OpenCV实现模糊检测 / 自动对焦
查看>>
OpenCV与AI深度学习 | 基于Python和OpenCV将图像转为ASCII艺术效果
查看>>
OpenCV与AI深度学习 | 基于PyTorch实现Faster RCNN目标检测
查看>>
OpenCV与AI深度学习 | 基于PyTorch语义分割实现洪水识别(数据集 + 源码)
查看>>
OpenCV与AI深度学习 | 基于YOLO11的车体部件检测与分割
查看>>
OpenCV与AI深度学习 | 基于YoloV11自定义数据集实现车辆事故检测(有源码,建议收藏!)
查看>>
OpenCV与AI深度学习 | 基于YOLOv8 + BotSORT实现球员和足球检测与跟踪 (步骤 + 源码)
查看>>
OpenCV与AI深度学习 | 基于YOLOv8实现高级目标检测和区域计数
查看>>
VS2003 Front Page Server Extension
查看>>
OpenCV与AI深度学习 | 基于YOLOv8的停车对齐检测
查看>>
OpenCV与AI深度学习 | 基于YoloV8的药丸/片剂类型识别
查看>>