操作系统:万字长文,重点知识梳理:具体md文档我放在了资源里

分两大部分(基本概念及原理,综合应用)

第一章:绪论

操作系统定义及功能

操作系统的定义:

  • 操作系统是计算机中的一个系统软件
  • 它统一管理着计算机的软硬件资源和控制程序的执行
  • 提供人机交互的接口和界面

操作系统的功能:

  • 第二章:处理机管理功能(进程管理)
  • 第五章:存储器管理的功能
  • 第六章:设备管理的功能
  • 第七章:文件管理的功能
  • 第八章:作业管理的功能

多道程序设计定义及特点

定义:

多道程序设计是一种软件技术,该技术使同时进入计算机主存的几个相互独立的程序闸 管理程序控制之下相互交替地运行

特点:

(1)多道:计算机主存中同时存放几道相互独立的程序。

(2)宏观上并行:看起来用户程序好像在同时执行。

(3)微观上串行:事实上在处理器里面是在迅速交替执行的。

分时/实时操作系统,网络/分布式操作系统

分时系统:

在一台主机上连接有多个配有显示器和键盘的中断,同时允许多个用户通过自己的终端以交互方式使用计算机,共享主机中的资源。

分时操作系统有以下特征:

(1)多路性。一台主机上连有多个终端,因此多个用户同时共享一台主机,从而显著地提高系统资源的利用率。

(2)独立性。各个拥护像独占主机一般,独立地工作,互不干扰。

(3)及时性。系统能按人们所接受的等待时间(通常为1~3s)及时响应拥护的请求。

(4)交互性。拥护能与系统进行广泛的人机对话,以请求系统为他提供的多方面的服务。

实时系统:

实时系统是指系统能够及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时人物协调一致地运行。

相对于分时操作系统,增加了可靠性。

军方系统

网络操作系统:

计算机网络是通过通信设施将物理上分散的、具有自治功能的多个计算机系统互联起来的,实现信息就交换、资源共享、可互操作和协作处理的系统。

网络操作系统除了具备一般操作系统应该具有的功能以外,还要增加网络功能模块。

比如路由器系统。

分布式操作系统

以往的计算机,其处理和控制功能都高度集中在一台主机上,所有任务都由主机处理,这样的系统称为集中处理式系统。

分布式操作系统是若干个计算机的集合。分布式系统是一个一体化的系统,整个操作系统有一个全局的操作系统称为分布式操作系统。

比如Harmony-OS

操作系统的特征和作用

操作系统的基本特征

采用多道程序设计的操作系统都有如下基本特征:

(1)并发性。并发性是指两个或多个事件在同一时间间隔内发生。在多道程序的环境下,并发性是指在一段时间内,宏观上有多个程序在同时运行,在微观上这些程序是交替运行的。

(2)共享性。共享性是指系统中的资源可以供内存中多个并发执行的进程同时使用。根据资源性质的不同可以将资源共享方式分为以下两种:互斥共享方式(打印机)和同时访问方式。

(3)虚拟性:虚拟性是指通过某种技术,将一个物理实体变成若干个逻辑上的对应物。用来实现虚拟性的技术成为虚拟技术。

(4)异步性。异步性是指在多道程序的环境下,每个程序何时执行、合适暂停都是未知的,即它们以不可预知的速度向前推进。但同时操作系统应保证程序的执行结果是可再现的,即只要运行环境相同,一个作业的多次运行都会得到相同的结果。

★操作系统的作用

(1)作为用户与计算机硬件系统之间的接口

(2)作为计算机系统资源的管理者

(3)用作扩充机器

并行/并发

并行:

并行是两个或者多个事件在同一时刻同时发生。

比如多核处理器能够并行执行。

并发:

并发是两个或者多个事件在同一时间段内发生。

程序的并发执行不同于程序的并行执行:

  • 并发执行是指一组程序按独立的、异步的速度执行
  • 并发执行不等于时间上的重叠

✔第一章习题

分时系统的特征是什么?

(1)同时性。允许在一台主机上同时联接多台联机终端,系统按分时原则为每个用户服务。宏观上,是多个用户同时工作,共享系统资源;而微观上,则是每个用户作业轮流运行一个时间片。它提高了资源利用率,从而促进了计算机更广泛的应用。

(2)独立性。每个用户各占一个终端,彼此独立操作,互不干扰。因此,用户会感觉到就像他一人独占主机。

(3)及时性。用户的请求能在很短时间内获得响应,此时间隔是以人们所能接受的等待时间来确定的,通常为2–3秒钟。

(4)交互性。用户可通过终端与系统进行广泛的人机对话。其广泛性表现在:用户可以请求系统提供多方面的服务,如文件编辑、数据处理和资源共享等。

何谓多道程序设计?叙述它的主要特征和优点。

答:多道程序设计是一种软件技术,该技术使同时进入计算机主存的几个相互独立的程序在管理程序控制之下相互交替地运行。当某道程序因某种原因不能继续运行下去时(如等待外部设备传输数据),管理程序便将另一道程序投入运行。这样可以使中央处理器及各外部设备尽量处于忙碌状态,从而大大提高计算机的使用效率。
在单处理器系统中,多道程序运行的特征是:
(1)多道:即计算机主存中同时存放几道相互独立的程序。
(2)宏观上并行:同时进入系统的几道程序都处于运行过程中,即它们先后开始了各自的运行,但都未运行完毕。
(3)微观上串行:从微观上看,主存中的多道程序轮流地或分时地占用处理器,即多道程序交替执行。
引入多道程序设计的优点是:
(1)可提高CPU的利用率;
(2)可提高主存和I/O设备利用率;
(3)可增加系统吞吐量;

试在交互性、及时性和可靠性方面,将分时系统与实时系统进行比较。

答:在交互性方面,分时系统的交互性强,实时系统的交互性弱,因为交互性强很能满足实时系统响应速度快和高可靠性的要求。
在及时性方面,实时系统要求快速响应而及时性强,分时系统相比较及时性较差。
在可靠性方面,实时系统要求高可靠性而可靠性强,分时系统相比较可靠性较差。

试比较网络操作系统与分布式操作系统。

答:计算机网络是通过通信设施将物理上分散的、具有自治功能的多个计算机系统互连起来的,实现信息交换、资源共享、可互操作和协作处理的系统。
在计算机网络中,每个主机都有操作系统,它为用户程序运行提供服务。当某一主机联网使用时,该系统就要同网络中更多的系统和用户交往,这个操作系统的功能就要扩充,以适应网络环境的需要。网络操作系统既要为本机用户提供简便、有效地使用网络资源的手段,又要为网络用户使用本机资源提供服务。为此,网络操作系统除了具备一般操作系统应具有的功能模块之外,还要增加网络功能模块,主要应具有网络通信、网络资源管理、网络服务、.网络管理、互操作能力等。
一个分布式系统就是通过网络连接的若干计算机的集合。这些计算机都有自己的局部存贮器和外部设备。它们既可以独立工作(自治性),亦可合作工作。在这个系统中各计算机可以并行操作且有多个控制中心,即具有并行处理和分布控制的功能。分布式系统是一个一体化的系统,在整个系统中有一个全局的操作系统称为分布式操作系统,它负责全系统的资源分配和调度、任务划分、信息传输、控制协调等工作,并为用户提供一个统一的界面、标准的接口。用户通过这一界面实现所需的操作和使用系统资源。至于操作定在哪一台计算机上执行或使用哪台计算机的资源则是系统的事,用户是不用知道的,也就是说系统对用户是透明的。

第二章:进程管理

进程定义,进程的基本状态,进程状态转换图

进程定义:

可并发执行程序在一个数据集上的一次执行的过程,它是系统资源分配的基本单位。

进程的基本状态:

(1)就绪状态:只差CPU。

(2)运行状态:进程已经活得CPU,程序正在执行。

(3)等待状态:进程因发生某种事件(比例请求I/O操作)而暂停执行时的状态。

进程状态转换图

进程三种状态的基本转换

具有挂起状态的进程转换。

挂起:调节CPU的负荷,将进程从内存调出外存

进程与线程的比较

信息 进程 线程
状态 运行、就绪、等待 运行、就绪、等待
资源分配 系统资源分配的基本单位 可参与调度的基本单位(程序执行的最小单位),线程本身不拥有系统资源,只拥有一些必要的资源。可以和其他线程共享进程所有的资源。

进程的终止将导致进程中所有线程的终止

