操作系统学习总结Word文档格式.docx
《操作系统学习总结Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统学习总结Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
分布式系统有可扩展性,高可靠性。
二、第二章操作系统的运行基础与结构
1.处理机的状态即中央处理机的工作状态,分为管态和用户态。
管态是操作系统的程序执行时的状态,可以使用全部指令和全部系统资源。
用户态是用户程序执行时的状态,禁止使用特权指令,只允许用户程序。
2.中断技术所谓中断是指某个事件发生时,系统中止现行程序的运行、引出处理事件程序对该事件进行处理,处理完毕后返回断点,继续执行。
不期待的中断为强迫性中断,期待的中断为自愿中断。
由处理机外部事件引起的中断叫做中断,内部引起的为俘获。
中断发生时需要保护现场,把现场信息保存在主存。
中断结束时,把保留的该程序现场信息从主存中送至相应的指令计数器、通用寄存器或一些特殊的寄存器中恢复现场
中断有以下分类:
访管中断——对操作系统提出某种需求时所发出的中断操作系统的运行基础与结构——中断技术输入输出中断——I/O传输结束或出错中断外中断——时钟中断、通信中断等
机器故障中断——电源故障、主存取指令错等程序性中断——定点溢出、用户态下用核态指令、非法操作等
3.操作系统虚拟机在裸机上配置了操作系统程序后就构成了操作系统虚拟机。
三、第三章操作系统的用户界面
1.系统生成和系统初启系统生成就是通过组装一批模块来产生一个清晰的、使用方便的操作系统的过程。
系统引导的任务是将操作系统的必要部分装入主存并对系统进行初始化工作,最终使系统处于命令接收状态。
系统引导有两种方式,将OS核心文件存储在系统本身的存储设备中的是独立引导方式(滚雪球方式),OS主要文件不放在系统本身的存储设备中的是辅助下装方式。
独立引导方式(滚雪球方式)的过程:
O1初始引导(系统加电,进
行自检,读入引导程序)02引导程序执行03核心初始化04系统初始化
Linux系统初启:
Linux系统是以滚雪球的方式启动
加电或复位tBIOS的启动tBootLoader宀OS初始化
2.用户界面
用户界面(或称接口)是操作系统提供给用户与计算机打交道的外部机制操作系统提供两种用户界面:
操作界面(命令接口)和系统功能服务界面(程
序接口)
操作命令与操作系统类型的关系:
作业控制语言一一批处理操作系统
键盘命令一一分时操作系统,个人计算机操作系统图形用户界面一一分时操作系统,个人计算机操作系统实例操作系统提供的用户界面(用户接口):
MS-DOS――键盘命令,系统功能调用
Windows图形用户界面,系统功能调用
Linux(UNIX)――键盘命令(XWindow),系统功能调用
4.系统调用
系统功能调用是用户在程序一级请求操作系统服务的一种手段,它是带有一
定功能号的“访管指令”。
其功能是由操作系统中的程序完成的。
应用程序如何调用操作服务功能?
采用统一进管方式一一系统提供访管指令、访管中断,将系统调用作为C库的一部分,执行到这一条命令时,发生中断,由用户态转为管态
四、第四章进程及进程管理
1.进程定义
所谓进程,就是一个程序在给定活动空间和初始环境下,在一个处理机上的执行过程。
进程与程序的区别:
程序是静态的概念;
进程是动态的概念
进程是一个独立运行的活动单位
进程是竞争系统资源的基本单位
一个程序可以对应多个进程。
2.进程的状态
进程描述:
进程由进程控制块和程序与数据组成。
进程控制块是描述进程与其他进程、系统资源的关系以及进程在各个不同时期所处的状态的数据结构,称为进程控制块PCB主要内容有进程标
识符,进程当前状态,当前队列指针next,进程优先级,CPU现场保护区,占有资源清单,家族联系,通信信息。
3.进程控制进程控制的职责是对系统中的进程实施有效的管理,负责进程状态的改变。
常用的进程控制原语有创建原语、撤消原语、阻塞原语、唤醒原语。
进程创建:
进程创建原语的形式create(name,priority),进程创建原语的实现时向系
统申请一个空的PCB结构,如果有空PCB将入口信息填入PCB相应项,然后将PCB入就绪队列。
进程撤销:
进程撤销原语的形式Kill(或exit),能够撤消当前运行的进程。
将该进程的
PCB结构归还到PCB资源池,所占用的资源归还给父进程。
进程撤销实现时由
运行指针得当前进程的pid,释放本进程所占用的资源给父进程,最后释放PCB
结构。
进程等待:
进程等待原语的形式susp(chan),中止调用进程的执行,并加入到等待chan的等待队列中;
最后使控制转向进程调度。
过程为保护进程的CPU现场到PCB结构中,置该进程为”等待”状态,将该进程PCB结构插入到等待队列中,
最后转进程调度。
进程唤醒:
当处于等待状态的进程所期待的事件来到时,由发现者进程使用唤醒原语叫唤醒它。
进程唤醒原语的形式wakeup(chan),当进程等待的事件发生时,唤醒等待该事件的进程。
找到该等待队列,将队列首进程移出此等待队列,将该进程置为”就绪”状态,并将PCB结构插入到就绪队列中。
4.线程线程定义:
线程是比进程更小的活动单位,它是进程中的一个执行
路径。
进程的特点:
进程中的一条执行路径;
它有自己私用的堆栈和处理机执行环境;
它与父进程共享分配给父进程的主存;
它是单个进程所创建的许多个同时存在的线程中的一个。
创建一个线程比创建一个进程开销要小得多;
实现线程间通信十分方便。
线程是一个动态的概念。
在进程内创建多线程,可以提高系统的并行处理能力,加快进程的处理速度。
Linux进程查看命令:
ps命令:
报告进程标识、用户、CPU时间消耗以及其他属性。
top命令:
显示CPU占用率为前几位的进程。
pstree命令:
列出当前的进程,以及它们的树状结构。
5.进程的相互制约关系进程之间有竞争与合作的关系,引发了进程互斥和进程同步的问题。
进程互斥是指在操作系统中,当某一进程正在访问(读写)某一存储区
域时,就不允许其他进程来读出或者修改存储区的内容。
例如买票系统中对剩余票数的争夺就是互斥现象。
进程同步是指并发进程在一些关键点上可能需要互相等待与互通消息,这种相互制约的等待与互通消息称为进程同步。
例如就诊时化验和诊病就属于同步。
在操作系统中,一次仅允许一个进程使用的资源称为临界资源。
进程中
对公共变量(或存储区)进行审查与修改的程序段,称为相对于该公共变量的临
界区。
进程进入临界区的原则:
每次至多一个进程处于临界区;
有限时间内进入临界区(不能长时间阻塞);
逗留有限时间;
上锁操作和开锁操作:
检测w的值(是0还是1);
如果w的值为1,继续检测;
如果w的值为0,将锁位置1(表示占用资源),进入临界区执行。
(此为上锁操作)
临界资源使用完毕,将锁位置0。
(此为开锁操作)
信号灯是一个确定的二元组(s,q),s是一个具有非负初值的整型变量,q是一个初始状态为空的队列。
操作系统利用信号灯的状态对并发进程和共享资源进行控制和管理。
变量值》0时,表示绿灯,进程执行;
变量值0时,表示红灯,进程停止执行。
P操作:
对信号灯s的p操作记为p(s)。
即取信号灯值减1,若相减结果为负,则调用p(s)的进程被阻,并插入到该信号灯的等待队列中,否则可以继续执行。
V操作:
对信号灯s的v操作记为v(s)。
即取信号灯值加1,若相加结果大于零,进程继续执行,否则,要帮助唤醒在信号灯等待队列上的一个进程。
知识点延伸1其中,生产者一一消费者问题该如何解决呢?
在生产者一消费者问题中,信号灯具有两种功能。
首先,它是跟踪资源的生产和消费的计数器;
其次,它是协调资源的生产者和消费者之间的同步器。
消费者通过再一指派给它的信号灯上做P操作来表示消耗资源,而生产者通过
在同一信号灯上做V操作来表示生产资源。
再这种信号灯的实施中,计数在每次P操作后减1,而在每次V操作中加1。
个这一计数器的初始值是可利用的资源数目。
当资源是不可利用时,将申请资源的进程放置在等待队列中。
如
果有一个资源释放,在等待队列中的第一个进程被唤醒并得到资源的控制权。
为解决这一类生产者一一消费者问题,设置了两个同步信号灯,一个说明空缓冲区的数目,用empty表示,其初值为有界缓冲区的大小n,另一个说
明缓冲区的数目,用full表示,其初制值为0。
由于有界缓冲区是一个零界资源,必须互斥使用,所以另外还需设置一个互斥信号灯mutex,起初值为1。
假定在生产者和消费者之间的公用缓冲区中,具有n个缓冲区,这时可
以利用互斥信号量mutex实现诸进程对缓冲池的互斥使用;
利用信号量empty和full分别表示缓冲池中空缓冲区和满缓冲区的数量。
又假定这些生产者和消
费者互相等效果,只要缓冲池未满,生产者便可以将消息送入缓冲池;
只要缓
冲池未空,消费者便可以从缓冲池中取走一个消息。
要设计并实现一个进程,该进程拥有一个生产者线程和一个消费者线程,它们使用N个不同的缓冲区,需要使用如下信号量:
一个互斥信号量,用以阻止生产者线程和消费者线程同时操作缓冲区列表;
一个信号量,当生产者线程生产出一个物品时可以用它向消费者线程发出信号;
一个信号量,消费者线程释放出一个空缓冲区时可以用它向生产者线程发
出信号
Producer:
p(empty)//如果empty==0,则生产者进程自我阻塞。
p(mutex)in:
=in+1modN;
v(mutex)
v(full)
Consumer:
p(full)
p(mutex)out:
=out+1modN;
v(empty)
in、out为共享变量。
因此为了防止多个进程同时修改它们,将对他们的操作放在PV操作中。
对于in、out取余的原因是为了用于循环。
如果
知识点延伸2:
哲学家就餐问题的解法基本思想:
规定在拿到左侧的筷子后,先检查右面的筷子是否可用。
不可用,则先放下左侧筷子,等一段时间再重复整个过程。
#include<
windows.h>
process.h>
time.h>
stdlib.h>
stdio.h>
iostream>
constunsignedintPHILOSOPHER_NUM=5;
//哲学家数目
constcharTHINKING=1;
/*标记当前哲学家的状态,1表示等待,2表示得到饥饿,3表示正在吃饭*/
constcharHUNGRY=2;
constcharDINING=3;
HANDLEhPhilosopher[5];
//定义数组存放哲学家
/*HANDLE(句柄)是windows操作系统中的一个概念。
指的是一个核心对象在某一个进程中的唯一索引*/
//semaphore用来
HANDLEsemaphore[PHILOSOPHER_NUM];
表示筷子是否可用
HANDLEmutex;
//制安全输出
DWORDWINAPIphilosopherProc(LPVOIDlpParameter)DWORD(32位数据)的API函数philosopherProc
{
intmyid;
charidStr[128];
charstateStr[128];
charmystate;
intret;
unsignedintleftFork;
//左筷子
unsignedintrightFork;
//右筷子
myid=int(lpParameter);
itoa(myid,idStr,10);
WaitForSingleObject(mutex,INFINITE);
cout<
<
"
philosopher"
<
myid<
begin"
endl;
ReleaseMutex(mutex);
mystate=
//初始状态为THINKING
leftFork=(myid)%PHILOSOPHER_NUM;
rightFork=(myid+1)%PHILOSOPHER_NUM;
while(true)
{switch(mystate){caseTHINKING:
mystate=//改变状态
strcpy(stateStr,"
HUNGRY"
);
break;
Mutex用来控
//返回
THINKING;
HUNGRY;
caseHUNGRY:
strcpy(stateStr,"
//左筷子可
DINING;
//如果
筷子是否可用
if(ret==WAIT_OBJECT_0)
ret=WaitForSingleObject(semaphore[rightFork],0);
用就拿起,再检查右筷子是否可用
//右筷子可用,就改变自己的状态
DINING"
}
else
ReleaseSemaphore(semaphore[leftFork],1,NULL);
右筷子不可用,就把左筷子放下
break;
caseDINING:
//吃完后把两支筷子都放下
ReleaseSemaphore(semaphore[rightFork],1,NULL);
//改变自己的状态
THINKING"
//输出状态
is:
stateStr<
//sleeparandomtime:
between1-5s
intsleepTime;
sleepTime=1+(int)(5.0*rand()/(RAND_MAX+1.0));
Sleep(sleepTime*10);
intmain(){
inti;
srand(time(0));
mutex=CreateMutex(NULL,false,NULL);
for(i=0;
i<
PHILOSOPHER_NUM;
i++)
semaphore[i]=CreateSemaphore(NULL,1,1,NULL);
hPhilosopher[i]=CreateThread(NULL,0,philosopherProc,LPVOID(i),CREATE_SUSPENDED,0);
ResumeThread(hPhilosopher[i]);
Sleep(2000);
return0;
知识点延伸3:
读者写者问题的写者优先情况
cobegin
procedurereaderi(vord)(i=1,2,…k)
while(true){
P(S)
p(rmutex);
ifreadcount=0thenp(wmutex);
readcount:
=readcount+1;
v(rmutex);
V(S)
读文件;
=readcount-1;
ifreadcount=0then
v(wmutex);
procedurewriterj(vord)(j=1,2,…,m)
p(wmutex);
写文件;
v(wmutex);
V(s)
5.实现进程通信的方式有:
共享存储器方式,共享文件方式,消息通信方式。
具体进程通信的实现:
因为进程间不能直接通信,所以需要在操作系统空间设置一组缓冲区,当发送进程需要发送消息时,执行send系统调用,产生自愿性中断,进入操作系统,操作系统为发送进程分配一个空缓冲区,并将所发送的消息从发送进程copy到缓冲区中,然后将该载有消息的缓冲区连接到接收进程的消息链链尾,如此就完成了发送过程。
发送进程返回到用户态继续执行。
在以后某个时刻,当接收进程执行到receive接收原语时,也产生自愿性中断进入操作系统,由操作系统将载有消息的缓冲区从消息链中取出,并把消息内容copy到接收进程空间,之后收回缓冲区,如此就完成了消息的接收,接收进程返回到用户态继续进行。
五、第五章操作系统的资源管理
1.资源管理的机制与策略死锁及其解决方法系统对作业一级采用资源静态分配方法,系统在调度作业时,根据作业所需资源进行分配,并在作业运行完毕时,收回所分配的全部资源;
对进程一级采用资源动态分配方法,系统在进程运行中,根据进程提出的资源需求,进行资源的动态分配和回收。
资源分配时需要用到资源信息块,描述某类资源的请求者、可用资源和该类资源分配程序等必要信息,其内容有等待队列头指针,可利用资源队列头指针,资源分配程序入口地址。
常用的资源分配策略有先请求先服务,即按请求的先后次序排序,先到先得;
优先调度即按进程的优先级高低决定顺序,优先级高的先执行。
死锁是指在两个或多个并发进程中,如果每个进程持有某种资源而又都等待着别的进程释放现在保持着的资源,否则就不能向前推进。
此时,称这一组进程产生了死锁。
即不能再继续执行。
产生死锁的必要条件:
1.互斥条件:
涉及的资源是非共享的,即为临界资源。
2.不剥夺条件:
进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走。
3.部分分配:
进程每次申请它所需要的一部分资源。
在等待一新资源的同时,进程继续占用已分配到的资源。
4.环路条件:
存在一种进程的循环链,链中的每一个进程已获得的资源同时被链中下一个进程所请求。
只要破坏其中一个条件就能预防死锁。
预防死锁的方法有:
静态预防:
在作业调度时为选中的作业分配它所需要的所有资源,当资源一旦分配给该作业后,在其整个运行期间这些资源为它独占。
动态预防:
(1)有序资源分配法:
系统中所有资源都给定一个唯一的编号所有分配请求必须以上升的次序进行。
(2)银行家算法申请者事先说明对各类资源的最大需求量。
在进程活动期间动态申请某类资源时,由系统审查系统现有该类资源的数目是否能满足当前进程的最大需求量,如能满足就予以分配,否则拒绝。
2.处理机管理
处理机调度可以确定数据结构,确定调度策略,给出调度算法,实施处理机分派。
批处理系统中的处理机调度分为两级:
作业调度和进程调度。
作业调度对存放在辅存设备上的大量作业,以一定的策略进行挑选,分配主存等必要的资源,建立作业对应的进程,使其投入运行。
进程调度确定哪个进程在什么时候获得处理机,使用多长时间。
多任务操作系统中的处理机调度:
一个进程又可以创建多个子进程,形成可以并发执行的多进程。
当处理机空闲时,以某种策略选择一个就绪进程去运行,并分配处理机的时间
多线程操作系统中的处理机调度:
在支持多线程运行的系统中,一个进程可以创建一个线程,也可以创建多个线程。
当处理机空闲时,以某种策略选择一个就绪线程去运行,并分配处理机时间。
作业调度:
作业在整个活动期间有如下状态:
后备状态,执行状态,完成状态。
采用平均周转时间和平均带权周转时间衡量作业调度算法性能的好坏。
周转时间:
一个作业提交给计算机系统到该作业的结果返回给用户所需要的时
间。
定义ti=tci—tsi
带权周转时间:
一个作业的周转时间与其运行时间的比值常用的作业调度算法:
先来先服务调度算法(FCFS)策略:
按作业来到的先后次序进行调度。
短作业优先调度算法策略:
按作业请求运行的时间长短进行调度。
同样的条件下,短作业优先调度算法的平均周转时间更短,更具有优势。
进程调度的