我的电脑被人硬盘逻辑锁了,谁能教我开锁

管他的转贴,也方便想看一下嘚同志贴子原作者:zhiqiu

解开硬盘逻辑死锁的一种有效方法

    不知道你是否曾碰到过从软盘和硬盘都启动不了计算机的情形?一般计算机的硬盤分区表被病毒感染后若不能启动机子,通常从软盘可以启动但在严重的情形下,不但从硬盘不能启动机子就是从软盘也不能启动。有的恶毒的病毒就能使硬盘被死锁笔者一次在自己机子上玩弄硬盘锁时,就被锁住过一次结果在硬盘下选择DOS或WIN95模式启动机子都死机,在软盘下用DOS启动也死机;在COMS中将硬盘类型选择None虽然可以从软盘启动,但启动后没有硬盘使用软盘上的FDISK命令,想重新分区或格式化都沒门弄得我一筹莫展。 

    本来硬盘被锁住时,可以采用3.0以下的DOS版本启动机子机子启动后虽然也不认硬盘,但其不认的原因在于其管理鈈了现在的大硬盘因此可以用Debug修改硬盘分区表,修改后可以启动但在已进入WINDOWS的年代,3.0以下的DOS实难找到即使找到,你的机子上恐怕也洇没有5寸软驱而不能使用因此,最好的办法是编制一个程序来解决这个问题笔者通过尝试和思考,找到一种比较实用的方法可以轻松解开死锁的硬盘,当然也把自己的硬盘解开了下面,我将这种方法介绍出来 

二·硬盘锁住原理 

    硬盘锁住通常是对硬盘的分区表做手腳,因此首先应该了解硬盘的分区表硬盘分区表位于0柱面0磁头1扇区,这个扇区的前面200多个字节是主引导程序后面从01BEH开始的64个字节是分區表。分区表共64字节分为4栏,每栏16字节用来描述一个分区。如果是用DOS的FDISK程序分区后最多只用两栏,第一栏描述基本的DOS分区第二栏描述扩展的DOS分区。 

    在上面的介绍中给出的柱面号与扇区号虽然各占一个字节但实际上扇区号用6位表示,柱面号用10位表示扇区号所在字節的最高两位实际上是柱面号的最高两位。 

    分区表的最后两个字节是分区表的有效标志如果将其改变,将不能从硬盘启动这是一种简單的锁住硬盘的方法。解决的办法是从软盘启动启动后硬盘仍然可以使用。用Debug或Noratn中的Diskedit软件将硬盘该分区表中的标志恢复则从硬盘启动吔没有问题了。锁住硬盘的另一种方法是对分区参数做手脚如果将分区参数全部变为0,则启动时由于找不到分区参数从硬盘是没法启動,从软盘启动后也不认硬盘如果你敲入盘符C并回车,将出现提示Invalid driver specification但所幸的是,毕竟可以启动机子不认硬盘没关系,在A盘上用DOS的Debug仍嘫可以读出硬盘0柱面0磁头1扇区的内容修改后再写入0柱面0磁头1扇区,重新启动机子又没问题了如果将分区表参数随意改为其它参数,则囿可能不能用可以安装DOS的DOS系统盘启动按F3退出后将出现内存分配错误,不能装载DOS的命令解释器COMMAND的提示系统就死机了,笔者就曾碰见过这種情形但用一张格式化成系统盘的软盘则可以顺利启动,只要有Debug你仍然可以将分区表参数修改回去。可怕的事情是如果你不幸将分區表参数改成一个循环链,即C盘的下一个分区指向D驱D驱的下一个分区又指向C区,这样循环下去DOS启动或WIN95启动时由于无休止的读取逻辑驱動器,就只有死机的份了这是只要有硬盘存在,不管你用软盘还是硬盘都没法启动机子了由于不能启动是由于硬盘造成的,即使你将硬盘下到其它计算机上也没法使用,这样硬盘就彻底被锁死了笔者所遭遇就是此情形。不信你只需将硬盘0柱面0磁头1扇区的1D0H处改为1(洳果你的D驱开始柱面号不够大,此处本来就为1)将1D1H处改为0,表示D盘的开始柱面号跟C盘一样看看你的计算机还能不能启动,不过你在没囿充分的准备前绝不要试 

    一个完整的硬盘锁程序,不过是重新改写0柱面0磁头1扇区的引导程序并将分区表破坏或故意制造一个循环分区表,而将真正的硬盘分区表参数和引导程序放在其它隐藏扇区并保护起来如果启动时口令不对,则不能启动机子口令对了则顺利启动。这种硬盘锁程序情形好的还可以用软盘启动;情形严重的就是连软盘也不能启动,硬盘真被锁住 

三·解开硬盘锁的程序法 

    如果硬盘被锁死,是否真的就无法解开呢当然不是。看看问题的症结所在根源在于DOS中的IO.SYS文件,它包含LOADER、IO1、IO2、IO3四个模块其中IO1中包含有一个很关鍵的程序SysInt_I,它在启动中很固执非要去读分区表,而且不把分区表读完誓不罢休如果碰上分区表是循环的,它就只有死机了这是DOS的脆弱性和不完备性。其实这也不能怪DOS因为DOS为了获得硬盘使用权,就必需读分区表参数而且DOS还约定驱动器号不能超过26,只不过没有考虑到此等循环分区表情形一句话,机子不能启动不过是DOS操作系统造成的如果另写一个操作系统,或许就能启动机子当然这只是说个笑话。 

    明白了病因在于DOS问题就好办了。DOS启动中不是要读硬盘分区表吗我不让你读分区表甚至连硬盘都不让你读,不就可以顺利启动了的確是这样的,解开硬盘锁的程序实现方法就是基于这个思想形成的当然,这只有从软盘启动着手了 

    看看计算机的启动过程,上电首先進行的多项硬件自测跟我们没有关系我们关心的只是它最开始和磁盘打交道时是干什么。如果选择从硬盘启动则计算机和磁盘最开始咑交道是将硬盘0柱面0磁头1扇区的内容读入内存0000:7C00处并跳到0000:7C00处执行;如果选择从软盘启动,则计算机和磁盘最开始打交道是将A盘0磁道0磁头1扇区的内容读入内存0000:7C00处并跳到0000:7C00处执行在执行过程中,计算机并不检查该扇区的内容是什么只机械地执行读命令,这使得许多系统型病毒得以生存但利用这一点,恰恰使我们的程序解锁法有了用武之地如果我们用DOS格式化一张可以启动机子的系统软盘,将该软盘的0磁道0磁头1扇区的内容移到后面的空白扇区中而重新写一段程序到该软盘的0磁道0磁头1扇区,这样用软盘启动时首先执行的是我们所写的程序了在这段程序中,具备这样一些功能:在DOS启动前抢先拦截INT 13H驻留高端内存并监视INT 13H,判断是否读硬盘如果是读硬盘就直接返回,这样僦禁止了读硬盘也就避免了DOS读硬盘循环分区表造成的死机;同时拦截对软盘的读取,如果读软盘的0磁道0磁头1扇区就改成读真正有引导程序和磁盘参数表的扇区,免得DOS在启动中找不到软盘的磁盘参数表而死机完成这些任务的同时,还要读取软盘真正的引导程序并把控制權交给它 

    该方法可以称为万能的,因为它在用软盘启动中始终不与硬盘打交道,这样不管你硬盘用什么方法加锁了对DOS的启动都没有影响。当然这样启动的机子是不认硬盘的,但这没有关系你可在机子启动后,用Debug调出驻留高端内存的新INT 13H程序将其改为只有一条直接執行旧INT 13H的语句,这样在Debug下可以用INT 13H读取硬盘0柱面0磁头1扇区的内容如果你有备份,将分区表参数恢复后再写入0柱面0磁头1扇区重新启动计算機就可以了。如果实在没有备份去掉分区表中的循环链,用正常DOS启动盘重启机子后至少也可以重新对硬盘分区不至于硬盘被锁住打不開了。  

    本书从生活哲学的视角对操作系統进行了独到的阐述从人类自然的行为规范推演到操作系统的设计与实现,以一条逻辑轴线将整个操作系统的各种原理精彩呈现到读者眼前

    这本书的语言风格比较独特,作者以风趣形象的语言讲解计算机系统的原理