进程是可并发执行的程序在一个数据集上的一次执行过程,它是系统进行资源分配的基本单位。而线程是进程中的一个实体,是可独立参与调度的基本单位。一个进程可以有一个或多个线程,它们共享所属进程所拥有的资源。我们从以下几个方面来比较线程与进程:
(1)拥有资源方面
不管是在以进程为基本单位的操作系统,还是在引入线程的操作系统中,进程都是独立拥有资源的一个基本单位。它可以申请并拥有自己的资源,也可以访问其所属进程的资源。而线程只拥有一点在运行中必要的资源,如程序计数器、寄存器和栈。当然,它可以访问其所属进程的资源(注意:资源仍然是分给进程的)。
(2)调度方面
在引入线程的操作系统中,进程作为独立拥有资源的基本单位,而线程是独立参与调度的基本单位。这样,引入线程的操作系统中存在着两级调度:同一进程内线程之间的调度、不同进程之间的调度(由分属于不同进程的线程之间的调度引起)。同一个进程内的线程切换不会引起进程切换;而在由一个进程内的线程切换到另一进程内的线程时,将引起进程切换。
(3)并发性方面
在引入线程的操作系统中,不仅不同进程的线程之间可以并发执行,而且在同一个进程的多个线程间亦可并发执行,因而使系统具有更好的并发性。
(4)系统开销方面
相比于没有引入线程的操作系统,引入线程的系统其系统开销将显著降低。例如,在创建或撤销线程时,系统只需分配与回收很少的资源,而无须像进程创建或撤销那样,花费开销来分配或回收如内存空间、I/O设备等资源;又如,在线程切换时,只需保存和设置少量的寄存器的内容,而无须像进程切换那样,花费开销来保存和设置很多的现场信息。另外,同一个进程内线程之间的通信由于共享所属进程的存储空间,因此也比进程通信更加容易。

※临界资源,临界区及管理要求

临界区:

并发进程中与共享变量有关的程序段

临界资源:

共享变量所代表的资源

管理要求:

空闲让进、忙则等待、有限等待、让权等待

(1)一次最多让一个进程在临界区执行,当有进程在临界区执行的时候,其他想进入临界区执行的进程必须等待。

(2)任何一个进入临界区执行的进程必须在有限的时间内退出临界区,即任何一个进程都不应该无限期地逗留在临界区中。

(3)不能强迫一个进程无限期地等待进入它的临界区,即有进程退出临界区时,应让一个等待进入临界区的进程进入它的临界区。

信号量定义及取值意义

信号量S是一个整数。

  • 在S大于等于0的时候:表示可供并发进程使用的资源实体数。
  • 在S小于0的时候,则用|S|表示正在等待使用资源实体的进程数。

除了赋值以外,信号量只能通过PV操作来访问

进程的互斥/进程的同步

进程互斥:

进程的互斥是指当有若干个进程都要使用同一共享资源的时候,任何时刻最多只允许一个进程去使用,其他要使用该资源的进程必须等待,直到占用资源者释放该进程。

进程同步:

并发进程之间存在一种制约关系,一个进程的执行依赖于另一个进程的消息,当没有得到另一个进程的消息的时候,这个进程应该等待,直到消息到达时才被唤醒。

💕信号量机制实现进程互斥和进程同步问题

信号量S的定义:

  • S<0表示此时等待的资源个数有S个
  • S>0表示此时的共享的资源数有S个
  • S=0表示当前的状态是所有资源都互斥的状态。

PV操作解读:

//汤晓丹写法:
PV操作的解读
P操作,又称为等待操作
wait(S){
	while(S<=0); //如果此时内存并不空闲 ,就陷入循环,不再增加等待的作业了
	S--;
}

V操作,又称为释放操作
signal(S){
	S++; #释放进程
}


//课本是这样的写法:

void P(Semaphore S){
    S=S-1; //直接分配资源
    if(S<0)  //如果此时有等待的资源
        W(S); //那么将进程设置成等待信号量的状态,进入等待队列
}

operation
    
void V(Semaphore S){
    S=S+1;	//此时进行完操作进行资源的释放
    if(S<=0)  //如果此时内存还是不空闲
        R(S); //释放一个正在处于等待信号量状态的进程
}

很反感这种东西抄过来完全不一样还拿来给学生用。

只要理解P操作是一个获取资源的操作,V操作是一个释放资源的操作就可以了。

PV操作实现进程同步:

进程同步实例:

注意格式:

Semaphore S2,S3,S4,S5,S6,S7;
//P1直接执行,不需要信号量
S2=S3=S4=S5=S6=S7=0;
void P1(){
    //进入区:直接进入,么有P操作
    …… //临界区
    V(S2);
    V(S3);
    V(S4);
}
void P2(){
    P(S2);
    ......
    V(S7);
}
void P3(){
    P(S3);
    ......
    V(S5);
}
void P4(){
    P(S4);
    ......;
    V(S6);
}
void P5(){
    P(S5);
    ......;
    V(S6);
}
void P6(){
    P(S6);
    P(S6);
    //因为在执行P6前执行了两次V操作
    ......;
    V(S7);
}
void P7(){
    P(S7);
    P(S7);
    ......;
}

生产者—消费者问题:

有一个生产者和一个消费者,共用一个缓冲区,生产者生产物品,每次生产之后放入缓冲区,消费者取出物品,只有当消费者把物品取走之后,生产者才能把下一件物品放入。

首先分析一下,如果信号量是一个,代表着缓冲区有没有东西,一开始缓冲区没有东西,那就设置成0.那就代表生产者必须先是V操作再是P操作,这样你发现没有,根本不能实现进程的同步机制,因为实现了V操作,P操作一定可以实现,这样信号量就又是0了,同步的问题就是两个进程一定不能相互串扰。

进程的同步是什么,就是一方一定要得到另一方的消息才能做出操作,而且进程的同步时按照顺序进行的,一定不能串扰。

所以,信号量一定是两个,表示消费者是否可以放,生产者是否可以取。

int buffer; //缓冲区
Semaphore S_producter=1,S_consumer=0;
//此时初始就表示缓冲区为空,生产者可以生产,消费者不能消费。

void producter(){
    while(1){
        [生产者生产资源source]
        P(S_producter); //将缓冲区设置成不能放置资源的状态
        buffer=source; //资源放入缓冲区
        
        V(S_consumer); //将设置成消费者能够取出的状态,此时消费者开始了它的表演
    }
}

void comsumer(){
    while(1){
        P(S_comsumer); //将消费者设置成不能取东西的状态
        [消费者开始从缓冲区buffer取东西]
        V(S_producter); //将缓冲区设置成能够放东西的状态。
    }
}

这种只有一个缓冲区的状态,他们的PV操作是一种交替方式的。

V操作相当于voice一样,就是告诉对方可以进行操作了。

P操作相当于position,此时的状态是怎么样的。

如果缓冲区可以放置n个数据

int B[n];
int k=0,t=0; //使用k,t两个指针表示生产者在缓冲区存物品和消费者在缓冲区取物品的相对位置
Semaphore SP=n,SG=0; //表示的是生产者一开始可以存放n个东西

cobegin
    void producer(){
            while(1){
            [生产者生产东西]
            P(SP); //P操作使得资源数减一
            B[k]=product; //将生产物品放入k号空间
            k=(k+1)%n; //缓冲器循环使用,就像一个循环队列一样,因为数组从0开始,所以需要K+1
            V(SG); //V操作是得消费者可消费数加一
    	}
	}
	void comsumer(){
        while(1){
            P(SG);          
            [消费者消费B[t]东西]
            t=(t+1)%n;
            V(SP) //V操作使得生产者可生产数加一
            
        }
    }
coend;

如果有p个生产者和q个消费者,并且有n个缓冲区

int B[n];
int k=0,t=0;
Semaphore SP=n,SG=0;
Semaphore S=1;
cobegin
    void producer(){
        while(1){
            [produce a product];
            P(SP);
            P(S);  // 互斥信号量S,表示只能由一个生产者或者消费者来进行放入或者取出操作.
            B[k]=product;
            k=(k+1)%n;
            V(SG);
            V(S);
        }
    }
    void comsumer(){
        while(1){
            P(SG);
            P(S);
            [take product from B[t] ];
            t=(t+1)%n;
            V(SP);
            V(S);
        }
    }
coend;

读者和写者问题:

两个并发进程: 读者和写者.他们共享一个文件F

  1. 允许多个读者可同时对文件进行读操作

  2. 任意写者在写之前不允许其他读者或者写者工作

  3. 写者进行写操作前,应该让已有的读者或写者退出操作

    int rc=0; //rc对读进程进行计数
    Semaphore W=1, mutex=1; // W表示是否允许写的信号量,mutex表示对于计数器rc的互斥信号量

    cobegin;
    void readi(){
    P(mutex); //可以开始进行读操作
    rc=rc+1; //读者数量增加
    if(rc1)
    P(W); //如果有读者在里面,写者不能操作,信号量-1
    V(mutex); //还是允许读操作
    [read file]
    P(mutex); //又不允许读了,读完了
    rc=rc-1;
    if(rc
    0)
    V(W); //最后一个人读完了,就释放文件
    V(mutex);

    }
    void writej(){
    P(W);
    [写文件]
    V(W);
    }
    coend;

