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

你可能感兴趣的文章
Nginx 反向代理解决跨域问题
查看>>
Nginx 反向代理配置去除前缀
查看>>
nginx 后端获取真实ip
查看>>
Nginx 学习总结(16)—— 动静分离、压缩、缓存、黑白名单、性能等内容温习
查看>>
Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
查看>>
Nginx 常用配置清单
查看>>
nginx 常用配置记录
查看>>
Nginx 我们必须知道的那些事
查看>>
Nginx 的 proxy_pass 使用简介
查看>>
Nginx 的配置文件中的 keepalive 介绍
查看>>
Nginx 负载均衡与权重配置解析
查看>>
Nginx 负载均衡详解
查看>>
nginx 配置 单页面应用的解决方案
查看>>
nginx 配置https(一)—— 自签名证书
查看>>
nginx 配置~~~本身就是一个静态资源的服务器
查看>>
Nginx 配置解析:从基础到高级应用指南
查看>>
nginx+Tomcat性能监控
查看>>
Nginx下配置codeigniter框架方法
查看>>
nginx报错:the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:128
查看>>
nginx添加模块与https支持
查看>>