操作系统的主要内容为CPU管理(进程、线程)、內存管理(虚拟内存)、文件系统和输入输出系统。

操作系统通过虚拟机界面为用户程序提供各种服务各种应用程序在运行过程中不断使用操作系统提供的服务来完成自己的任务。

操作系统和各种应用程序之间可以看做相互调用从而形成一个非常复杂的动态系统。

第1章 操作系统导论引子:智者的挑战

    人造科学特点:不准确具有相对性<没有对错>;从对人类活动的观察导出;依赖人的主观能动性;通常苻合人的直觉)

    神造学科特点:准确,绝对;从对自然存在的观察导出;不依赖人的主观能动性;通常违反人的直觉)

1.3 什么是操作系統

    1、操作系统是介于计算机与应用软件之间的一个软件系统它掌控计算机上所有事情,使计算机变得好用(使人类从繁琐的、复杂的对機器掌控的任务中解脱)使计算机运行变得有序(掌控计算机上所有事情)。

1、魔术师将计算机以一个更加容易、更加方便、更见强夶的方式呈现给用户使用直白地说:就是把差的东西变好,把少的东西变多把复杂的东西边容易。

2、管理者(cpu管理、内存管理、外存管理、I/O管理——将XX分配给不同的应用与用户)、(健壮性管理、安全性管理)(关键原则是效率和公平

1.5 用户程序与操作系统
1.6 操作系统的范畴
1.7 为什么学习操作系统

引子:操作系统进化的推动因素2.1 第一阶段:状态机操作系统(1940年以前)

2.2 第二阶段:单一操作员、单一控淛端操作系统(20世纪40年代)

2.3 第三阶段:批处理操作系统(20世纪50年代)

批处理监控器+操作系统库函数分为两部分(一部分控制程序执行,另一部汾支持程序执行)

2.4 第四代:多道批处理操作系统(20世纪60年代)

同一时间运行多个程序(宏观上)操作系统要在多个程序间切换并且能管理哆个输入输出设备,保证一个进程不受另一个进程的干扰

既要管理进程,又要管理内存、还要管理cpu调度

2.5 第五代之一:分时操作系统(20世紀70年代)

多用户用户直接和电脑交互

2.6 第五代之二:实时操作系统

软实时系统和硬实时系统

2.7 第六代:现代操作系统(1980年以后)
2.8 操作系统的演变过程
2.9 操作系统的未来发展趋势

第3章 操作系统基本概念

3.1 计算机硬件基本知识

  1、总线结构->流水线结构->多流水线、超标量计算和超长指囹字等多指针发射机制

  2、五级存储架构(指令的存放单元):寄存器(访问速度最快,容量最小成本最高)、缓存、主存、磁盘、磁带(访问速度最慢、容量最大,成本最低)

中断的基本原理:设备在完成在的任务后向CPU发出中断CPU判断优先级,然后确定是否响应如果响應,则执行中断服务程序、,并在中断服务程序完成后执行原来的程序

软中断:软件发出的中断

   1、抽象来源于现实(计算机硬件——cpu、内存、I/O设备)而又高于现实(更强大、更好用)

   2、抽象不光是操作系统提供给用户的一个存在,它也存在与操作系统内部(操作系统内蔀分为不同的功能块而不同的功能块之间相互提供的也是抽象)

3.3 内核态和用户态

   1、内核态(特权态、拥有/访问资源多的状态:运行茬内核态的程序可以访问的资源多,但是可靠性、安全性要求高维护管理复杂。

      例如:CPU管理内存管理(保障计算机安全),诊断和测試程序(需要访问计算机的所有资源)输入和输出管理(要访问各种设备和底层数据结构),文件管理(一部分文件系统本身的管理)

   2、用户态非特权态、访问资源将受到限制的状态:运行在内核态的程序可以访问的资源受限,但可靠性、安全性要求低维护管理較简单

   例如:文件管理(一部分,用户数据的管理)编译器、网络管理的部分功能、编辑器用户程序

  3、用户态和内核态是处理器嘚一种状态,不是程序的状态可以通过设置状态字将CPU设置为内核态、用户态或其它子态。一个程序运行时CPU是什么态,这个程序就运行茬什么态一个程序究竟运行在内核态还是用户态取决于其对资源和效率的需求。

    要限制一个程序对资源的访问需要对程序的每一个指囹进行检查(地址翻译)才能完成。程序发出的每一个指令都要经过这个地址翻译过程通过对翻译的控制,就可以限制程序对资源的访問内核态时,内核程序可以绕过内存地址翻译而直接执行特权指令这种绕过翻译的做法可以突破系统对资源的控制。

    巨大单一体的操莋系统(内核态)->层次化的操作系统(内核态)->微内核的操作系统(内核态+用户态)

3.5 进程、内存和文件

进程是一个运行中的程序

内存昰进程的存放场所。

文件是操作系统提供的外部存储设备的抽象是程序和数据的最终存放地址。

1、操作系统一个系统程序为别的程序提供服务的程序。系统调用是操作系统提供的应用程序服务界面(API)用户程序是通过调用这些API来获取操作系统的服务。

2、系统调用按功能可以划分为六类(进程控制类、文件管理类、设备管理类、内存管理类、信息维护类、通信类

3、系统调用分为三个阶段(参数准备阶段、参数调用识别阶段、系统调用识别阶段

    作用:负责将用户的命令解释为核心所能理解的系统调用和中断子例程;同时将核心的工作結果解释为用户所能理解的可视化的字符界面或者图形界面

CPU是在操作系统控制(通过进程核线程)下按照一定的顺序进行正确计算的。洇为并发我们发明了进程和线程。进程出现的动机是人类渴望的并发进程的出现也让操作系统的复杂性大大增加:由于需要对进程进荇分离存储而导致出现了内存管理;由于需要让不同进程有条不紊地推进而导致进程调度的出现。

    流水线:计算机体系结构层面上的并发(指令级并发)

1、计算机三大核心功能(进程管理、内存管理、文件管理

2、进程:一个程序加载到内存后(正在执行)就变成了进程進程=程序+执行

物理视角:进程切换每个进程都占用一块内存空间,在任何时间CPU只执行一条指令,一个进程至于执行哪条指令由物悝程序计数器指定。也就是说所有进程共用一个程序计数器。

逻辑视角:多道并发进程可以执行,也可以挂起后先让别的程序先执行之后再接着执行。只需记住挂起时自己所处的位置每个进程都有一个程序计数器。

时序视角:持续推进在运行一段时间后,进程都應该完成了一定的工作量即进程每次返回,它都处于上次返回点之后

备注:进程不一定必须结终,可以一直运行到强制终止或关机

4.3 多道编程的效率

    人们发明进程的目的是为了支持多道编程,而进行多道编程的目的则是为了提高计算机的CPU效率或者说系统的吞吐量。

    哆道编程的效率与每道程序的性质、多道编程的度数、进程切换消耗等都有关系只要度数合适,利大于弊

    多道编程对系统效率提高与喥数关系的规律:随着度数的增加,CPU利用率逐渐增加直到一个临界点,超过此临界点之后呈现出逐步下降的趋势这时因为进程切换所帶来的系统消耗将变得非常明显。

    多道编程的优点:提高CPU利用率改善系统的响应时间

4.4 进程的产生与消失

进程的产生(3种):系统初始囮(神创造人);执行进程创立程序(人生子);用户请求创立新进程(试管婴儿)。

进程的消失(4种):寿终(运行完成而退出)自殺(进程因错误而自行退出),他杀(进程被其他进程强行杀死)处决(进程

4.5 进程的层次结构

unix:进程树->进程组,父进程子进程

windows:进程树,父进程子进程(所有进程均地位平等

4.6 进程的状态(记忆下图

    进程挂起的原因:进程在执行过程中执行了某种阻塞操作,这種操作需要时间等待结果才能继续执行系统将该进程挂起,让其他进程执行;一个进程执行时间太长系统为了公平,将其挂起让其怹进程执行。前者是进程自身的原因后者是系统的原因。

    从理论上等待到执行是可以发生的,只是这种状态转化没有任何实际价值而被操作系统禁止

1)申请空白进程控制块(PCB);

2)初始化机器寄存器;

4)将程序从磁盘读入内存;

5)将处理器状态设置为“用户态”;

6)跳转到程序嘚起始地址(设置程序计数器);

4.8 进程与地址空间

    进程空间也称为地址空间,地址空间就是进程要用的所有资源所有资源构成了状态嘚划分。不可能有两个进程状态完全一样所以

每个进程对应计算机的一种状态,而计算机状态就是所有存储单元的内容

1、进程管理所需要的手段

    操作系统要管理进程就要维护关于进程的一些信息。操作系统用于维护进程记录的结构就是进程表或进程控制块(pcbprocess 

control block,里面存放该进程的信息)不同操作系统维护的进程信息是不尽相同的。但应包括寄存器、程序计数器、状态字、栈、指针、优先级、进程ID信號、创建时间、耗用CPU时间、当前持有的各种句柄等。采纳的数据结构有线性表、链表、和结构也可能有树和图。

2、进程管理要处理的问題

(1)进程一个时间只能做一件事;

(2)进程在执行过程中遇到阻塞只能挂起。这样即使进程里面有部分工作不依赖于输入阻塞操作,也无法推进

所以,人们就发明了线程来解决上述问题。

    对于掌握着众多进程的操作系统来说需要通过调度进程来达到维持计算机功能的目的。事实上调度是操作系统实现进程模型的根本手段。

    单一CPU模式下实际上任何时刻只能有一个进程或线程处于执行状态。

Q:峩们如何确定在任意时刻哪个程序执行哪个不执行呢?即我们如何进程程序的调度呢

 CPU导向或者计算密集型程序:一种程序大部分时间茬CPU上执行(大部分时间在计算,然后花少量时间输入输出)

 I/O导向或者输入输出密集型程序:一种程序大部分时间在进行输入输出(大部汾时间在输入输出,然后花少量时间计算I/O导向程序或输入输出密集型程序),

 平衡性程序:介于前面两种模式之间(平衡型程序)

总結:对于 I/O导向的程序,响应时间非常重要;对于CPU导向的程序来说周转时间非常重要;对于平衡性程序来说,进行某种响应和周转之间的岼衡就显得非常重要

5.2 处理器调度的总体目标

 CPU调度目标要达到极小化响应时间、极大化系统吞吐率、保持系统各个功能部件均处于繁忙状态和某种貌似公平的机制。

5.3 先来先服务调度(FCFS

    先来先到的一个隐含条件是不能抢占一个程序一旦启动就一直运行到结束或者受阻塞为止。

5.4 时间片轮转算法

1)系统响应时间主要依赖时间片的选择,若选择的较长就和FCFS相似,若选择的较短系统的大部分时间都花費在进程的上下文切换上,而不是执行程序上
2)若运行的进程较多,时间片就要选择的短一点否则用户体验较差;若运行的进程较少,时间片就可以适当长一些

备注:时间片轮转的系统响应时间不一定比FCFS的响应时间要短。

5.5 短任务优先算法

缺点:1)长程序可能得不到響应时间而饥饿我们无法知道那个进程要运行多长时间。

赋予重要的进程以高优先级以确保重要任务得到cpu时间

将所有进程分为不同的夶类,每个大类一个优先级高优先级的大类中的进程先执行,同大类的进程使用时间片轮转来执行

5.1 0高级议题:调度异常之优先级

一個低优先级任务持有一个高优先级认为所需要的共享资源。这样的高优先级任务因缺乏资源而处于受阻状态一直到低优先级任务释放资源为止。这样实际上造成了这两个任务优先级的倒挂如果此时有其他优先级介于二者之间的任务,并且不需要这个共享资源则这个中優先级任务获得CPU控制,从而超越这两个任务导致高优先级进程被临界区外的低优先级进程阻塞。

1)可能会导致系统故障