🤦‍♀️第二章习题

PV操作习题

有三个并发进程,R负责从输入设备读入信息并传送给M,M将信息加工后并传送给P,P把加工后的信息打印输出。现有:
(1)一个缓冲区;
(2)两个缓冲区;
用PV操作写出这三个进程能正确工作的程序。

这是一个不典型的生产者消费者问题:当只有一个缓冲区的时候:

Semaphore S1=1,S2=0,S3=0;
cobegin

void R(){
    while(1){
        [输入设备读入信息]
        P(S1);
        [把信息放入缓冲区中]
        V(S2);
    }
}
void M(){
    while(1){
        P(S2);
        [从缓冲区中取出信息读入]
        [加工数据信息并放入缓冲区]
        V(S3);
    }
}
void P(){
    while(1){
        P(S3);
        [从缓冲区中读出数据]
        V(S1);
        [打印刚刚读出的数据]
    }
}

注意:PV操作中间只能是对缓冲区进行操作

当有两个缓冲区的时候:我看这个答案的做法就很妙啊。

它将缓冲区这么使用:

Semaphore S1=1,S2=0,S3=1,S4=0;
//S1 表示R是否可以放资源到第一个缓冲区
//S2 表示M是否可以到第一个缓冲区取资源
//S3 表示M是否可以放资源到第二个缓冲区,一开始是可以放资源的,所以这里要设置成1
//S4 表示P是否可以从第二个缓冲区取资源

cobegin;
void P(){
    while(1){
        [read information form machine]
        P(S1);
        [input source in frist buffer]
        V(S2);
    }
}
void R(){
    while(1){
        P(S2);
        P(S3);
        [get source from frist buffer]
        [input source in secound buffer]
        V(S4);
        V(S1); //此时R又可以读数据放到第一个缓冲区了
    }
}
void P(){
    while(1){
        P(S4);
        [get information from secound buffer]
        V(S3);//此时第二个缓冲区又可以写资源进去了
    }
}

用PV操作解决生产者和消费者问题。假设有一个可以存放1件产品的缓冲器;有m个生产者,每个生产者每次生产一件产品放入缓冲器中,有n个消费者,每个消费者每次从缓冲器中取出一件产品。

int buffer;int s1=1,s2=0;//管你有几个生产者几个消费者,缓冲区就一个cobeginvoid producer_i(){  //(i=1,2,3,....,m)    [produce a product];    P(S1);    buffer=product;    V(S2);}void consumer_j(){	//j=1,2,3,...,n    P(S2);    [take a product from buffer];    V(S2);}coend;

在公共汽车上,司机和售票员的工作流程如下图所示。为保证乘客的安全,司机和售票员应密切配合协调工作。请用PV操作来实现司机与售票员之间的同步。

// S1是否可以启动汽车;   S2是否可以开车门;//汽车启动期间不可以售票,售票期间不可以启动汽车Semaphore S1=1,S2=0;cobeginvoid Driver(){      while(1)     {         P(S1);        [启动车辆]        [正常行车]        [到站停车]        V(S2);     }}void busman(){  while(1)     {         [售票]        P(S2);        [开车门]        [关车门]        V(S1);     }}

如下图所示的进程流程图中,有六个进程合作完成某一任务,试说明这六个进程之间的同步关系,并用PV操作实现之

integer S2,S3,S4,S5,S6;S2=0;S3=0;S4=0;S5=0;S6=0;Cobeginvoid P1(){    ……    V(S2);    V(S3);    V(S4);}void  P2(){    P(S2);    ……    V(S6);}void  P3(){    P(S3);    ……    V(S5);}void  P4(){    P(S4);    ……    V(S6);}void P5(){    P(S5);    ……    V(S6);}void P6(){    P(S6);    P(S6);    P(S6);    ……}Coend

第三章:死锁

※死锁定义、产生原因、必要条件、四种处理技术

死锁的定义:

死锁是指一组并发执行的进程彼此等待对方释放资源,而在没有得到对方占有的资源之前不释放自己所占有的资源,导致彼此都不能向前推进,称该组进程发生了死锁。

死锁产生原因:

(1)竞争资源:当系统中供多个进程所共享的资源不足以同时满足他们的需要的时候,引起他们对资源的竞争而导致死锁。

(2)进程推进顺序不当:当进程在运行过程中,请求和释放资源的顺序不当,导致了进程的死锁。

必要条件:

(1)互斥条件:进程应互斥使用资源。

(2)请求和保持条件:一个进程请求资源得不到满足而等待时,不释放已经占有的资源。

(3)不剥夺条件:任意一个进程不能从另一个进程抢夺资源。

(4)循环等待条件:存在一个循环等待链,其中,每一个进程都循环等待另一个进程所占有的资源,造成循环等待。

※四种处理技术:

(1)预防死锁:系统运行之前就采取相应措施。(破坏最后三个条件)

(2)避免死锁:克服预防死锁不足而提出的动态策略。(银行家算法)

(3)检测死锁:事先不做处理,检测到之后再处理。(资源分配图和死锁定理)

(4)解除死锁:已经发生死锁就采取相应措施。(重启、逐步撤销死锁进程和撤销所有死锁进程)

💕银行家算法(判断安全状态,找出安全序列)

【例】假设系统中有五个进程{P0、P1、P2、P3、P4}和三类资源{A,B,C},各种资源的数量分别为10、5、7,在T0时刻的资源分配情况如表所示。

T0时刻的安全性:

银行家算法的易错点就是循环的时候。

在检索完P1之后不会返回去从P0开始检索,而是去检索P2.

(2) P1请求资源:P1发出请求向量Request1(1,0,2),系统按银行家算法进行检查:

① Request1(1, 0, 2)≤Need1(1, 2, 2)

② Request1(1, 0, 2)≤Available1(3, 3, 2)

③ 系统先假定可为P1分配资源,并修改Available, Allocation1和Need1向量,由此形成的资源变化情况如图中的圆括号所示。

④ 再利用安全性算法检查此时系统是否安全。

两步比较千万不能少,肯定是要比较才能继续写的。

通过这个例子,我们看到银行家算法确实能保证系统时时刻刻都处于安全状态,但它要不断检测每个进程对各类资源的占用和申请情况,需花费较多的时间。

💕资源分配图的化简

操作系统中的每一时刻的系统状态都可以用进程资源分配图来表示

进程资源分配图是描述进程和资源间申请及分配关系的一种有向图,可用以检测系统是否处于死锁状态

例题:

如图是进程—资源分配图的一个例子

存在占有和等待资源的环路,导致一组进程永远处于等待资源状态,发生了死锁

这个环路死锁的原因是,R3有两个资源,但是已经分配了两个资源出去了,P3在请求资源,R3分配给了P1、P2,P1得不到已经给P2的R1,P2得不到R2,P3得不到R3.谁也不让谁,就产生了死锁。

进程—资源分配图中存在环路并不一定发生死锁

因为循环等待资源仅是死锁发生的必要条件,而不是充分条件

如图便是一个有环路而无死锁的样子

如图,一开始要是把资源给P2和P4,那么就不可能发生死锁。

系统为死锁状态的充分条件是:

当且仅当该状态的进程—资源分配图是不可完全简化的 (该充分条件称为死锁定理)

【例题】.假定某系统的资源分配图如下所示,分析当时系统是否存在死锁?若进程P3再申请R3时,系统将发生什么变化,说明理由。

不发生死锁现象,它并没有循环。

P3再申请R3,P3就会有着占有且等待现象

🤦‍♀️第三章习题

在生产者-消费者问题中,如果对调生产者(或消费者)进程的两个P操作和两个 V操作次序,会发生什么情况?试说明之。

两个P操作是申请资源不能交换,否则可能产生死锁,而V操作是释放资源,与先后次序无关,不会产生死锁。

一台计算机有8台磁带机,它们由N个进程竞争使用,每个进程可能需要3台磁带机,请问N为多少时,系统没有死锁的危险,并说明原因。

当N≤3时,没有死锁的危险, 因为最坏的时候N=3,怎么样也会有一个进程分配到三台磁带机然后释放资源. N=4的时候如果每个进程都占有两个磁带机并且不释放,就直接死锁了.

若系统有同类资源m个,被n个进程共享,问:当m>n和m<=n时每个进程最多可以请求多少个这类资源,使系统一定不会发生死锁?

当m>n时,设一个进程最多可以请求多x个资源,故当m > n * (x-1)时,系统不会发生死锁。
于是:x – 1 < m / n
x < m / n +1
当 m 能被n除尽时,x = m / n
当 m 不能被n除尽时,x = trunc (m / n) +1
当m=n时,每个进程最多可以请求1个资源。
当m < n时,每个进程也最多可以请求1个资源。

