操作系统:进程和线程+进程的通讯方式

计算机资源=存储资源+计算资源
计算资源:由系统分配,操作系统按照一定的规则来分配什么时候由谁来获得CPU的计算资源(CPU是计算单元,对输入的数据和指令进行计算)
存储资源:就是内存,存储资源是操作系统管理和分配

1.进程

定义:一个程序在一个数据集上的一次运行
/一个程序在多个数据集上/一个程序在同一个数据集上运行多次/是不同的进程

进程的三种基本状态
1.就绪状态:除CPU外已分配所有资源,等待获得处理机执行
2.执行状态:获得处理机,程序正在执行
3.阻塞状态:因等待而无法执行,放弃处理机,处于等待状态。(等待I/O口完成,申请缓冲区不满足,等待信号等)

2.线程:

定义:进程中一个实体(进程中一段程序片段)

3.进程和线程的区别:

内存空间:
进程的内存空间是独立的,有独立的地址空间,不允许突破进程边界的存取其他进程的内存空间
线程共享同一进程中的内存空间(共享的是进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID)/(并且每个线程拥有自己的栈内存)

隶属关系:
线程属于进程,进程退出时结束所有线程,线程占用资源少于进程。

多个执行执行:
两个进程不能同时执行
多个线程可以同时执行
多线程程序只要有一个线程死掉,整个进程也死掉

4.进程的通讯方式:5种

管道:
1.无名管道:
数据只能在一个方向上流动
用于具有亲缘关系的进程之间的通信
特殊的文件,存在于内存
这里写图片描述

2.命名管道:
可以在无关的进程之间交换数据
文件形式存在于文件系统

这里写图片描述
write_fifo的作用类似于客户端,可以打开多个客户端向一个服务器发送请求信息,read_fifo类似于服务器,它适时监控着FIFO的读端,当有数据时,读出并进行处理,但是有一个关键的问题是,每一个客户端必须预先知道服务器提供的FIFO接口

3.消息队列:
消息的链表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。
消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
(消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。
消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。
消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。)

4.信号量:
一个计数器,实现进程间的互斥与同步,而不是用于存储进程间通信数据。
常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。主要作为进程间以及同一进程内不同线程之间的同步手段

5.共享内存:
两个或多个进程共享一个给定的存储区
共享内存是最快的一种 IPC,因为进程是直接对内存进行存取。
因为多个进程可以同时操作,所以需要进行同步。
信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问

五种通讯方式总结
1.管道:速度慢,容量有限,只有父子进程能通讯
2.FIFO:任何进程间都能通讯,但速度慢
3.消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题 ;信号传递信息较管道多。
4.信号量:不能传递复杂消息,只能用来同步
5.共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存

https://blog.csdn.net/wh_sjc/article/details/70283843

猜你喜欢

转载自blog.csdn.net/htt789/article/details/81365747