进程概念
进程包括栈,堆,数据段,代码段/文本段,程序计数器和寄存器
进程等待:等待发生某个事件
进程就绪:等待分配处理器
进程控制块(PCB):记录进程信息
进程调度
job queue:所有的进程
就绪队列:内存中就绪的进程
设备队列:等待特定I/O设备的进程列表。
长期调度:从磁盘中选择进程加载到内存
将I/O密集型进程和CPU密集型进程组合
中期调度:将进程从内存中移除
短期调度:从就绪队列中选择进程分配CPU
进程运行
级联终止:某些系统中,一个进程终止,它的所有子进程也应终止
wait:释放子进程的进程标识符和进程表中的条目
僵尸进程:子进程终止,父进程还没有调用wait
孤儿进程:父进程终止,子进程成为孤儿进程,被init进程收养
进程间通信
- 消息传递与共享内存比较
消息传递:
1.需要采用系统调用实现
2.适合交换少量数据
3.对于多核系统,性能更优
4.更易实现
共享内存
1.只在建立时需要系统调用
2.存在缓存一致性问题
- 消息传递分类
直接通信:需要通信的每对进程之间建立链路
对称性:sender明确receiver进程,receiver明确sender进程
非对称性:sender明确reverver进程,receiver不需要指定
间接通信:需要通信的两个进程共享一个邮箱
邮箱可以属于进程或者操作系统
客户机/服务器通信
- 套接字
由IP + 端口号组成
服务器监听指定端口,等待客户请求
服务器端口<1024
telnet:23
ftp:21
http:80
客户端口>1024
只允许通信线程交换无结构的字节流
- RPC
客户传输的消息包括:指定函数的标识符+函数的参数
服务器返回函数执行结果
为了解决大端小端的问题:定义独立机器的数据表示(外数据表示XDR)
最多一次:服务器记录时间戳历史,如果消息的时间戳已经出现,则忽略
正好一次:在最多一次的基础上,向客户发送ACK
客户获取服务端口方式:
1.预先固定
2.服务器在固定端口提供提供交会服务程序,告知客户程序RPC名称对应的端口地址
- 管道
属于特殊的文件
匿名管道:
单向通信
父子进程之间通信,只能由创建进程访问
关闭未使用端:另一侧能够检测到EOF
命名管道:
允许所有进程通信,双向,半双工
附
共享内存:
Poxis:
消息传递
套接字
匿名管道