程序接口:系统调用

系统调用

本身是访管指令,这种指令是非特权指令集,但可以发出中断

  • 系统调用与库函数区别:

  • 答:系统调用改变CPU的运行状态—(目态到管态)

  • 答:库函数一定运行在用户态下面,为什么?看运行状态的执行过程位于哪种态

系统调用服务例层与系统调用入口

草稿纸部分

进程创建· 进程图(树) 引起进程创建的基本事件 进程的原子操作
进程撤销 撤销流水线 获名->托孤->消核->去名
进程阻塞 原因 前驱未完成 请求资源失败 应该包括前驱未完成和等待I/O操作完成
====》阻塞流水线 主动调用阻塞原语 先中断程序 ->保存现场->更改状态->压栈->进程调度->进入阻塞队列
具体事例 用于Linux上的操作
如创建进程中 fork vfork clone 之间的区别与不同 子进程有可能会无法创建 返回值也不一样

进程控制

前情提要:进程作为一个单位,在我设想种,进程可以看作一头猪的生活经历,而进程控制就是一种形象表达这种经历的过程

进程的创建 阻塞 撤销三种状态 可以对应到猪生涯的出生部分 生活中的等待部分 以及最后的死亡部分,具体展现如下。

进程创建(猪崽子 呱呱落地)

典型事件

在猪场中 猪生下来是为了繁衍后代以及做各类的事情,是有目的的,也是有一定流程走的。如想吃猪肉了,要生下一头猪,这头猪生下来后,要为其命名以及建立一间小猪栏 ,母猪要提供奶水等资源。

同理,在计算机中,创建进程必须要有原因!(典型事件):

  • 例子一 用户请求 (提供特定服务的猪)

  • 例子二 作业调度(在肚子不得不生)

创建原语(流水线)

系统为计算机创建一个进程时,

  • 第一 一定要先创建一个新的pid与PCB空块赋予给此进程
  • 第二 对此进程分配资源
  • 第三 对此进程进行一系列的初始化,最后的资源记录在PCB中
  • 第四 将此进程插入就绪队列,等待CPU调度

这类似于在母猪体内 有好多好多的猪仔等待生出 其中猪仔在每个猪仔在出生之前就已经准备好了姓名,分配好的奶水等(资源),将小猪的各种状态与得到的资源最终记录在一个特定的表里,等待母猪生出来

进程运行(具体运行情况)

这种情况 因进程的各种情况而定 这里不叙述

待议

进程阻塞(属于进程运作中的特例)

典型事件

引起进程阻塞的原因有四大类,如:

  • 系统中需要等待某项操作完成,如一些I/O操作如打印机等(

  • 等待某些资源的分配,CPU等

  • 前驱结点没有完成任务 如计算机a+b的值 要等待b的赋值 (在配种场中,猪在配种过程中 等待母猪合适的发情期)

  • 已完成,但是还可以i继续完成

阻塞原语

为了保证系统在一定时间段内的正常运行,计算机会对阻塞进程进行进行一系列的操作,如

  • 第一 立刻终止此进程 ,

  • 第二 将进程中的PCB中纪律的各种信息保存,并更改运行状态为真 ,表示堵塞

  • 第三 将这些信息压入阻塞队列中,等待CPU合理调度 等待解除 并放入就绪队列中

唤醒

待议

进程撤销

撤销典型事件

进程的撤销就像人的死亡一样 是注定的,但是如同人的死亡一般,进程的撤销也是有规律可循的。以此类推,人类的死亡对应则进程的撤销多个原因。如:

  • 进程的作用结束,完成自己的任务与功能后,系统进行自动结束 寿终正寝
  • 或者是异常结束,比如I/O操作失误,特权指令集的失误等原因 如人体病死
  • 因外界异常干预 如用户强行撤销此进程,例子:任务管理器关闭英雄联盟,如人类被谋杀

撤销原语

具体情况,就像处理一个人类的身后事一样。

  • 进程立刻结束,获取pid,并设置状态为撤销
  • 寻找子进程,放置在兄弟进程下 人类称为 托孤
  • 清空进程中的所有资源 ,占用的资源回归给父亲进程
  • 从所在队列移除,最后清除pid 也就是所有人都将那人遗忘的时候