资源分配图及其化简

假设系统有五类独占资源:r1、r2、r3、r4、r5。各类资源分别有2、2、2、1、1个单位的资源。系统有五个进程:P1、P2、P3、P4、P5。其中P1已占有2个单位的r1,且申请1个单位的r2和1个单位的r4;P2已占有1个单位的r2,且申请1个单位的r1;P3已占有1个单位的r2,且申请1个单位的r2和1个单位的r3;P4已占有1个单位的r4和1个单位的r5,且申请1个单位的r3;P5已占有1个单位的r3,且申请1个单位的r5。
① 试画出该时刻的资源分配图。
② 什么是死锁定理?如何判断,给出的资源分配图中有无死锁?请给出判断过程和结果。

我也不知到为什么能画的这么好看,一看这出题就是套路.

死锁定理:当且仅当该状态的进程—资源分配图是不可完全简化的,就死锁

P5执行完毕后,系统当前资源分配图已经不能再简化,故系统处于死锁状态。
对系统进行检测,此时系统可用资源数为(0,1,2),从上表可以看出当前系统资源剩余数量已不能满足任何进程的需求,所以不能给P1分配资源。

第四章:中断与处理机调度

中断定义及处理过程

中断定义

中断是指CPU对系统发生的某个事件做出的一种反应,它使CPU暂停正在执行的程序,保留现场后自动执行相应的处理程序,该事件处理后,如被中断进程的优先级最高,则返回断点继续执行被打断程序。

处理过程:

(1)检测是否有未响应的中断信号。

(2)保护被中断进程的CPU环境。

(3)分析中断原因

(4)处理中断

(5)恢复CPU的现场并退出中断

高级调度和低级调度比较

名词 解释 内容
高级调度 作业调度 将辅存中的作业调入主存中
中级调度 主存调度 进程再主存和辅存之间的切换
低级调度 进程调度 选择某个进程从就绪态变成执行态

💕进程调度算法

先来先服务(First Come Frist Service, FCFS)

按照进程进入就绪的先后顺序选择可以占用处理机的进程.
进程调度总是把处理机分配给就绪队列中的第一个进程。一旦一个进程占用了处理机,它就一直执行下去,直到因等待某事件或进程完成了工作才让出了处理机分配给其他进程

  • 优点: 简单、易于实现
  • 缺点:
    • 有利于长的进程,不利于短的
    • 有利于CPU繁忙型进程,不利于I/O繁忙型的进程

【例1】系统中有5个进程P1、P2、P3、P4和P5并发执行,5个并发进程的创建时间、执行时间、优先级以及时间片个数如表4-2所示。

短进程优先调度算法(短作业优先调度算法)

短进程优先调度算法
从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直到进程结束
最大限度地降低了平均等待时间,但也存在对长进程的不公平性
长进程在此调度算法中可能长时间得不到运行机会,甚至由于“饥饿”时间过长而被系统撤销

  • 优点: 调度性能较好,系统吞吐量高。
  • 缺点:
    • 不利于长进程。
    • 不考虑进程的紧迫程度。
    • 估计运行时间很难准确获得。
    • 无法实现人机交互。

最短剩余时间优先调度算法

最短剩余时间优先调度算法(Shortest Remaining Time First,SRTF)
短进程优先调度算法的变型
采用抢占式调度策略
当新进程加入到就绪队列中时,如果它需要的运行时间比当前运行的进程所需的剩余时间短,则执行切换,当前运行进程被强行剥夺CPU的使用权,使新进程获得CPU并运行

  • 优点: 调度性能较好,系统吞吐量高。
  • 缺点:
    • 1)不利于长进程。
    • 2)不考虑进程的紧迫程度。
    • 3)频繁切换,系统开销大。
    • 4)无法实现人机交互。

【例】P1、P2、P3、P4四个进程到达系统的时间和运行时间如表4-5所示。请采用最短剩余时间优先调度算法求出各个进程的执行情况,并计算平均周转时间和平均带权周转时间。

时间片轮转调度算法

时间片轮转算法(Round Robin,RR)
依据公平服务的原则,将处理机的运行时间划分成等长的时间片,轮转式分配给各个就绪进程使用
采用此算法的系统中,所有就绪进程按照先来先服务的原则排成一个队列,每次调度时将处理机分派给队首进程
如果进程在一个时间片内没执行完,那么调度程序强行将该进程中止,进程由执行态变为就绪态并把处理机分配给下一个就绪进程
算法能保证就绪队列中的所有进程在一给定的时间段内均能获得处理机运行
特点:所有进程都是同等重要的

【例】下面,仍然采用FCFS算法中的实例,改用时间片轮转调度算法对其重新调度。5个进程分别需要运行3、6、1、4、2个时间片,5个并发执行进程的运行时序图如图4-9所示。

优先级调度算法

1)静态优先级调度:
进程的优先级在创建时确定,其在进程的整个运行期间都不改变此
优先级是个常数
确定进程优先级的依据:
进程类型、进程对资源的需求、用户要求等

2)动态优先级调度:
进程在创建时被赋予的优先级可随进程执行或等待时间的增加而改变,这可防止低优先级进程长期得不到运行

优缺点:
1)调度灵活,能适应多种调度需求
2)进程优先级的划分和确定每个进程优先级都比较困难
3)抢占式调度增加了系统的开销

仍然采用FCFS算法中的实例,分别改用不可抢占静态优先级调度算法和可抢占静态优先级调度算法重新调度。不可抢占静态优先级调度算法具体分析如下:

多级反馈队列调度算法(了解)

☆总结

🤦‍♀️第四章习题

高级调度与低级调度的主要任务是什么?

答: 高级调度的主要任务是根据某种算法,把外存上处于后备队列中的那些作业调入内存。

低级调度是保存处理机的现场信息,按某种算法先取进程,再把处理器分配给进程。

为什么要引入中级调度?

答:引入中级调度的主要目的是为了提高内存利用率和系统吞吐量。使那些暂时不能运行的进程不再占用内存资源,将它们调至外存等待,把进程状态改为就绪驻外存状态或挂起状态。

进程调度算法习题

考虑5个进程P1、P2、P3、P4、P5,它们的创建时间、运行时间及优先数如表4-12所示。规定进程的优先数越小,优先级越高。试描述在采用下述几种调度算法时各个进程运行过程,并计算采用每种算法时的进程平均周转时间。假设忽略进程的调度时间。

进程 创建时间 运行时间(ms) 优先数
P1 0 3 3
P2 2 6 5
P3 4 4 1
P4 6 5 2
P5 8 2 4

①先来先服务调度算法;
②时间片轮转调度算法(时间片为1ms);
③短进程优先级调度算法;
④抢占式优先级调度算法。

①先来先服务算法各进程的调度顺序P1、P2、P3、P4、P5,各进程周转时间如表所示。

进程 创建时间 运行时间 优先数 开始时间 完成时间 周转时间
P1 0 3 3 0 3 3
P2 2 6 5 3 9 7
P3 4 4 1 9 13 9
P4 6 5 2 13 18 12
P5 8 2 4 18 20 12

平均周转时间=(3+7+9+12+12)/5=8.6

②时间片轮转调度算法,各进程周转时间如表所示。

表2 时间片轮转算法各进程的周转时间

进程 创建时间 运行时间 优先数 开始时间 完成时间 周转时间
P1 0 3 3 0 4 4
P2 2 6 5 2 19 17
P3 4 4 1 5 17 13
P4 6 5 2 6 20 14
P5 8 2 4 7 16 8

平均周转时间=(4+16+13+14+7)/5=10.8

③短进程优先级调度各进程调度顺序P1、P2、P5、P3、P4,各进程的周转时间如表所示。

表3 短进程优先级调度算法各进程的周转时间

进程 创建时间 运行时间 优先数 开始时间 完成时间 周转时间
P1 0 3 3 0 3 3
P2 2 6 5 3 9 7
P3 4 4 1 11 15 11
P4 6 5 2 15 20 14
P5 8 2 4 9 11 3

平均周转时间=(3+7+11+14+3)/5=7.6

④抢占式优先级调度各进程的各进程的周转时间如表所示。

表4 抢占式优先级调度算法各进程的周转时间

进程 创建时间 运行时间 优先数 开始时间 完成时间 周转时间
P1 0 3 3 0 11 11
P2 2 6 5 2 8 6
P3 4 4 1 16 20 16
P4 6 5 2 11 16 10
P5 8 2 4 8 10 2

平均周转时间=(11+6+16+10+2)/5=9

第五章:存储管理

地址重定位,三种地址重定位方式

