操作系统Day03
进程间通信IPC:
无名管道读写四种情况:
1.写没有关闭,如果管道内有数据,读管道可以读,管道内没有数据,读管道阻塞。
2.写关闭,读管道读,可以读全部内容,并返回0
3.读没有关闭,管道已经被写满,继续写会被阻塞
4.所有读被关闭,写管道写会收到信号并返回
命名管道:
提供了一个路径关联,只要可以访问路径就可以通信。以FIFO的文件形式存在于文件系统。
内容放在内存中,FIFO进程退出后,FIFO文件继续保存在文件系统
⼀个为只读⽽打开⼀个管道的进程会阻塞直到另外⼀个进程为只写打开该管道;
⼀个为只写⽽打开⼀个管道的进程会阻塞直到另外⼀个进程为只读打开该管道.
读管道:
管道有数据,返回实际读到的字节数
管道无数据:
管道写全部关闭,read返回0。
管道写没有全部关闭,read阻塞等待。
写管道:
管道读全部关闭,进程异常终止
管道读没有全部关闭:
1.管道已满,写阻塞
2.管道没有满,write写入数据并返回写入字节数。
共享存储映射:
存储映射让一个磁盘文件和存储空间的一个缓冲区相映射。于是,对缓冲区的读写操作就对应磁盘文件的读写操作。
这样可以不适用read/wirte的情况下,通过改变缓冲区对应数据的指针来完成IO操作,进程可以通过读写内存来操作文件。
共享内存可以说是最快的进程间通信方式,不需要任何的数据拷贝。

消息队列:
基本原理:A 进程要给 B 进程发送消息,A 进程把数据放在对应的消息队列后就可以正常返
回了,B 进程需要的时候再去读取数据就可以了。
特点:
1. 消息队列是保存在内核中的消息链表,每个消息体都是固定⼤⼩的存储块。如果进程从消
息队列中读取了消息体,内核就会把这个消息体删除。
2. 如果没有释放消息队列或者没有关闭操作系统,消息队列会⼀直存在。
缺点:
1. 通信不及时,附件也有⼤⼩限制。
2. 消息队列不适合⽐较⼤数据的传输,每个消息体都有⼀个最⼤⻓度的限制,同时所有队列
所包含的全部消息体的总⻓度也是有上限
3. 消息队列通信过程中,存在⽤户态与内核态之间的数据拷⻉开销
信号:
信号是软件中断,它是在软件层次上对中断机制的⼀种模拟,是⼀种异步通信的⽅式 。信号
可以导致⼀个正在运⾏的进程被另⼀个正在运⾏的异步进程中断,转⽽处理某⼀个突发事件;
信号可以直接进⾏⽤户空间进程和内核空间进程的交互,内核进程可以利⽤它来通知⽤户空间
进程发⽣了哪些系统事件.
信号的特点
1. 简单
2. 不能携带⼤量信息
3. 满⾜某个特定条件才发送
⼀个完整的信号周期
1. 信号的产⽣
2. 信号在进程种的注册,信号在进程种的注销
3. 执⾏信号处理函数
守护进程:
ਝ护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的
后台服务进程
1. 它是⼀个⽣存期较⻓的进程,通常独⽴于控制终端并且周期性地执⾏某种任务或等待处理
某些发⽣的事件
2. ⼀般采⽤以d结尾的名字
3. 所有的服务存在于 etc/init.d
4. ਝ护进程是个特殊的孤⼉进程
5. 之所以脱离于终端是为了避免进程被任何终端所产⽣的信息所打断,其在执⾏过程中的信
息也不在任何终端上显示
6. Linux 的⼤多数服务器就是⽤守护进程实现的
线程:
线程是轻量级的进程。和进程的创建一样都是用clone函数,如果复制对方的地址空间就是进程,如果共享对方的地址空间,就是线程。
在Linux下,进程是最小的资源分配单位,线程是最小的执行单位。
和进程的进程控制块PCB一样,线程也有自己的TCB线程控制块
Linux内核是不区分进程和线程的, 只在⽤户层⾯上进⾏区分。所以,线程所有操作函数
pthread_* 是库函数,⽽⾮系统调⽤。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!