第六章 死锁
在计算机系统中有很多独占性的资源,在任一时刻它们都只能被一个进程使用。两个进程同时使用同一文件系统表中的表项会引起文件系统的瘫痪。正因为如此,操作系统都具有授权一个进程(临时)排他地访问某一种资源的能力。两个进程被相互阻塞,并且一直处于这样的状态,称之为死锁。
死锁分为两类:资源死锁和通信死锁。资源死锁是由于多个进程或线程同时获取多个资源时发生;通信死锁是由于网络延时或丢包,导致两个进程都在等待对方的数据。可以通过超时重发机制解决。
资源
1. 定义
在进程对设备、文件等取得了排他性访问权时,有可能会出现死锁。为了尽可能使关于死锁的讨论通用,我们把这类需要排他性使用的对象称为资源。资源可以是硬件设备(如蓝光驱动器)或是一组信息(如数据库中一个加锁的记录)。
2. 分类
资源分为两类:可抢占的和不可抢占的。
可抢占资源:可以从拥有它的进程中抢占而不会产生任何副作用,存储器就是一类可抢占的资源
不可抢占资源:是指在不引起相关的计算失败的情况下,无法把它从占有它的进程处抢占过来。
总的来说,死锁与不可抢占资源有关,有关可抢占资源的潜在死锁通常可以通过在进程之间重新分配资源而化解。所以,我们的重点放在不可抢占资源上。
死锁
1. 定义:
在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗的讲就是两个或多个进程无限期的阻塞、相互等待的一种状态。
3. 资源死锁的条件:
互斥条件:一个资源一次只能被一个进程使用
请求与保持条件:一个进程因请求资源而阻塞时,对已获得资源保持不放
不可剥夺条件:进程获得的资源,在未完全使用完之前,不能强行剥夺
循环等待条件:若干进程之间形成一种头尾相接的环形等待资源关系
死锁发生时,以上四个条件一定是同时满足的。如果其中任何一个条件不成立,死锁就不会发生。
3. 处理死锁的策略
忽略该问题:也许如果你忽略它,它也会忽略你。(鸵鸟算法)
检测死锁并恢复:允许死锁发生,检测它们是否发生,一旦发生死锁,采取行动解决问题。(死锁检测和死锁恢复)
仔细对资源进行分配,动态地避免死锁。(死锁避免)
通过破坏引起死锁的四个必要条件之一,防止死锁的产生。(死锁预防)
4. 处理死锁的具体方法
鸵鸟算法:最简单的解决方法是鸵鸟算法:把头埋到沙子里,假装根本没有问题发生。如果死锁平均每5年发生一次,而每个月系统都会因硬件故障、编译器错误或者操作系统故障而崩溃一次,那么大多数的工程师不会以性能损失和可用性的代价去防止死锁。
死锁检测和解除:在使用这种技术时,系统并不试图阻止死锁的产生,而是允许死锁发生,当检测到死锁发生后,采取措施进行解除。
解除死锁的方法:
剥夺资源:在不通知原进程的情况下,将某一资源从一个进程强行夺走给另一个进程使用,接着又送回
撤销进程:最直接也是最简单的解决死锁的方法是杀死一个或若干个进程。一种方法是杀掉环中的一个进程。如果走运的话,其他进程将可以继续。如果这样做行不通的话,就需要继续杀死别的进程直到打破死锁环。另一种方法是选一个环外的进程作为牺牲品以释放该进程的资源。
死锁避免:在避免死锁的策略中,允许进程动态地申请资源。因而,系统在进行资源分配之前预先计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。最具有代表性的避免死锁算法是银行家算法。
死锁预防:破坏互斥条件;破坏请求与保持条件(资源一次性分配);破坏不可剥夺条件(当某进程新的资源未满足时,释放已占有的资源);破坏循环等待条件(资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反)
通信死锁
定义:在一系列进程中,每个进程因为等待另外一个进程引发的事件而产生阻塞,这就是一种死锁
通信死锁不能通过对资源排序(因为没有)或者通过仔细地安排调度来避免(因为任何时刻的请求都是不允许被延迟的)。幸运的是,另外一种技术通常可以用来中断通信死锁:超时。在大多数网络通信系统中,只要一个信息被发送至一个特定的地方,并等待其返回一个预期的回复,发送者就同时启动计时器。若计时器在回复到达前计时就停止了,则信息的发送者可以认定信息已经丢失,并重新发送(如果需要,则一直重复)。通过这种方式,可以避免死锁。
死锁、活锁和饥饿
死锁:死锁是多线程中最差的一种情况,多个线程相互占用对方的资源的锁,而又相互等对方释放锁,此时若无外力干预,这些线程则一直处理阻塞的假死状态,形成死锁。
活锁:活锁是拿到资源却又相互释放不执行。当多线程中出现了相互谦让,都主动将资源释放给别的线程使用,这样这个资源在多个线程之间跳动而又得不到执行,这就是活锁。
饥饿:多线程执行中有线程优先级这个东西,优先级高的线程能够插队并优先执行,这样如果优先级高的线程一直抢占优先级低线程的资源,导致低优先级线程无法得到执行,这就是饥饿。当然还有一种饥饿的情况,一个线程一直占着一个资源不放而导致其他线程得不到执行。
第七章 虚拟化和云
1. 虚拟机的本质:
虚拟机在本质上就是一个应用程序软件。像在windows上运行的其他应用软件一样,只是他的作用功能不一样罢了。
2. 虚拟机的功能:
- 虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机。也就是可以使你的计算机同时具有多种系统,不管是其他的windows系统,还是Linux系统,还是Mac OS系统都可以。
3. 虚拟机的优点
强隔离性:一台虚拟机的故障不会影响其他虚拟机
物理机数量的减少节省了硬件和电力开销以及机架空间的占用
设置检查点和虚拟机迁移(例如跨多台服务器进行负载均衡)比在普通操作系统上运行的迁移要容易得多
在已停止支持或无法工作于当前硬件的操作系统(或操作系统版本)上运行遗留应用程序
协助软件开发,程序员只需要在一台机器上创建一些虚拟机来安装不同的操作系统
4.
- 虚拟化技术目前最重要、最时髦的用途是云。云的核心思想很直接:将你的计算或存储需求外包给一个管理良好的数据中心。领域专家组成的公司专门运营这个数据中心。由于数据中心通常是他人所有,因此你需要为使用的资源付费,但是你不用考虑机器、供电、冷却和维护问题。由于虚拟化技术提供了隔离性,因此云提供商可以允许多个客户甚至商业竞争对手共享单一物理机,每个客户分享一部分资源。
5. 虚拟化的必要条件
虚拟化和云程序需要在以下三个维度上有良好的表现:
安全性:虚拟机管理程序应完全掌控虚拟资源。
保真性:程序在虚拟机上执行的行为应与在裸机上相同。
高效性:虚拟机中运行的大部分代码应不受虚拟机管理程序的干涉。
6. 虚拟机管理程序
7. 云的五条必要特征
按需自助服务:无需人为操作就能自动为用户提供资源。
普适的网络访问:所有资源都可以通过网络用标准化的机制访问,以支持各种异构设备。
资源池:云提供商拥有的资源可以服务多个用户并动态再分配,用户通常不知道他们使用的资源的具体位置。
快速可伸缩:能根据用户需求弹性甚至是自动地获取和释放资源。
服务可计量:云提供商按服务类型计量用户使用的资源。
第八章 安全
加密技术
- 按应用技术或历史发展阶段划分
手工密码:以手工完成加密作业,或者以简单器具辅助操作的密码,叫作手工密码。第一次世界大战前主要是这种作业形式。
机械密码:以机械密码机或电动密码机来完成加解密作业的密码,叫作机械密码。这种密码从第一次世界大战出现到第二次世界大战中得到普遍应用。
电子机内乱密码:通过电子电路,以严格的程序进行逻辑运算,以少量制乱元素生产大量的加密乱数,因为其制乱是在加解密过程中完成的而不需预先制作,所以称为电子机内乱密码。从五十年代末期出现到七十年代广泛应用。
计算机密码:是以计算机软件编程进行算法加密为特点,适用于计算机数据保护和网络通讯等广泛用途的密码。
2. 按保密程度划分
理论上保密的密码:不管获取多少密文和有多大的计算能力,对明文始终不能得到唯一解的密码,叫作理论上保密的密码。也叫理论不可破的密码。如客观随机一次一密的密码就属于这种。
实际上保密的密码:在理论上可破,但在现有客观条件下,无法通过计算来确定唯一解的密码,叫作实际上保密的密码。
不保密的密码:在获取一定数量的密文后可以得到唯一解的密码,叫作不保密密码。如早期单表代替密码,后来的多表代替密码,以及明文加少量密钥等密码,现在都成为不保密的密码。
3. 按密钥方式划分
对称式密码:收发双方使用相同密钥的密码,叫作对称式密码。传统的密码都属此类。
非对称式密码:收发双方使用不同密钥的密码,叫作非对称式密码。如现代密码中的公共密钥密码就属此类。
数据加密标准DES
数据加密标准是美国经长时间征集和筛选后,于1977年由美国国家标准局颁布的一种加密算法。它主要用于民用敏感信息的加密,后来被国际标准化组织接受作为国际标准。
它用56位密钥对64位二进制数据块进行加密,每次加密可对64位的输入数据进行16轮编码,经一系列替换和移位后,输入的64位原始数据转换成完全不同的64位输出数据。DES算法仅使用最大为64位的标准算术和逻辑运算,运算速度快,密钥生产容易,适合于在当前大多数计算机上用软件方法实现,同时也适合于在专用芯片上实现。
DES主要的应用范围有:
计算机网络通信:对计算机网络通信中的数据提供保护是DES的一项重要应用。但这些被保护的数据一般只限于民用敏感信息,即不在政府确定的保密范围之内的信息。
电子资金传送系统:采用DES的方法加密电子资金传送系统中的信息,可准确、快速地传送数据,并可较好地解决信息安全的问题。
保护用户文件:用户可自选密钥对重要文件加密,防止未授权用户窃密。
用户识别:DES还可用于计算机用户识别系统中。
国际数据加密算法IDEA
国际数据加密算法IDEA是瑞士的著名学者提出的。它在1990年正式公布并在以后得到增强。这种算法是在DES算法的基础上发展出来的,类似于三重DES。发展IDEA也是因为感到DES具有密钥太短等缺点,已经过时。IDEA的密钥为128位,这么长的密钥在今后若干年内应该是安全的。
类似于DES,IDEA算法也是一种数据块加密算法,它设计了一系列加密轮次,每轮加密都使用从完整的加密密钥中生成的一个子密钥。与DES的不同处在于,它采用软件实现和采用硬件实现同样快速。
公钥加密和私钥加密
公钥加密(非对称加密):公钥密码体制的公钥和算法都是公开的(这是为什么叫公钥密码体制的原因),私钥是保密的。大家都以使用公钥进行加密,但是只有私钥的持有者才能解密。在实际的使用中,有需要的人会生成一对公钥和私钥,把公钥发布出去给别人使用,自己保留私钥。
私钥加密(对称加密):解密密钥和加密密钥是相同的。也正因为同一密钥既用于加密又用于解密,所以这个密钥是不能公开的。
数字签名
数字签名的用途:数字签名是用来验证服务端与客户端之间发送的报文信息是否被篡改了。
数字签名的原理:服务端对客户端发送一个报文,服务端先用Hash算法对报文进行计算得到的值我们叫做信息摘要,接着用服务端的私钥对信息摘要进行加密得到密文我们叫做数字签名,服务器就把报文+数字签名一起发送给客户端,客户端先对数字签名进行解密,得到信息摘要,在对报文进行Hash计算,那计算值和信息摘要进行对比,两者相同就证明报文没有被修改。