重定位:

将装入模块中指令和数据的逻辑地址转换为物理地址,程序才能正常运行

重定位方式 内容
绝对装入方式 在编译时事先知道程序驻留在主存中的具体位置。程序的逻辑地址和实际地址完全相同
静态重定位 把该作业中的指令和数据地址一次性全部转换为物理地址。但是这样程序在主存中难以移动
动态重定位 在作业执行过程中完成的,由硬件地址转换机制自动地将指令中的逻辑地址转换成对应的物理地址。程序时可浮动的。

程序装入过程

三种重定位方式

固定/可变分区比较

固定分区分配:

在系统初启时,预先把主存中的用户区分割成若干个连续区域,每个连续区域称为一个分区,分区大小可以不同。

每个分区转入一个作业,不允许跨分区存储,也不允许多个作业放在一个分区。即每个分区都是单一存储。

可变分区存储管理:

作业转入贮存是,根据作业所需要地址空间的大小和当时主存空间的实际使用情况决定是否为该作业分配一个分区。

  • 主存储器中分区的大小是可变的
  • 主存中分区的个数是可变的
  • 主存中的空闲分区个数也随着作业的装入与撤离而发生变化

移动技术,移动技术的优缺点

移动技术:

即紧凑技术:移动主存中存在的作业,使分散的空间集中起来以容纳新的作业。

优缺点:

  • 优点:提高空间的利用率,为作业动态扩充主存空间提供了方便。
  • 缺点:
    • 移动会增加系统开销。
    • 移动是有条件的,如果通道确定了主存物理地址,就不能移动。

分页与分段比较

分页存储管理:

把主存划分成大小相等的若干区域,每个区域称作为一个块。

把逻辑地址空间划分成与块的大小相等的若干页。

页的大小与块的大小相对应。

分段存储管理

把逻辑地址空间按照逻辑划分成大小不同的段。

主存空间被动态地划分成长度不相等的区域。

主要区别:

  • 页是信息的物理单位,是系统管理的需要而不是用户的需要;而段是信息的逻辑单位,它含有一组意义相对完整的信息。分段是为了更好的满足用户需要。
  • 页的大小固定并且由系统决定,因而一个系统只能有一种大小的页面;而段的长度却不固定,由用户编写的程序所决定,通常由编译程序对源程序进行编译时根据信息的性质来划分
  • 分页式作业的地址空间时一维的,页间的逻辑地址是连续的;而分段式作业的地址空间则是二维的,段间的逻辑地址是不连续的

虚拟存储器及其实现原理

时间局限性:

一旦执行了程序中的某条指令,不久以后该程序可能再次执行。

空间局部性:

一旦程序访问了某个存储单元,不久以后,其附近的存储单元也将被访问。

虚拟存储器:

当作业请求转入的时候,只需将当前运行所需要的一部分先装入主存。当要执行和访问的数据不存在的时候,再将这些信息调入主存。如果系统已满,那么将内存中暂时不用的程序或者数据调至磁盘上,腾出足够的内存空间后,再将要访问的程序或者数据调入内存。

从用户的角度看,好像计算机系统提供了一个容量很大的主存——称为虚拟存储器。

簸箕/抖动现象

抖动:

刚被换出的页很快又要被访问,为此,又要换出其它页,而该页又很快被访问。

💕分页及分段存储管理中的地址转换

页表地址转换:

段表地址转换

【例题】某虚拟存储器的用户空间共有32个页面,每页1KB,主存16KB。假定某时刻系统为用户的第0,1,2,3页分配的物理块号为5,10,4,7。试将虚拟地址0A5C和093C变换为对应的物理地址。

虚拟存储器里面的空间逻辑上可以大于主存空间,所以这32个页面其实并没有什么卵用。

每页1KB,在主存分成了16个页。

0A5C换算成10进制就是:016 (3)+10 * 16 (2)+516+12=2560+80+12=2652 对应的是第2页。

页内地址就是604

093C换算成10进制就是:9*256+3 *16+12=2364 对应的还是第二页

页内地址:316

2的物理块号是4.

那么就是 4*1024+604=4700. 4 *1024+316=4412

换算成16进制就是125C 和113C

暂时没有找到分段的题目

💕页面置换算法 (FIFO、LRU、LFU),要求给出完整调度过程

假定某进程共有8页,且系统为之分配了三个物理块,并有以下页面调度序列:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

(了解)最佳置换算法(OPT)

选择被淘汰的页面将是以后永远不再使用,或者是在将来最长时间内不再被访问的页面
产生的缺页中断次数将会是最少的
采用最佳置换算法通常可获得最低的缺页中断率,但这是一种理想化的算法,无法实现
作为衡量其它算法的标准

先进先出页面置换算法(FIFO)

认为刚被调入的页面在最近的将来被访问的可能很大,而在主存中驻留时间最长的页面在最近的将来被访问的可能性最小
FIFO算法总是淘汰最先进入主存的页面(主存中驻留时间最长)
FIFO算法实现:
要把装入主存的页面按调入的先后次序链接成一个队列,并设置一个替换指针,指针始终指向最先装入主存的页面,每次页面置换时,总是选择替换指针所指示的页面调出

15次页面置换
缺页中断率为75%
页面淘汰的顺序为7,0,1,2,3,0,4,2,3,0,1,2
FIFO算法简单,易实现,但效率不高

最近最少用页面置换算法(LRU)

总是选择最近一段时间内最长时间没有被访问过的页面调出

LRU置换算法
12次缺页中断
缺页中断率为60%
页面淘汰的顺序为7,1,2,3,0,4,0,3,2

FIFO 和 LRU的区别在于:FIFO遇到非缺页中断的时候页面不会改动,而LRU遇到非缺页中断的时候会把进入的页面提前。

(了解)最近最不常用页面置换算法(LFU)

总是选择被访问次数最少的页面调出
认为在过去的一段时间里被访问次数多的页面可能经常需要访问

一种简单的实现方法是
为每一页设置一个计数器,页面每次被访问后其对应的计数器加1,每隔一定的时间周期T,将所有计数器全部清零

在发生缺页中断时,选择计数器值最小的对应页面淘汰(最近最不常用的页面),同时把所有计数器清零
算法实现比较简单,但代价很高
有一个关键问题是如何选择一个合适的时间周期T

【例题】设某作业占有7个页面,如果系统分配给该作业的最大主存块数为3块,作业运行时,实际访问页面的顺序是1, 2, 3, 6, 4, 7, 3, 2, 1, 4, 7, 5, 6, 5, 2, 1, 3, 4, 2, 6。试用先进先出页面调度算法(FIFO),请求出页面淘汰顺序和缺页中断次数,以及缺页中断率。

总共20个作业

1 2 3 6 4 7 3 2 1 4 7 5 6 5 2 1 3 4 2 6
1 2 3 6 4 7 3 2 1 4 7 5 6 6 2 1 3 4 2 6
1 2 3 6 4 7 3 2 1 4 7 5 5 6 2 1 3 4 2
1 2 3 6 4 7 3 2 1 4 7 7 5 6 2 1 3 4
。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。

19次缺页中断,缺页中断率95%

页面淘汰顺序1、2、3、6、4、7、3、2、1、4、7、5、6、2、1、3

【例题】设某作业占有7个页面,如果系统分配给作业的最大主存块数为3块,作业运行时,实际访问页面的顺序是1,2,3,6,4,3,2,3,1,4,7, 5,4, 5,6,1,3,4,2,5。试用最近最少用调度算法(LRU)求出各自的页面淘汰顺序和缺页中断次数,以及缺页中断率。

1 2 3 6 4 3 2 3 1 4 7 5 4 5 6 1 3 4 2 5
1 2 3 6 4 3 2 3 1 4 7 5 4 5 6 1 3 4 2 5
1 2 3 6 4 3 2 3 1 4 7 5 4 5 6 1 3 4 2
1 2 3 6 4 4 2 3 1 4 7 7 4 5 6 1 3 4
。 。 。 。 。 。 。 。 。 。 。 。 。 。 。

16次缺页中断,缺页中断率80%

淘汰页面顺序:1、2、6、4、2、3、1、7、4、5、6、1、3

第五章习题

在一个分页虚存系统中,用户编程空间32个页,页长1KB,主存为16KB。如果用户程序有10页长,若己知虚页0、1、2、3,已分配到主存8、7、4、10物理块中,试把虚地址0AC5H和1AC5H转换成对应的物理地址。

答:0AC5H对应的物理地址为12C5
1AC5会发生缺页中断,由系统另行分配主存空间

一个进程已分配得到4个物理块,每页的装入时间、最后访问时间、访问位R、修改位D如下表所示(所有数字为十进制,且从0开始),当进程访问第4页时产生缺页中断。请分别用FIFO、LRU算法确定缺页中断服务程序选择换出的页面。