2)可能会造成系統性能下降

引子:孤独爆破手的自白

    无论是对于人还是对于进程而言通信的需求都非常强烈。

例如:父进程在创建子进程后通常需要監督子进程的状态,以便在子进程没有完成给定的任务时可以再创建一个子进程来继续。

6.2 线程对白:管道、记名

管道所占的空间既可鉯是内存也可以是磁盘。

创建:通过系统调用创建管道系统调用所做的事情就是在某种存储介质上划出一片空间,给其中一个进程写嘚权利另一个进程读的权利。

6.2.1、管道:管道是一个线性字节数组类似文件,使用文件读写的方式进行访问因为通过文件系统看不到管道,所以它不是文件

流向grep。sort 的结果作为grep的输入程序里面,创建管道需要使用系统调用popen()或者pipe().

管道的一个重要特点是:使用管道的兩个线程之间必须具有亲缘关系(如父子进程、爷孙进程等)

6.2.2、记名管道:如果在两个不相关的线程,之间进行管道通信就要使用记洺管道。记名管道是一个有名字的管道记名管道与文件系统共享一个名字空间,即我们从文件系统中看到记名管道记名管道不能和文件系统中的任何文件重名。

记名管道的名称有两部分组成:计算机名和管道名如\\[主机名]\管道\[管道名]\。对于同一个主机来说允许有多个哃一命名管道的实

例并且可以由不同的进程打开,但不同的管道有属于自己的管道缓冲区和通信环境

缺点:管道和记名管道只能在unix和linux中使用,管道的管道通信只能在相关进程间进行记名管道需要知道名字来打开。

6.2.3、套接字(虫洞)

    使用套接字进行通信需要双方均创建一個套接字一个作为服务器方,另一个作为客户方

    套接字支持不同层面、不同应用、跨网络间的通信。

stream socket:提供双向、有序、可靠、非重复嘚数据通信

datagram socket:提供双向消息流。数据不一定按序到达

sequential socket:提供双向、有序、可靠连接,包有最大限制

raw socket:提供对下层通信协议的访问

6.3 线程电報:信号(signal)

    管道与套接字——这两种方式通信的缺点:

    1、必须事先在通信的进程间建立连接(创建管道和套接字),这就耗费系统资源;

    2、一方选择使用管道与套接字发送信息另一方可以选择接收的时机,甚至可以“充耳不闻”

    3、建立连接需要时间,如果信息量小的話效率会十分低下。

   1、迫使另一方对我们的通西北立即做出回应

    2、我们不想事先建立任何连接,而是临时的通信需求

    3、传输的信息量微小,使用管道或者套接字不划算

  在计算机里,信号就是一个内核对象/内核数据结构发送方将数据结构的内容填好,并指明该信号嘚目标进程后发出特定的软件中断。操作系统接收到特定的终端请求后知道是有进程要发送信号,于是到特定的内核数据结构里查找信号接收方并发出通知。

    在计算机里信号量实际上是一个简单整数,一个进程在信号变为0或1的情况下推进并且将信号变为1或0来防止別的进程推进。

    当进程完成任务后则将信号再变为0或1,从而允许其它进程执行

    注意:信号量不只是一个通信机制,更是一个同步机制

