OS笔记

image

os

cpu执行两种性质的程序

  1. 内核态程序(管态)
  2. 用户态程序

内核态执行的特权指令包含:

  • I/O指令
  • 中断指令
  • 存取内存中寄存器指令
  • 程序状态字寄存器变更指令

和硬件关联的指令(最底层)包含:

  • 时钟管理
  • 中断处理
  • 设备驱动

运行比较频繁的指令(最底层的上层)包含:

  • 进程管理
  • 内存管理
  • 设备管理

以上两层次的指令组成了操作系统的内核,并且这部分指令是运行在内核态。


一般来讲的内核包含四部分:

  1. 时钟管理

    时钟管理的第一功能是计时,操作系统通过时钟管理,向用户提供标准的系统时间;进程切换,分时系统都是基于改功能实现的.

  2. 中断机制

    引入系统中断是为了提高cpu的利用率,在逐渐发展的过程中形成了多种类型,现在已经形成了多种类型,成为操作系统各项操作的基础.例如,键盘鼠标的信息输入,进程管理和调度,系统功能的调用,设备驱动,文件管理,都依赖于该指令.对于现代的操作系统,都是靠中断来实现功能的.

    在中断机制中,只有一小部分是属于内核操作.负责保护和恢复中断现场的信息,转移控制权到相关的处理程序.这样可以减少中断的处理时间.

  3. 原语

    操作系统的原子操作的指令或者程序定义为原语.其中,设备驱动/cpu切换/进程通信等功能中的部分操作都可以定义为操作原语,是内核中的一部分.

  4. 系统控制的数据结构以及处理

    系统控制的数据结构有很多,比如PCB,消息队列,缓冲区,空闲登记表,内存分配表,各类链表,设备控制块等.为了实现有效的管理,常见一下三种基本操作:

    • 进程管理

      进程状态管理,进程调度和分配,创建和撤销进程控制块

    • 内存管理

      内存的分派和回收,内存信息保护,代码对换程序等

    • 设备管理

      缓冲区管理,设备的分配和回收


系统中断和异常

要实现用户态和内核态之间的相互切换,正常情况下只能通过中断进行.还有一种可能是在程序异常的时候,会直接进入内核态.而且这些切换是物理硬件实现的.

如何实现两种状态的切换?

可以使用一个特殊的寄存器的一位来表示CPU所处的工作状态,0表示内核态,1表示用户态.

如何提高系统资源的利用率?

在程序不使用该资源的时候,能够及时的释放该资源,供其他程序使用.这个释放的动作实际上就是中断来实现的.

中断也成为是外中断,实际上是指来自CPU指令意外的事件的发生,如设备发生IO结束的中断信号.时钟中断,表示一个固定的时间到了.

中断的范围?

异常也称为内中断/例外/陷入,指CPU执行执行指令的内部的事件.例如,程序的非法操作码,地址越界,算术溢出,内存系统的缺页以及专门的陷入指令等引起的事件.

进程调度的基本准则

cpu利用率

处理机的利用率

系统吞吐量

单位时间内完成的作业数量

周转时间

从作业提交到作业完成所经历的时间,其中包含作业等待、在就绪列表中排队、在cpu上运行、进行输入输出操作等所花费时间的总和。

周转时间= 作业完成时间-作业提交时间

平均周转时间是多个作业周转时间的平均值:

N个作业时间和/N

等待时间

进程处于等待时间的和,等待时间越长,用户满意度越低。调度算法实际上不影响作业执行或者输入输出的操作时间,值影响作业在就绪队列中所等待的时间。因此,衡量一个调度算法的好坏,只需要考虑等待时间即可。

响应时间

用户从提交任务请求到系统首次产生响应所用的时间。既然是首次产生相应时间,所以在交互式系统中不能说明调度算法的好坏。在日常工作中,一般使用相应时间作为评判标准。

典型调度算法

算法 使用场景 理论 优点 缺点
先来先服务 任务/进程 从后备作业队列中选择一个最早进来的,将他们调入内存中,分派必要的资源,创建进程并放入就绪队列中。
在进程调度中,每次中就绪队列中选中一个最先进入该队列的进程,将处理机分配他们
1.算法简单
2.对长作业有利
3.有利于cpu繁忙型作业
1.效率低
2.对短作业不利
3.对I/O方繁忙型作业不利
短作业优先 进程 在后备队列中的每一个进程都有一个预估运行时间,该调度算就是从队列中选着一个或多个时间最短的,将处理及发分配它,直到完成或者发生某事件而阻塞时,才释放cpu 1.对长作业不利,可能发生饥饿显现
2.不能保证紧迫性任务会被及时处理
3.依赖预估时间,预估时间不一定准。
优先级调度算法 进程/任务 每个作业或任务都有一个优先级,按照优先级来选着 1.能够解决及时处理紧急任务
高响应比 作业 响应比=(等待时间+要求服务时间)/要求服务时间 1.预警执行时间越短,响应比就越大,越早就执行
2.克服了饥饿现象
时间轮片 执行时间长的任务将会被切换好多次
多级反馈队列 优先级高的,时间片少;进程从高优先级的队列中再次被切换的时候的,将移到次优先级队列的尾部;如果队列中正在执行的进程被插入了一个比自己优先级大的,将移动到队首。
posted @   Eular  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示