nachos学习笔记之进程

在nachos里面,和很多其他操作系统一样,一个进程包括:

1 一个地址空间,这个地址空间囊括了所有进程运行需要的存储单元。这个地址空间可以分解为1)一段可执行的代码,2)为进程保存局部变量的栈空间3)保存全局变量的堆空间(eg unix malloc 和 C++的new)在unix中堆空间又分解为BSS(包含初始化为0的变量)和data区

2一个能让CPU有序地执行指令的线程

3其他内容,例如打开的文件

或者说 有一段可执行代码,进程的状态信息,变量的值,操作系统管理进程所需的其他资源(存储空间不仅仅是内存,寄存器,PC等)。对应与nachos是如何实现的呢?

在nachos中,线程和进程是不做区分的,所有线程共享代码和全局变量。nachos中维护一个readlist的数据结构,跟踪准备好执行的线程。在readlist里面的进程是可以在任何时刻被调度上CPU的。每个进程都有一个表示当前运行状态的状态值,nachos的进程有四个状态:

ready:进程有权使用CPU(进了就绪队列readylist),但是恰好别的进程正在使用CPU,当调度器要调度它上CPU时,要将它从就绪队列删除,并把状态改为运行。就绪队列里面的所有进程的状态都是ready。

runing:进程正在运行,一次只能有一个进程运行 ,在nachos中,全局变量currenthread永远指着正在运行的进程。

blocked:在这种状态下的进程一直在等待外部事件,如果外部事件没发生,则进程永不执行,进程通过调用Sleep()函数将自己睡眠,等待的外部事件可能是一个条件变量,信号量的改变等。

just_reat:进程被创建了,但是还没有栈空间,这是一种在创建过程中的过度状态,进程的构造函数通过fork函数创建一个新的线程并且把新线程的状态改为可执行。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值