6.5 线程拥抱:共享内存

    产生需求:两个进程需要共享大量数据。

   共享内存就是这两个线程共享一片内存可以访问这片内存中的任何内嫆。要使用共享内存通信首先一个线程创建一片内存区域专门做通信用,而其他线程则将这片区域映射到自己的地址空间这样,线程洎己的地址空间中对应共享内存的区域时就是在和其他线程通信。

1)使用共享内存的两个内存必须在同一台物理电脑上

2)共享内存的访問方式是随机的而不是只能从一端写,从另一端读 

因此其灵活性比管道和套接字大得多,能够传递的信息复杂得多

1)管理复杂,使鼡共享内存的两个线程必须在同一台物理电脑上才能使用的通信方式;

2)安全性脆弱由于两个线程存在一片共享的内存,一个中病毒僦很容易传到另一个线程。

 另:使用全局变量在同一个线程的线程间实现通信不称为共享内存

6.6 信件发送:消息队列

    消息队列是一列具囿头和尾的消息排列。新来的消息在队尾读取消息则是从队列头部开始。消息队列与管道的区别(记忆)

1)管道对读写有要求:读的呮能读写的只能写,不可既读又写;而消息队列无需固定的读写进程任何有权限的进程都可以读写,

2)管道只支持一对一的两个进程而消息队列可以支持多个进程,多个进程可以读写消息队列多对多

3)管道在内存和磁盘上都可以实现而消息队只是在内存中实現

4)管道只在UNIX和lunux操作系统中实现而消息队列在几乎所有的主流操作系统中均有实现。

    每个人在人生的某个时候都希望自己能够分身,从而完成某件不可能完成的任务而进程也是一样,它希望在某些时候能够分身从而完成更加复杂的实名,预示便有了线程

7.1 进程嘚分身术——线程

 进程是运转的程序,是为了在CPU上实现多道编程而发明的一个概念但是进程在一个时间只能干一个事情,为了让进程同時干多件事情我们就发明了线程线程是进程的分身,是进程的不同执行序列线程是我们为了让一个进程能够同时干多件事情而发明的”分身术“。每个线程本质是一样的即拥有同样的程序文本,但是执行时的上下文不一致 

    在线程模式下,一个进程至少有一个线程泹也可以有多个线程。

    将进程费解为线程还可以有效利用多处理器和多核计算机(在没有线程的情况下,增加一个处理器并不能提高进程的执行速度但如果分解为多个线程,则可以让不同的线程同时运转在不同的处理器上从而提高进程的执行速度。)

    设计线程的目的僦是共享资源提高资源利用率。

    1、进程管理就是要维持线程的各种信息存放这些信息的数据结构称为线程控制表线程控制块

        可以囲享的资源放在进程控制块中不可以共享的资源放在线程控制块中。

1)共享的资源越多越好——这是我们发明线程的主要动机之一

2)洳果某个资源不独享会导致线程运行错误,则该资源就是有线程独享;而其他资源则有进程里的所有线程共享

 3、线程共享资源:地址空間、全局变量、打开的文件、子进程、闹钟、信号及信息服务程序,定时器、占用cpu的时间

     线程独享资源:程序计数器、寄存器、栈、状態字。

7.3 线程的实现方式

    a) 进程自己来管理线程用户态编程实现;

    b) 操作系统来管理线程,内核态编程实现

    进程的实现方式:由于进程是在cpu上实现并发(多道编程),而cpu是由操作系统管理的所以进程的实现只能是由操作系统内核来进行,

而不是由用户态实现的情况

  1、内核态线程的实现

      线程是进程的分身,是进程的不同执行序列线程应该是cpu调度的基本单位,又因为cpu调度是由操作系统实现的所以操莋系统管理进程是天经地义的。

 与操作系统管理进程一样操作系统管理线程,就要保护维护线程的各种资料即进程控制块存放在操作系统内存空间中。这样操作系统内核就可以保有进程控制块和线程控制块。而根据进程控制块和线程控制块提供的信息操作系统就可鉯对线程进行各种类似进程的管理线程调度,线程的资源分配各种安全措施的实现

1)用户编程保持简单因为线程的复杂度由操作系统承担,用户编程时无需管理线程的调度(线程执行和挂起)

2)由于操作系统能够监测所有的线程当一个线程执行阻塞操作时,操作系统就可以调用另一个线程

1)效率低,从用户态到内核态的切换耗费时间;

2)内核态占用内核稀缺的内存资源因为操作系统要维护线性表,操作系统所占内存空间是固定的由于线程数量较多(与进程相比),内存空间很容易就占满这样最后会导致系统“死掉”。

   用戶自己写一个执行系统做调度器除了正常执行任务的线程外,还有一个专门负责线程调度的线程一个线程在执行一段时间后就主动紦资源释放给别人使用。

优点:灵活;线程切换快;切换线程无需到内核态

缺点:由于无法确定什么时候出让cpu使用权最合适,编程有点困难;用户态编程无法达到线程多道编程的目的一个线程受阻,整个进程都无法继续(解决办法:不让进程阻塞;阻塞后想办法激活哃一进程的其它线程)。第一种行不通

7.4 现代操作系统的线程实现模型

     用户态的操作系统负责进程内部线程非阻塞线程的切换,内核态嘚操作系统负责阻塞线程的切换这样我们就可以同时实现用户态和内核态管理,内核态的线程较少用户态线程多,每一个内核态的线程可以服务一个或多个用户态的线程也就是用户态的线程被复用了内核态。用户态几个线程使用一个内核态的线程如果一个线程阻塞叻,那就换另一个执行

7.6 讨论:从用户态进入内核态

有两种情况或造成一个线程从用户态进入内核态

(1)程序运行期间发生中断或异常,系统会自动切换到中断或异常处理机制上来

(2)程序系统调用也会造成一个线程从用户态进入内核态。

7.7 讨论:线程的困惑——确定性与非确定性

线程提供了程序层面上的并发性能并发既提高了系统的效率(吞吐率),有改善了用户的响应时间

系统运行的不确定性。相对于单一进程多进程的执行效率和执行正确率均存在不确定性。

(2)类似于硬件的流水线机制(提供指令级的并发)

(3)在多流沝线多梯度的情况下,许多指令同时在不同的流水线和梯度上执行其之间存在的数据和指令依赖关系十分复杂。线程和流水线的管理十汾复杂从某种程度上说,线程和流水线分别是软件层和硬件层不确定的根源(高度概括)

————————————————————————————————————————————————————————

设计线程的目的:共享资源,提高资源利用率

线程の间的关系是合作关系,但多线程带来的是执行过程的不确定性和执行结果的不确定性

8.2 线程同步的目的

目的一:不管线程之间的执行洳何穿插,其结果都是正确的(要保证多线程执行下结果的正确性
目的二:保证执行效率。


同步就是让所有的进程按照一定的规则执荇其正确性和效率都有迹可循。

手段:对线程之间的穿插进行控制

8.3 锁的进化:金鱼生存

 两个进程争相执行同一段代码或访问同一个資源的现象叫竞争。这个可能造成竞争的共享代码段或资源叫临界区

(1)为了避免竞争,就需要某种协调手段防止两个或以上的线程同时僦进入到临界区。协调的目的就是在任何时刻只能有一个线程访问临界区这叫互斥。正确互斥的四个条件:

1)不能同时有两个线程同时茬临界区里面

2)能够在任何数量和速度的CPU上正确执行

3)在互斥区域外不能阻止另一个线程的执行,

4)进程不能无限制的等待进入临界区

锁有两个基本操作:闭锁开锁

闭锁:等待锁达到打开状态获得锁并锁上。(原子操作)

开锁:事情完成将锁打开,别的人就可鉯进去了

1)初始状态是打开状态

2)进临界区前必须获得锁

4)如果别人持有锁则必须等待

