OS-进程

操作系统的工作:

取得CPU,内存,磁盘等物理资源,对他们进行虚拟化,处理于并发相关的问题,并持久化的存储文件。

进程:运行中的程序,操作系统为正在运行的程序提供的抽象

虚拟化CPU:(时分共享CPU技术),通过让一个进程只运行一个时间片,然后切换到其他进程,产生一种存在多个虚拟CPU的假象。

空分共享:资源在空间上被划分给希望使用它的人。

时分共享:允许资源由一个实体使用一段时间,然后由另一个实体使用一段时间。

CPU虚拟化

受限直接执行机制

目的:以高性能方式虚拟化CPU,同时保持对系统的控制

  • 用户模式 应用程序不能完全访问硬件资源
  • 内核模式 操作系统可以完全访问机器的全部资源
  • 陷阱trap指令 提供了陷入内核和从陷阱返回到用户模式的方法

执行陷阱时,硬件必须确保存储足够的调用者寄存器,以便在操作系统发出从陷阱返回指令时能够正确的返回

内核在启动时设置陷阱表,告诉硬件在发生异常时要运行哪些代码,操作系统通知硬件这些陷阱处理程序的位置,一旦硬件被通知,就会记住处理程序的位置,直到下一次重新启动机器。

操作系统重新获得CPU的控制权

协作方式:等待系统调用,通过等待系统调用或者某种非法操作的发生来重新获得CPU的控制权。

非协作方式:操作系统进行控制   利用时间中断,在产生中断时,当前正在运行的进程停止,操作系统中预先配置的中断程序会运行。

保存和恢复上下文

操作系统为当前正在执行的进程保存一些寄存器值,并为即将执行的进程恢复一些寄存器的值。

过程:当从A切换到B时,保存A的各种寄存器,恢复B的寄存器,改变栈指针为使用B的内核栈指针。

在此,有两种寄存器的恢复和保存:

1)发生时钟中断的时候,运行进程的寄存器油硬件显示保存,使用该进程的内核栈

2)当操作系统决定从A切换到B,内核寄存器被软件明确的保存。

进程

进程的机器状态:内存和寄存器

  • 内存:指令、正在运行的程序和写入的数据都在内存中,因此进程可以访问的内存(地址空间)是该进程的一部分
  • 寄存器: PC 告诉我们即将执行的指令、栈指针、帧指针用于管理函数参数栈,局部变量,返回地址等

进程的API:包含创建、销毁、等待、状态、和其他控制

进程的创建

如何将程序转换为进程–>操作系统如何启动并运行一个程序。

1)将代码和所有的静态数据加载到内存,载入进程的地址空间,

2)为进程的运行时栈分配内存,栈用于存放局部变量,函数参数和返回地址,可用参数初始化栈(将参数填入mian函数,即argc和argv数组)

3)为程序的堆分配内存,用于显式请求的动态分配数据,通过malloc()请求空间,通过free()来释放空间。数据结构需要堆。

4)其他初始化,例如在I/O操作中打开3个文件描述符用于标准输入,输出和错误。

进程状态:进程可用处于一下三种状态

  • 运行 :在进程在处理器上运行,正在执行指令
  • 就绪 :进行已经准备好运行,由于某种原因,操作系统选择不在此时运行
  • 阻塞 : 进程执行了某种操作,直到发生其他事件时才会运行,例如,当进程向磁盘发起I/O请求时, 就会被阻塞。
进程API

fork()系统调用

进程调用fork()创建一个新的进程,新进程几乎与调用进程完全一样,此时有两个完全相同的程序在运行,都从fork()系统调用中返回,新建的进程为子进程,原进程为父进程。

子进程拥有自己的地址空间寄存器,计数器等,但从fork()返回的值不同,父进程的返回值为新建子进程的PID,子进程获得的返回值为0。并且之后两个的进程的运行顺序是不一定的。

wait()系统调用:等待子进程运行结束后父进程才接着运行,返回值为子进程pid。

exec() : 可以让子进程执行与父进程不同的程序

进程调度

调度指标:

  • 周转时间 T(周转) = T (完成)-T(到达)
  • 响应时间 T(响应) = T(首次运行) - T(到达时间)

平均周转时间计算,假设三个工作:(T1+T2+T3)/ 3

算法:

1)先进先出 FIFO(先到先服务)

问题:如果先来的工作很长,而后面的工作很短,这样会导致平均周转时间很长

2)最短任务优先(SJF)

先运行最短的任务,然后是次短的任务,依次下去

在任务都同时到达时,此算法可以达到最优,但是如果短任务在长任务后面到达,那就必须等待长任务结束后才能执行(非抢占式)。

3)最短完成时间优先(STCF)

抢占式最短任务优先

例如,任务A运行100s,B运行10s,C运行10s,A运行10秒后B,C到达,在抢占式最短任务优先中,A先运行10s,然后B,C到达,B的任务时间比A短,抢占A的运行,开始运行B,B运行完C也比A短,C继续抢占A,开始运行C,最后BC运行完,运行A剩下90s。

最终的平均响应时间T=(120+10+20)/ 3 = 50s ;

4)轮转算法(RR)

在前面的调度算法中,如果三个任务同时到达,那么第三个任务将必须等待前两个任务结束后才能运行,对于响应时间和交互体验特别不好。

RR算法在一个时间片内运行一个任务,然后切换到运行队列的下一个任务。

时间片长度必须是时钟中断周期的倍数,时间片越短,响应时间表现越好,但是时间片太短,上下文切断成本会增加。

5)多级反馈队列(MLFQ)

MFLQ中有许多的队列,每个队列有不同的优先级,任何时刻,一个工作只能存在于一个队列中,先执行高优先级工作。

当队列中有多个工作位于同一优先级,就对这些工作采用轮转调度

MLFQ规则

  • 1:如果A的优先级大于B的优先级,那么运行A(不允许B)
  • 2:如果A的优先级等于B的优先级,那么轮转运行AB
  • 3:工作进入系统时,放于最高优先级队列
  • 4:一旦工作用完了其在某一层中的时间配额,就降低其优先级
  • 5:经过一段时间S,将系统中所有工作重新加入最高优先级队列。

6)比例份额调度

确保每个工作获得一定比例的CPU时间。

6.1 彩票调度(利用的随机性)

彩票代表了进程占据某个资源的份额,一个进程拥有的彩票占据总彩票的百分比就是他所占资源的份额。

​ 彩票机制:

​ 彩票货币:此方法可以运行拥有一组彩票的用户以他们喜欢的某种货币将彩票分给自己不同的工作,之后操作系统会将这种货币兑换成正确的全局彩票。

​ 彩票转让:

​ 一个进程可以临时将自己的彩票交给另一个进程

​ 彩票通胀:

​ 利用通胀,一个进程可以临时提升或者降低自己拥有的彩票数量,在相互信任的环境下,一个进程知道自己需要更多的CPU时间,就可以增加自己的彩票,告诉操作系统需求。

问题:票数分配问题没有确定的解决方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值