收藏 分享(赏)

操作系统复习。.ppt

上传人:天天快乐 文档编号:777847 上传时间:2018-04-23 格式:PPT 页数:56 大小:1,003.50KB
下载 相关 举报
操作系统复习。.ppt_第1页
第1页 / 共56页
操作系统复习。.ppt_第2页
第2页 / 共56页
操作系统复习。.ppt_第3页
第3页 / 共56页
操作系统复习。.ppt_第4页
第4页 / 共56页
操作系统复习。.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

1、操作系统复习,第一章 操作系统引论第二章 进程管理第三章 处理机调度与死锁第四章 存储器管理第五章 设备管理第六章 文件管理第七章 操作系统接口Linux实验,第一章 操作系统引论,操作系统的概念; 操作系统的基本特征; 操作系统的主要功能; 操作系统的发展过程; 三种基本类型的操作系统,第二章 进程管理,进程的基本概念、特征、状态及状态之间的转换;进程控制块 进程控制:进程的创建、终止、阻塞与唤醒、挂起与激活; 进程同步:进程之间的两种制约关系;信号量机制、管程机制; 经典进程的同步问题; 用信号量机制解决进程的同步关系; 进程通信(三种高级通信方式); 线程、线程的属性;,第二章 进程管理

2、,进程同步的机制信号量机制 记录型信号量: Type semaphore=record value:integer; L: list of process; end Var S: semaphore;,第二章 进程管理,wait和signal操作描述: wait(S): S.value:=S.value-1; if S.value0 then block(S.L); signal(S): S.value:=S.value+1; if S.value0 S的值表示可继续进入售票厅的人数; S=0 表示售票厅中已有20名顾客(购票者); S0 |S|的值为等待进入售票厅的人数。 (2)上框为 P(

3、S) 下框为 V(S) (3)S 的最大值为 20 S 的最小值为 20 n,第二章 进程管理,进程同步的例题3: 某寺庙,有小和尚、老和尚若干。有一水缸,由小和尚用水桶从井中提水入缸,老和尚用水桶从缸里取水饮用。水缸可容10桶水,水取自同一井中。水井径窄,每次只能容一个水桶取水。水桶总数为3个。每次入、取缸水仅为1桶,且不可以同时进行。试用P、V操作给出小和尚、老和尚动作的算法描述。,第二章 进程管理,第二章 进程管理,分析: 小和尚从井中取水并向缸中倒水为一个进程,而老和尚从缸中取水为另一个进程。 有关互斥的资源有: 水井(一次仅允许一个水桶进出); 水缸(一次倒水、取水仅一个水桶)。 分

4、别为它们设置信号量mutex1、mutex2来实现互斥,初值均为1。,第二章 进程管理,分析(续): 有关同步的问题是: 3个水桶-无论是从井中取水还是倒水入缸或取水出缸都是一次一个,即为其设置信号量count,初值为3,抢不到水桶的进程只好等待。 此外,设置信号量empty来控制入缸的水量,初值为10,当水缸满时不可入水;设置信号full控制出缸的水量,初值为0,当水缸空时不可出水。,第二章 进程管理,Begin mutex1:=1;mutex2:=1; empty:=10;full:=0; count:=3; Cobegin 小和尚i(i=1,2,)打水; 老和尚j(j=1,2,)取水;

5、Coend;End.,第二章 进程管理,小和尚i(i1,2,)打水: Begin Repeat P(empty); /*看水缸满否,满则阻塞打水进程*/ P(count); /*申请打水的桶*/ P(mutex1);/*互斥使用水井,即不允许两和尚同时打水*/ 从井中取水; V(mutex1); P(mutex2); /*互斥使用水缸*/ 送水入缸; V(mutex2); V(count); /*归还水桶*/ V(full) /*水缸又多一桶水*/ Until false End;,第二章 进程管理,老和尚j(j=1,2,)取水: Begin Repeat P(full); /*看水缸是否有水

6、,无水则阻塞取水进程*/ P(count); /*申请取水的桶*/ P(mutex2); /*互斥使用水缸*/ 从缸中取水; V(mutex2); V(count) /*归还水桶*/ V(empty); /*缸中少了一桶水*/ Until false End,第三章 处理机调度与死锁,三级调度、两种调度方式 各种调度算法(FCFS、SPF/SJF、最短剩余时间优先SRT、RR-Round Robin、优先权调度算法-HPF、HRRN、多级反馈队列调度算法-FB),除最后一种算法外,要求会计算平均周转时间、平均带权周转时间 死锁的概念、产生死锁的原因、产生死锁的必要条件、处理死锁的方法(死锁的预

7、防、避免、检测和解除),第三章 处理机调度与死锁,例题: 设系统中有下述解决死锁的办法: (1)银行家算法 (2)检测死锁,终止处于死锁状态的进程,释放该进程所占有的资源 (3)资源预分配 请问哪种办法允许最大的并发性,即哪种办法允许更多的进程无等待地向前推进?请按“并发性”从大到小对上述三种办法进行排序。,第三章 处理机调度与死锁,三种办法中,检测死锁允许更多的进程无等待地向前推进。因为该方法允许死锁出现,即允许进程最大限度地申请并分配资源,直到出现死锁再由系统来解决;,其次是银行家算法,允许进程动态申请资源,只是在进程申请资源时检查系统是否处于安全状态,若是,则分配;若不是,则拒绝分配;,

