操作系统复习

操作系统内核:是操作系统加在硬件上的第一层软件,实现各种控制和管理功能。
为了防止用户程序有意或无意地破坏OS内
核代码和数据,通常将处理机的执行状态分成:
★系统态:又称为管态,也称为内核态。它具
有较高的特权,能执行一切指令,访问所有寄
存器和存储区。通常,操作系统内核就运行在
系统状态下。
★用户态:又称为目态。它是具有较低特权的
执行状态,仅能执行规定的指令,访问指定的
寄存器和存储区。通常用户程序都运行在用户
态。
static总结
全局变量前添加static关键字,则该变量称为一、静态全局变量。
1)在全局数据中的变量如果没有显示的初始化会自动被程序初始化为0
2)其他文件中可以定义同名int型变量a,不会冲突
3)全局变量默认是有外部连接性的,其作用域是整个工程,在一个文件内定义的全局变量可以通过包含其所在头文件或显示调用 extern关键字修饰全局变量的变量名声明来引用;
二、静态局部变量
1)静态局部变量在程序执行到该对象声明时,会被首次初始化。其后运行到该对象的声明时,不会再次初始化,程序测试函数每次输出的值都是递增的原因(只会被初始化一次);
2)局部静态变量不能被其作用域之外的其他模块调用,其调用范围仅限于声明该变量的函数作用域当中;
线程与进程的比较
★调度:线程作为调度的基本单位;进程作为拥有
资源的基本单位。
★并发性:一个进程间的多个线程可并发执行。
★拥有资源:线程仅拥有少量资源;进程是拥有资源的独立单位。
进程与线程的区别总结:

本质区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。

包含关系:一个进程至少有一个线程,线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。

资源开销:每个进程都有独立的地址空间,进程之间的切换会有较大的开销;线程可以看做轻量级的进程,同一个进程内的线程共享进程的地址空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。

影响关系:一个进程崩溃后,在保护模式下其他进程不会被影响,但是一个线程崩溃可能导致整个进程被操作系统杀掉,所以多进程要比多线程健壮。

请添加图片描述
将一个数组逆序输出
/程序分析:用第一个与最后一个交换。/
for(i=0;i<N/2;i++)
{
temp=a[i];
a[i]=a[N-i-1];
a[N-i-1]=temp;
}
实时操作系统:一般使用基于优先级的调度方式,所以不同优先级的任务,完全基于优先权原则来运行
非实时操作系统:所有任务默认优先级相同,任务调度采用时间片调度方式
各数据类型取值范围和所占字节数
编写C程序时需要考虑每种数据类型在内存中所占的内存大小,即使同一种数据类型在不同平台下所占内存大小亦不相同。可以使用sizeof运算符,表达式sizeof(type)得到存储字节大小。
byte字节 1 8 -128 +127
short 2 16 -2(15) ~ +2(15)-1
char 2 16
int 4 32 -2(31) ~ +2(31)-1
float 4 32
long 8 64 -2(63) ~ +2(63)-1
double 8 64
boolean 1 8
指针——
16位系统存储大小2字节,
32位系统存储大小4字节,
64位系统存储大小8字节。、

1.1产生死锁的必要条件

死锁必须具备下面四个必要条件,只要其中一个条件不成立,死锁就不会发生。如果此时还有其它进程请求该资源,则请求者只能等待,直至占有该资源
的进程用毕释放。
互斥条件:进程对所分配的资源进行排它性使用,即在一段时间内某资源仅为一进程所占用。
请求和保持条件:当进程因请求新的资源(请求)而阻塞(该被其他进程占用)时,对自已获得的资源保持不放。
不剥夺条件:进程已获得的资源在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
环路等待条件:在发生死锁时,必然存在一个进程–资源的环形链。
预防死锁的方法
预防死锁和避免死锁都属于事先预防的策略,不同是预防死锁是通过设置一些限制条件,去破坏四个必要条件中的一个或几个条件,来避免死锁的发生。避免死锁并不需要事先采取各种限制措施去破坏四个必要条件,而是在资源动态分配过程中,防止系统进入不安全状态,来避免死锁的发生。

2.1 预防死锁
预防死锁的方法是使四个必要条件中的第2、3、4个条件之一不能成立,来避免发生死锁。其中条件1只要是对资源的访问,必须是互斥的。

摒弃请求和保持条件
所有进程在开始运行之前,必须一次性分配所需资源,这样在进程运行期间不会在提出资源请求。(摒弃请求条件)
只要有一个资源得不到分配,也不给这个进程分配其他的资源。(摒弃保持条件)
摒弃不剥夺条件
即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源。这意味着某一进程已经占有的资源,在运行过程中会被暂时地释放掉,也可认为是被剥夺了。
摒弃环路等待条件
系统给每类资源赋予一个编号,每一个进程严格按照编号递增的顺序请求资源。例如,输入机的序号为 1,打印机的序号为 2,磁带机为 3,磁盘为4。这样,在所形成的资源分配图中,不可能再出现环路,因而摒弃了“环路等待”条件。
2.2 避免死锁
在预防死锁的几种方法中,都施加了较强的限制条件;在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。

在避免死锁策略中,系统状态被分为安全状态和不安全状态。运行的进程可以动态地申请资源,但系统在进行资源分配之前,应先计算此次资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,令进程等待。

需要注意的是只要系统始终处于安全状态,就可以避免发生死锁。但处于不安全状态不一定会发生死锁。

典型的避免死锁的算法是银行家算法。

银行家算法中的数据结构
系统的状态是当前给进程分配的资源情况。状态包含一个向量Avaliable(可用资源总量)及Max矩阵(进程最大需求矩阵)、Allocation矩阵(当前已分配给进程的资源)和Need需求矩阵(Need=Max-Allocation)。

算法过程
设Request-i向量表示进程P-i申请的各种资源数,当Pi发出资源申请后,系统按下述步骤进行检查:

如果Request-i[j]<=Need[i,j],否则出错
如果Request-i[j]<=Avaliable[j],j∈[0,m]
系统尝试着把资源分配给进程P-i,并修改下面相应的值。(并非真的分配,而只是为了预判)。
Avaliable[j] = Avaliable[j] - Request-i[j];

Allocation[i,j] = Allocation[i,j] + Request-i[j];

Need[i,j] = Need[i,j] - Request-[j];
系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程P-i,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程 P-i等待。
3. 死锁的检测和解除
3.1 检测死锁
死锁检测与解除是指当死锁发生时,系统能够检测到死锁发生的位置和原因,并能通过外力破坏死锁发生的必要条件,从而使得并发进程从死锁状态中恢复出来。

死锁检测方法:银行家算法中判断系统是否安全的算法。

3.2 解除死锁
当利用死锁检测算法检测出系统已经出现了死锁,那么,此时就需要对系统采取相应的措施。常用的解除死锁的方法有:

剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态;
终止或撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值