操作系统原理,进程控制,原子操作,进程原语种类,创建,撤销,阻塞等,进程原语在不同操作系统中的示例
一、进程控制与原子操作,:
1、操作完成进程个状态之间的转换,由具有特定功能的原语完成。
2、原语primitive:完成某种特定功能的一段程序,但是在运行时无法被中断或分割,所以被称为原语,原语在执行的过程中必须是连续的,在执行过程中不允许被中断(技术上操作系统中需要在执行原语时屏蔽中断异常保证原语的连续性),又叫原子操作。
二、进程控制原语包括:
1、进程创建原语
2、进程撤销原语
3、阻塞原语
4、唤醒原语
5、挂起原语
6、激活原语
7、改变进程优先级原语
8、等…
三、进程的创建
1、为新进程分配一个唯一标识以及进程控制块
2、为基础分配地址空间
3、初始化进程控制块,设置默认值如:状态为new等
4、设置相应的队列指针,如将新进程加入到就绪队列链表中
5、Unix/Linux中创建进程使用fork/exec,Windows使用create process
四、进程的撤销
1、收回进程所占有的资源,如关闭打开的文件,断开网络连接,回收内存等
2、撤销该进程的PCB
3、Unix/Linux中撤销进程使用exit,Windows下使用terminateprocess
五、进程阻塞
1、处于运行状态的进程,在运行过程中期待某一事件的发生,如键盘输入,磁盘数据传输完成,其他进程发送消息等,当被等待的事件未发生时,由进程自己执行阻塞原语,使自己由运行态变为阻塞态
2、Unix/Linux中进程阻塞使用wait,Windows中使用waitforsingleobject
六、Unix/Linux中的几个进程控制操作:
1、fork,通过复制调用进程来创建新的进程,是最基本的进程创建过程
2、Exec,包括一系列系统调用,它们都是通过用一段新的程序代码覆盖原来的地址空间,实现进程执行代码的转换,
3、Wait,提供初级进程同步工作,能使一个进程等待另外一个进程的结束
4、Exit,用于终止一个进程的运行
这些都是系统调用。
七、unix中的fork()实现
1、为子进程分配一个空闲的进程描述符,unix和Linux中的PCB是proc结构体
2、分配给子进程唯一标识pid
3、以一次一页的的方式复制父进程的地址空间
4、从父进程除基础共享资源,如打开的文件和当前工作目录等
5、将子进程的状态设为就绪,插入到就绪队列
6、在子进程中返回标识符0,父进程中返回子进程的pid
第三步完全复制父进程的地址空间的操作,在后续执行了exec函数后,相当于做了无用功,且浪费了不少时间和资源,Linux中采用了写时复制计数COW(copy-on-write)加快创建进程,而不是全部复制,因此Linux中的fork效率高于unix,速度也更快。
Fork的实际代码使用,Linux,参见:
TCP/IP,Linux下多进程编程,进程复制函数fork,双返回值函数,通过父进程复制一份代码相同的子进程,父子进程执行顺序由调度算法决定,代码中获取进程执行用户的函数,数据共享状态