操作系统学习指南(二)

重点

进程和线程的各个状态,以及相互的切换。进程的组成,PCB的组织形式。

进程

进程的定义

程序的一次执行过程。

进程的特征

  • 结构性
  • 并发性
  • 独立性

进程的基本状态

进程的三个基本状态分别是:就绪状态、运行状态和阻塞状态。

  • 就绪状态
    进程在内存中已经具备执行条件,等待分配处理器。多个处于就绪状态的进程可以以队列方式组织,称为就绪队列。

  • 运行状态
    进程已经被分配处理器,并且正在执行。在单处理器系统中,一个时刻只有一个进程处于运行状态。

  • 阻塞状态
    当正在运行的程序由于等待某事件的完成而不能继续执行,便转换到阻塞状态。

完整的状态:加上创建、结束和挂起

挂起是把内存中暂时不能或不需要运行的进程从内存换到外存。其和阻塞的区别在于阻塞是应用程序主动的,而挂起是操作系统执行的。

挂起的原因:
1. 系统资源的需要
2. 解决竞争或消除故障
3. 终端用户暂停程序运行
4. 父进程暂停
5. 定期执行的程序在空闲时间

进程的描述

进程包括进程控制块(PCB)、程序块、数据块和系统堆栈。

我们使用进程控制块来描述进程相关参数。其具有如下信息:
1. 进程标志信息 PID
2. 计算机状态信息
3. 进程调度信息
4. 进程控制信息

进程控制块的组织形式分为链接方式和索引方式,其根据进程状态分别建立就绪、阻塞等状态的PCB表。
链接方式通过链表实现,每次只需要在PCB表中添加块就可以。缺点是系统如果要查找一个PCB,需要O(n)时间。
而索引方式用索引表来储存对应进程的id,修改PCB状态只需要在索引表中添加或删除就好。

索引表可以用树来维护,感觉会快一点。

进程的控制

  1. 进程创建
    1) 命名进程:为进程设置进程标识符
    2) 申请一个新的PCB
    3) 确定优先级
    4) 分配内存空间并建立需要的链接指针
    5) 分配其他资源
    6) 初始化PCB
    7) 如果可以,插入就绪队列
    8) 通知操作系统

  2. 进程结束
    1) 通过结束进程的标识符,即PID找到对应PCB,并释放其资源
    2) 将其从进程队列中删除,并释放PID
    3) 处理子进程

    可能的原因:
    ○ 正常结束
    ○ 操作异常RE
    ○ 时间异常TLE
    ○ 资源竞争
    ○ 内存不足MLE
    ○ 父进程或操作系统结束

  3. 进程阻塞和唤醒
    1) 停止进程在处理器中执行,并修改、保存相应信息到PCB
    2) 将PCB加入相应阻塞队列
    3) 进程调度程序转跳到其它进程

    程序阻塞是进程自发的行为,可能是因为等待输入的情况。而唤醒则必须操作系统接受到中断,才能被唤醒。

  4. 进程挂起和激活

  5. 内核的模式
    和操作系统有关的模式包括系统模式、控制模式和内核模式。如果用户程序中调用了操作系统服务,则处理器的模式会从用户模式切换到内核模式。
    和用户有关的模式是较低特权模式。

    在内核模式下,系统软件对处理器和所有指令、寄存器、存储器拥有全部控制权。
    系统中设置了一个标志位显示当前处理器所处的模式,该标志位因系统对事件的响应而改变。如果用户程序中调用了操作系统服务,这处理器的模式会从用户模式变为内核模式。服务结束后又变为用户模式。

操作系统的运行

1) 在进程以外运行
2) 在用户进程中运行
3) 作为独立进程运行

Unix操作系统的进程

  • 9个进程状态
  • 多级进程关系

线程

线程是在进程基础上提出来的,是进程的一部分。这样,进程只作为资源分配的单位,而线程作为调度的基本单位。线程切换比进程切换更快,开销更小。
在一个进程中允许多个并发执行的线程,同一进程的线程共享进程的内存空间和资源,但不独立拥有资源。

线程的特征

  • 结构性
  • 并发性
  • 共享性

和进程的唯一不同是线程具有共享性,而进程具有独立性。

线程的状态

有:新建状态、就绪状态、运行状态、阻塞状态、结束状态
没有挂起状态的原因是:进程的所有线程共享进程的地址空间(在Java中是共享方法区和堆),如果要把线程置换出内存,那么相当于把整个进程都置换出内存。

线程库

在支持线程的操作系统中,通过线程库来实现对线程的控制。其分为用户空间的线程库、运行在内核空间的线程库和高级语言线程库。

  1. 运行在用户空间的线程库
    优点是:总是运行在用户空间,不存在内核的开销、用户空间和内核之间状态切换的开销。调度算法可以由应用程序自己选择,可以运行在任何操作系统上。
    缺点是:当一个线程阻塞时,整个进程也被阻塞。在多处理器环境下,不同线程可能在多个处理器执行,如果此时被阻塞,处理器效率极低。

  2. 运行在内核空间的线程库
    优缺点正好和用户空间的线程库相反。

  3. 高级语言线程库
    相当于一个可定制的中间层。

线程模型

线程库和线程模型我都不是很懂,主要没有具体的例子来帮助我理解。我这里简单抄一下定义。

运行空间线程库使用一对一模型。用户空间线程库使用多对一模型。
具体模型见P52。
多对多模型吸收了一对一和多对一模型的有点,克服了缺点。

这里是我的blog:有更多总结分享。排版可能也会更好看一点=v=
https://endlesslethe.com/operating-system-course-tutorial-1.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值