答:FIFO 选择换出的页面为3号页面
LRU 选择换出的页面为1号页面

设某计算机的逻辑地址空间和物理地址空间均为64KB,按字节编址。若某进程最多需要6页数据存储空间,页的大小为1KB。操作系统采用固定分配局部置换策略为此进程分配4个物理块。

页号 块号 装入时刻 访问位
0 7 130 1
1 4 230 1
2 2 200 1
3 9 160 1

当该进程执行到时刻260时,要访问逻辑地址为17CAH的数据,请问答下列问题:

(1)该逻辑地址对应的页号是多少?

(2)若采用先进先出(FIFO)置换算法,该逻辑地址对应的物理地址是多少?要求给出计算过程。

(1)该逻辑地址对应的页号是5
(2)FIFO算法,该逻辑地址对应的物理地址是1FCAH

第六章:设备管理

通道

通道是一个硬件,是一个弱鸡版本的CPU

叫I/O通道。

计算机在CPU和设备控制器之间增设了自成独立体系的通道结构,这不仅使数据的传输独立于CPU,而且对I/O操作的组织、管理及其处理也尽量独立,使CPU有更多的时间进行数据处理。该通道又被称为I/O处理器。它具有执行CPU指令的能力。并通过执行通道程序来控制I/O操作完成主存和外围设备之间的传送。

I/O控制方式

I/O控制3条原则:

  • 数据传输速度足够高,能满足用户的需要但又不丢失数据
  • 系统开销小,所需的处理程序少
  • 能充分发挥出硬件的能力,使I/O设备尽可能忙,而CPU等待时间尽可能少

直接程序控制方式:

又称为询问方式,或者忙/等待方式。

最重要的内容就是这里的询问

询问是指CPU不停地去询问状态寄存器此时的I/O设备到底是什么样的状态。

由用户进程直接控制主存或CPU和外围设备之间的信息传送。

用户进程需要输入数据的时候,通过CPU发出一条I/O指令,启动设备输入数据,同时把状态寄存器中的忙闲状态busy置为1.用户进程进入测试等待状态。在等待过程中,CPU不断地用一条测试指令检查外围设备状态寄存器中的busy位,而外围设备只有在数据送入控制器的数据寄存器之后,才将该busy位置为0,于是处理器将数据寄存器中的数据取出,送入主存指定单元中,完成一个字符的I/O,紧接着进行下一个I/O操作。

直接程序控制方式虽然简单,不需要多少硬件的支持,但由于告诉的CPU和低俗的I/O设备之间的不匹配,因此,CPU与外围设备只能串行工作,造成CPU的浪费。

中断驱动控制方式

具体实现是CPU不必再轮询状态寄存器,在慢速的I/O操作中可以做别的事情。每次输入一个字符或者一个字,然后I/O控制器向CPU发送中断请求,CPU可以放下现在做的事情然后去进行一个从I/O控制器中读取字符。

减少直接控制方式下CPU的等待时间。

引入中断机制后,CPU向相应的设备控制器发出一条I/O指令,然后阻塞用户进程将CPU调度给其他就绪进程。

但是这样一个字符或者一个字就要进行中断,中断次数未免过多。而且每次中断都需要恢复环境,消耗资源

直接存储器访问方式(DMA)

相比于中断操作,DMA相当于可以直接读取到内存中去,并且是以数据块为基本单位,CPU不需要对I/O设备进行干预。

防止并行操作下设备过多是CPU来不及处理或因速度不匹配造成的数据丢失现象。

但是CPU每发出一条I/O指令只能读取一个数据块,太慢了。

通道控制方式

通道控制方式是基于硬件的,相当于一个弱鸡CPU。

不需要CPU进行参与。

适合连接大量的高速和低速设备

引入缓冲的主要原因,实现的基本思想

I/O设备输入的数据可以放入缓冲区中,这样在输入空闲期间CPU可以去做别的事情。

主要原因:

  1. 缓和CPU和I/O设备间速度不匹配的矛盾
  2. 减少对CPU的中断频率,放宽对CPU中断响应时间的限制
  3. 提高CPU和I/O设备之间的并行性

实现思想:

  1. 采用专用的硬件缓冲器
  2. 在主存中划出一个具有n个单元的专用区域,以便于存放I/O数据,主存缓冲区又称软件缓冲

设备绝对号/相对号

绝对号:

计算机系统为每一台设备确定一个编号,以便区分和识别,这个编号称为设备的绝对号。

相对号:

为了避免使用时产生混乱,由用户在程序中定义的设备编号称为设备的逻辑号(相对号)。

设备独立性,设备独立性的优点

用户在编制程序时使用的设备与实际使用哪台设备无关,这种特性称为“设备的独立性”。

即应用程序独立于具体使用的物理设备,能有效地提高操作系统的可适应性和可扩展性
用户编制程序时,不必指明特定的设备,而是在程序中使用“设备类、相对号”定义的逻辑设备,程序执行时系统根据用户指定的逻辑设备转换成与其对应的具体物理设备,并启动该物理设备工作

优点:

(1)设备分配灵活性强

(2)设备分配适应性强,易于实现I/O重定位。

更换I/O操作的设备而不必改变应用程序的特性称为I/O重定向。

【拓展】

设备驱动程序是一个与硬件(或设备)紧密相关的软件,在设备驱动程序之上设置一层软件实现设备的独立性,称为设备独立性软件,主要功能:

(1)执行所有设备的公有操作

公有操作:对独立设备的分配与回收;将逻辑设备名映射为物理设备名;对设备进行保护,禁止用户直接访问设备;缓冲管理;差错控制

在I/O操作中的绝大多数错误都与设备无关

I/O操作主要由设备驱动程序处理

设备独立性软件只是处理那些设备驱动程序无法处理的错误

(2)向用户层(或文件层)软件提供统一的接口各种设备内部的具体操作各不相同,但它们向用户提供的接口却是相同的

磁盘一次访问过程

在启动磁盘进行I/O操作时:

先把移动臂移动到指定的柱面→再等指定的扇区旋转到磁头的位置下→最后让指定的磁头进行读/写,完成信息传送。

虚拟设备,其设计思想,实现虚拟设备的主要条件

虚拟设备是指采用相应的技术和方法将独占型设备变换为若干台对应的逻辑设备,即实现了虚拟设备功能。

设计思想:

是将独占型设备改造为共享型设备。宏观上,虽然十多个进程在同时使用一台独占型设备,而对每一个进程而言,它们都认为自己独占了一个设备。

实现虚拟设备的主要条件

虚拟设备必须建立在具有多道程序功能的操作系统上,需要有高速的、大容量的随机存储器支持。

SPOOLing系统的组成

SPOOLing的中文名是假脱机操作,用软件模拟脱离主机控制的输入和输出操作系统。

完全可以利用其中的一道程序来模拟脱机输入时的外围计算机功能,把低速I/O设备上的数据传送到高速磁盘上;再用另一道程序来模拟脱机输出时外围计算机的功能,把数据从磁盘传送到低速输出设备上。这样,便可在主机的直接控制下,实现脱机输入/输出功能,此时的外围操作与CPU对数据的处理同时进行。

SPOOLing技术是对脱机输入、输出系统的模拟

  • 必须建立在具有多道程序功能的操作系统上
  • 需要有高速的、大容量的随机存储器支持

能够将独占设备虚拟成共享设备

  1. 预输入程序
  2. 井管理程序
  3. 缓输出程序
  • SPOOLing系统提高了I/O速度,缓和了CPU与低速的I/O设备之间速度不匹配的矛盾
  • 增加了多道程序的道数,增加了作业调度的灵活性,将独占型设备改造为共享型设备
  • 宏观上,虽多个进程在同时使用一台独占型设备,每一个进程都认为自己独占了一个设备
    实现了将独占型设备变换为若干台对应的逻辑设备的功能,即虚拟设备功能

💕磁盘移臂调度算法,要求给出完整调度过程图

(1)先来先服务调度算法FCFS

算法简单且公平
只是根据访问者提出访问请求的先后次序进行调度,并不考虑访问者所要求访问的物理位置

缺点:未对寻道进行优化,磁臂来回地移动,使寻道时间比较长

先来先服务算法仅适合于磁盘I/O请求数目较少的场合

【例】现在读写磁头正在53号柱面上执行输入/输出操作,而访问者请求访问的柱面顺序为:98,183,37,122,14,124,65,67。

读写磁头总共移动了640个柱面的距离。

(2)最短寻找时间优先调度算法SSTF

总是从若干请求访问者中挑选与当前磁头所在的磁道距离最近,使每次寻道时间最短的那个请求进行调度,而不管访问者到达的先后次序

