进程与状态

操作系统存在的意义
与硬件交互,管理所有的软硬件资源
为用户程序(应用程序)提供一个良好的执行环境
计算机如何通过操作系统管理硬件
1. 描述起来,用 struct 结构体
2. 组织起来,用链表或其他高效的数据结构
操作系统干的事:
内存管理,进程管理,文件管理,驱动管理
进程描述-PCB- Process Control Block(进程控制块)
Linux 操作系统下的 PCB : task_struct
PCB的功能
  • 进程状态:如运行、等待、停止等。
  • 进程ID(PID):唯一标识进程的标识符。
  • 程序计数器:指示进程当前正在执行的指令地址。
  • CPU寄存器:保存进程运行时的CPU寄存器内容。
  • 内存管理信息:包括进程的基地址、界限寄存器、页表等。
  • I/O状态信息:如分配给进程的I/O设备、打开的文件列表等。
  • 调度信息:如优先级、调度队列指针等。
  • 会计信息:如CPU使用时间、实际使用时间、限制等。

fork(),创建子进程,并用不同的返回值标识父进程与子进程

父进程返回值为正,子进程为0,返回值为负说明出现了错误

进程的状态status:

R,运行状态,一般挺难观测,因为CPU运行很快,运行一段时间就把他溢出CPU进行等待

tips:

操作系统的进程调度

现代操作系统(如Linux)使用高效的进程调度算法(如时间片轮转或优先级调度),这些算法在多个进程间公平地分配CPU时间。这意味着即使你的进程处于活跃状态,它在CPU上的执行时间也是与其他进程共享的。进程在获取CPU时间片运行时会处于 R 状态,一旦时间片用完,就会被调度器移出CPU,等待下一次调度。这种快速的切换使得在任意给定的瞬间捕捉到进程处于 R 状态变得困难。

要想观测到R状态,需要将监视器的刷新频率调短,就可以看见进程在R与S两者反复横跳

S 睡眠状态:手动调sleep()或者等待其他的进程就会进这个状态,非常常见极容易看见
D 磁盘休眠状态:由于大量调用I/O资源进程等待出现的状态,与S状态不同,这个等待无法被中断
tips:
持续调用printf(),或者scanf()无法看见此状态。
printf(),由于缓存机制存在,其本质是先向用户空间的缓冲区中,等待缓冲区满了,或者遇到刷新符号才会输出
scanf(),运行后,进程会进入S状态,不会进行D状态
要想进入D状态,就简单的方法是使用fread或则fwrite进行大量的文件读写
T状态:按ctrl+z或者发送SIGCONT信号就行了
僵尸进程:子进程结束了,但父进程没有结束,由于父进程没有使用wait(),导致父进程不知道子进程结束了,导致子进程明明已经结束了,但依旧在父进程中有一条信息
孤儿进程:父亲完事了,子进程还没完事,父进程退出,子进程便成为了孤儿。孤儿进程会被1号进程init回收,危害不大。
PRI and NI
PRI 也还是比较好理解的,即进程的优先级,或者通俗点说就是程序被 CPU 执行的先后顺序,此值越小
进程的优先级别越高
NI ? 就是我们所要说的 nice 值了,其表示进程可被执行的优先级的修正数值
PRI 值越小越快被执行,那么加入 nice 值后,将会使得 PRI 变为: PRI(new)=PRI(old)+nice
这样,当 nice 值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行
所以,调整进程优先级,在 Linux 下,就是调整进程 nice
nice 其取值范围是 -20 19 ,一共 40 个级别。
  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值