操作系统进程

概述

一个进程就是一个正在运行的程序。
它包括:

  • 程序的代码,既然进程是一个正在运行的程序,自然需要程序的代码
  • 程序的数据
  • CPU寄存器的值,包括通用寄存器,程序计数器
  • 堆(heap)是用来保存进程运行时动态分配的内存空间
  • 栈(stack)有两个用途,1保存运行的上下文信息。2在函数调用时保存被调用函数的形参或者局部变量
  • 进程所占用的一组系统资源,如打开的文件

进程状态。包括:

  • 创建:进程正在被创建
  • 运行:进程正在运行
  • 等待:等待某个事件发生(IO完成或者信号)
  • 就绪:进程等待分配处理器
  • 终止:进程完成执行

这里写图片描述

进程控制块PCB

每个进程在操作系统中用进程控制块PCB来表示,用来保存与该进程有关的各种状态信息。PCB只是基本原理中的说法,对于一个真实的操作系统可能不叫PCB,比如Linux中叫做任务结构体(task struct)。

  • 进程状态:进程的状态
  • 程序计数器:进程要执行的下个指令地址
  • CPU寄存器:根据体系结构的不同,他们包括累加器,索引寄存器,堆栈指针,通用寄存器等,这些状态信息中断之后需要保存,以便正确执行。
  • CPU调度信息:包括进程优先级,调度队列指针等其他调度参数。
  • 内存管理信息:根据操作系统内存系统,包括基址,界限寄存器的值,页表段表等。
  • 记账信息:包括CPU时间,实际使用时间,记账数据作业或进程数量。
  • I/O状态信息:分配给进程的设备列表,打开文件列表等。

这里写图片描述

进程调度

分时系统是在进程之间快速切换,以便用户在程序运行时能与其进行交互。因此进程调度会选择可用的一个进程到CPU执行

进程进入系统,会被加入作业队列,该队列包括系统中所有进程。驻留在内存中就绪的等待运行的进程保存在就绪队列中,该队列中链表表示。

如linux中的所有进程都是task_struct双向链表表示:

这里写图片描述

上下文切换:中断使CPU从当前任务变为运行内核子程序,系统需要保存当前CPU运行进程的上下文,从而处理完之后能恢复上下文。进程上下文用前面提到的PCB表示,包括CPU寄存器值,进程状态,内存管理信息等。

进程控制基本流程

  • 进程创建:进程可能是由系统内核收到请求而创建,也可能由进程本身创建,由进程本身创建的进程一般是子进程,它继承父进程拥有的全部资源。
    image

  • 进程终止:进程的终止是由操作系统执行的。当一个进程因各种原因结束时,会通知操作系统。
    image

  • 进程阻塞:进程的阻塞是由进程自身主动执行的。但进程发现自身无法继续执行时,就主动调用进程阻塞原语,把自己阻塞。
    image

  • 进程唤醒:进程的唤醒通常由其他线程执行。但其他线程由于某些事件希望执行线程执行时,会调用进程唤醒原语将指定进程唤醒。
    image

参考资料:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leason00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值