操作系统原理学习笔记(3)之进程操作与进程通信(关键词:操作系统原理学习笔记)
来源:互联网 发布:java 数据 hadoop 开发 编辑:程序博客网 时间:2024/05/16 13:00
一、进程操作
进程创建、进程终止、进程通信等等
1.进程创建(OS开启之后,首先有0号进程)
共享(duplicate,而不是copy),虽然子进程的内容和父进程的内容是一样的,但是是在内存空间的不同位置。
例如:(子进程共享父进程的所有资源)父进程所带的程序代码,子进程也有了程序代码了,但是程序代码是复制了一份,放在另外一个新的位置,交给子进程。子进程不是与父进程共享代码。
过去某些经典的OS父进程创建子进程之后,采用的一种策略:
解释:父进程fork()创建了子进程之后,父进程等待,子进程继承了父进程所有的资源,但是子进程往往不想要用这些继承下来的资源,子进程又去调用另外一个系统调用exec(),把新的程序装入。父进程等待(此时不占用CPU),直到子进程发了一个终止的系统调用exit()(子进程做完事情了,要退出了)之后,操作系统把这个信号返回给父进程,父进程再从等待队列里面唤醒,父进程再往下继续执行。
Unix环境fork一个进程的功效:
如上代码的解释:
Pid_t pid; 定义一个pid,是Pid_t类型。此时只有一个进程。定义了一个局部变量pid,在堆栈里面。
pid = fork(); 先看fork()系统调用,创建子进程。如果是Linux,则子进程完全继承了父进程的一切。子进程是一个独立的进程,父进程是一个独立的进程。唯一不同的是pid号。父进程返回的AX的值是一个非零的正整数,这个数是子进程的pid号,而子进程返回的AX寄存器的值是0,只有这一点不同,其他一模一样。含义:子进程也拥有了这么一个完整的函数代码,包括main,包括Pid_t的申请,但是对于子进程来讲,Pid_t pid在子进程里面并没有执行。
往后,父进程和子进程均有各自的执行、相互独立。CPU给了父进程,则父进程执行,给了子进程,则子进程执行。
下面,分别来看父进程、子进程的执行。
父进程
由于父进程的pid是非零正整数,所以if、else if语句块均跳过,不执行。执行else后的语句块:
wait(NULL) :意思是要等待子进程执行完了之后,它才做,父进程在wait里面等待,主动交出CPU,处于等待队列,等待的对象是子进程返回。等子进程执行完毕后,它才从wait里面返回回来,它才有可能去执行下一句话printf。然后exit(0)。父进程的副作用是输出Child Complete。
子进程
子进程也要做pid = fork()中的=符号,子进程拿到的pid是0,所以,if语句块跳过,执行else if语句块。执行execlp系统调用。
注意:父进程、子进程的执行顺序取决于CPU调度。因为父进程、子进程是完全独立的。
因此,这个C语言程序经过fork()操作之后,它会变成两个独立运算的东西。
二、进程终止
正常终止手段 exit
异常终止手段 abort
三、进程间合作
四、进程通信(Interprocess Communication IPC)
进程之间通信的方法,有很多。比如signal、管道、共享内存、消息传递。
经典案例:生产者-消费者问题
IPC
比较流行的、好的办法:消息系统
同步通信 vs 异步通信
同步通信
send操作:发送端发送消息,发送端等待,等到接收端接收到消息,并且接收端确认接收到了,发送端接收到了确认的信息,发送端才可以往下做事情。若发送端没有接收到,则继续等待。例如TCP协议。
receive操作:
TCP优点:发出去的数据,都可以确定知道发出去的数据是否到达。缺点:慢。
异步通信
send操作:发送端发出去一个消息,发送端可以立马做别的事情,不管消息有没有到达。如IP协议。
IP优点:发出去数据之后,就可以继续做自己的事情,通信的性能好、反应快。缺点:不可靠。
参考文献:
1.《操作系统概念》
2.操作系统-浙江大学- 操作系统原理学习笔记(3)之进程操作与进程通信(关键词:操作系统原理学习笔记)
- 操作系统原理学习笔记(2)之进程概念(关键词:操作系统原理学习笔记、进程、process)
- 操作系统原理学习笔记--进程管理
- 操作系统原理学习笔记--进程管理
- 操作系统原理学习笔记--进程管理
- 操作系统精髓与设计原理学习笔记三:进程描述和控制
- 操作系统学习之进程通信(PCI)
- 操作系统学习笔记三进程
- 操作系统学习笔记三 进程
- 操作系统学习笔记:进程同步
- 【操作系统学习笔记】进程篇
- 操作系统学习笔记-进程控制
- 操作系统学习笔记(1) 进程
- [操作系统学习笔记(1)] 多进程图像 CPU工作原理
- 计算机操作系统笔记(6)--进程管理之进程通信
- 操作系统原理学习笔记--操作系统概述
- 操作系统原理--学习笔记1
- 操作系统原理--学习笔记2
- 匿名内部类
- 2018校招(BAT机器学习)要求
- 最近执行较慢的SQL
- 【typical】【JZOJ 5271】 神奇的救火现场
- nginx配置url转发
- 操作系统原理学习笔记(3)之进程操作与进程通信(关键词:操作系统原理学习笔记)
- 利用freemarker 静态化网页
- android应用百度语音识别、语音合成和语音唤醒
- 浅谈——页面静态化
- matplotlib模块数据可视化-Annotation标注
- Github-page之个人网页构建
- HomeKit开发(一)
- Linux-进程
- 简单的模拟用户登录