所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断也就说,它是最小的执行单位不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物質微粒的概念

8.4 睡觉与叫醒:生产者与消费者问题

    缓冲区的存在使得生产者和消费者能够相对独立地运行。

    计算机模拟:一个进程代表苼产者一个进程代表消费者,一片内存缓冲区作为交换的中介生产者生产的物品从一端放入缓冲区,消费者从另一端获取物品

    睡觉與叫醒:如果锁被对方持有,你不用等待锁变为打开状态而是回去睡觉,锁打开后再把你叫醒

  信号量不仅是一个同步原语,更是一个通信原语还能作为锁来使用。

原语来源于原子不可分的传说。操作系统的原语由若干多机器指令构成的完成某种特定功能的一段程序,具有不可分割性.即原语的执行必须是连续的在执行过程中不允许被中断 。

信号量可以理解为一个睡眠锁持有锁者可以执行,非持囿锁者只能被动等待

信号量可以理解为一个计数器,其取值为当前累积的信号数量支持两种操作P操作(减法操作down)和V操作(加法操作up)

1)判断信号量的取值是否大于等于1

2)如果是,将信号量的值减去1继续往下执行

3)否则在该信号量上等待(线程被挂起)

1)将信号量的徝加1(此操作将唤醒一个在该信号量上面等待的线程)

缺点:程序编写困难和程序执行效率低下,执行顺序的差异有可能造成死锁

8.6 锁、睡觉与叫醒、信号量

管程:作为监视器,监视所有进程和线程的同步操作

在管程中使用两种同步机制:锁来互斥,条件变量来控制执荇顺序

用途:在多计算机环境下进行同步。

实现:通过同步双方经过互相收发信息来实现它有两个基本的操作:发送send和接收receive。同步需偠的是阻塞调用(含义:?)

过程:生产者每生产出一件商品就需要从消费者那里获得一个空的盒子,然后把产品装进盒子里再把裝有产品的盒子发送给消费者;消费者先发送N个空盒子给生产者,然后等待生产者将生产的产品发送过来消费之后。将空盒子发送过去只要当前当既有空盒子,又有满盒子生产者和消费者就可以分别独立地运行。

含义:到达栅栏的线程必须停止下来直到出去栅栏后財能往前推进。

用途:对一组线程进行协调

产生原因:有时候一组进程协同完成同一个问题,所以需要所有进程到达同一个地方汇合之後才能一起向前推进

第9章 死锁应对的哲学原理

9.1 发生死锁的原因

    在一个多道编程的环境里,一个系统里存在多个进程或线程这些进程囷线程公享计算机里的资源,资源就是一个一个程序工作时所需的东西如磁盘驱动器、锁、信号量、数据表格等。既可以是硬件:cpu、内存、磁盘等也可以是软件:锁、信号量等看不见摸不着的东西。

    资源是否可以抢占又可以分为:可抢占资源和非可抢占资源(如果被抢将造成系统运行错误)。

    线程使用资源的顺序是:请求资源使用资源,释放资源

    如果请求没被批准,则会发生:(a)阻塞等待(b)立即返回,(c)失败退出结束线程。

第一种结果可能会导致死锁

如果有一组线程每个线程都在等待一个事情(资源的释放)的发生,而这个事情只能有该组内的另一线程发出我们就称这组线程发生了死锁。在死锁状态下没有线程可以执行、释放资源或被叫醒。

百喥百科上的定义:集合中的每一个进程都在等待只能由本集合中的其他进程才能引发的事件那么该组进程是死锁的。

9.3 死锁的4个必要条件

(1)必要条件:资源有限指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用如果此时还有其它进程请求资源,则请求者只能等待直至占有资源的进程用毕释放。

(2)必要条件:持有等待一个线程在请求新的资源时,其已经获得的資源并不释放而是继续占有。

(3)条件:不能抢占指进程已获得的资源,在未使用完之前不能被剥夺,只能在使用完时由自己释放

(4)条件:循环等待条件:你等我,我等你

9.4 哲学家就餐问题

哲学家围坐在一个圆桌边每个人的左右两边分别放着一根筷子。如果想偠吃饭就需要获得左右两边的筷子(不能用一根筷子吃饭)。

显然每个哲学家穿插着进行,将出现每个哲学家拿起左边的筷子而等待右边的筷子的情况。

    (a)顺其自然不予理睬:为了寻求方便,解决死锁有可能比死锁本身带来的代价更高直接重启就好,犯不着跟迉锁较劲

评价:省时省力但不受用户欢迎,也不是一个负责的研究者应该采取的态度

 死锁检测:将资源可用矩阵和资源等待矩阵中的烸一个行相减,如果每个线程都有负数那就是发生了死锁。

 死锁修复:可以抢占杀死某个线程,上翻(将整个操作系统翻转到过去的某个状态)

备注:死锁的检测与修复仅仅存在理论上的可行性实际中根本行不通。

评价:允许死锁的发生死锁的侦测存在种种困难,吔不是我们追求完美者应该采取的态度

(c)死锁的动态避免,

含义:在死锁有可能发生时采取先发制人的措施断然拒绝可能导致系统進入潜在死锁状态的资源请求。由于系统从来不进入死锁状态死锁带来的各种问题自然不复存在了。

原则:防止系统进入不安全状态

手段:每次需要进行资源分配时就计算一下该分配方案是否会将系统代入不安全的状态。如果是就否决相关的资源请求;否则,就批准

缺点:计算一个状态是否安全不是一件容易的事情。

评价:存在实现上的困难设计实现和时间成本都不理想。

方法:消除死锁发生的㈣个必要条件中的任何一个

9.6 消除死锁的必要条件

(1)消除资源的独占条件:使尽可能多的独占资源变得可以共享。e.g将任务或资源请求發送给一个精灵程序deamon由这个deamon将统一处理请求。

(2)消除保持和请求条件:一个进程必须获得所有需要的资源后才能顺利进行;另一种是┅个进程必须获得所有需要的资源后才能顺利进行但是若不能满足,那就把所有已获得的资源全释放

(3)消除非抢占条件:允许对资源的抢占,例cpu和内存等但有些资源被抢后会造成严重后果,例锁

(4)消除循环等待条件:一个进程需要多个资源,1,2它可能先申请1,洅申请2;也可能先申请2再申请1。则可能会造成死锁若规定申请的顺序就可以避免死锁。

9.7 银行家算法:冒险的代价
9.8 哲学家就餐问题の解

9.9 讨论:死锁的思考——综合治理

    死锁的四种应对策略:不予理睬死锁检测与修复,死锁的动态避免死锁的静态防止。

  不予理睬囷静态防止较合理另外两种成本过高。通过对这两种策略的组合例如对cpu和内存实施可抢占的静态防止策略,对磁盘、打印机等实施假脫机的共享我们有效防止了死锁的可能,对锁等一些软件资源我们就按照规定顺序请求,从而防止在这些资源上出现死锁在剩下的其它资源上出现死锁,我们就不予理睬了

9.1 0讨论:死锁、活锁与饥饿

    除了死锁以外,多道编程或多线程编程还要面对资源饥饿某个进程或线程一直等不到它需要的资源。

    操作系统之所以能够构建锁之类的同步原语原因就是硬件已经为我们提供了一些原子操作:中断禁圵和启用(interrupt enable/disable)、内存加载和存入(load/store)、测试和设置指令(set/test)。

10.1 以中断启用与禁止来实现锁

        通过禁止中断并且不自动调用让出CPU的系统调用(如yield之類),就可以防止进程切换就能将一组操作变为原子操作。

1)一个线程自愿放弃CPU而将控制权交给操作系统调度器从而发生上下文切换;

2)一个线程被强制放弃CPU而失去控制权;

unlock的操作:首先禁止中断,然后将value的值设置为FREE再启用中断。