与先来先服务算法相比,大幅度地减少了寻找时间,缩短了为各请求访问者服务的平均时间,提高了系统效率
缺点:并未考虑访问者到来的先后次序。可能存在某进程的请求距离当前磁头较远,致使被大大的推迟,发生“饥饿”现象

【例】现在读写磁头正在53号柱面上执行输入/输出操作,而访问者请求访问的柱面顺序为:98,183,37,122,14,124,65,67。

读写磁头总共的移动距离为236个柱面

(3)单向扫描调度算法

不论访问者的先后次序,总是从0号柱面开始向里扫描,依次选择所遇到的请求访问者;移动臂到达盘面的最后一个柱面时,立即带动读/写磁头快速返回到0号柱面,返回时不为任何请求访问者服务,返回0号柱面后再次进行扫描

不足:算法虽然考虑了移动臂的移动距离问题,由于存在一趟空扫描,系统的效率并未得到大的提高

扫描算法一定要扫到上边界和下边界

读写磁头总共的移动距离为382个柱面

(4)双向扫描算法

从0号柱面开始向里扫描,依次选择所遇到的请求访问者;移动臂到达最后一个柱面时,调转方向从最后一个柱面向外扫描,依次选择所遇到的请求访问者

优点:解决了单向扫描算法中的一趟空扫描问题,减少了寻找时间,提高了系统的访问效率
不足:在每次扫描过程中必须从最外磁道扫描到最内磁道,有可能存在部分空扫描

读/写磁头总共的移动距离为321个柱面

(5)电梯调度算法

“电梯调度”算法不仅考虑到请求访问者的磁头与当前磁头之间的距离,更优先考虑的是磁头当前的移动方向
总是从移动臂当前位置开始,沿着移动臂的移动方向选择距离当前移动臂最近的那个访问者进行调度,若沿移动臂的移动方向再无访问请求时,则改变移动臂的方向再选择
目的:尽量减少移动臂移动时所花的时间

若当前移动臂由里向外移动时,读写磁头共移动了208个柱面的距离,

若当前移动臂由外向里移动时,则读写磁头共移动了299个柱面的距离

电梯调度算法沿着移动臂的移动方向选择距离当前读/写磁头最近的那个柱面的访问者,仅当沿着移动臂的移动方向无等待访问者时,才改变移动臂的方向,速度相对较慢
是一种简单、实用且高效的调度算法,能获得较好的寻道性能,又能防止“饥饿”现象
实现时需要增加开销,除了要记住读写磁头的当前位置外,还必须记住移动臂的移动方向
被广泛应用于大、中、小型计算机和网络的磁盘调度

💕磁盘旋转调度

(1)旋转调度分析

在一次移臂调度将移动臂定位到某一柱面后,允许进行多次旋转调度
旋转调度是指选择延迟时间最短的请求访问者执行的调度策略
(1)若干等待访问者请求访问同一磁道上的不同扇区
(2)若干等待访问者请求访问不同磁道上的不同编号的扇区
(3)若干等待访问者请求访问不同磁道上具有相同编号的扇区

(2)影响I/O操作时间的因素(计算)

记录在磁道上的排列方式会影响I/O操作的时间
例如,某系统,在对磁盘初始化时,把每个盘面分成8个扇区,有8个逻辑记录被存放在同一个磁道上供处理程序使用。处理程序要求顺序处理这8个记录,每次请求从磁盘上读一个记录,然后对读出的记录要花5ms的时间进行处理,以后再读下一个记录进行处理,直至8个记录全部处理结束。假定磁盘的转速为20ms/周,现把这8个逻辑记录依次存放在磁道上

在不知道当前磁头位置的情况下,处理这8个记录所要花费的时间为:

8×(2.5+5)+10+7×15=175(ms)

20m/s一周,一个扇区就要花费2.5ms。但是处理的时间就是5ms,当处理完毕之后,磁盘已经转过了两个扇区。

不知道当前磁头的位置的情况下,磁头旋转到第一条记录的平均时间为二分之一周,即10ms。

读一个记录要花2.5ms,处理一个记录要5ms。当花了7.5ms完成操作之后已经到了第四个位置了,但是为了顺序执行,必须等待它到第二个位置,那么就要有15ms处理时间。除了第一个扇区以外,每个扇区都要有15ms延迟。

所以公式如此。

如果把这8个逻辑记录在磁道上的位置重新安排一下,当读出一个记录并处理后,读/写磁头正好位于顺序处理的下一个记录位置,可立即读出该记录,不必花费等待延迟时间。于是,处理这8个记录所要花费的时间为:
10+8×(2.5+5)=70(ms)

消除了15ms的延迟。

第六章习题

假定某磁盘的旋转速度是每圈20ms,格式化时每个盘面分成10个扇区,现有10个逻辑记录顺序存放在同一个磁道上,处理程序要处理这些记录,每读出一条记录后处理要花4毫秒的时间进行处理,然后再顺序读下一条记录进行处理,直到处理完这些记录,请回答:

(1)顺序处理完这10条记录总共花费多少时间?
(2)请给出一个优化方案,使处理能在最短时间内完成,并计算出优化分布时需要花费的时间。

答:(1)20/2+2+4+(16+2+4)* 9=214
( 2)20/2+(2+4)*10=70

第七章:文件管理

文件,文件系统功能

文件是一组在逻辑上具有完整意义的相关信息的集合。

文件系统功能:

  • 目录管理
  • 文件的组织
  • 文件存储空间的管理
  • 文件操作
  • 文件的共享、保护和保密。

文件的组织;文件的逻辑结构,文件的物理结构,分别有哪几种组织形式

文件的组织:

用户按照信息的使用和处理方式来组织文件,称为文件的逻辑结构或逻辑文件。

文件在存储介质上的存储方式称为文件的物理结构或者物理文件。

文件的逻辑结构:

  • 流式文件:
    又称无结构文件,文件是有逻辑意义的、无结构的一串字符的集合,文件内的信息不可再划分(比如记事本)
  • 记录式文件:
    又称有结构文件,由若干个逻辑记录组成,每个逻辑记录都是逻辑上具有独立意义的基本信息单位,通过主键把文件中的逻辑记录惟一区分开来(比如数据库)

文件的物理结构:

(1)顺序结构:一个文件在逻辑上连续的信息存放到存储介质上依次相邻的物理块上,则此文件的物理组织形式称为顺序结构

(2)链接结构:文件中的信息可以存放在若干不相邻的物理块中,各块之间通过指针链接起来,可实现非连续存储

(3)索引结构:为每个文件建立的一个专用数据结构——索引表

(4)直接文件:哈希文件。针对记录式文件,将记录的关键字与其物理地址间通过某种方式建立起对应关系,利用这种关系实现记录存取

文件组织形式:

找不到

文件目录,多级目录结构的优点

文件目录:

为每个文件定义一个文件控制块,惟一标识一个文件
一个文件控制块就是一个文件目录项,所有的文件控制块有机地组织在一起,就构成了整个文件目录

优点:

  1. 提高了查找速度
  2. 允许文件重名
  3. 可实现文件共享

文件的绝对路径,相对路径

绝对路径:

就是要完整的路径名称

相对路径:

当前目录下访问的路径。

文件共享,文件保护,文件保密

文件共享:

允许两个或者多个用户使用同一个文件。系统只需保存共享文件的一个副本,可节省大量辅存空间和主存空间,减少I/O操作次数,方便用户,大大减少用户工作量。

文件保护:

防止用户由于错误操作导致文件破坏

文件保密:

文件本身不得被未经授权的用户访问。

  • 文件共享主要通过目录链接、基于索引结点的链接和符号链接三种链接技术实现文件共享。
  • 文件的保护和保密技术分别采取存取控制机制、磁盘容错技术和数据转储备份技术等着手提高文件的安全性。

💕记录的成组与分解

1.逻辑记录和块的关系:前者是逻辑概念,后者是物理概念。
2.记录的成组
把若干个逻辑记录合并成一组存入一个物理块的过程。一个物理块中包含的逻辑记录的整数个数称为块因子。

记录的成组操作不仅提高了存储空间的利用率,而且还减少了启动外设的次数,大大提高了系统的工作效率。

3.记录的分解
从一组逻辑记录中把一个个逻辑记录分离出来的操作过程。

已知某用户文件共10个逻辑记录,每个逻辑记录长度为480个字符,现把该文件存放到磁带上,若磁带记录密度为800字符/英寸,块与块之间间隙为0.6英寸,请

① 求解不采用记录成组操作时磁带空间的利用率。

② 求解采用记录成组操作且块因子为5时,磁带空间的利用率。

③ 若要使磁带空间利用率不少于80%,至少应以多少个逻辑记录为一组?

