跳到主要内容

1 篇博文 含有标签「Computer」

计算机

查看所有标签

计算机

· 阅读需 10 分钟
秦建泽
一个路过的程序员

硬件的发展​

发展阶段时间逻辑元件速度内存外存
第一代1946-1957电子管几千-几万汞延迟线、磁鼓穿孔纸带、纸带
第二代1958-1964晶体管几万-几十万磁芯存储器磁带
第三代1964-1971中小规模集成电路几十万-几百万半导体存储器磁带、磁盘
第四代1972-现在大规模、超大规模集成电路上千万-万亿半导体存储器磁盘、磁带、光盘、半导体存储器

操作系统的发展和分类​

发展阶段主要缺点主要优点
手工操作阶段用户独占全机、人际速度矛盾导致资源利用率极低
批处理阶段——单道批处理系统内存中仅能有一道程序运行,CPU 有大量的时间是在空闲等待 I/O 完成缓解了一定程度的人机速度矛盾,资源利用率有所提升
批处理阶段——多道批处理系统用户响应时间长,没有人机交互功能(用户提交完作业后智能等待计算机处理完成,中间不能控制自己的作业执行)多道程序并发执行,共享计算机资源。资源利用率大幅提升,CPU 和其他资源更能保持“忙碌”的状态,系统吞吐量增大
分时操作系统不能优先处理一些紧急任务用户请求可以被即时响应,解决了人机交互问题。允许多个用户同时使用一台电脑,并且操作相互独立
实施操作系统能够优先响应一些紧急任务,某些紧急任务不需时间片排队

三层调度的联系、对比​

要做什么调度发生在发生频率对进程状态的影响
高级调度按一定的原则从外村的作业后备队列中挑选一个作业调入内存,并创建进程外存 ➡ 内存(面向作业)最低无 ➡ 创建态 ➡ 就绪态
中级调度按照某种策略决定将哪个处于挂起状态的进程重新调入内存外存 ➡ 内存(面向进程)中等挂起态 ➡ 就绪态
低级调度按照某种策略从就绪队列中选取一个进程,将处理机分配给它内存 ➡CPU最高就绪态 ➡ 运行态

调度算法​

基础服务算法思想算法规则用于作业/进程调度是否可抢占优缺点是否会导致饥饿
先进先服务从“公平”的角度考虑按照先后顺序进行服务用于作业调度时,考虑的是哪个作业先到达后被队列;用于进程调度时,考虑的是哪个进程先到达就绪队列非抢占式公平算法简单 排在长作业后面的短作业需要等待很长时间,带权周转时间狠罚,对短作业来说用户体验不好不会
短作业优先追求最少的平均等待时间,最少的平均周转时间、最少的平均带权周转时间最短的作业/进程优先得到服务两者皆可。用于进程调度时称为“短进程优先算法”非抢占式,但也有抢占式版本——最短剩余时间算法“最短的”平均等待时间、平均周转时间 不公平。对短作业有利,对长作业不利。会
高响应比优先要综合考虑作业/进程的等待时间和要求服务的时间在每次调度时计算各个作业/进程为其服务既可用于作业调度,又可用于进程调度非抢占式综合考虑了等待时间和运行时间(要求服务时间) 等待时间相同时,要求服务时间短的优先(SJF 的优点) 要求服务时间相同时,等待时间长的优先(FCFS 的优点)不会
时间片轮转(RR)公平地、轮流为各个进程服务,让每个进程在一定时间间隔内都可以得到响应按照各进程到达就绪队列地顺序,轮流让各个进程执行一个时间片。用于进程调度(只有作业放入内存建立了相应地进程后,才能被分配处理机时间片)抢占式公平;响应快,适用于分时操作系统 由于高频率的进程切换,因此有一定开销;不区分任务的紧急程度不会
优先级调度越来越多应用场景要求根据任务的紧急程度来决定处理顺序每个作业/进程都有各自的优先级,调度时选择优先级最高的作业/进程既可以用于作业调度,也可用于进程调度。甚至,还会用于在之后会学习的 I/O 调度中抢占式、非抢占式都有。非抢占式只需在进程主动放弃处理机时进行调度即可,而抢占式还需在就绪队列变化时,检查是否会发生抢占用优先级区分紧急程度、重要程度,适用于实时操作系统。可灵活地调整对各种作业/进程的偏好程度 若源源不断地有高优先级进程到来,则可能导致饥饿会
多级反馈队列调度算法对其他调度算法的这种权衡综合前几个算法用于进程调度抢占式综合前几个算法的优点会
多级队列调度算法

进程互斥的软件实现方法​

单标志法双标志先检查双标志后检查Peterson 法
算法思想两个进程在访问完临界区后会把使用临界区的权限转交给另一个进程,也就是说每个进程进入临界区的权限只能被另一个进程赋予设置一个布尔型数组 flag[],数组各个元素用来标记各进程想进入临界区的意愿与双标志先检查相同,但不同之处在于:先“上锁”后“检查”结合双标志法,单标志法的思想

内部排序各个算法的对比​

算法种类时间复杂度空间复杂度是否稳定适用性过程特征
直接插入排序best: O(n)
average: O(n²)
worst: O(n²)
O(1)是顺序存储、链式存储、n 较小、关键字基本有序
冒泡排序best: O(n)
average: O(n²)
worst: O(n²)
O(1)是顺序存储、链式存储、关键字基本有序每趟处理都能产生当前的最大值和最小值
简单选择排序best: O(n²)
average: O(n²)
worst: O(n²)
O(1)否顺序存储、链式存储、n 较小每趟处理都能产生当前的最大值和最小值
希尔排序不做讨论O(1)否顺序存储
快速排序best: O(nlog₂n)
average: O(nlog₂n)
worst: O(n²)
O(log₂n)否顺序存储、n 较大一趟处理少能确定一个元素的最终位置
堆排序best: O(nlog₂n)
average: O(nlog₂n)
worst: O(nlog₂n)
O(1)否顺序存储、n 较大每趟处理都能产生当前的最大值和最小值
二路归并排序best: O(nlog₂n)
average: O(nlog₂n)
worst: O(nlog₂n)
O(n)是顺序存储、链式存储、n 较大
基数排序best: O(d(n + r))
average: O(d(n + r))
worst: O(d(n + r))
O(r)是顺序存储、链式存储、n 很大且记录的关键字位数较少且可以分解时
log2nlog_{2}n