快表(TLB)
相联存储器(associative memory),也称为按内容访问存储器(content addressed memory)
或简称为TLB(Translation Lookaside Buffer)。它是一种不根据地址而是根据存储内容来进行存取的存储器,可以实现快速地查找块表
快表就是存放在高速缓冲存储器的部分页表。作为页表的Cache,它的作用与页表相似,但是提高了访问速率。由于采用页表做地址转换,读写内存数据时CPU要访问两次主存。有了快表,有时只要访问一次高速缓冲存储器,一次主存,这样可加速查找并提高指令执行速度。
TLB内部存放的基本单位是页表条目,对应着RAM中存放的页表条目。页表条目的大小固定不变的,所以TLB容量越大,所能存放的页表条目越多,TLB hit的几率也越大。
操作系统功能
(1)作业管理:包括任务、界面管理、人机交互、图形界面、语音控制和虚拟现实等;
(2)文件管理:又称为信息管理;
(3)存储管理:实质是对存储“空间”的管理,主要指对主存的管理;
(4)设备管理:实质是对硬件设备的管理,其中包括对输入输出设备的分配、启动、完成和回收;
(5)进程管理:实质上是对处理机执行“时间”的管理,即如何将CPU真正合理地分配给每个任务。
管程中的过程是原语操作,不可中断
多道程序设计的存储管理
单一连续分区分配方式是运用在早期单道批处理机系统的,分为系统区域和用户区域,最多只有一个作业,适用于单用户。
固定分区与页式分区思想类似,都是预先分配内存,但是页式分区有页表。
段式分区与可变分区思想类似,根据用户所需内存分配资源,段式分区有段表,且多为段式分区与页式分区结合使用,先为进程进行段式分配,然后在每段中进行页式分配。
CPU性能衡量参数-主频,MIPS,CPI,时钟周期,机器周期,指令周期
(1)主频
主频 = 时钟频率,它是指CPU内部晶振的频率,常用单位为MHz,它反映了CPU的基本工作节拍;
时钟频率又称主频,它是指CPU内部晶振的频率,常用单位为MHz,它反映了CPU的基本工作节拍;
(2)时钟周期
时钟周期 t =1/ f; 主频的倒数
(3)机器周期
机器周期 = mt ;一个机器周期包含若干个时钟周期
(4)指令周期
指令周期 = mtn; 执行一条指令所需要的时间,一般包含若干个机器周期
(6)CPI
CPI = mn; 平均每条指令的平均时钟周期个数
指令周期 = CPI×机器周期 = n(CPI=n)×m×时钟周期=nm/主频f, 注意指令周期单位是s或者ns,CPI无量纲
(6)MIPS(MillionInstructions Per Second)
MIPS = 每秒执行百万条指令数 = 1/(CPI×时钟周期)= 主频/CPI
MFLOPS 每秒百万浮点运算次数。
表示秒钟所能执行的指令条数,对于微型计算机可用CPU的主频和每条指令的执行所需的时钟周期来衡量
简述fork、vfork、clone
(1)fork() 子进程拷贝父进程的数据段,代码段.
vfork() 子进程与父进程共享数据段.
(2)fork() 父子进程的执行次序不确定.
vfork():保证子进程先运行(vfork后执行exec)
(3)clone可以让你有选择性的继承父进程的资源,你可以选择想vfork一样和父进程共享一个虚存空间,从而使创造的是线程,你也可以不和父进程共享,你甚至可以选择创造出来的进程和父进程不再是父子关系,而是兄弟关系。
缓解抖动现象
在具有对换功能的操作系统中,通常把外存分为文件区和对换区。前者用于存放文件,后者用于存放从内存换出的进程。抖动现象是指刚刚被换出的页很快又要被访问。对换区大小和进程优先级都与抖动无关。
缓解抖动:采取局部置换策略,在cpu调度程序中引入工作集算法,L=S准则;挂起若干进程。增大缓存容量,或者优化程序以尽可能的实现局域性
实存管理和虚存管理区别
虚拟管理允许部分装入和部分对换,而实存管理不允许这样做。
所谓部分装入,指的是一道应用程序不是全部装入内存以后才开始执行而是只装入其中一部分,甚至一点都不装入就开始运行,然后在运行的构成中根据需要逐步的装入其余部分;
部分对换,指的是当内存已满而又有新的将部分需要装入时,要把已在内存的某一部分换出去,以腾出空间存放新来者。部分装入和部分对换的结果是可以用较小的内存运行较大的程序。实存管理则不同,它所要求的是整体装入。
三级容错机制
NetWare第一级系统容错(SFT Ⅰ)用来防止硬盘表面磁介质因频繁读写而损坏造成的数据丢失 ,主要采用双重目录与文件分配表、磁盘热修复与写后读验证等措施;
NetWare第二级系统容错(SFT Ⅱ)用来防止硬盘或硬盘通道故障造成数据丢失,主要包括硬盘镜像与硬盘双工功能;
NetWare第三级系统容错(SFT Ⅲ)提供文件服务器镜像功能。
一些基本概念
(1)程序计数器可以理解为指针,位数取决于内存指令存储器的地址位数.
(2)指令寄存器存储的是指令码,位数取决于编码时规定的指令长度.
(3)通用寄存器取决于机器位数.
I/O通道
I/O通道是一种特殊的处理机,通道能够完成内存与外设之间数据的传输。其目的是为了建立独立的I/O通道,使得原来一些由CPU处理的I/O任务由通道来承担,从而解脱cpu。通道所能执行的命令局限于I/O操作的指令,也就是执行I/O指令集。
当需要进行I/O操作时,CPU只需启动通道,然后可以继续执行自身程序,通道则执行通道程序,管理与实现I/O操作。整个系统分为二级管理,一级是CPU对通道的管理,二级是通道对设备控制的管理。
驱动程序和存根软件
模块并不是一个独立程序,因此进行单元测试之前,需要开发驱动软件或者存根软件。底层模块无需编写存根软件,顶层模块无需编写驱动软件
通常驱动程序也就是一个“主程序”,它接收测试数据,把这些数据传送给被测试模块,并且打印出有关结果。
存根程序代替被测试的模块抽调用的模块。因此存根程序也可以称为“虚拟子程序”。它使用被它代替的模块的接口,可能做最小量的数据操作,印出对入口的检验或操作结果,并且把控制归还给调用它的模块。
互斥量和临界区可以为递归锁
同一个线程可以多次获取同一个递归锁,不会产生死锁。
如果一个线程多次获取同一个非递归锁,则会产生死锁。
Windows下的Mutex和Critical Section是可递归的。
Linux下的pthread_mutex_t锁是默认是非递归的。可以通过设置PTHREAD_MUTEX_RECURSIVE属性,将pthread_mutex_t锁设置为递归锁。
进程与线程
每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
多进程可以在不同的核上运行,但是线程不可以跨机器迁移,因为线程是存在于单一的进程之中,只能在一个核上运行。
虚存的大小 = Min(内存+外存,2^地址寄存器位数)
特权指令
特权指令指具有特殊权限的指令。这类指令只用于操作系统或其他系统软件,一般不直接提供给用户使用。
在多用户、多任务的计算机系统中特权指令必不可少。它主要用于系统资源的分配和管理,包括改变系统工作方式,检测用户的访问权限,修改虚拟存储器管理的段表、页表,完成任务的创建和切换等。
常见的特权指令有以下几种:
(1)有关对I/O设备使用的指令 如启动I/O设备指令、测试I/O设备工作状态和控制I/O设备动作的指令等。
(2)有关访问程序状态的指令 如对程序状态字(PSW)的指令等。
(3)存取特殊寄存器指令 如存取中断寄存器、时钟寄存器等指令。
(4)其他指令
系统支撑软件
软件系统(Software Systems)是指由系统软件、支撑软件和应用软件组成的计算机软件系统,它是计算机系统中由软件组成的部分。
支撑软件是支撑各种软件的开发与维护的软件,又称为软件开发环境。它主要包括环境数据库、各种接口软件和工具组。著名的软件开发环境有IBM公司的Web Sphere,微软公司的Studio.NET等。
常用快捷键
CTRL + ESC 打开开始菜单
SHIFT + DELETE 彻底删除文件
数字小键盘可用作计算器键盘,也可用作光标控制键,由键盘上 NUMLOCK键进行切换。
临界资源
临界资源是指每次仅允许一个进程访问的资源。
属于临界资源的硬件有打印机、磁带机等,软件有共享的消息缓冲队列、变量、数组、缓冲区等。 诸进程间应采取互斥方式,实现对这种资源的共享。
外部中断处理
外部中断处理过程首先要保护现场,使得中断处理完之后能够恢复程序的执行状态继续执行。
保护现场有两个含义:
(1)由中断隐指令保存程序的断点(程序计数器)
(2)由中断服务程序保存通用寄存器和状态寄存器的内容,中断服务程序是操作系统的一部分。
位示图
位示图可用于:
(1)管理”页式存储管理”中的主存空间
(2)磁盘空间的分配和回收
原子操作
++a和printf不是原子指令,可随时被打断;
特别注意函数printf,a作为参数压栈后,a再变化则不会影响输出(printf实际打印的是压栈的参数,是值拷贝的栈变量)
中断功能是多道程序设计的基础
一般将中断源分为两类:即强迫性中断和自愿性中断。
自愿性中断是正在运行程序时有意识安排的,通常由程序员在编制程序时,因要求操作系统提供服务而有意识使用访管指令或系统调用,从而导致中断的。如访管指令
强迫性中断是正在运行的程序所不期望的,它们是否发生,何时发生都无法预料。
这类中断大致有以下几种:
1)输入/输出中断是来自通信或各种外部设备的中断,用以反馈通信或设备的工作状况;
2)硬件故障中断是机器发生错误时的中断,用以反馈硬件在执行过程中出现的故障;
3)时钟中断是硬件或软件时钟到时引起的中断;
4)程序性中断是因运行过程中的问题所引起的中断,用于反馈程序执行过程中出现的意外情况。
目态与管态
大多数计算机系统将CPU执行状态分为目态与管态。CPU的状态属于程序状态字PSW的一位。CPU交替执行操作系统程序和用户程序。
管态又叫特权态,系统态或核心态。 CPU在管态下可以执行指令系统的全集。通常,操作系统在管态下运行。
目态又叫常态或用户态。 机器处于目态时,程序只能执行非特权指令。用户程序只能在目态下运行,如果用户程序在目态下执行特权指令,硬件将发生中断,由操作系统获得控制,特权指令执行被禁止,这样可以防止用户程序有意或无意的破坏系统。
从目态转换为管态的唯一途径是中断。
从管态到目态可以通过修改程序状态字来实现,这将伴随这由操作系统程序到用户程序的转换。
减少磁盘访问次数的措施
1)既然要减少访问,那最理想的情况就是不访问呗,把所有的数据都丢进缓存中, 将缓存变得大速度变快
2)避免随意访问磁盘,于是就改良磁盘调度算法
3)以上都是从调用情况的外部入手,指标也得治本,所以还要从自己的内部入手, 将自己的目录管理的整齐,尽量不给人家添麻烦
数据块处理时间
假定从磁盘把一块数据输入到缓冲区的时间为Ts,操作系统将该缓冲区中的数据传送到用户区的时间为Tm,而CPU对这一块数据处理的时间为 Tc。
对于单缓冲:
当Ts > Tc,主要是Tm与Ts不能并行,因此总时间T=(n*(Ts+Tm)+Tc)/n=Ts+Tm
当Ts < Tc,主要是Tm与Tc不能并行,因此总时间T=(n*(Tc+Tm)+Ts)/n=Tc+Tm
故可把系统对每一块数据的处理时间表示为Max(Tc, Ts)+Tm。
对于双缓冲:
当Ts>Tc时,由于Tm<<Tc且Tm<<Ts,所以T=(n*Ts+Tm+Tc)/n=Ts=max(Tc,Ts)
当Ts<Tc时,Tm与Tc不能并行,T=(n*(Tm+Tc)+Ts)/n=Tm+Tc=max(Tc,Ts)+Tm,但Ts<Tc这种情况非常少,所以一般做题时填双缓冲的时间都填Ts>Tc情况下的max(Tc,Ts)
综上,双缓冲时间为max(Tc,Ts)
从资源分配的角度可将设备分类为独占设备、共享设备,虚拟设备
程序访问内存的性能
与CPU片内cache大小有关:
CPU缓存是为了解决CPU运算速度和内存读写速度不匹配的矛盾.因此,CPU可以先去处理别的事,等内存把缓存填满,CPU然后从缓存中取,这样就可以解决它们之间的矛盾.而缓存的大小太小的话,内存很快就会填满,因此内存就不能往缓存中存数据了.影响内存读写效率.
与内存页面的访问特权级别无关
其作用是:在进行内存访问时(保护模式下的内存访问),用于控制操作或者限制访问性,其实也就是满足了特权级的转换规则,才允许操作,不然就是不合法的内存访问。
操作系统的缓冲技术
引入缓冲的主要原因包括:
(1)缓和CPU与I/O设备间速度不匹配的矛盾;
(2)减少对CPU的中断频率,放宽对中断响应时间的限制;
(3)提高CPU和I/O设备之间的并行性。
所以采用缓冲技术,可减少对CPU的中断次数,减少访问主存,从而提高系统效率。
操作系统采用的缓冲技术,虽然内存上有一级二级三级的缓存,但是硬件的实现代价大,主要是在系统内核中实现的。
Belady现象
Belady现象的描述:一个进程P要访问M个页,OS分配N(N<M)个内存页面给进程P;对一个访问序列S,发生缺页次数为PE(S,N).当N增大(且N小于M)时,PE(S, N)时而增大,时而减小。
FIFO是最早出现的页置换算法之一。Belady现象的原因是FIFO算法的置换特征与进程访问内存的动态特征是矛盾的,即被置换的页面并不是进程不会访问的,因而FIFO并不是一个好的置换算法。
举例:
分段与分页
分页式存储管理可能将连续的指令放置在不同的页中,会发生换页中断,而分段、段页都是逻辑分配空间,段长可变,逻辑上相对连续的指令放在同一段中,不会像分页那样频繁换页操作,因此系统开销小。
临界区
临界区 指的是一个访问共用资源的程序片段。
可重定位分配方式
属于连续分配方式的,只是它在内存碎片很多而导致的程序不能放入内存时,进行“紧凑”,解决了碎片问题。
静态优先算法
静态优先算法,不管是可抢占的还是不可抢占的,都会发生饥饿的现象
静态重定位与动态重定位
静态重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变。
动态重定位即在程序运行过程中要访问数据时再进行逻辑地址与物理地址的变换(即在逐条指令执行时完成地址映射。)
皮特森算法
临界区互斥与避免进程互相阻塞。
boolean flag[2];
int turn=0;
flag[0]=false;
flag[1]=false;
void P0 () //进程P0 {
while (TURE){
Flag[0]=TURE;
turn=1;
While (flag[1]&&(turn==1));
临界区;
Flag[0]=FALSE;
}
}
void P1 () //进程P1 {
while (TURE){
Flag[1]=TURE;
turn=0;//这里应该赋值为0
While (flag[0]&&(turn==0));
临界区;
Flag[1]=FALSE;
}
}
考虑进程P0,一旦它设置flag[0]=true,则P1不能进入临界区。如果P1已经进入临界区,那么flag[1]=true,P0被阻塞不能进入临界区。
另一方面,互相阻塞也避免了。假设P0在while里被阻塞了,表示flag[1]为true且turn=1,则此时P1可以执行。
分时与并发
分时系统都是并发的,有并发却不一定是分时系统。
首先想到的多核,准确来说多核是并行不是并发。并发的概念指的是一段时间内间隔执行。
举个例子:Windows XP不是分时系统,但即使是单核的,进程也是并发执行的。
有了多道程序设计(内存管理、处理机调度、中断机制等)就可以实现进程之间的并发执行。
页面调度算法的主要用途
页面置换算法:最优页面置换算法(OPT)、FIFO(会导致Belady)、LRU、时钟页面置换算法
(1) 虚拟存储器中,主存页面(或程序段)的替换
(2) Cache中的块替换
(3) 虚拟存储器的快慢表中,快表的替换
(4) 虚拟存储器中,用户基地址寄存器的替换
用户态切换至内核态的三种方法
- 系统调用
- 异常
- 外围设备的中断