赞
踩
主要特征;
优点:
主要缺点:
主要特征:
好处:
优点:
缺点:
多道批程序需要解决的五个问题:
1、实时控制系统:工业控制,军事控制,医疗控制,…….
2、实时信息处理系统:航班定票,联机情报检索,……
并发——并行性和并发性,并发执行的过程。
▪ - 并行性:是指两个或多个事件在同一时刻发生。
▪ - 并发性:是指两个或多个事件在同一时间间隔内发生。
▪ 任务共行 - 从宏观上看,任务共行是指系统中有多个任务同时运行 - 从微观上看,任务共行是指单处理机系统中的任务并发 (Task Concurrency:即多个任务在单个处理机上交替 运行)或多处理机系统中的任务并行(Task Parallelism: 即多个任务在多个处理机上同时运行)
进程是资源分配的基本单位
线程是独立运行和调度的基本单位
把在一段时间内只允许一个进程访问的资源,称为临界资源。如打印机、栈、表格等
互斥共享方式
同时访问方式
并发和共享是操作系统的两个最基本的特征,它们又是互为存在的条件
使用分块结构的系统包含若干module(模块);其中, 每一块实现一组基本概念以及与其相关的基本属性
块与块之间的相互关系:
优点:
缺点:
使用分层系统结构包含若干layer(层);其中,每一层 实现一组基本概念以及与其相关的基本属性
层与层之间的相互关系:
考虑因素
*
程序是指令的有序集合,是静态的;进程是程序在处理机上的一次执行过程,是动态的
程序的存在是永久的;而进程是有生命周期的,它因创建而产生,因调度而执行,因得不到资源而暂停执行,因撤消而消亡。
程序仅是指令的有序集合;而进程则是由程序段、数据段、PCB组成
进程与程序之间不是一一对应
就绪状态:
执行状态:
阻塞状态:
五种状态及其转换模型:
*
进程的挂起状态:
进程挂起的原因:
被挂起进程的特征:
阻塞和挂起的区别:
四种状态的组合
*
*
中级调度
*
常驻内存
是进程存在的唯一标志
PCB作用
pcb中的
*
*
即对系统中 所有的进程实施有效的管理,其功能包括
进程控制一般是由OS的内核中的原语(Primitive)来实现的
执行模式:
支撑功能:
父进程
子进程 – 可以继承父进程所拥有的资源
当子进程被撤消时,应将其从父进程那里获得的资源归还给父进程。
在撤消父进程时,也必须同时撤消其所有的子进程。
引起创建进程的事件
*
创建过程
正常结束:
引起进程终止的事件:
引起阻塞的事件
进程阻塞过程
进程的唤醒:
唤醒过程
Block原语和Wakeup原语
代码
临界区:
进程同步的基本概念:
临界区互斥问题的解决:
对临界区管理将标识看做一个锁,“锁开”进入, “锁关”等待。
初始打开,每个进入临界区的进程必须对锁进行测试。
测试和关锁操作必须连续(原子操作)
过程:
优点:
缺点:
对value的值先–或者先++
若value的值小于0,value的绝对值就是等待队列中进程个数
处理过程:
整型信号量与记录型信号量的问题讨论
信号量的物理含义:
信号量的初值S或者S.value应该大于等于0. S.Value的初值表示系统中某类资源的数目,称为资源信号量
若S.value初值为1,只允许一个进程访问临界资源,信号量转化为互斥信号量,用于进程互斥
S.value>0表示有S.value个资源可用
S.value=0表示无资源可用
记录型信号量: 若S.value<0,则| S.value|表示S等待队 列中的进程个数
P(S):表示申请一个资源
V(S):表示释放一个资源
优点:
缺点:
semaphore S =0 初始化同步信号量为0
加入代码4的执行必须在代码2之后,那么如上图所示
在先执行的代码后执行V操作,后执行的代码前执行P操作
如何解决读进程优先问题
计数器count
rw信号量
mutex信号量
对于系统中的共享对象,把只要求读该文件的进程称为“reader进程”,其它进程称为“writer进程
所谓读者-写者问题,是指保证一个write进程必须与其它进程互斥地访问共享对象的同步问题
管道:连接一个读进程和一个写进程之间通信的共享文件
进程之间的信息交换
调度对象:作业
长程调度模型:
又称内存调度、中程调度
对象:挂起的进程
功能:把外存上那些已经具备运行条件的就绪进程重新载入内存。从静止就绪到活动就绪
应用范围**:具有对换功能的操作系统**
频度**:中等**
吞吐量:
平均周转时间
吞吐量
作业 Job:用户提交给系统的一项相对独立的工作。程序+数据+作业说明书
作业步:
在作业运行期间,每个作业都必须经过若干个相对独立,又相互关联的顺序加工步骤才能得到结果,每一个加工步骤称为一个作业步,各作业步之间存在着相互联系。
作业流:依次执行的作业步,作业步间非并行的
作业控制块 JCB
作业运行的三个阶段和三种状态
根据JCB信息,检查系统中的资源能否满足作业对资源的需求,按照一定的调度算法,从外存的后备队列中选取某些作业调入内存,并为他们创建进程、分配必要资源, 安排在就绪队列。
作业调度需要作出以下决定:
既照顾短作业又不使长作业的等待时间过长,改进了调度性能
优先权=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间=Rp
避免了长作业饥饿的情况。不会导致饥饿
分时系统的需求:
原理:
进程切换时机:
时间片大小的确定:
类型:
优先级的类型:
优点
缺点
死锁:
死锁进程都不能:
一些结论:
产生死锁的原因可归结为两点:
竞争临时资源:
进程推进顺序不当引起死锁:
当资源不够时,不一定死锁
如果一组进程中的每一个进程都在等待仅由该组 进程中的其他进程才能引发的事件,那么该组进程是死锁的
进程互斥的四个必要条件:
死锁的解决方法
必须设法破坏产生死锁的 四个必要条件之一
其中必要条件1,因为它是由设备的固有属性所决定的, 不仅不能改变,还应加以保证
破坏请求和保持条件
摒弃不剥夺条件
摒弃环路等待条件
系统的安全状态:
安全、不安全、死锁状态空间
避免死锁的关键在于如何准确的预测是否会出现死锁,从而避免死锁
银行家算法中的数据结构
算法步骤:
1.如果Requesti [j]≤Need[i,j],便转向步骤2;否则认为出错,因为它所需要的资源数已超过它 所声明的最大值
2.如果Requesti [j]≤Available[j],便转向步(3), 否则,表示尚无足够资源,Pi须阻塞等待
3.系统试探着把资源分配给进程Pi,并修改下面数 据结构中的数值:
4.系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态
若安全,才正式将资源分配给进程Pi,以完成本次分配
安全性算法:
1.设置两个向量:
工作向量Work: 它表示系统可提供给进程继续运行所需的各类资源数目,Work = Available
Finish:开始时先做Finish[i] = false;当有足够资源分配给进程时,再令Finish[i] = true
2.从进程集合中找到一个能满足下述条件的进程:
Finish[i] = false
Need[i,j] ≤ work[j];
3.当进程只获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:
Work[ j ] = Work[ i ] + Allocation[ i,j ]
* Finish[ i ] = true
* go to step 2
4.如果所有进程的Finish[i] = true都满足,则 表示系统处于安全状态;否则,系统处于不安全状态
避免死锁的限制:
避免死锁不像预防死锁那样需要剥夺进程已获得的资源,或重新执行进程。而且,避免死锁比预防死锁施加的
银行家算法的应用:
补充:
当系统为进程分配资源时,若未采取任何限制性措施,则系统必须提供检测和解除死锁的手段
检测死锁的基本思想:
资源分配图G = (N,E):
死锁定理:
死锁检测算法:
常采用的两种方法:
进程回退。让一个或多个死锁进程回退到足以避免死锁的地步
按照解除死锁复杂度递增的顺序列出解除死锁的方法:
最小代价原则
(地址映射/地址变换)
直接指定方式
静态分配方式(Static Allocation)
可从其 地址空间的零地址开始;当装配程序对其进行连接装入时才 确定它们在主存中的相应位置,从而生成可执行程序。也就 是说,存储分配是在装入时实现的
特点:
(1)在一个作业装入时必须分配其要求的全部存储量; (2)如果没有足够的存储空间,就不能装入该作业;
(3)一旦一个作业进入内存后,在其退出系统之前,它一 直占用着分配给它的全部存储空间;
(4) 作业在整个运行过程中不能在内存中“搬家”、也不 能再申请存储量
静态分配策略的存储管理很简单,但在多道程序系统中 不能有效地共享存储器资源
动态分配方式(Dynamic Allocation)
动态分配是一种更加有效的使用主存储器的方法
特点
(1)作业在存储空间中的位置,也是在其装入时确定的;
(2)在其执行过程中可根据需要申请附加的存储空间; (3)一个作业已占用的部分存储区域不再需要时,可以要求归还给系统。 即:这种存储分配机制能接受不可预测的分配和释放存储区域 的请求,实现个别存储区域的分配和回收;
(4)存储区域的大小是可变的;
(5)允许作业在内存中“搬家”
绝对装入方式(Absolute Loading Mode)
可重定位装入方式(Relocation Loading Mode)
重定位(地址映射/地址变换):
➢ 经编译得到的目标模块中为相对地址(通常从0开始), 即地址都是相对于0开始的。
➢ 装入模块中的逻辑地址与实际装入内存的物理地址不 同。
➢装入内存时,相对地址(数据、指令地址)要作出相应 的修改以得到正确的物理地址,这个修改的过程称为重 定位。
静态重定位
动态运行时装入方式(Denamle Run-time Loading) :
指为用户程序分配一个连续的内存空间
将内存用户空间划分为若干个固定大 小的区域,每个区域称为一个分区(region),在每个分区 中只装入一道作业 ,从而支持多道程序并发设计
这些存储区域是在系统启动时划定的,其区域的大小和边界是不能改变的
内碎片
优点
缺点
采用的数据结构:分区表-记录分区的大小和使用情况
根据进程的实际需要,动态地为之分配连续的内存空间。即分区的边界可以移动,分区的大小是可变的。
两种不同选择,一种是分区的数目固定大小是可变的,而另一种则允许分区的数目和大小都是可变的。为了说明它们之间的重要差异,我 们考虑一个具有256K字节存储器的系统
可变分区分配
就是为一作业选择分区时总是寻找其大小最接近作业所要求的存储区域。即:把作业放入这样的分区后剩下的零头最小
缺点:
产生很多小的空白区
每个空白区按其在存储空间中地址递增的顺序链在一起,即每个后继空白区的起始地址总是比前者的大。在为作业分配存储区域时,从这个空白区链的始端开始查找,选择第一个足以满足请求的空白块,而不管它究竟有多大。
优点:
算法简单,查找速度快;留在高址 部分的大的空白区被划分的机会较少,因而在大作业 到来时也比较容易得到满足
缺点:
这种算法常常利用一个大的空白区适应小作业的请求,从而留下一些较小的无法用的空白区,存储空间利用率不高
每次都从开始查找,将使找到合适空白区的速度降低
页:
块:
如何建立程序空间与主存空间的映射
页表的作用:
页表一般存放在内存中
页表的基址及长度由页表寄存器给出
访问一个数据/指令需访问内存2次(页表一次,内存一次),所以出现内存访问速 度降低的问题。
例题
地址结构
eg
(1)根据逻辑地址,计算出页号和页内偏移量;
(2)从PTR中得到页表首址,然后检索页表,查找指定页面对应的页框号;
(3)用页框号乘以页面大小获得其对应的起始地址, 并将其送入物理地址的高端。
(4)将页内偏移量送入物理地址低端,形成完整的物理地址
例题
例题
例题
➢第一次访问页表,以得到物理地址
➢第二次访问物理地址,以得到数据
① 采用离散分配方式来解决难以找到一块连续的大内存空间的问题,(即引入两级页表);
② 只将当前需要的部分页表项调入内存, 其余的页表项仍驻留在磁盘上,需要时再调入
分页管理内存管理效率高
分段管理符合模块化思想
原理:
分段和分页相结合。 先将用户程序分段,每段内再划分成若干页,每段有段名(段号),每段内部的页有一连续的页号
内存划分:按页式存储管理方案
内存分配:以页为单位进行离散分配
逻辑地址结构
地址变换
注:在段页式存储管理方式中,每访问一次数据, 需访问三次内存
进程运行时,先将要运行的部分程序装入内存,其他部分暂留外存
当要执行的指令不在内存时,处理器发生中断,通知操作系统将所缺部分从外存调入内存,保证程序继续执行;
虚拟内存的依据
如何将程序划分成部分
它是在纯分页系统的基础上增加了请求调页、页面置换两大功能所形成的页式虚拟存储系统
硬件支持
页表机制
缺页中断机构
地址变换机构
LRU(least Recently Used)
设内存读写周期为t,查找快表时间为λ,缺页中断处理时间为ɛ
CPU急剧下降的原因
抖动
驻留集
固定分配、可变分配、局部置换、全局置换
三种置换策略
何时调入页面
程序I/O方式
中断方式 :每“字节”传送产生一次中断。
直接存储器访问方式:数据块
通道方式 :一组数据块。通道是一种特殊的处理机
选择性能好的磁盘
采用好的磁盘调度算法
设置磁盘高速缓存
采用高度可靠、快速的容量磁盘系统–磁盘冗余阵列
数据的组织和格式
寻道时间Ts:指把磁臂(磁头)移动到指定磁道上所经历的时间
旋转延迟时间Tτ
传输时间Tt
缓冲区仅仅是一组内存块的链表
而缓冲池是包含了一个管理的数据结构及一组操作函数的管理机制,用于管理多个缓冲区
每个缓冲区由用于标识和管理的缓冲首部以及用于存放数据的缓冲体组成
三个队列
四种工作缓冲区
采用链接分配方式时,可通过在每个盘块上的链接指针,将同属于一个文件的多个离散的盘块链接成一个链表,把这样形成的物理文件称为链接文件
隐式链接
显式链接
链接分配的优点
缺点
(33条消息) 操作系统——文件的索引分配_混合索引_秋之颂的博客-CSDN博客
采用索引文件结构的文件需要在自己的FCB中记录自己的索引块在磁盘中是哪一块
索引表就是一个含有许多盘块号的数组
单级索引分配
多级索引分配
空闲表法属于连续分配方式,它为每个文件分配一块连续的存储空间,即系统也为外存上的所有空闲区建立一张空闲表,每个空闲区对应于一个空闲表项,其中包括表项序号、该空闲区的第一个盘块号、该区的空闲盘块数等信息
适合于可变大小分区的连续分配方式
用专门的空闲分区表登记空闲分区信息会浪费一定的存储空间,而且不适合登记分散且数目很多的空闲分区,不利于基于存储块的链接文件和索引文件的存储空间分配
空闲链表法是将所有空闲盘区拉成一条空闲链。根据构成链所用基本元素的不同,可把链表分成两种形式:
空闲盘块链
空闲盘区链
(34条消息) 操作系统——成组链接法_LengDanRan的博客-CSDN博客
文件目录:
对目录进行的操作
#!/bin/sh
: 声明脚本使用的解释器是/bin/sh
,即Shell解释器。if [ $# -ne 1 ]
: 检查命令行参数的数量是否为1。$#
表示命令行参数的数量,-ne
表示不等于。then
: 如果上一条命令的结果为真(即命令行参数数量不等于1),则执行接下来的命令。echo "Usage: $0 filename" >&2
: 输出错误信息到标准错误输出。$0
表示脚本的名称,>&2
表示将输出重定向到标准错误输出。exit 1
: 退出脚本并返回状态码1,表示发生错误。count=1
: 初始化变量count
为1,用于保存行号。cat $1 | while read line
: 使用cat
命令读取指定文件$1
的内容,并通过管道传递给后面的while
循环逐行处理。echo $count $line
: 输出行号和当前行的内容。count=
expr $count + 1``: 使用expr
命令对count
进行加1操作,更新行号。done > tmp$$
:done
表示循环结束,> tmp$$
将循环输出重定向到一个临时文件tmp$$
中。mv tmp$$ $1
: 使用mv
命令将临时文件tmp$$
重命名为原始文件$1
,覆盖原始文件,从而实现给每行添加行号的效果。该脚本的执行流程是先检查命令行参数数量,如果不等于1,则输出错误信息并退出。然后,初始化行号变量
count
为1,通过cat
命令读取文件内容,并使用while
循环逐行处理。循环内部输出行号和行内容,并更新行号。最后,将带有行号的内容写入临时文件,并使用mv
命令将临时文件重命名为原始文件,完成添加行号的操作。
$ cat ↙ cat命令后无文件名, cat等待键盘输入
abcde
abcde 键盘输入内容
this is a test line
this is a test line cat进程输出内容
Ctrl+d
$
$ cat < abc
aaaaaaaaaaaaaaa
bbbbbbbb
cccccccccccccccccc
$
command 2> filename ( 2和>之间没有空格 )
管道用于连接两个命令, 它把前一个命令的标准输出重定向给后一个命令作为标准输入, 其格式为
command1 | command2
$ echo 12345
12345
$ echo “department computer”
department computer
$ echo “My home directory is: $HOME”
My home directory is: /usr/teacher/david
$ echo –n “Input your choice (y/n) [ ]\b\b”
Input your choice (y/n) [ _ ]
$0 当前shell程序的名字
$1 ~ $9 命令行上的第一到第九个参数
$# 命令行上的参数个数
$* 命令行上的所有参数
$@ 分别用双引号引用命令行上的所有参数
$$ 当前进程的进程标识号(PID)
$? 上一条命令的退出状态
$! 最后一个后台进程的进程标识号
$ echo aa bb cc dd $$
aa bb cc dd 2391
$ cat file1 file2 > file3 2> errlog
$ echo $? (非0表示命令运行失败, 错误信息在 errlog 文件中)
$ echo
(空行, 即echo输出串尾隐含的换行符)
- 1
$ echo This is a test. (单词间多个空格)
This is a test.
$ echo “This is a test.” (用引号包括时结果如何?)
$ AA=123 定义变量AA
$ echo $AA 引用变量AA的值
123 (变量AA的值)
$ B=“this is a string” 定义变量B, (字符串中有空格时用引号)
$ echo $B 引用变量B的值
this is a string (变量B的值)
$ a=“he is a student”
$ echo “She said: $a”
She said: he is a student echo执行时,替换了变量$a的值
$ b=‘The value of a is $a’
$ echo $b
The value of a is a e c h o 执行时,未替换了变量 a echo执行时,未替换了变量 aecho执行时,未替换了变量a的值
$ a=date
$ echo $a
date (变量a的值是字符串date)
$ b=
date
(反撇号中的字符串作为命令名)$ echo $b
Sat Feb 1 16:28:19 Beijing 2003
(变量b的值是反撇号中命令的执行结果)
$ c=“There is a teach”
$ echo “$cer reading room”
reading room (未定义变量cer, 其值用空串替代)
$ echo “${c}er reading room”
There is a teacher reading room
(花括号将变量名和后面的字符串区分开)
不带参数的ps命令运行时, 显示该用户当前活动进程的基本信息
$ ps PID TTY TIME COMMAND 612 tty08 0:37 sh 931 tty08 0:01 ps $
- 1
- 2
- 3
- 4
- 5
PID 进程标识号. 系统每个进程在其生命周期都有一个唯一的PID.
TTY 启动该进程的终端号
TIME 进程累计占用CPU的时间
COMMAND 产生该进程的命令
$ ps -e
PID TTY TIME COMMAND
0 ? 0:00 swapper
1 ? 0:01 init
358 00 0:01 sh
695 01 0:01 sh
23 ? 0:00 logger
732 03 0:00 vi
25 ? 0:00 cron
681 02 0:00 getty
623 03 0:01 csh
732 01 0:01 ps
$
$ ps -f
UID PID PPID C STIME TTY TIME COMMAND
liu 298 1 0 14:57:02 02 0:02 sh
liu 395 298 16 16:31:19 02 0:00 ps-f
$ sleep 5
[进程暂停5秒钟, 什么也不作]
$$ sleep 10; who
[进程暂停10秒钟后, 显示系统中登录的用户名]$ echo “I am sleeping…”; sleep 100; echo “I am awake”
I am sleeping … [等待100秒钟]
I am awake
$
三种情况下进程被终止
kill命令的三种常用格式
kill PID 正常结束进程, 自动完成所有善后工作, 作用类似于按 Del 键. kill -1 PID 先挂起该进程, 终止子进程, 完成善后工作, 再终止该进程. kill -9 PID 立即强行终止该进程, 不作任何善后工作. 可能出现资源浪费和"孤儿"进程.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
$ cat prog1
who | grep $1
chmod 740 prog1
$ prog1 student5
prog1: not found
(shell在标准搜索目录中找不到prog1命令)
. read var
把读入的数据全部赋给var
- 1
. read var1 var2 var3
把读入行中的第一个参数赋给var1, 第二个参数赋给var2, ……,把其余所有的参数赋给最后一个变量.
- 1
read 读取标准输入(键盘), 输入的内容赋给后面的变量. 1. $ read name age yilan 23 从键盘输入的内容 $ echo "student $name is $age years old" student yilan is 23 years old 屏幕显示的内容 2. echo -n "Input your name: " read username echo "Your name is $username" 3. #example2 for read echo –n "Input date with format yyyy mm dd: " read year month day echo "Today is $year/$month/$day, right?" echo -n "Press any key to confirm and continue" read answer echo "I know the date, bye!"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
$ expr 12 + 5 * 3 #反斜线去掉*号的元字符含义
27
$ expr 3 - 8 / 2
-1
$ expr 25 % 4
1
$ num=9
$ sum=expr $num \* 6
#反撇号引用命令的运行结果
$ echo $sum
54
语法结构:
if 表达式
then 命令表
fi
shell程序prog2, 测试命令行参数是否为一个已存在的文件或目录。 用法为:
#The statement of if…then…fi (注释语句)
if [ -f $1 ] (测试命令行第一个参数是否为文件)
then
echo “File $1 exists” (引用变量值)
fi
if [ -d $HOME/$1 ] (测试参数是否为目录)
then
echo “File $1 is a directory” (引用变量值)
fi
$ prog2 prog1
File prog1 exists
$0为prog2; $1为prog1, 是一个已存在的文件.
$ prog2 backup
File backup is directory
$0为prog2; $1为backup,是一个已存在的目录.
确定逻辑地址A对应的页号
根据页号查询页表,找到在内存中的起始地址
确定逻辑地址A的页内偏移量W
如果有k为表示页内偏移量,则说明一个系统中一个页面的大小有2^k个内存单元
如果有m为表示页号,则说明一个系统中一个页面的大小有2^m个页面
即页面大小和页内偏移量位数可以相互转换
当进程调度时,操作系统将页表在内存中的起始地址F和页表长度M放入PTR中
页式管理中地址是一维的,只要知道了一个逻辑地址,就可以自动算出页号、页内偏移量
注意:会产生页内碎片,下一个页表项存放地址不能使用、
作用和页表类似,存放段号、段长和基址
段表项长度相同,段号可以隐藏
先分段,再分页
段号的位数决定了每个进程最多可以分为几个段
页号的位数决定了每个段最大有多少页
页内偏移量决定了页面大小、内存块大小
段表
页表
一个进程对应一个段表,每个段,每个段对应一个页表。
地址转换
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。