进程与程序之间的关系:进程是正在执行的程序(或者说程序在运行时才能被称为进程),有自己的内存空间以及自己的虚拟cpu。
单个cpu为前提。某一瞬间cpu只能运行一个进程,但在秒级别上(1秒)上看,cpu运行了多个进程,
这种是伪并行。在1秒内,cpu在多个进程(在内存中)之间切换,这种切换地运行进程是多道程序设计。
创建进程
- 系统初始化
启动操作系统,创建若干进程。前台的与用户交互并完成用户的工作,后台的处理的有专门的功能能,比如接收邮件。在邮件到来时才会唤醒接收邮件的进程,这些后台的进程是守护进程 - 执行了 正在运行的进程所调用的 进程创建系统调用
正在运行的进程发出系统调用,创建进程。 - 用户请求创建一个新进程
linux的命令行,windows的图标点击创建 - 一个批处理作业的初始化
所有以上情形从整体上看都是从已有的进程中执行了一个创建进程的系统调用,这个已有的进程的工作是执行一个创建进程的系统调用。
终止进程
- 正常退出(自愿)
- 出错退出(自愿)
例如运行的程序不存在 - 严重错误(非自愿)
例如程序内部出现逻辑错误 - 被其他进程杀死(非自愿)
系统调用杀死进程
进程状态
进程挂起(在阻塞态)原因:
1.等待输入
2.等待cpu
1.操作系统发现进程不能继续运行下去,就会转到阻塞态
2.调度程序引起运行态与就绪态的相互转换
3.由于外部事件发生,可有阻塞态转到就绪态
进程的实现
操作系统维护着一张表格(进程表),每个进程占用一个进程表项(进程控制块),包含进程状态的重要信息。
中断(引自别处):
从本质上来讲,中断是一种电信号,当设备有某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器。
如果中断的线是激活的,中断控制器就把电信号发送给处理器的某个特定引脚。处理器于是立即停止自己正在做的事,
跳到中断处理程序的入口点,进行中断处理。
硬中断
由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操作系统系统外设状态的变化。比如当网卡收到数据包
的时候,就会发出一个中断。我们通常所说的中断指的是硬中断(hardirq)。
软中断
为了满足实时系统的要求,中断处理应该是越快越好。linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间
就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。