zoukankan      html  css  js  c++  java
  • 操作系统入门

    操作系统入门

    文中如有错误或不足还望指出,十分感谢。——keep250

    正在持续更新中ing

    预备基础知识

    • 1B = 8bit(1字节 = 8比特)

    中断

    1. 中断请求:CPU接受到来自硬件或软件的信号,提示发生了某个事件,应该被注意,这个情况称为中断。中断请求一般来自CPU以的事件,异常一般发生在CPU部。中断请求的产生与当前指令的执行无关,CPU一般在一条指令执行结束的阶段采样中断请求信号,检测是否存在中断请求,然后决定是否响应中断。
    2. 关中断:CPU不允许在执行过程中被中断请求打断,所以“关中断”。
    3. 开中断:CPU允许在执行过程中被中断请求打断,所以“开中断”。
    4. 多重中断系统:多重中断系统在保护被中断进程现场时关中断,执行中断处理程序时开中断

    调度算法

    1. 先来先服务调度算法(FCFS):作业来的越早,优先级越高。
    2. 短作业优先调度算法(SPN):作业运行总耗时越短,优先级越高。
    3. 轮转调度算法(RR):以一个周期性间隔产生时钟中断,然后将当前运行的程序放入就绪队列,根据FCFS的规则选择下一个时间片的程序运行。
    4. 最短剩余时间优先算法(SRT):进程执行所需剩余运行时间越短,优先级越高。
    5. 最高响应比优先算法(HRRN):R=(W+S)/S,R表示响应比,W表示已经等待的时间,S表示还需要服务的时间。R越高,优先级越高。

    在基于时间片的进程调度中,有以下知识点需要注意:

    1. 进程切换会带来系统开销,切换次数越多,开销越大。
    2. 当前进程的时间片用完后,它的状态会由执行态变为就绪态
    3. 时钟中断是系统中特定的周期性时钟节拍。操作系统通过它来确定时间间隔,实现时间的延时和任务的超时。
    4. 现代操作系统为了保证性能最优,通常根据响应时间、系统开销、进程数量、进程运行时间、进程切换开销等因素来确定时间片大小。

    系统调用

    执行系统调用的过程:正在运行的进程先传递系统调用参数,然后由陷入(trap)指令负责将用户态转化为内核态,并将返回地址压入堆栈以备后用,接下来CPU执行相应的内核态服务程序,最后返回用户态。

    陷入(trap)指令:用于实现在用户态下运行的程序调用操作系统内核程序,即当运行的用户进程或系统使用进程欲亲求操作系统内核为其服务时,可以安排执行一条陷入(trap)指令引起一次特殊异常。陷入(trap)指令在计算机操作系统的中断处理机制、系统调用机制中有重要作用。陷入处理机制需要开辟现场保护区,以保存发生系统调用时的处理器现场。

    内存分配

    内存分配是指在程序执行的过程中分配或回收内存空间的方法。下面是几个内存分配算法的简介:

    内存分配算法 概念 优点 缺点
    首次适应算法(First Fit) 该算法从空闲分区链首开始查找,直到找到一个满足其大小要求的空闲分区为止。然后再按照作业的大小,从该分区中划出一块内存分配给作业,剩下的空闲分区仍留在空闲分区链中。 该算法倾向于使用内存中低地址部分的空闲区,在高地址部分的空闲区很少被利用,从而保留了高地址部分的大空闲区。显然为以后到达的大作业分配大的内存空间创造了条件。 低地址部分不断被划分,留下许多难以利用、很小的空闲区(碎片),而每次查找又都从低地址部分开始,所以会增加查找的开销
    循环首次适应算法(Next Fit) 该算法是由首次适应算法演变而成的。在为进程分配内存空间时,不再每次从链首开始查找,而是从上次找到空闲区的下一个空闲区开始查找,直到找到第一个能满足要求的空闲区为止,并从中画出一块与请求大小相等的内存空间分配给作业。 使内存中的空闲区分布的更为均匀,减少了查找时的系统开销。 缺乏大的空闲分区,从而导致不能装入大型作业。
    最佳适应算法(Best Fit) 该算法总是把既能满足要求,又是最小的空闲分区分配给作业。为了加速查找,该算法要求必须将所有空闲区按其大小排序后,以递增顺序形成一个空白链。这样每次找到的第一个满足要求的空闲区必然是最优的。 每次分配给文件的都是最合适该文件大小的分区。 每次分配后剩余的内存空间一定是最小的,所以会在存储器内留下许多难以利用的小空闲空间(碎片)。同时每次分配后必须重新排序,带来了一定的开销。
    最坏适应算法(Worst Fit) 与“最佳适应算法”刚好相反。该算法按大小递减的顺序形成空闲区链,分配时直接从空闲区链的第一个空闲区中分配(不能满足则不分配)。显然,如果第一个空闲分区不能满足,则再也没有空闲分区能满足作业的要求。 虽然这种方法初看有些不合理,但:在最大空闲区中放入程序后,剩下的空闲区常常也很大,所以还能装下一个较大的程序。它克服了最佳适应算法留下许多小碎片的不足,对中小型文件分配区操作有利。 存储器中缺乏较大的空闲区,对大型文件的分配不利。

    FAT

    FAT(File Allocation Table,文件分配表)是一种帮助追踪硬盘上内容的模式表,对应着硬盘上众多的簇地址(cluster)。由微软在1977年最早应用,它的发展经历了FAT 8、FAT 12、FAT 16、FAT 32。

    FAT组成

    FAT这个表由FAT表项构成,每个FAT表项的大小为12、16、32等,每个FAT表项都有一个固定的编号(从0开始),这个编号称之为“簇号”。

    FAT中簇号为0号和1号的表项有专门的用途。0号通常用来存放分区所在的介质类型;1号用来存储文件系统的肮脏标志,表明文件系统被非法卸载或磁盘表面存在错误。

    每一个FAT表项都会映射FAT数据区的一个簇中。因为0号FAT表项和1号FAT表项有特殊用途,无法与数据区中的簇形成映射,所以从2号FAT表项开始跟数据区中的第一个簇映射,正因为如此,数据区中的第一个簇也就编号为2号簇,这也是没有0号簇和1号簇的原因。然后簇号3跟3号FAT表项映射,簇号4跟4号FAT表项映射,以此类推,直到数据区中的最后一个簇。

    在FAT的实际使用中,每个表项中存放下一个簇号,以此构成链表。

    簇(Data cluster)

    簇也可以称作分配单元(allocation unit),它是操作系统磁盘文件存储管理的单位,可为一个或多个物理扇区组成,由格式化时选定的文件系统而定。簇是操作系统所使用的逻辑概念而非磁盘的物理特性。(PS:术语cluster变成allocation unit在DOS 4.0,但术语cluster仍被广泛使用)。绝大多数操作系统为改善磁盘访问时间,以簇为单位进行空间分配。

    簇的定义

    由于物理磁盘中扇区是磁盘最小的物理存储单元、在硬盘中存在的量很大并且每个扇区都必须有编号,所以操作系统无法对数量众多的扇区进行寻址。因此操作系统将相邻扇区组合在一起,组成这一单位,用以高效率地利用资源。文件系统是操作系统与硬盘驱动器之间的接口,当系统请求从硬盘里读取一个文件时,会请求相应的文件系统打开文件,簇包含的扇区数是由文件系统格式与分配单元大小而定的。一般每个簇可以包括2、4、8、16、32或64个扇区。

    扇区图

    A:磁道;B:扇面;C:扇区;D:簇(扇区组)

    磁盘格式化

    一个新的磁盘是一个空白版,必须分成扇区以便磁盘控制器的读写操作,这个过程称为低级格式化(或物理格式化)。低级格式化为磁盘的每个扇区采用特别的数据结构,包括校验码。为了使用磁盘存储文件,操作系统还需要将其数据结构记录在磁盘上,而这个过程分为两步:第一步,分区,将磁盘分为由一个或多个柱面组成的分区,每个分区可以作为一个独立的磁盘;第二步,逻辑格式化(创建文件系统),操作系统将初始的文件系统数据结构存储到磁盘上,其中包括空闲和已分配的空间以及一个初始为空的目录。

    文件外存分配方式

    目前,常用的外存分配方法有连续分配、链接分配、索引分配三种。采用不同的分配方式时,将形成不同的文件物理结构。

    连续分配方式对应顺序式文件结构,链接分配方式形成链接式文件结构,索引分配方式将形成索引式文件结构。有的系统(如DOS操作系统)对三种方法都支持,但更普遍的是一个系统只提供一种方法的支持。三种分配方式简介如下:

    1. 连续分配:优点是实现简单、存取速度快,缺点是不宜动态增长、会产生外部碎片。
    2. 链接分配:分为隐式链接和显式链接。前者缺点是只能顺序访问,随机访问效率低,改进空间不大;后者缺点是不支持高效直接存储,FAT占用较大内存。
    3. 索引分配:分为单级索引、多级索引和混合索引。共同的优点是无须把整个FAT调入内存。

    三种分配方式对比表如下:

    img

    零碎知识点

    1. 多道程序系统通过组织作业(编码或数据)使CPU总有一个作业可执行,从而提高了CPU的利用率、系统吞吐量和I/O设备利用率。代价是系统要付出额外的开销来组织作业和切换作业。

    文中如有错误或不足还望指出,十分感谢。——keep250

    参考资料

    1. 维基百科
    2. 百度百科
    3. 26 文件外存分配方式
    4. 王道《2020年计算机专业基础综合考试真题思路分析》
    5. 操作系统进程调度算法图解(FCFS、轮转、SPN、SRT、HRRN、反馈)
    6. 常见内存分配算法:首次适应算法(FirstFit)循环首次适应算法(NextFit)最佳适应算法(BestFit)最坏适应算法(WorstFit)
  • 相关阅读:
    POJ 1795 DNA Laboratory
    CodeForces 303B Rectangle Puzzle II
    HDU 2197 本源串
    HDU 5965 扫雷
    POJ 3099 Go Go Gorelians
    CodeForces 762D Maximum path
    CodeForces 731C Socks
    HDU 1231 最大连续子序列
    HDU 5650 so easy
    大话接口隐私与安全 转载
  • 原文地址:https://www.cnblogs.com/keep250/p/12027666.html
Copyright © 2011-2022 走看看