4.14

硬件条件:单个cpu单个核
单任务:一个任务执行完毕之后下个任务才能执行
多任务:任务的执行可以被中断,中断之后可以执行其他任务(并发/并行)
单核cpu:并发
多核的cpu:并发(多个任务同时出发但是不一定是同时执行)和并行(多个任务同时执行)

进程实现多任务:特点:给每个进程分配独的地址空间,4G的大小(1G内核,3G用户空间)
进程创建方式:vforlc>exe函数族>system>vfork
进程的退出:exit()库函数/清理缓冲, _exit()系统调用AOI/不清楚缓存
进程等待:WAIT():解决:僵尸进程
<僵尸进程、孤儿进程、守护进程、控制台进程、后台进程>
学习目标:学会创建多任务程序:进程
进程通信
在这里插入图片描述

进程通信
在这里插入图片描述

1.管道
无名管道 只进行父子进程的通信
int pipe(int pipefd[2]);
有名管道 是系统任意两个管道通信
Int mikfifo(const char *pathname,mode_t mode);
pathname:被创建管道文件的文件路径名,Mode:指定被创建时原始权限,一般为0664,必须包含读写权限;
返回值:成功返回0,失败则返回-1,并且errno被设置
用完系统会自动进行释放
open打开有名管道,read/write读写管理进行通信

在这里插入图片描述

无名管道:
1.管道只允许具有血缘关系的进程间通信,如父子进程间的通信
2.管道只允许单项通信
3.读管道的时候,如果没有数据的话,读操作会休眠(阻塞),写数据时,缓冲区写满会休眠(阻塞)
有名管道:
1.任意两个进程通信
2.使用一个“有名管道”是无法实现双向通信的,因为也涉及到抢救的问题
fd0 是读 ;fd1是写

消息队列(规模比较大的内存)
特点:(1)传送有格式的消息流
(2)多进程网状交叉通信时,消息队列是上上之选
(3)能实现大规模数据的通信
消息的组成:
消息编号:识别消息用
消息正文:真正的信息内容
下面是自己定义的格式:
在这里插入图片描述
在这里插入图片描述

消息队列API
1.int msgget(key_t key,int msgflg);
创建管道,第一个是键值,第二个是标志位
在这里插入图片描述
上面那种效率会更高
在这里插入图片描述
msgid消息队列描述符 ==文件描述符

2.int msgsnd(int msqid,const viod *msgp.size_t msgsz,int msg flg);
第一个参数是你要往哪个队列取发,第二个参数是你要发的数据,把要发的地址传进来4
3.ssize_t msgrcy(int msqid,viod *msgp,size_t msgsz,long msgtyp,int msgfig);(读)
第一个参数从哪个消息队列读,第二个保存你要读的数据,第三个你要读的数据这个的长度
4.int msgct(int msqid,int cmd,struct msqld_ds *buf);

消息队列API

在这里插入图片描述
共享内存(内存大)
在这里插入图片描述
映射过程:进程中是不能直接的对物理地址进行操作的,只能防问到虚拟的地址(映射的原因),需要转换成空间的地址

在这里插入图片描述
信息量
当多个进程/线程进行共享操作时,用于资源保护,以防止出现相互干扰的情况
1.资源保护的操作:
互斥:对于互斥操作来说,多进程共享操作时,多个进程间不关心谁先操作,谁后操作的先后顺序问题,它们只关心一件事,那就是我在操作时别人不能操作
同步:所以所谓同步就是,多个共享操作时,进程必须要有统一操作的步骤,按照一定的顺序来操作
解决方法:加锁‘
2.信号量其实时os创建的一个共享变量,进程在进行操作之前,会先检测这个变量的值,这个变量就是一个标记,通过这个标记就可以指定可以不可以操作,以实现互斥
3.分类:
二值信号量
多值信号量
4.信号量集

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
第一个函数()获取信号量在这里插入图片描述
第二个函数 初始化值

在这里插入图片描述
第2个参数就是信号量的编号为0,第三个是所要做的操作,初始为1
第三个 上锁
在这里插入图片描述
要初始化结构体

在这里插入图片描述
-1上锁
+1解锁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值