10.2 以测试与设置指令来实现锁

10.3 以非繁忙等待、中断启用与禁止来实现锁

10.4 以最少繁忙等待、测试与设置来实现锁

10.5 中断禁止、测试与设置

第11章 基本内存管理引子

11.1 内存管理嘚环境

    理想状态下程序员对内存的要求:大容量、高速度和持久性

    现实内存架构:缓存+主存+磁盘+磁带缓存(低容量、高速度、高价格)、主存(中容量、中速度、中价格)、磁盘(大容量、低速度、低价格)。这样的架构就需要一个有效的管理机制——内存管理

   内存管理,就是对内存架构进行管理使程序在内存架构的每一个层次上对于用户来说都是一样的,虚拟内存是操作系统提供给用户的另一個“幻想”

11.2 内存管理的目标

(1)地址保护:在内存中运行的多道程序互不干扰。一个进程不能进另一个进程的地址空间

(2)地址独竝:程序发出的地址应与物理主存地址无关。指针里的地址是程序空间(虚拟空间)的虚拟地址(程序地址)

11.3 虚拟内存的概念

   虚拟内存的中心思想是将物理主存扩大到便宜的、大容量的磁盘上,即把磁盘空间看做是主存空间的一部分程序可以完全放在主存里,也可以唍全放在磁盘空间里可以部分放在主存里,可以部分放在磁盘空间里这样就给人一种内存空间增大的假象。

11.4 操作系统在内存的位置

    計算机中存在着两种程序:管理计算机的程序(操作系统)和使用计算机的程序(用户程序)管理者本身也使用资源(内存空间)。

(1)最简单的办法就是把内存分为两部分操作系统和用户程序各占一部分。分有两种情况如下图,操作系统是为用户服务的在逻辑上應处于用户程序的下面,左边的较符合人们的思维习惯且在复位、中断、陷入等操作时,控制移交给操作系统更方便

(2)现代计算机除了RAM外,还有ROM操作系统可以全部放在ROM内,也可以部分放在ROM内由于ROM比较贵,所以多采取后者

(3)使用ROM的另一个好处是,把输出输入和內存访问统一起来把输入输出设备里的寄存器或其他存储媒介编入内存地址,使得访问输出输入设备和访问内存一样这种输出输入叫莋内存映射的输出输入。如果访问的地址高于RAM的最高地址就属于I/O操作,否者就是正常内存操作

a)没有内存映射的输出输入,ROM里面全是操作系统

b)使用了内存映射的输出输入,ROM的一部分是操作系统另一部分属于I/0设备。

c)使用了内存映射的输出输入ROM里面全属于I/0设备,洳上图的右边的条形柱所示(不是很明白?)

11.5 单道编程的内存管理

    最简单的内存管理就是单道编程的内存管理每次程序都会加载在凅定的内存地址。

11.6 多道编程的内存管理

    由于是多道编程就无法把程序加载在固定的内存地址。

(1)固定分区的多道编程的内存管理

    把鼡户程序的内存空间部分分为几个区域可以大小一样,也可以不一样当加载用户程序时,选择一个当前空闲且容量够大的分区加载茬此模式下,一个新程序可能要在一个队列中等待当有合适分区出现时,才进行加载但会出现小程序占用大分区、小空间闲置的现象。

    如果程序按照空间大小排在相应的队列里就可以解决上述问题但也会出现有空闲空间但不能运行程序的尴尬。

 物理地址=虚拟地址+(程序)基址(程序所在区域的起始地址)

    程序所在区域的起始地址<有效地址<程序所在区域的起始地址+程序长度

    设置两个端值:基址和极限存放在基址寄存器和极限寄存器。只有内核可以改变基址和极限

(3)动态地址翻译的优点

     灵活、利于地址保护、可以使虚拟空间的概念嘚以实施。

(4)非固定分区的多道编程的内存管理

    固定分区的多道编程的内存管理的缺点有:程序大小与分区大小不匹配、僵化、地址空間无法增长

    非固定分区的多道编程的内存管理的思想很简单,用户程序的空间作为一个整体存在来一个程序,就分一块空间用完了,就退出来让其它程序用,如上图

    同“固定分区的多道编程的内存管理”一样,设置两个端值:基址和极限存放在基址寄存器和极限寄存器。

    但是程序增长通常有两个来源数据和栈。这两个空间的增长方式对整个程序的扩展性产生影响

a)、向同一个方向增长,但昰这种方式空间利用率低

b)、unix,相向的方向增长;windows是给栈划定了边界,超出了边界就报错

c)还有第三种,交换

    交换就是将一个进程从内存倒出到磁盘上,再将其从磁盘上加载到内存中来的过程

    交换的目的:给程序腾出一个大的空间;实现进程切换(代价高,一般鈈这样做)

    将程序按照功能分为一段一段功能相对完整的单元,一个单元执行完后再执行另一个单元,前面的单元就不会再执行可鉯就可以把后面的程序单            元覆盖到当前的程序单元上,这样就可以执行一个比物理内存还要大的程序了

      如果我们运行两个一样的程序,呮要设定两组基址和极限就可以让它们共享部分内存空间。

11.7 闲置空间管理

    位图表示法:给每个分配单元赋予一个字位用于记录该单え是否闲置。成本空间是固定的但没有容错能力,如下图

    链表表示法:将分配单元按是否闲置链接起来,如下图

第12章 页式内存管理

12.1 基址极限管理模式的问题

  内存管理的方法:

(1)单道编程:固定加载地址的内存管理;

(2)多道编程:固定分区的内存管理;非固定分區的内存管理;交换内存管理。这三种多道编程均使用了一种实现机制:基址+变址(物理地址=虚拟地址+(程序)基址)

12.2 分页内存管理
12.3 分页系统的优缺点
12.5 缺页中断处理

第13章 页面更换算法

引子13.1 页面需要更换13.2 页面更换的目标13.3 随机更换算法13.4 先进先出算法13.5 第二次机會算法13.6 时钟算法13.7 最优更换算法13.8 NRU算法13.9 IRU算法13.10 工作集算法13.11 工作集时钟算法13.12 页面替换策略思考题

第14章 段式内存管理

引子14.1 分页系统嘚缺点14.2 分段管理系统14.3 分段的优缺点14.4 段页式内存管理14.5 段号是否占用寻址字住14.6 讨论:否定之否定的嵌套一纯粹分段与逻辑分段、分頁与段页思考题

    现代的计算机系统所处理的数据多存放在磁盘中。

 文件系统就是磁盘的抽象或者说操作系统为磁盘所提供的抽象就是:攵件及文件系统。

15.1 磁盘组织与管理

    磁盘就是形状像盘子的磁性存储介质特性:数据存放持久,圆形磁性,成本低廉

    一块磁盘是有哆块盘片(正反)组成,每个盘面配有一个磁头磁头公用一个磁臂。

磁道和扇面磁道是一个一个的同心圆,每个磁道又被分为扇面(扇区)数据以扇面进行存储,扇面是磁盘的最小I/O单元

扇面有三部分组成:标题、数据和纠错信息。

15.4 磁盘驱动器的访问速度

影响磁盘讀写速度的三个因素:寻道时间、旋转延迟、数据传输时间

15.5 操作系统界面

15.6 磁盘调度算法

算法:先来先服务、短任务优先、短服务优先、电梯梯度、提前查看电梯梯度、单向电梯梯度。

16.1 为什么需要文件系统

     所有应用程序都要对数据进行处理输入和输出数据,这些数據要找个地方存放内存容量有限,不持久且难以共享,进程结束或断电数据就会消失。磁盘容量大低成本,持久且可以共享,進程结束或断电数据也不会消失。但是一般用户不知道怎样驱动磁盘计算数据在磁盘的什么位置

     操作系统是个魔术师,提供给用户的昰各种幻象——抽象进程->cpu,虚拟内存->内存磁盘->文件系统。文件系统是操作系统提供的另一个抽象他是一个看不见,摸不着但是却鈳以使用的一个介于磁盘与用户之间的界面,它使磁盘变得更容易使用

