面试复习操作系统二

一、进程通信

进程同步中也存在进程通信,但是低级进程通信。
进程通信有管道、命名管道、消息队列、信号量、共享内存、套接字。

1.管道:通常指无名管道

来自https://www.cnblogs.com/zgq0/p/8780893.html
特点:半双工;只能用于有亲缘关系的进程 ;是特殊文件,不属于任何文件系统。
建立一个管道会创建两个文件描述符:fd[0]读,fd[1]写。
在这里插入图片描述
若要数据从父到子,关闭父读和子写。

2.命名管道:FIFO

来自https://www.cnblogs.com/zgq0/p/8780893.html
一种存在于文件系统的特殊设备,有路径名与之关联,可以在无关进程间交流信息。在数据读出时,FIFO同时清除数据,并且先进先出。
在这里插入图片描述

3.消息队列

来自https://www.cnblogs.com/zgq0/p/8780893.html
是消息的链接表,存放在内核中,一个消息队列由一个标识符标识。
特点:
独立于进程,进程终止消息队列及其内容不会被终止。
面向记录,消息具有特定的格式和优先级。
可以实现消息的随机查询,不一定按照先进先出的次序,可以按照消息的类型查询。

4.信号量

来自https://www.cnblogs.com/zgq0/p/8780893.html
实现进程同步与互斥的计数器。
特点:
用于进程间同步,若要传递数据需要结合共享内存。
基于PV操作,是原子操作。
对信号量的PV操作不仅限于+1-1,可加减任意正整数
支持信号量组。

5.共享内存

来自https://www.cnblogs.com/zgq0/p/8780893.html
两个或多个进程共享一个存储区
特点:
通常和信号量一起使用,信号量用来同步对共享内存的访问,多个进程可以同时对内存进行操作,所以需要同步。
是最快的IPC,因为进程直接对内存进行操作。
在这里插入图片描述

6.套接字

来自https://www.cnblogs.com/wanjianjun777/p/10483907.html
前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程。通常我们使用socket进行网络编程,这里将会简单地讲述如何使用socket进行简单的网络编程。
套接字的三个属性:域、类型、协议。
域指定通信中的网络介质,最常见的是AF_INET域,即Internet网络。另一个域是AF_UNIX,指的是Unix文件系统,它就是文件输入输出,而它的地址就是文件名。

类型根据Internet通信机制的类型分为流套接字和数据报套接字。流套接字由SOCK_STREAM指定,它们是在AF_INET域中通过TCP/IP连接实现,同时也是AF_UNIX中常用的套接字类型。流套接字提供的是一个有序、可靠、双向字节流的连接,因此发送的数据可以确保不会丢失、重复或乱序到达,而且它还有一定的出错后重新发送的机制。
与流套接字相对的是由类型SOCK_DGRAM指定的数据报套接字,它不需要建立连接和维持一个连接,它们在AF_INET中通常是通过UDP/IP协议实现的。它对可以发送的数据的长度有限制,数据报作为一个单独的网络消息被传输,它可能会丢失、复制或错乱到达,UDP不是一个可靠的协议,但是它的速度比较高,因为它并一需要总是要建立和维持一个连接。

套接字协议通常使用默认值。

二、进程通信实现

1.直接消息传递

发送进程直接使用os的发送命令发送给目标进程。

2.间接消息传递

信箱通信:也就是有一个存储信息的空间实体,实时或非实时都可以
在这里插入图片描述

三、线程

独立调度的单位,也称为轻型进程或进程元。
线程的状态基本和进程一样,也有阻塞,运行,就绪三种状态。
线程控制块:用于记录所有用于控制和管理线程的信息。
线程的实现:

1.内核支持线程(KST)

在内核空间实现的
优点:
在多处理器系统中,内核能够同时调动统一进程中的多个线程并行执行。
内核支持线程有很小的数据结构和堆栈,线程的切换比较快,切换开销小。
内核本身支持多线程技术,可以提高系统的执行速度和效率。
缺点:线程的调度需要从用户态到内核态,开销比较大。

2.用户级线程(ULT)

在用户空间实现,内核完全不知道用户级线程的存在,因为用户级线程的任务控制块都设置在用户空间,不需要内核的帮助。设置了用户级线程的系统仍然是以进程为单位进行调度的,比如时间片的轮转,是一个进程一个时间片,内核支持线程是按线程分配时间片。
优点:线程切换不需要转换到内核空间,独立于操作系统。
缺点:
当一个线程执行系统调用,进程内所有线程都会被阻塞。
还是单线程,其他线程要等待。

3.组合方式

两者都有,且通过内核线程进行时分复用对应到多个线程。
在这里插入图片描述

四、线程通信

1.锁机制包括互斥锁、读写锁、自旋锁、条件变量。

互斥锁:以排他方式防止数据结构被修改
读写锁:允许多个线程共享数据,而对写操作是互斥的。
自旋锁与互斥锁类似,互斥锁是当资源被占用,申请者进入睡眠,自旋锁则循环检测保持者是否已经释放锁。
条件变量:可以以原子的方式阻塞进程,当某特定条件为真时。对条件的测试在互斥锁的保护下进行,条件变量始终与互斥锁一起使用。

2.信号量机制

无名信号量
命名信号量

3.信号量机制

类似进程间的信号处理,用于通知某个事件已经发生。

4.屏障

允许每一个线程等待,直到合作线程都达到某一点,再从这一点出发。

基于springboot+mp+redis的点餐系统.zip项目工程资源经过严格测试运行并且功能上ok,可复现复刻,拿到资料包后可实现复刻出一样的项目,本人系统开发经验充足(全栈),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助 【资源内容】:包含源码、工程文件、说明等。资源质量优质,放心下载使用!可实现复现;设计报告可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,及时抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 质量优质,放心下载使用。下载后请首先打开说明文件(如有);项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途,网络商品/电子资源资料具可复制性不支持退款。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值