进程是啥
进程和程序
- 程序是代码编译链接后的二进制,存储在磁盘中,静态的
- 进程是运行中的程序,运行在内存中,动态变化的
进程里有啥
- 可执行的二进制:就是程序
- 内存:分好几个区域,data/bss/堆/栈,记录临时计算结果等
- 文件描述符:指向进程打开的文件
- 进程上下文:寄存器,程序计数器
操作系统用PCB记录上面的这些信息
进程怎么通信(IPC)
下面几种适用大部分OS
- 文件:同机器的进程访问本地磁盘的文件,不同机器的进程访问文件服务器的文件
- 信号:同机器,不能传输数据
- socket:通过网络接口传输数据,传输协议tcp/udp/sctp
- 消息队列:是一种异步通信协议,是一种概念,UNIX有几种实现
下面适用遵循posix的OS
- Unix domain socket:类似socket,通信不走网络协议,都在内核中发生
- pipeline:标准数据流作为媒介的进程序列,前一个输出作为后一个输入
- 命名pipe:用普通文件作为通讯媒介的管道,mkfifo
- 共享内存:一段多个cpu均可以访问的内存
进程怎么调度
进程状态
- created:把二进制从磁盘加载到内存
- waiting:等待调度
- running:执行指令阶段
- blocked:等待资源
- terminated:运行结束,从内存清除
进程调度:时间片轮询
进程父子关系
- 进程fork儿子进程,儿子退出会给父进程发个信号,父亲退出不会给儿子发信号;
- 僵尸进程:儿子退出后,没有被父亲回收;此时操作系统已经释放了僵尸进程的大部分资源,仅仅保留返回码和资源利用率;其实僵尸影响不大
- 孤儿进程:父亲退后后,儿子还在。会被init进程领养。
参考资料
process-wikipedia
parent process