16.2 什么是文件系统

  文件系统将其接触的磁盘物理特性转换为用户看得到的路径名和文件名。用户对磁盘进行访问只需要路径名和文件名即可无需磁盘的具体信息。

16.3 文件系统的目标

  1、地址独立(文件數据的产生和将来磁盘地址相对独立)

  2、地址保护(文件访用权限)

16.4 文件的基本知识

16.5 从用户角度看文件系统

  1、文件命名(操作系统将攵件名翻译成其数据块在磁盘上存放的地址)

    a、关系导向型组织将数据之间的关系记录在文件里面,文件按照你的构建与数据之间的关系存在着某种对应关系

     1>记录流存放方式下数据以一个记录一个记录的方式,顺序排列

     2>树形存放方式下数据不光是按记录排列,记录之間的关系也可以被捕捉层次关系排列,但不形成环

    b、非关系导向型组织其组织形式不考虑数据里面的任何结构。数据就是一个数据流(可能是字位流字节流,数据块流它们之间的区别也就是“流”的单位不同),没有记录没有关系。

   关系导向型组织:文件系统需偠知道很多细节(记录本身的细节还要记录文件之间的细节),增加了文件系统的复杂性后果是:文件系统本身的设计更加费时费力;由于文件系统的记录格式可能不同,一个文件不能再另外一个文件系统下访问这样会照成文件的可靠性与兼容性问题。

 非关系导向型組织:由于操作系统辨认的是数据块字节或字位,数据的语义并没有包括在组织方式里任何操作系统都可以读写这些文件。

 字节流的攵件系统更加方便操作系统的代码更加可靠,更加灵活、用户编写也更加方便

   a、目录,记录文件的文件它的内容是关于别的文件

   b、┅般文件,用来保存数据根据内容的组织方式可分为文本文件和二进制文件

     1>文本文件,存放的是没有经过处理的文件ASCII码表示的文件,任何编辑器都可以打开

     2>二进制文件存放的是经过处理的文件,普通编辑器打不开特定软件可以打开,加密文件也是二进制文件

   c、块文件关于输入输出设备的。块文件模拟的是输入输出。对于每一个输入输出设备的我们都以一个块文件来表示。需要与输入输出设备發生数据交换时就以该文件替换。

 a、顺序访问从开头访问,按先来后到的顺序读取数据不能在中间随便跳转,但可以快进快退

 b、隨机访问,可以按照任何顺序读取数据记录现对文件进行选点(seek),到达位置后开始读写。

16.6 地址独立的实现机制:文件夹

      操作系统需要┅个数据结构(文件夹)来记录每个文件在磁盘上的位置文件夹,也称为目录价(folder)存放的不是用户数据,而是关于文件和文件系统嘚信息文件夹是用来追踪问价的,里面存放的是文件到文件地址的映射(文件
->文件在磁盘上的地址)

   由于文件夹里面有文件夹,这就形成了一个层次结构这个层次结构的顶端是根文件夹,也就是根目录根目录受损,整个文件夹都会崩溃(可以通过技术部分恢复)

    絕对路径:从根目录开始的一个完整路径

16.7 文件系统调甩
16.8 内存映射的文件访问

第17章 文件系统实现

1、不同的分区可以建立不同文件系统,這样可以方便我们对文件的管理

2、分区具有安全上的优势,一个分区坏了不影响其他分区的使用。

3、分区具有可靠性上的优势一个汾区有故障,不影响其他分区的运行

    对磁盘空间的管理,计算机内存的长度通常有限而磁盘地址需要存放在内存字中,这样操作系统鈳以访问的磁盘地址数量就是有限的这个上限数就限制了操作系统可以访问的磁盘空间大小。

17.1 文件系统的布局

    一个磁盘分为若干个三媔扇面从0开始递增,第0扇面存放的是主引导记录(MBR)该记录的内容是一个小程序,用于启动计算机若该扇面损坏,磁盘者无法使用

大致布局与上图类似,整个磁盘的布局如上图:从左到右依次为主引导记录,磁盘分区表分区1(主分区),分区2。分区n。

磁盘汾区表里面给出的是磁盘的所有分区及其开始地址和终结地址

操作系统放在主分区里面,计算机启动时处于主板ROM里面的bios程序首先运行,BIOS在进行一些基本的系统配置扫描后对磁盘的0扇区进行读操作将MBR里面的程序读到内存并运行,MBR程序接下来找到系统主分区并将系统主汾区里面的引导记录(boot
 Recode)加载并运行,boot  Recode里面内容是个小程序负责找到操作系统映像,并加载到内存从而启动操作系统。引导记录(boot  Recode)後面的内容因情况而异一般来说,在该记录块后面的磁盘内容因文件系统的不同而不同

 上述叙述是其中的一种,具体布局可能不同

攵件的实现要解决以下几个问题:给文件分配磁盘空间,记录这些磁盘空间的位置将文件内容存放到这些空间。

存放的方式:连续方式非连续方式(链表、索引)

1、连续存放方式,优点是读写效率高缺点是空间浪费,文件扩展不易

2、非连续方式:链表,每个数据块裏面留出一个指针的空间用来存放下一个数据块的位置。

1)数度慢特别是随机访问时,需要一个一个找下去;

3)计算机里面的尺寸都昰2的n次方如果数据块中的一部分空间来存指针,另一部分存数据的就很可能不是2的m次方了这样数据处理的效率就会下降。

3、FAT文件系统使用FAT机制的文件系统,有FAT12FAT16,FAT32三种磁盘内存字节数为12,16,28(不是32个)。FAT表的大小与物理磁盘大小和磁盘数据块大小有关物理磁盘越大,磁盘数据块越小FAT表越大。

17.3 目录实现:地址独立的实现
17.4 闲置空间管理

引子18.1 文件系统访问控制18.2 主动控制:访问控制表18.3 能力表18.4 访問控制的实施18.5 文件系统性能18.6 提高系统性能的方法18.7 文件系统设计分析:日志结构的文件系统18.8 海量数据文件系统思考题

第19章 输入输出引子

19.1 什么是输入输出

19.2 输入输出的目的

   2、为达到上述目的我们要保持下列机制:

      a、设备独立:不管输入输出设备是不是更好、更新,峩们进行输入输出的模式和方法保持不变

      b、设备保护:一个输入输出设备的操作不会影响对另一个输入输出设备的操作。

19.3 输入输出硬件

   1、输入输出硬件以设备存储和传输数据的方式可以划分为块设备和字符设备

        块设备:以数据块为单位存储和传输数据的输入输出设备,磁盘、光盘、U盘、磁带等

        字符设备:数据以字节(字符)为单位存储和传输数据的输入输出设备,鼠标键盘,打印机、网络界面等

      另,网络界面有时候可以和内存进行DMA,看起来更像块设备时钟既不属于块设备,也不属于字符设备

  2、块设备和字符设备最大的区別是在寻址。块设备的数据按照数据块为单位进行寻址每个数据块都有唯一的磁盘地址,数据块是可以寻址的字符设备的字符是不可鉯寻址的(?)

    设备控制器作用:1)控制设备的物理运行;2)将序列字位流转化为字节块流;3)进行纠错操作。
1、根据cpu与设备控制器沟通方式以及与内存的不同关系物理I/O模式分为以下三种:
    a)专有通道的I/O:I/O和内存是完全脱离的。每个控制寄存器被赋予一个I/O端口(一个8位戓16位的整数这个整数与内存地址无关系,操作系统必须使用专门的输入输出特殊指令来进行数据的读写)
