第一章 导论
1.操作系统是管理计算机硬件的程序,他还为应用程序提供基础,并且充当计算机硬件和计算机用户的中介。
操作系统作用:控制管理计算机的全部软硬件资源;合理组织计算机你内部各部件协调工作;为用户提供操作和编辑页面的程序集合。 2.操作模式:系统模式、用户模式
在计算机硬件中增加一个模式位,系统模式(0)和用户模式(1),当计算机系统表示用户应用程序正在执行,系统处于用户模式,当用户应用程序需要操作系统的服务,转换到系统模式。
双重模式操作提供了保护操作系统和用户程序不受错误用户程序的影响的手段。 用户进行系统调用,转换到系统模式。特权指令,如I/O控制,定时器管理和终端管理,转换到用户模式。 3.操作系统功能:
进程管理、内存管理、存储管理(文件系统管理、大容量存储器管理、高速缓存、I/O系统) 4.操作系统类型: 通用系统:
实时嵌入式系统:运行系统简单、操作系统只提供了有限的功能,它们只具有很少或者没有用户接口,而将他们的时间花费在监视和管理硬件设备上,如汽车引擎和机械手。
多媒体系统:将多媒体数据加到计算机系统中。多媒体数据包括声音和音像数据。 手持系统:个人数字处理 第二章 操作系统结构 1.操作系统服务:(了解)用户界面、程序执行、I/O操作、文件系统操作、通信、错误检测、资源分配、统计、保护和安全。 2.系统调用:系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序。
系统调用实现机制:每个系统调用有一个与其相关的数字,系统调用接口根据这些数字维护一个列表索引,接口调用所需的操作系统内核中的系统调用,并返回系统调用状态及其他的返回值,调用者无需知道系统调用的实现细节,只需要遵循API知道系统调用后系统作了什么,对于程序员,通过API操作系统接口的大部分细节被隐藏,被执行支持库所管理。
参数传递方式:①通过寄存器传递参数;②将参数存在内存的块和表中,将块的地址通过寄存器传递;③将参数压入堆或栈中,通过操作系统弹出。
系统调用类型:进程控制、文件管理、设备管理、信息维护、通信 3.操作系统结构: 优点 缺点 ①没有划分成模块 ②没有很好的区分接口和功能层次 ①对层的详细定义困难②与其它方法相比效率差 由于系统功能总开销的增加而导致系统性能的下降 1
典型操作系统 MS-DOS系统、原始UNIX系统 简单利用最小的空间提供最多的功结构 能 分层①构造和调试的简单化 方法 ②每层为较高层隐藏了一定的数据结构、操作和硬件的存在 微内核 ①便于扩充操作系统②提供了更好的安全性和可靠性 Tru64 UNIX操作系统、QNX操作系统 现代UNIX,如模块 ①这样的设计允许内核提供核
心服务,也能动态的实现特定的功能②这种方法更高效 Solaris、Linux、Mac OS X 4.虚拟机:(了解)
虚拟机目的:最根本的原因,在并行运行几个不同的执行环境(即不同的操作系统)时能够共享相同的硬件。
虚拟机优点:①可以通过共享小型磁盘来共享文件。②可以通过定义一个虚拟机的网络,每台虚拟机通过虚拟通信网络来传递消息。 第三章 进程 1.进程的概念:
进程是一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程,是系统进行资源分配和调度的独立单位
进程与程序有何差别?
①进程是一个动态概念,程序是一个静态概念;
②进程有生命周期,有诞生有消亡,短暂的;而程序是相对长久的。 ③进程具有并发性,而程序没有;
④进程是竞争计算机系统资源的基本单位,其并发性受到系统本身的制约; ⑤不同的进程可以包含同一程序,只要程序所对应的数据集不同。
进程特点:
①结构特点:程序段、数据段、进程控制块PCB
②动态性:最基本的特征,进程是动态产生,动态消亡的;进程在其生命周期内,在三种基本状态之间转换(就绪、等待和执行)
③并发性:任何进程都可以同其他进程一起向前推进
④独立性:进程是一个能独立运行的基本单位,同时也是系统中独立获得资源和独立调度的基本单位。
⑤异步性:每个进程都以其相对独立的、不可预知的速度向前推进。
进程组成:进程包括程序代码、当前活动(通过程序计数器的值或处理器寄存器的内容来表示)、堆栈段(包括临时数据,如函数参数、返回地址和局部变量)和数据段(包括全局变量)。还可能包括堆,是在进程运行期间动态分配的内存。
典型进程状态:新的、运行、等待、就绪、终止(一次只有一个进程可以在一个处理器上运行,但是多个进程可处于就绪或等待状态)
进程控制块(PCB):
内容:进程状态、程序计数器、CPU寄存器、CPU调度信息、内存管理信息、记账信息、I/O状态信息。
作用:PCB作为这些信息的仓库,这些信息在进程与进程之间是不同的。 2.进程调度的类型:长期调度程序、中期调度程序、短期调度程序
进程调度的过程:上下文切换(通过执行状态保存来保存CPU当前状态,之后执行状态恢复重新开始运行) 3.进程的基本操作:(了解)进程创建、进程终止、进程挂起、进程唤醒 4.进程间通信: 共享内存系统 消息
直接适用场合特点 这里的共享存储区属于每个互相通信进程的组成部分。不要求数据移动,一般属于本地通信。对于远程通信来说,每台计算机拥有各自的内存区,不容易实现共享存储区的访问。适合于大块数据,如显卡。 在需要通信的每对进程之间自动建立线路,进程仅需知道相互通信的标识符;2
传递通信 系统 间接通信 一个线路只与两个进程相关;每对进程之间只有一个线路。 只有在两个进程共享一个邮箱时,才能建立通信线路;一个线路可以与两个或更多的进程相关联;两个通信进程之间可有多个不同的线路,每个线路对应于一个邮箱。 进程队列实现:令容量、有限容量、无限容量。 客户机-服务器系统通信:
Socket:一个套接字是通信的一个端点;套接字的信息主要包含IP地址+通信端口;通信在一对套接字之间发生。
RPC:RPC提供了在联网的计算机系统之间进行过程调用的机制;客户端的访问代理负责确定server的位置,并将远程过程调用所需的参数按规定的格式封装好;服务器端收到封装好的消息,从中解析出参数,进行过程调用 RMI:与RPC不同:
①RPC支持子程序编程,及智能调用远程的子程序或函数;而RMI是基于对象的,它支持调用远程对象的方法。
②在RPC中,远程过程的参数是普通数据结构,而RMI可以将对象作为参数传递给远程方法。 第四章 线程
1.线程是CPU使用的基本单元,它由线程ID、程序计数器、寄存器集合和栈组成。 2.为什么引入线程?
优点:响应度高;资源共享;经济;多处理器体系结构的利用。
2.线程模型:用户线程受内核支持,无需内核管理;内核线程由操作系统直接支持和管理。 多对一模型:效率高,但是如果一个线程执行了阻塞系统调用,整个进程会阻塞。多个线程不能并行运行在多处理器上。
一对一模型:一个线程执行阻塞系统调用时,能允许另一个线程继续执行;它允许多个线程能并行的运行在多处理器系统上。缺点是创建内核线程的开销会影响应用程序的性能,所以这种模型的绝大多数实现了限制了系统所支持的线程数量。 多对多模型:允许开发人员创建人一多的用户进程,但是因为内核只能一次调度一个线程,所以并没有增加并发性。开发人员可以创建人一多的用户进程。 3.线程池优势(了解)
①通常用现有线程处理请求要比等待创建新的线程要快 ②线程池限制了在任何时候可用线程的数量。这对那些不能支持大量并发线程的系统非常重要
第五章 CPU调度 1.什么叫抢占调度
①当一个进程从运行状态切换到等待状态(例如,当I/O请求,或调用wait等待一个子进程的终止)②当一个进程从运行状态切换到就绪状态(例如,当出现中断时)③当一个进程从等待状态切换到就绪状态(例如,当I/O完成时)④当一个进程终止时
当调度只能发生在第1和第4种情况时,没有选择只有调度,称调度方案是非抢占的。否则称调度方案时抢占的。
CPU调度就绪队列可以为先进先出队列、优先队列、树或简单的无序链表。 2.调度准则
CPU使用率、吞吐量、周转时间、等待时间、响应时间(响应时间=等待时间+周转时间) 3.调度过程
从就绪队列中取进程
3
调度算法:
先到先服务调度:代码编写简单且容易理解,平均等待时间较长,是非抢占调度。 最短作业优先调度:平均等待时间最少,经常用于长期调度,但是不能在短期CPU度层次加以实现,可能会出现饥饿现象。
优先级调度:可以是抢占或非抢占的,可能会出现饥饿现象。 轮转法调度:平均等待时间较长,是可抢占的。
多级队列调度:队列之间通常采用固定优先级抢占调度。 多级反馈队列调度: 4.分派程序功能:(了解)
切换上下文;切换到用户模式;跳转到用户程序的合适位置,以重新启动程序。 5.多处理器调度:(了解)
分类:非对称多处理,对称多处理。
当一个操作系统具有设法让一个进程保持在同一个处理器上运行的策略,但不能做任何保证时,会出现软亲和性,此时进程可能在处理器之间移动。Linux系统还支持硬亲和性的调用,允许进程指定他不允许抑制其他处理器上。
负载平衡的两种方法:push migration和pill migration。 第六章 进程同步(重点)
1.临界区:每段程序中涉及到全局变量操作的代码
解决临界区问题必须要满足的三个条件:互斥、前进、有限等待。
解决临界区问题的两种方法:抢占内核与非抢占内核。抢占内核更好,因为抢占内核更适合实时编程,抢占内核的响应更快。 2.信号量:
含义:信号量是一个变量,包含一个整型值和指向进程的指针。 对信号量操作:
P(wait)操作:对信号量-1,取资源,如果信号量值<0,说明已被取走,把进程放到等待队列中。
V(signal)操作:对信号量+1,放资源。如果信号量值<=0,说明有进程正在等资源,就唤醒一个进程。
3.忙等待特点:浪费了CPU时钟,如果状态切换开销比忙等待开销大,就执行忙等待。 4.用信号量解决问题:(出大题)
①定义几个信号量,每个信号量的含义、初始值。
②给出信号量控制的算法,在临界区之前对信号量什么操作,之后什么操作。 例:生产者消费者问题、读者写者问题、哲学家进餐问题、理发师问题 第七章 死锁
1.死锁产生的必要条件:①互斥;②占有并等待;③非抢占④循环等待 2.死锁的处理方法:死锁预防、死锁避免、死锁检测和恢复
死锁预防:①打破“占有并等待”,保证当一个进程申请一个资源是,他不能占有其他资源。②打破“非抢占”,如果一个进程占有资源并申请另一个不能立即分配的资源,那么其现已分配的资源都可以被强占。③打破“循环等待”,对所有资源类型进行完全排序,且要求每个进程按递增顺序来申请资源。
死锁避免:银行家算法;安全状态:能够找到一个合理的序列使得所有程序都能推进过去。 死锁检测:每种资源类型只有单个实例;每种资源类型可有多个实例;应用检测算法; 死锁恢复:进程终止:①终止所有死锁进程②一次只终止一个进程直到取消死锁循环为止 资源抢占:逐步从进程中抢占资源给其它进程使用,直到死锁环被打破为止
4
第八章 内存管理 1.基本概念:
逻辑地址:CPU所生成的地址称为逻辑地址。
物理地址:内存所看到的地址(即加载到内存地址寄存器中的地址)称为物理地址。 动态加载:例程在调用之前并不加载;有更好的内存空间利用率;没有被使用的例程不被载入;当需要大量的代码来处理不经常发生的事情时是非常有用的,不需要操作系统的特别支持,通过程序设计实现。操作系统可能为程序员提供实现动态装入的库函数。
动态链接:在程序开始运行时,只将主程序段装配好并调入内存,其它各段的装配是在主程序段的运行过程中逐步完成。每当需要调用一个新段时,再将这个新段装配好,并与主程序段链接
2.内存管理机制
(1)连续内存分配:每个进程位于一个连续的内存区域。
碎片:当所有总的可用内存值和可以满足请求,但并不连续时,就出现了外部碎片问题。进程所分配的内存可能比所要的大,这两者的数字之差称为内部碎片,这部分内存在分区内,但又不能使用。内部碎片可以是内部的,也可以是外部的。 (2)非连续内存分配: 分页:
基本方法:将物理内存分为固定大小的块,称为帧,内存也分为同样大小的块,称为页。执行一个大小为n页的进程,要发现n个空闲帧并把程序装入其中利用页表进行逻辑到物理地址的映射。
保护方法:内存保护是通过与每个帧相关联的保护位实现的 共享方法:进程之间的共享只读代码留一份拷贝。分页的优点之一在于可以共享公共代码。 3.页表结构:层次页表、哈希页表、反向页表。
层次页表:把逻辑地址空间分成多个页表。两级分页方案。 哈希页表:处理超过32位地址空间的常用方法。
反向页表:表项包含真正内存地址的页的虚拟地址,它包括拥有这个页的进程的信息。减少内存需要储存每个页表,但是当访问一个页时,寻找页表需要增加时间 4.分段:
基本方法:分段是支持这种用户视角的内存管理方案。 硬件支持:
第九章 虚拟内存
1.按需调页:需要时调入相应的页
2.页面置换:基本页置换、先进先出页置换、最优置换、LRU页置换、近似LRU页置换、基于计数的页置换、页缓冲算法、应用程序与页置换 3.(了解)帧分配方法:平均分配和比例分配 帧的最少数量是有给定计算机结构定义的。
全局置换允许一个进程从所有帧集合中选择一个置换帧,而不管该帧是否已分配给其它进程。局部置换要求每个进程仅从其自己的分配帧中进行选择。 4.系统颠簸现象:
含义:频繁地页调度行为称为颠簸,如果一个进程在换页上用的时间要多于执行时间,那么这个进程就在颠簸。
原因:CPU使用率降低,CPU调度程序试图在增加多道程序的程度,就出现了系统颠簸。 解决方法:通过局部置换算法能限制系统颠簸。
5.内存映射文件:文件的内存映射可将一磁盘块映射成内存的一页或多页。
5