8、最后是资源预分配,因为预分配要求进程在运行之前申请所需的全部资源才可以开始运行,这样会使许多进程因得不到资源无法运行。,第三章 处理机调度与死锁,例题: 按序分配是预防死锁的一种策略。什么是按序分配?为什么按序分配可以预防死锁? 答:按序分配是将系统中所有资源按类型进行线性排队,并赋予不同的编号,规定所有进程对资源的请求必须严格按照资源序号递增的次序提出。 按序分配可破坏产生死锁的四个必要条件中的“循环等待条件”,证明如下:,第三章 处理机调度与死锁,假设存在一组循环等待的进程: P0,P1,P2,Pn,其中Pi拥有资源Ri,Ri编号为F(Ri),根据按序分配原则,有 F(R0)F(R1)F(

9、Rn), 因存在循环等待,所以Pn所申请的下一个资源应为P0所占的资源R0;若Pn能正常运行,则应依据资源按序分配,即下次申请资源编号应比它所占资源编号大,即有F(Rn)F(R0),此结论与不等式中F(R0) arootlocalhost symlink# rm arm: remove a? yrootlocalhost symlink# ls -ltotal 0lrwxrwxrwx 1 root root 1 Oct 15 14:20 b - arootlocalhost symlink# cat bcat: b: No such file or directory,类似于Windows下的

10、快捷方式,它占用一点的存储空间,指向原文件。,Linux实验-fork(),当前进程被分为两个进程: 父进程parent, 子进程child子进程从父进程那里继承了indentical copy of memoryCPU registersall files that have been opened by the parent如果失败则返回-1父进程和子进程均在fork之后的语句开始执行for child, fork() returns 0for parent, fork() returns the PID of the child,fork出错可能有两种原因:当前的进程数已经达到了系统规定

11、的上限;系统内存不足。,Linux实验-fork()举例,子进程执行的上下文就是父进程调用fork时上下文的副本,Linux实验-fork()执行过程(1),Linux实验-fork()执行过程(2),Linux实验-fork()执行过程(3),Linux实验-fork()执行过程(4),Linux实验-fork()执行过程(5),Linux实验-fork()执行过程(6),Linux实验-系统调用exit(),用于子进程末尾,使子进程能自我终止This system call:Saves result = argument of exitCloses all open files, conn

12、ectionsDeallocates memoryChecks if parent is aliveIf parent is alive, holds the result value until the parent requests it(with wait); in this case, the child process does not really die, but it enters a zombie/defunct stateif parent is not alive, the child terminates (dies),Linux实验-系统调用wait(),Simple

13、 way of a process to acknowledge the death of a child processThe process is suspended until one of its child processes exitsWhen a child calls exit(), the parent unblocks from waiting and receives the value passed by exit If no children are alive, wait() returns immediatelyAlso, if a parent has any

14、zombie child, wait() returns the exit status of that zombie immediately and kills the zombie,Linux实验-系统调用wait()例,#include #include #include #include main() pid_t pc,pr; pc=fork(); if(pc0) /* 如果出错 */ printf(error ocurred!n); else if(pc=0) /* 如果是子进程 */ printf(This is child process with pid of %dn,getp

15、id(); sleep(10); /* 睡眠10秒钟 */ exit(0); else /* 如果是父进程 */ pr=wait(NULL); /* 在这里等待 */ printf(I catched a child process with pid of %dn),pr); ,Linux实验-系统调用getpid(),getppid(),getpid returns the identifier of the calling process. Example call (pid is an integer): pid=getpid();getppid returns the identifier of the parentNote:Zombies can be noticed by running the ps command (shows the process list): ps -A,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报