操作系统OS进程(一)初识

什么是进程

逻辑上,执行程序的过程
操作系统加载程序,执行程序,产生一个进程
物理上,操作系统分配的资源
程序执行过程中需要的程序,数据,以及内存、寄存器等资源
进程由什么组成

  • 程序,要执行的代码
  • 数据,程序要处理的数据
  • PCB(Process Control Block),进程控制块,操作系统管理控制进程所需信息集合(在linux中,称为task_struct)

在这里插入图片描述
进程控制块中包括哪些信息,一linux为例,包括进程标识,状态信息,控制信息PCB,在linux中是一个task_struct的结构体
在这里插入图片描述
标识,进程号,父进程号,命令,用户标识
处理机状态信息,寄存器,程序计数器,栈指针
控制信息包括用户,调度和状态信息,进程间通信信息,进程使用资源信息(内存)

进程状态

进程生命周期内状态转移图如下图:
在这里插入图片描述
其中:

  • New,进程正在被创建,还没有就绪
  • Ready,等待执行状态,可以被调度器挑选为执行状态
  • Executing,正在执行状态
  • Running,运行状态,正在执行或者等待执行状态都成为运行状态
  • Stopped,暂停,进程执行被暂停,当进程接收到暂停信号后,进入暂停状态
  • Zombie,进程已经终止运行,父进程没有调用wait或waitpid查询子进程状态信息。
  • Dead,进程从操作系统关闭释放资源
  • Interruptible,可中断休眠,可被信号或事件唤醒休眠,进程等待事件发生,如soket连接,信号量等,等待事件发生时汇报唤醒,也可被信号唤醒。
  • Uninterruptible,不可中断休眠,不能被信号唤醒,只能被事件唤醒的休眠。进程保证内部事件流程完整,而暂不响应异步信号的睡眠。

状态又可以分类为三类Unrunable,Runable,Stoped
在这里插入图片描述

状态之间互斥,进程同时只能处于一种状态。
在这里插入图片描述
下面了解进程各个状态和进程如何在各个状态之间切换

中断

中断是操作系统发生的特定事件
特殊在于,cpu针对事件作出反应,暂停正在执行的程序,保存现场,处理响应的事件处理程序,处理完成后再返回保存现场,继续处理被暂停程序。
如:

  • IO读数据完成
  • IO写数据完成
  • 键盘输入
  • 内存溢出
  • 计算错误
  • 地址越界
  • 分配内存
    中断根据产生来源不同,可分为三类,中断,异常,系统调用
    在这里插入图片描述
  • 外中断:CPU外部引起的中断,一般是硬件引起,如IO中断。
  • 异常:cpu内部事件或者程序执行引起,如:溢出,出错,非法指令,地址越界。
  • 系统调用:用户程序调用操作系统,如分配内存,IO传输,管理文件等。

中断处理流程
在这里插入图片描述
在处理中断过程中,又有其他中断时,操作系统的处理策略有两种:

  1. 屏蔽中断,处理一个中断时,屏蔽其他所有中断,其他中断等待。中断处理完成之后,再检查有没有新的中断,有新的中断,再处理新中断。
    2.嵌套中断,设置了中断处理优先级,同时有多个中断时,优先处理优先级高的中断,优先级高的中断可以抢占优先级低的中断。

信号

信号是软件中断,是软件层次上对中断的模拟。
信号是进程间异步通信的方式
信号是异步的,如邮递员投递一样,投递之后就完成工作,不必知道信号执行结果。

信号用于进程间通信,可以从一个进程发送异步(信号)到另一个进程,通知某一个事件发生。
Shell中可以生成并发送信号,如kill命令,kill -l 可以查看信号列表,共有64中基本信号。如:

# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX

kill -9的信号就是告诉进程,强制杀死进程。
kill -19暂停进程
信号工作过程中经历生成,等待,执行三个阶段如:
在这里插入图片描述

  • 生成,包括软件来源的信号和硬件来源的信号,产生信号并传递到进程。软件来源,如命令行发送信号。还有通过硬件产生的信号。
  • 等待,信号已传递到进程,暂未执行。
  • 执行,进程执行信号对应操作。

执行信号操作,包括以下三种选择:

  • 无视,进程忽略信号,不做任何操作,但是SIGKILL和SIGSTOP,也就是kill -9 和 kill -19不可被忽略
  • 默认,每个信号都有对应的默认操作,如,SIGCONT,进程继续执行
  • 自定义操作,也称为catch操作,执行信号预设的自定义操作。

根据传递策略不同,信号可以分为两类

  • 不可靠信号,传递之后就返回,这种情况下,信号有可能会丢失。快递员送快递,放在信箱。
  • 可靠信号,内核传递之后阻塞,直到进程收到信号,并且进程决定忽略,默认操做,还是自定义操作决定之后,解除阻塞,但是不关心信号执行的结果。快递员送快递,送到进程手上。

在shell中,使用kill产生发送信号时,小于等于31的信号都是不可靠信号,大于31的都是可靠信号。

(完)^_^

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值