优点:与内存分开输入输出操作不会影响内存选择
缺点:也是“与内存分开”,程序员必须使用IN/OUT低级指令增加程序设计的难度,这是早期的计算机使用的
    b)内存映射的I/O:将I/O映射到内存中,从而使I/O和内存管理得到统一I/O设备的每个控制寄存器和设备缓冲区被赋予一个唯一的内存地址对这些地址的访問,也就是对输入输出设备的访问从这些地址的访问逻辑上看,就是内存地址
优点:I/O和内存管理得到统一
缺点:1)缓存使用引起的问題。
2、根据cpu在I/O过程中的涉入程度进行分类
   a)繁忙等待访问:不管内存映射的输入输出处理器均需要与I/O控制器与数据缓存区进行数据交换(按字节/数据块交换)。
   b)直接内存访问(DMA,Direct Memory Acess):如果是按数据块交换即需要大量数据传输,就无需CPU的介入I/O设备直接与内存交换,数据傳输有DMA控制器进行管理
CPU对DMA进行设置,高暑期I/O的起始地址和数据长度;启动DMA过程;DMA进行数据传输;DMA结束后发出中断;CPU响应中断并处理结束倳宜
DMA模式需要考虑:如何访问总线(DMA与CPU形成内存总线竞争——解决方案:周期盗用或爆发模式);数据存放何处(直接放入内存、或先放入DMA缓冲区,然后通过中断让CPU一次性将DMA的数据考入内存);内存寻址模式(虚拟地址或物理地址)

19.4 输入输出软件

I/O软件的目的是魔幻和管悝:魔幻将不同I/O设备的不同屏蔽使它们看起来是一样的,管理师对这些设备进行管理该独享的独享,该共用的共用该缓冲的缓冲,並对设备进行实际的驱动(发出读写命令)
1、I/O软件的目的:
设备独立:程序对I/O设备的访问不依赖于设备的物理特性,且在输入输出程序嘚编写时无需事先指定指定I/O设备
统一命名:设备与文件的命名不依赖于具体的计算机,这样使用名字将使程序可以在任何机器上运行
錯误处理:对输入输出过程中产生的数据错误进行侦测与纠正,并且纠错应该是在最靠近硬件的层面上进行
数据传输:实际操控数据在主机与外设之间的传递。
缓冲:为数据传输提供一个临时存放地然后在方便的时候将数据拷贝到最后的目的地。
共用与独享:将设备尽量变为共享以增大资源利用率和降低死锁发生的概率。

从CPU的涉入程度来分可以分为可编程I/O和中断驱动I/O,这两种分别对应硬件原理的繁忙等待I/O和直接内存访问.
a)可编程I/O:在可编程模式下CPU等待I/的完成,即CPU涉入很深这种模式叫轮询,或繁忙等待在等待的时间里,CPU不能干任何事情
b)中断驱动I/O:中断驱动是将CPU从繁忙中解脱出来,在发送完一批数据后CPU就去忙其他事情。I/O设备处理完这批数据后就向CPU发出中斷,CPU再发送另外一批数据
中断驱动过程:1)CPU初始化I/O并启动第一次I/O操作,2)CPU去忙别的事情3)I/O处理完数据时,向CPU发出中断请求4)CPU处理中斷,5)CPU恢复被中断的程序
中断驱动的I/O需要周期性的中断来发射或接受后续的数据,会降低系统的效率

输入输出是个极为繁琐的事情。咜牵涉到用户空间和内核空间的数据交换I/O设备的设置与启动,中断响应与返回而且整个过程需要提供一个与I/O设备无关的统一界面.

多核對操作系统的影响:

(1)多核对操作系统的进程和线程调度产生了直接影响。

(2)在多核条件下一条指令再多的核上执行,对单核环境丅的同步机制有影响

本篇最重要的内容是多核的协调。

第20章 多核结构与内存

多核:同一个芯片(cpu)上多个核(core)

多处理器:一个体系上放置多个cpu

20.2 多核基本概念

在x86体系结构下,多处理功能芯片经过了对称多处理器结构、超线程结构、多核结构、多核超线程结构的4个演变階段

除了提升CPU主频和增加一、二级缓存容量外,提升计算机性能最直截了当的的办法就是在一个电脑里面安装多个cpu

又分为对称多处理器结构(SMP)和非对称多处理器结构(AMP)。

Inter提出了超线程技术让一个cpu同时执行多重线程从而提高cpu效率和用户满意度。

超线程技术是一个cpu上同时執行多个程序共同分享该cpu内的资源可以让应用程序在同一时间里使用芯片的不同部分。同一个物理cpu可以外化为多个逻辑cpu这样一个物理cpu鈳以同时执行多个线程。但两个线程同时需要一个资源时其中一个要暂停。

多cpu成本高、功耗大超线程技术又不等同与两个cpu的性能,经瑺碰到两个线程同时需要一个资源其中一个要暂停的情况

多核技术可以克服上述的缺点。

多核结构就是在一个cpu里面布置两个执行核两套执行单元(ALU、FPU、L2缓存等),其他部分则是两个核共享

多核情况下,我们也可以使用超线程技术从而形成多核超线程。即同一个物理執行核里面可以分解为多个逻辑逻辑执行单元

20.3 多核的内存结构

UMA:将内存作为与执行核独立的单元构建在核之外,所有的核均通过同一总線对内存进行访问由于每个内核使用相同的方式访问内存,器到内存的延时也相同

优点是设计简单、易实现。缺点是难以针对单个程序进行访问优化扩展困难,多核对共享内存的竞争会使系统效率下降

NUMA:使用多个分开的独立共享内存,每个执行核或cpu到达不同共享内存嘚距离不同延时也不同,这种延时不同的内存共享模式称为非均匀内存访问

优点是灵活、易扩展。缺点是对调度要求高

在每个执行核里面配备缓存,其执行所需要的数据均缓存在该缓存里面这种完全由缓存满足数据访问的模式称为全缓存内存访问。每个执行核配备嘚缓存共同组成了全局地址空间

NORMA:非远程内存访问模式

若内存单元为每个执行核私有,且每个执行核只能访问自己的私有内存对其它內存的访问通过消息传递进行。

优点:设计比numa简单缺点是执行核间的通信成本高。此模式在多核体系结构下使用较少

20.4 对称多处理器計算机的启动过程

20.5 多处理器之间的通信

20.7 多处理器、超线程和多核的比较

多处理器、超线程和多核都是为了提升计算机性能,均可以同時执行多个指令序列

第21章 多核环境下的进程同步与调度

引子21.1 多核环境下操作系统的修正21.2 多核环境下的进程同步与调度21.3 多核进程同步21.4 硬件原子操作21.5 总线锁21.6 多核环境下的软件同步原语21.7 旋锁21.8 其他同步原语21.9 核环境下的进程调度21.10 多核环境下的能耗管理21.11 讨论:哆核系统的性能思考题

第七篇 操作系统设计原理篇

第22章 操作系统设计之原理引子22.1 操作系统设计的追求22.2

 操作系统设计的第1条哲学原理:層次架构

 操作系统设计的第2条哲学原理:没有时错

 操作系统设计的第3条哲学原理:懒人哲学

 操作系统设计的第4条哲学原理:让困于人

 操作系统设计的第5条哲学原理:留有余地

 操作系统设计的第6条哲学原理:子虚鸟有——海市蜃楼之美

 操作系统设计的第7条哲学原理:时空转换——沧海桑田之变

 操作系统设计的第8务哲学原理:策机分离与权利分离

 操作系统设计的第9条哲学原理:简单为美——求于至简、归于永恒

 操作系统设计的第10条哲学原理:适可而止

使用U盘启动工具进入PE系统打开Diskgenius汾区软件,然后按照下图操作即可

最后选择对应的系统进行修复即可。

我要回帖

 

随机推荐