④ 当按上述方式把文件存放到磁带上后,用户要求每次读一个逻辑记录存放到他的工作区。当对该记录处理后,又要求把下一个逻辑记录读入他的工作区,直至10个逻辑记录处理结束。系统应如何为用户服务?

答:① 不采用记录成组操作时磁带空间的利用率=480/(480+800*0.6)=50%

② 采用记录成组操作且块因子为5时,利用率=4805/(4805 +800*0.6)=83.3%

③ 设块因子至少为n,则不等式:480n/(480n +800*0.6)≥0.8,n≥4

④ 把文件10个逻辑记录读入用户区单元开始区域,则主要过程如下:

首先向系统申请一个系统缓冲区,其起始地址假设为内存的L单元,很明显先读第1个记录组到L单元,然后逐个将该组的记录一个个分离出来并放入用户缓冲区单元中处理记录,等处理完毕再分离下一个记录到用户缓冲区,直至第一组全部处理结束;然后基本重复第一组记录的读入及分离过程,直至10个记录全部结束。

💕(正确性有待考究)磁盘空间管理(磁盘(柱面、磁道和扇区)、块号、位示图之间的对应关系)

磁盘结构

  • 磁盘存储器是一种高速、大容量的随机存储设备
  • 用于存放大量的文件和数据

磁盘设备由一组盘组组成:

  • 包括一张或多张盘片,每张盘片分正反两面
  • 每面可划分成若干磁道各磁道之间留有必要的间隙
  • 每条磁道又分为若干个扇区,各扇区之间留有一定的空隙,每个扇区的大小相当于一个盘块大小
    磁盘在存储信息之前,必须进行磁盘格式化。

在微机上配置的硬盘和软盘一般采用移动磁头结构

  • 一个盘组中所有盘片被固定在一根旋转轴上,沿着一个方向高速旋转

  • 每个盘面配有一个读/写磁头,所有的读/写磁头被固定在移动臂上同时移动

  • 将磁头按从上到下次序编号,称为磁头号

  • 每个盘面有许多磁道,磁头位置下各个盘面上的磁道处于同一个圆柱面上,称这些磁道组成了一个柱面

  • 每个盘面上的磁道从0开始,由外向里顺序编号(磁道号),通过移动臂的移动,读/写磁头可定位在任何一个磁道上

  • 移动磁头仅能以串行方式进行读/写

  • 当移动臂移到某一个位置时,所有的读/写磁头处在同一个柱面上,盘面上的磁道号即为柱面号

  • 每个盘面被划分成若干个扇区,沿与磁盘旋转相反的方向给个扇区编号,称为扇区号

  • 系统存放信息时,按柱面顺序存放

磁盘存储空间的位置可以由三个参数决定:

  • 柱面号、磁头号和扇区号(每个参数均从“0”开始编号)
  • 磁盘空间的盘块按柱面(从0号柱面开始)、磁头、扇区顺序编号

磁盘位置计算

磁盘存储器中用t表示每个柱面上的磁道数,用s表示每个磁道上的扇区数,则第i 柱面号、j磁头号、k扇区号所对应的块号b可用如下公式确定:

 b=k+s×(j+i×t)

解释
可以把它看成b=k+s * j+s * i+t;

根据块号也可以确定该块在磁盘上的位置

  • 每个柱面上有:s×t个扇区
  • 计算第p块在磁盘上的位置,可以令d=s×t,则有:
    • i柱面号=[p/d]
    • j磁头号=[(p mod d)/s]
    • k扇区号=(p mod d mod s)

【例题】若一个硬盘共有120个柱面,每个柱面上有15个磁头,每个磁道划分成8个扇区。现有一个含有9000个逻辑记录的文件,逻辑记录的大小与扇区大小一致,该文件以顺序结构的形式被存放到磁盘上。磁盘柱面、磁头、扇区的编号均从“0”开始,逻辑记录的编号从“0”开始。文件信息从0柱面、0磁头、0扇区开始存放,求:
(1)该文件的第2000个逻辑记录应放在哪个柱面的哪个磁头的哪个扇区上?

柱面长=15*8=120

柱面号=2000//120=16

磁头号=2000%120//8=10

扇区号=2000%120%8=0。扇区编号从0开始,就是8号扇区

(2)序号为36柱面的10磁头的5扇区中存放了该文件的第几个逻辑记录?

36*120+10 *8+6=4406

那个试卷答案就在那里乱写。

带位示图的磁盘位置计算

位示图

位示图法分配过程:

  • 块号=(字号-起始字号)×字长+(位号-起始位号)+起始块号
  • 柱面号=((块号-起始块号) /柱面长)+起始柱面号
  • 磁头号=(((块号-起始块号) %柱面长)/每个磁道上的扇区数)+起始磁头号
  • 扇区号=(((块号-起始块号) % 柱面长)% 每个磁道上的扇区数)+起始扇区号

位示图法回收过程
块号=(柱面号-起始柱面号)×柱面长+(磁头号-起始磁头号)×扇区数+(扇区号-起始扇区号)+ 起始块号
字号=(块号-起始块号) / 字长+起始字号
位号=(块号-起始块号) % 字长+起始位号

【例题】若一个硬盘共有1200个柱面,每个柱面上有64个磁头,每个磁道划分成8个扇区,磁盘柱面、磁头、扇区的编号均从“0”开始编号,磁盘物理块从“0”开始顺序编号,已知扇区的大小与物理块大小相同。现用字长为64位的位示图管理磁盘空间,字号和位号均从“0”开始编号,文件记录长度与物理块大小相同,记录信息从0柱面、0磁头、0扇区开始顺序存放,求:
(1)新建文件并为记录分配空间时,试求出位示图中12字上的15位标识的物理块对应的柱面号、磁头号和扇区号。

12字15位:12*64+15=768

柱面长:8*64=512

柱面号:768//512=1

磁头号:768%512//8=32

扇区号:768%512%8=0 从0开始,就是8号扇区。

(2)删除文件并回收所占磁盘空间时,应将36柱面10磁头5扇区物理块对应位示图中的哪个字号哪个位号清“0”?

36*512+10 *8+5+1=18518

18518//64=289

18518%64=22. 从0开始,就是21位。

第七章习题

若一个硬盘共有100个柱面,每个柱面上有15个磁头,每个磁道划分成8个扇区。现有一个含有6000个逻辑记录的文件,逻辑记录的大小与扇区大小一致,该文件以顺序结构的形式被存放到磁盘上。磁盘柱面、磁头、扇区的编号均从“0”开始,逻辑记录的编号从“1”开始。文件信息从0柱面、0磁头、0扇区开始存放,求:

① 该文件的第5000个逻辑记录应放在哪个柱面的第几磁头的第几扇区?

② 36柱面12磁头5扇区中存放了该文件的第几个逻辑记录?

答:① 5000记录号对应4999块号,转换成物理地址为:柱面号=4999 / 120=41

磁头号=4999 % 120 / 8=79 / 8=9;扇区号=79 % 8=7

即该文件的第5000个逻辑记录应放在41柱面的9磁头的7扇区上。

② 块号=36120+128+5=4421,记录号=块号+1=4422

即36柱面12磁头5扇区中存放了该文件的第4422个逻辑记录。

若一个硬盘上共有5000个磁盘块可用于存储信息,若由字长为32位的字构造位示图,求:
① 位示图共需多少个字?
② 若某文件被删除,它所占据的盘块块号分别为12、16、23和37,文件删除后,位示图如何修改?

答:① 位示图共需5000/32=157个字,另加一个登记空闲块字,共158个
② 根据要回收的磁盘物理块号计算得到字号和位号分别为:
12对应的字号和位号分别为0字12位;16对应0字16位;23对应0字23位;37对应1字5位,则当文件被删除时只需将0字12位、16位、23位及1字5位共四个位置清0,同时再将空闲块总数加4即可。

第八章:作业管理与用户接口

作业,批处理作业的四个状态

作业:

用户在一次解题过程中要求计算机所工作的集合称为一个作业。

四个状态:

  • 提交状态
  • 后备状态
  • 运行状态
  • 完成状态

操作系统与用户的接口

  • 操作系统为用户提供的各种操作命令或作业控制语言,用户可以利用这些操作命令或作业控制语言来组织作业的工作流程和控制作业的运行
  • 操作系统为用户提供的一组系统功能调用接口,用户可以在源程序一级使用这些系统调用,请求操作系统提供的服务。

💕多道批处理作业调度算法 (FCFS、SJF、HRRF),要求给出完整调度过程表

先来先服务算法(FCFS)

短作业优先算法(SJF)

优先级调度算法(PSA)

这三个没什么好说的

响应比高优先调度算法(HRRN)

posted @ 2021-06-22 09:26  Zeker62  阅读(550)  评论(0编辑  收藏  举报