这周,我预习了“操作系统”和“文件系统和目录”,思维导图如下:
操作系统
·操作系统是其他软件依附的基础,并且允许我们编写与机器进行交互的程序
10.1 操作系统的角色
·现代软件可以分为两类,即应用软件和系统软件,它们反映了不同的程序设计目的
·应用软件 (Application software): 帮助我们解决现实世界问题的程序(为了满足特定需要——解决现实世界中的问题——而编写的)
·系统软件( System software ):管理计算机系统并与硬件进行交互的程序(系统软件通常直接与硬件交互,提供的功能比硬件自身提供的更多)
·操作系统(Operating system ):管理计算机资源并为系统交互提供界面的系统软件(统软件的核心,是人类用户、应用软件和系统硬件设备之间的协调者)
·操作系统负责管理计算机的资源(如内存和输人/输出设备),并提供人机交互的界面,其他系统软件则支持特定的目的
·操作系统允许一个应用程序与其他系统资源进行交互
·一台计算机通常只有一个活动的操作系统,在系统运行中负责控制工作
·计算机硬件是靠电线连接的,初始时载人永久性存储器(ROM)中存储的一小组系统指令。这些指令将从二级存储器(通常是硬盘)中载人大部分系统软件。最终将载人操作系统软件的所有关键元素,执行启动程序,提供用户界面,系统就准备就绪了。这个过程叫作引导( booting)计算机。
·计算机可以具备两个或者更多个操作系统,用户在计算机开机时可以选择使用哪个操作系统。这种配置称为双引导或多引导系统。不过,任何时候都只有一个操作系统在控制计算机
·任何已有的操作系统都以其自身独特的方式管理着资源
·操作系统的各种角色通常都围绕着一一个中心思想“良好的共享
·操作系统负责管理资源,而这些资源通常是由使用它们的程序共享的,多个并发执行的程序将共享主存,依次使用CPU,竞争使用输人/输出设备的机会。操作系统将担任现场监控,确保每个程序都能够得到执行的组合
1.内存、进程和CPU管理
·所有现代操作系统都采用多道程序设计技术,因此,操作系统必须执行内存管理( memory management),以明确内存中有哪些程序以及它们驻留在内存的什么位置
·程序只是一套静态指令,进程则是动态的实体,表示正在执行的程序。
·在执行过程中,进程可能会被打断,因此操作系统还要执行进程管理(process management), 以跟踪进程的进展以及所有中间状态。
·多道程序设计(multiprogramming ):同时在主存中驻留多个程序,由它们竞争 CPU的技术
·内存管理 (memory management): 了解主存中载有多少个程序以及它们的位置的动作
·进程(process):程序执行过程中的动态表示法
·进程管理 (process management);了解活动进程的信息的动作
·CPU调度(CPU scheduling ):确定主存中的哪个进程可以访问CPU 以便执行的动作
·操作系统自身也是必须执行的程序、所以在内存中也要和其他系统软件及应用程序一起管理和维护OS进程。执行OS的CPU就是执行其他程序的 CPU,因此也要把 OS进程排人竞争 CPU的队列中。
2.批处理
·在交付程序时,用户需要为执行程序所需的系统软件或其他资源提供一套单独的指令程序和系统指令集合在一起,称为作业
·现在一些不需要人机交互的计算机仍用批处理
3.分时
·分时 (timesharing ):多个交互用户同时共享 CPU时间的系统
·虚拟机(virtual machine):分时系统创建的每个用户都有专有机器的假象
·主机(mainframe )一个大型的多用户计算机,通常与早期的分时系统相关
·哑终端( dumb terminal)在早期的分时系统中用户用于访问主机的一套显示器和键盘
·每个用户由主机上运行的一个登录进程表示
·分时系统的用户有时会发现系统响应减慢了,这是由活动用户的数量和CPU的能力决定的,也就是说,当系统负荷过重时,每个用户的机器看来都变慢了
4.其他OS要素
·微型机则第一次采用单个的集成芯片作为 CPU,成了真正可以放在书桌上的计算机,从而引发了个人环算航(PC)的想法
·操作系统要负责与各种各样的设备通信。通常,这些通信是在设备驱动程序的协助下完成的。所谓设备驱动程序,就是“了解”特定设备接收和发布信息所希望采用的方式的小程序
·操作系统的最后一个要素是需要支持实时系统的
·实时系统(real-time system):应用程序的特性决定了响应时间至关重要的系统
·响应应时间(response time ):收到信号和生成响应之间的延迟时间。
10.2 内存管理
·所有程序在执行时都存储在主存中
·内存是由特定地址引用的连续的位集合
·逻辑地址 (logical address):对一个存储值的引用,是相对于引用它的程序的
·物理地址 (physical address):主存储设备中的真实地址
·在编译程序时,对标识符(如变量名)的引用将被转化为逻辑地址,当程序最终载人内存时,每个逻辑地址将被转换成对应的物理地址
·地址联编( address binding):逻辑辑地址和物理地址间的映射。
1.单块内存管理
·单块内存管理(single contiguous memory management):把应用程序载入一段连续的没存区域的内存管理方法
·内存管理机制必须考虑安全问题,尤其是在多多道程序设计环境中,必须防止一个程序访问未分配给它的内存空间
·单块内存管理法的优点在于实现和管理都很简单,但却大大浪费了内存空间和 CPU时间
2.分区内存管理
·固定分区法 (fixed-partition technique): 把内存分成特定数目的分区以载入程序的内存管理方法
·动态分区法 (dynamic-partition technique):根据容纳程序的需要対内存分区的内存管理方法
·基址寄存器(base register):存放当前分区的起始地址的寄存器
·界限寄存器(bounds register):存放当前分区的长度的寄存器
·三种常用的分区选择法:
最先匹配(first fit),即把第一个足够容纳程序的分区分配给它
最佳匹配(best fit),即把最小的能够容纳程序的分区分配给它
最差匹配(worst fit),即把最大的能够容纳程序的分区分配给它
·最先匹配和最佳匹配用于固定分区,但在动态分区中,最差匹配常常是最有用的,因为它留下了最大可能的空分区,可以容纳之后的其他程序
·当程序终止时,分区表将被更新,以反映这个分区现在是空白的,新程序可以使用它。在动态分区中,连续的空白分区将被合并成一个大的空白分区
·在动态分区中,作业可以在内存中中移动,创建较大的空白分区。这个过程叫作压缩( compaction)
3.页式内存管理
·式内存管理法 (paged memory technique);把进程刻分为大小固定的页、载入内存时存储在中的内存管理方法
·帧(frame):大小固定的一部分主存,用于存放进程页
·页(page):大小固定的一部分进程,存储在内存顿中
·页映射表 (Page Map Table, PMT):操作系统用于记录页和帧之前的关系的表
·但这个地址被转换成两个值一页编号和偏移量。用页面大小除逻辑地越址得到的商是页编号,余数是偏移量。因此,如果页面大小是1024, 那么逻辑地址 2566对应的就是进程的第2页的第518个字节。逻辑地址通常被表示为<页编号,偏移量>
·要生成物理地址,首先需要查看PMT,找到页所在的的编号,然后用编号乘以帧大小,加上偏移量即可。例如图10-8中的例子,如果进程1是活动的,逻辑地址<1, 22>将被进行如下处理:进程1的页面1存储在12中,因此这个逻辑地址对应的物理地12×1024+222= 12510
·这种分割进程的能力把为进程分页的优点在于不必再把进程存储在连续的内存空间中
·页式内存管理思想的一个重要扩展是请求分页(demand paging)思想,它利用了程序的所有部分不必同时处于内存中这一事实
·在请求分页中,页面经过请求才会被载人内存。也就是说,当引用一个页面时,首先要看它是否已经在内存中了,如果该页面在内存中,就完成访问,否则,要从二级有存储设备把这个页面载人可用的,然后再完成访问。从二级存储设备载人页面通常会把其他页面写回二级存储设备,这种行为叫作页面交换(page swap )。
·请求分页 ( demand paging):页式内存管理法的扩展,只有当页面被引用(请求)时才会被载人内存
·页面交换(page swap ):把一个页面从二级存储设备载人内存,通常会使另一个页面从内存中删除
·请求分页法带来了虚拟内存(virtual memory)的思想,即对程序大小没有任何限制的假象(因为整个程序不必同时处于内存中)
·采用虚拟内存法,则经常需要在主存和二级存储设备间进行页页面交换
·虚拟内存(virtual memory):由于整个程序不必同时处于内存而造成的程序大小没有限制的假象。
·系统颠簸( thrashing ):连续的页面交换造成的低效处理,会严重降低系统的性能
10.3 进程管理
·操作系统必须管理的另一个重要资源是每个进程使用的CPU时间
1.进程状态
·在计算机系统的管理下,进程会历经儿种状态,即进人系统、准备执行、执行、等待资源以及执行结束
·进程状态(process state):在操作系统的管理下,进程历经的概念性阶段
·在创建阶段,将创建一个新进程。
·在准备就绪状态中,进程没有任何执行障碍。也就是说,准备就绪状态下的进程并不是在等待某个事件发生,也不是在等待从二级存储设备载人数据,而只是等待使用 CPU的机会
·运行状态下的进程是当前 CPU执行的进程。它的指令将按照读取-执行周期被处理
·等待状态下的进程是当前在等待资源(除了 CPU 以外的资源)的进程。
·终止状态下的进程已经完成了它的执行,不再是活动进程。此时,操作系统不再需要维护有关这个进程的信息。
·注意,可能同时有多个进程处于准备就绪或等待状态,但只有一个进程处于运行状态。
·在创建进程后,操作系统将接纳它进人准备就绪状态。在得到 CPU调度算法的指示后,进程将被分派到运行状态
·在运行过程中,进程可能被操作系统中断,以便另一个进程能够获得 CPU 资源,在这种情况下,进程将返回准备就绪状态;正在运行的进程还可以请求一个未准备好的资源,或者请求I/O读取新引用的部分进程,在这种情况下,它将被转移到等待状态
·在运行的进程最后将得到足够的 CPU时间以完成它的处理,正常终止;或者将生成一个无法解决的错误,异常终止
·当等待中的进程得到了它在等待的资源后,它将再次转移到准备就绪状态
2.进程控制块
·操作系统必须为每个活动进程管理大量的数据,这些数据通常存储在称为进程控制块(Process Control Block, PCB) 的数据结构
·进程控制块(Process Control Block, PCB) :操作系统管理进程信息使用的数据结构
·PCB存储了有关进程的各种信息,包括程序计数器的当前值(说明了进程中下一条要执行的指令),还存储了进程中其他所有CPU寄存器中的值,还要维护关于CPU调度的信息
·上下文切换(context switch):当一个进程移出CPU,另一个进程取代它时发生的寄存器信息交换
10.4 CPU调度
·CPU调度就是确定把哪个处于准备就绪状态的进程移人运行状态
·CPU调度可以是在一个进程从运行状态切换到等待状态或程序终止时发生的,这种类型的 CPU调度叫作非抢先调,因为对新的 CPU进程的需要是当前执行进程的活动的结果
·非抢先调度 (nonpreemptive scheduling):当当前执行的进程自愿放弃了CPU时发生的CPU调度
·抢先调度 ( preemptive scheduling): 当操作系统决定照顾另一个进程而抢占当前执行进程的CPU资源时发生的CPU调度
·通常用特殊的标准(如进程的周转周期)来评估调度算法
·周转周期(turnaround time):从进程进人准备就绪状态到它最终完成之间的时间间隔,是评估CPU调度算法的标准
·进程的平均周转周期越短越好
1.先到先服务
·在先到先服务(FCFS)调度方法中,进程按照它们到达运行状态的顺序转移到CPU(最先匹配)
2.最短作业优先
·最短作业优先(SJN)CPU调度算法将查看所有处于准备就绪状态的进程,并分派一个具有最短服务助间间的,和FCFS —样,它通常被实现为非抢先算法
·注意,SJN算法是基于未来信息的。也就是说,它将把 CPU给予执行时需要最短时间的作业
3.轮询法
·CPU的轮询法将把处理时间平均分配给所有准备就绪的进程,该算法建立单独的时间片(或时间量子)
·时间片(time slice):在CPU轮询算法中分配给每个进程的时间量
·轮询算法是抢先的,时间到期,进程会被强制移出CPU
文件系统和目录
11.1 文件系统
·主存具有易失性,关掉电源后存储在主存中的信息就会丢失。;二级存储设备则具有永久性,即使关闭了电源,它存储的信息依然存在
·我们用二级存储设备来永久存储数据
·最常用的二级存储设备是磁盘驱动器,包括计算机主机箱中的硬盘驱动器和能够在计算机间转移使用的便携式磁盘
·其他二级存储设备(如磁带)主要用于归档
·文件系统( file system):是操作系统提供的一个逻辑视图,使用户能够按照文件集合的方式管理数据
·文件系统通常用目录( directory):组织文件
·文件(file):数据的有名集合,用于组织二级存储设备
·文件系统(file system):操作系统为它管理的文件提供的逻辑视图
·目录(directory):文件的有名分组
·文件是一个一般概念 不同类型的文件的管理方式式不同
·可以把文件看作位序列、字节序列、行序列或记录序列
·文件的创建者决定了如何组织文件中的数据,文件的所有用户都都必须理解这种组织方式
1.文本文件和二进制文件
·所有文件都可以被归为文本文件( text file)或二进制文件
·在文本文件中,数据字节是ASSCII或Unicode字符集中的字符
·文本文件( text file):包含字符的文件
·二进制文件( binary file):包含特定格式的数据的文件,要求给位串一个特定的解释
·计算机上的所有数据最终都是以二进制数字存储的。这些术语指的是格式化位串的方式
·有些信息有字符表示法,通常使人更容易理解和修改
·虽然文本文件只包括字符,但是这些字符可以表示各种各样的信息用高级语言编写的程序也会被存储为文本文件,有时这种文件叫作源文件( source file)
·用文本编辑器可以创建、查看和修改文本文件的内容,无论这个文本文件存储的是什么类型的信息,而有些信息类型则是通过定义特定的二进制格式或解释来表示数据,以使其更有效且更符合逻辑。只有用专门解释这种类型的数据的程序才能阅读和修改
2.文件类型
·无论是文本文体还是二进制文件,大多数文件都包含有特定类型的信息
·文件类型(file type):文件(如Java程序或Microsoft文档)中存放的关于类型的信息
·文件扩展名(file extension):文件名中说明文件类型的部分
·大多数操作系统都能识别一系列特定的文件类型
·可以任意命名文件,但改变文件扩展名不会改变文件中的数据或它的内部格式
3.文件操作
·可以对文件进行的操作:创建文件、删除文件、打开文件、关闭文件、从文件中读取数据、重定位文件中的当前文件指针、把数据附加到文件结尾、删减文件(删除它的内容)、重命名、复制文件
·操作系统用两种方式跟踪二级存储设备
·大多数操作系统要求在对文件执行读写
·无论何时,一个打开的文件都有一个当前文件指针(一个地址)
·读文件,是指操作系统提交文件中从当前文件指针开始的数据的副本,发生读文件后,文件指针将被更新
·写信息是把数据存储到由当前文件指针所指向的位置,然后更新文件指针
·通常,操作系统允许用户打开文件以便进行写操作或读操作,但不允许同时进行这两项操作
·删除文件,是删除文件的内容,但不删除文件表中的管理条目
4.文件访问
·两种主要的访问方法——顺序访问法和直接访问法
·顺序文件访向 (sequential file access): 以线性方式访向文件中的数据的方法。
·直接文件访问(direct file access):通过指定逻辑记录编号直接访问文件中的数据的方法。
5. 文件保护
·在多用户系统中,文件保护的重要性居于首要地位。也就是说,除非是特许的,否则我们不想让一个用户访问另一个用户的文件
·确保合法的文件访问是操作系统的责任。不同操作系统管理文件保护的方式不同,但目的相同
·无论哪种情况,文件保护机制都决定了谁可以使用文件,以及为什么目的而使用文件。
.UNIX操作系统中的文件保护设设置有三类,即 Owner、 Group和 World
每个文件都由一个特定用户所拥有,通常是文件的创建者
11.2 目录
·目录是文件的有名集合,是一种按照逻辑方式对文件分组的方法
·目录文件存放的是关于目录中的其他文件的数据
·一旦建立了目录文件,它就必须支持对目录文件的一般操作
1.目录树
·一个文件目录还可以包含另一个目录。包含其他目录的目录叫作父目录,被包含 的目录叫作子目录,只要需要、就可以建立这种嵌套的日录来帮助组织文件系统
·一个目录可以包含多个子目录,另外,子目录也可以有自己的子目录,这样就形成了一种分级结构
·目录树( directory tree):展示文件系统的嵌套目录组织的结构(展示了每个目录中的目录和文件)
·根目录(root directory ):包含其他所有目录的最高层目录
·工作目录(working directory):当前活动的子目录
·只要在文件系统中“移动”,当前工作目录就会改变路径名
·必须用文本说明文件的位置
·路径(path ):文件或子目录在文件系统中的位置的文本名称。
·绝对路径(absolute path):从根目录开始,包括所有后继子目录的路径。
·相对路径(relative path):从当前工作目录开始的路径
·路径可以是绝对的,也可以是相对的
11.3 磁盘调度
·磁盘调度(disk scheduling ):决定先满足哪个磁盘 I/O 请求的操作。
·最重要的二级存储设备是磁盘驱动器
·把数据传人或传出二级存储设备是一般的计算机系统的首要瓶颈
·CPU和主存的速度都比二级存储设备的数据传输速度快很多,所以执行磁盘 I/O操作的一个进程在等待信息传输的同时把使用 CPU的机会让给另一个进程
·在计算机同时处理多个进程时,将建立一个访问磁盘的请求列表
1.先到先服务磁盘调度法
·先到先服务磁盘调度法是最容易实现的磁盘调度算法
·FCFS算法按照请求到达的顺序处理它们,并不考虑读写头的当前位置
2.最短寻道时间优先磁盘调度法
·最短子道时间优先(SSTF)磁盘调度算法将通过尽可能少的读写头移动满足所有未解决的请求,这种方法可能会在满足一个请求后改变读写头的移动方向
·那么从理论上来说,早期的请求将永远得不到满足,因为不断到来的请求总有优先权 这种情况叫作饿死
·先到先服务盘调度算法不会出现饿死的情况
3.SCAN 磁盘调度法
·SCAN 磁盘调度算法是在磁读写调度算法中读写头向轴心移动,然后再向盘片边缘移动,就这样在轴心和盘片边缘之间来回移动
·我们要决定读写头最初移动的方向
·它们可能在早期的请求之前受到服务,也可能在早期请求之后,这是由读写头当前的位置和它们移动的方向决定的
·SCAN磁盘调度算法不可能出现饿死现象,因为每个柱面都会被依次处理到
·为了减少平均等待时间,环形SCAN算法把磁盘看作环而不是磁盘 也就是说,当读写头达到一端后直接返回另一端之间不再处理请求
·另一种变体则是最小化到轴心和到盘片边缘的移动极限,这种变体叫作 LOOK 磁盘调度算法,因为它会预先判断读写头是否应该继续按照当前的方向移动