操作系统之进程与线程

操作系统之进程与线程

进程创建的四种情况

1.系统初始化
2.正在运行的程序执行了创建进程的系统调用
3.用户请求请求一个新进程
4.一个批处理作业的初始化

1.系统初始化

启动操作系统,通常会创建若干进程。分为前台进程和后台进程。前台进程例如用户交互的GUI界面。后台进程,也可以称为守护进程,用于特定的功能,例如新闻弹窗,邮件的接收,打印之类的活动等等。

2.正在运行的程序执行了创建进程的系统调用

通常是一个正在进行的进程,开辟新进程来辅助协助工作,或者说将一个工作划分成若干个相关但是没有相互作用的进程。

3.用户请求请求一个新进程

通常是交互式的系统,用户双击应用程序创建一个新进程,或者命令行输入命令创建一个新进程。

4.一个批处理作业的初始化

用于大型的批处理系统,当操作系统认为有资源执行一个作业时,创建一个新的进程,并运行其输入队列的下一个作业。

进程终止的四种情况

1.正常退出(自愿的)
2.出错退出(自愿的)
3.严重错误(非自愿)
4.被其他进程杀死(非自愿)

1.正常退出

程序正常执行完成工作而终止。例如编译器完成了给定程序的编译之后,会执行一条系统调用,通知操作系统它的工作已经完成。(UNIX种的exit,Windows种的ExitProcess)

2.出错退出

通常由进程出错所致。例如除数为0,执行非法指令,引用不存在的内存。在某些操作系统(UNIX)中,操作系统希望可以自己处理某些类型的错误,因此进程会收到信号(被中断),它充当终止正在运行的进程的请求,而不是在出现错误时直接终止进程。

3.严重错误

进程发现了严重错误。例如用户在命令行界面键入执行
cc foo.c
但是该文件不存在,于是编译器会退出。

4.被其他进程杀死

进程被被动的杀死,例如系统调用kill,Linux界面命令行输入
kill -9 foo # 9是参数
杀死进程foo。或者Win32的函数TerminateProcess。一般这种方式都需要用户有一定的权限。

进程控制块/进程表/PCB 内容

在这里插入图片描述

进程状态切换

在这里插入图片描述

进程调度

周转时间:任务完成时间减去任务到达系统的时间
周转时间有关计算公式

公式1: T 周转时间 = T 完成时间 − T 到达时间 T_{周转时间} = T_{完成时间} - T_{到达时间} T周转时间=T完成时间T到达时间
公式2: T 周转时间 = T 等待时间 + T 执行时间 T_{周转时间} = T_{等待时间} + T_{执行时间} T周转时间=T等待时间+T执行时间

常情况下第二个更常用
注:是一个性能指标,另外一个指标是公平,性能和公平在调度中往往是矛盾的

进程调度算法

批处理系统相关:

1.先来先服务(First-come first-served) FCFS

顾名思义

2.短作业优先(Shortest Job First)SJF 可分为可抢占和不可抢占两种

当所有任务同时到达时,最短任务优先是一个最优的调度算法

3.高响应比优先调度算法

相应比 ( R ) = 等待时间 + 执行时间 执行时间 相应比(R) = \cfrac{\quad\quad等待时间 + 执行时间\quad\quad}{执行时间} 相应比(R)=执行时间等待时间+执行时间
不会产生饥饿现象。


交互系统相关:

4.时间片调度(轮转调度,round robin)

每个进程被分配一个时间段,称为时间片,允许进程在该时间段内执行
如果在时间片内结束时,该进程没有执行完,接下来会将CPU分配另外
进程执行

5.多级反馈队列

多个独立的队列,每个队列有不同的优先级
任何时刻,一个工作只能存在于一个队列中

1.如果A优先级 > B优先级,运行A
2.如果A优先级 = B优先级,轮转运行A和B
3.工作最初进入系统时,放在最高优先级队列
4.一旦工作用完了在某一层的时间配额,优先级降低
5.经过一段时间后,所有工作重新加入最高优先级队列

注:交互系统的进程调度一定是可抢占的

响应时间相关

T 响应时间 = T 首次运行 – T 到达时间 T_{响应时间} = T_{首次运行} –T_{到达时间} T响应时间=T首次运行T到达时间
T 响应时间 = T 等待时间 T_{响应时间} = T_{等待时间} T响应时间=T等待时间

进程切换

进程切换,又叫上下文切换

1.保存当前进程的上下文
2.恢复某个之前被抢占的进程的被保存的上下文
3.将控制传递给这个新恢复的进程

上下文:

通用寄存器、浮点寄存器、程序计数器(PC)、程序状态字(PSW)、
用户栈、内核栈、描述地址空间的页表、当前进程信息的进程表(PCB)
进程已打开文件的文件表

线程控制块/线程表/TCB 的内容

在这里插入图片描述
线程中的堆栈内容是共享的
在这里插入图片描述

线程的管理方式

1.用户进程管理线程
将线程包放在用户空间中,内核对线程包一无所知。
优点:用户线程包可以在不支持线程的操作系统上实现
从内核的角度,就是按照正常的方式管理,即单线程进程
2.内核管理线程
内核中创建和撤销线程的代价比较大
3.混合实现

用户管理与内核管理
a)为用户管理
b)为内核管理
混合实现
混合实现:多个用户线程对应一个内核线程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值