绿林网

《操作系统真象还原》的读后感大全

《操作系统真象还原》的读后感大全

《操作系统真象还原》是一本由郑钢著作,人民邮电出版社出版的平装图书,本书定价:108.00,页数:759,特精心收集的读后感,希望对大家能有帮助。

《操作系统真象还原》读后感(一):非常棒的操作系统实践类书籍

先说下这本书的印象,大而全,事无俱细,处处透着作者想把知识说清楚的真诚,而且本书是从第0章开始,那一章是做为答疑,没错,刚开始就答疑,说明,这是作者为了把常见问题给大家解释,很难得,很真诚,很少见这样的认真。 这本书很好,跟着书能完整一些一个操作系统,很有成就感。虽然有点啰嗦,但那是作者 为了把枯燥内容描述轻松而不得已的做法。

这本书其实比很多大学老师都讲的好,感觉是真正站在学生的角度在阐述操作系统,在课堂上不懂的地方,这本书上全都有解释,而且,是我的老师推荐给我的。总之,赞国内良心作者。

《操作系统真象还原》读后感(二):又一本国人写的精品的计算机书籍

大二下学期开设了操作系统课程,课上理论过多,缺乏实践,对操作系统的运行机制依旧茫然。。于是在知乎看到如何自己写一简单内核,

了解到需要汇编。自己买了王爽汇编自学,然而那本汇编讲的只是16位的8086汇编,在别人推荐下,买了一本x86从实模式到保护模式,

读完之后会对实模式和保护模式、系统的基本引导有基本的了解,后来在china-pub上再看《《操作系统真象还原>>看了目录。感觉内容很不错

,拿到手后确实很厚,不过不用担心,之所以这么厚。作者用非常通俗,幽默得讲解每一个概念,

知识点。而且不断提及,生怕读者弄不懂,读起来很舒服,作者真是煞费苦心,为作者点赞

,这本书有一个非常好的好处就是。每章对应的代码实现一新的功能,可以用bochs调试,

自己造着书上抄有时也会出现错误,需要你自己动手调试,对比作者源码,这样印象会很深刻。

这样做之前在其那些很晦涩的概念,自己阅读,调试后,感觉也就那么回事。随着深入对操作系统的全貌都有了清晰的认识,深刻体会到了内核实现的各种巧妙思想。看得我直拍大腿。

这本书也不是完全面向0基础,需要有了一点汇编/c语言,跟基本的数据结构(链表),如果不会汇编.推荐王爽的汇编语言跟x86从实模式到保护模式,再看这本书会比较快.

另外此书有一点瑕疵就是elf格式那块讲得不是很明白.推荐cousera南京大学开设的程序的表示、转换与链接(https://www.coursera.org/learn/jisuanji-xitong),跟<深入理解计算机系统>的第7章链接知识.

《操作系统真象还原》读后感(三):读书报告

《操作系统真象还原》由人民邮电出版社出版,作者郑钢,毕业于北京大学,前百度运维高级工程师,对操作系统有深入的研究。本书讲解了开发一个操作系统需要的技术和知识,主要内容有:操作系统基础、部署工作环境、编写MBR主引导记录、完善MBR错误、保护模式入门、保护模式进阶和向内核迈进、中断、内存管理系统、线程、输入输出系统、用户进程、完善内核、编写硬盘驱动程序、文件系统、系统交互等核心技术。 本书的语言风格较为幽默,语言较口语化,大概看这本书有种看小说的感觉,不需要每段的逐字逐句的去钻研,但有些重要的部分还是要钻。作者采用类似演讲的方式来组织自己的语言,每次遇到较为抽象的东西,作者会耐心的举个例子让我们去了解他想要表达的内容。有时大概觉得我们读累了,会通过玩笑的形式让我们抓回自己的心思去继续研读这本书。这样像小说写书的方式介绍一个知识点需要大量的文笔,因此会导致写同样大概的内容作者以这种方式的写法需要大量的文字和各种比喻来表达它,类似灌输的方式,但它这种灌输方式是几乎把你当作什么都不会的新手来写,因此很适合新手来读这本书。同时也佩服作者的写作毅力,即使再怎么跑题也可以把重点给抓回来。但个人感觉本书更适合于那些有一定操作系统知识基础的人而不是完完全全的操作系统的小白,书中的内容与硬件的知识有比较大的联系,若是没有一定的计算机硬件知识的人来阅读此书比较容易被绕晕。 第0章: 作者十分好心的想到读者在看到某一个章节后可能依旧疑惑的地方,并将这些疑惑通过问题的形式收集起来,每当读者看懵了,可以返回目录找找是不是自己的疑惑恰好对应上了第0章的某一个小章节。 第1章: 介绍了操作系统制作时的尴尬之处,因为操作系统是较为底层的东西,首先它是用c语言和汇编语言两种编译器编译成的。汇编语言部分来实现硬件和系统之间的交互,就此看来,它可以直接和硬件交流,确实很底层。因此每次出现bug时,需要重新启动机器,早期机器每次启动的速度可想而知,所以就介绍了一种便捷的方法,让自己编译的操作系统调试起来很舒服。虚拟机,属于一种计算机软件,运行在普通的操作系统上面。虚拟机的强大之处,它明明是个软件,却可以模拟出硬件。有了虚拟机,每次崩溃只要重开个虚拟机就好,之后引申到bochs虚拟机,讲了怎么配置虚拟机,和怎么运行它。 第2章: 主要讲了操作系统最初始是如何启动的,讲解了,cpu的一些功能,运行指令和进行数据运算。讲了和mbr,bios有关的内容。像刚开始bios放在某个特定的位置,它的入口地址0XFFFF0,至于为什么是这个地址,作者也讲的很清楚。这个就类似一种协议,一种规定,cpu的设计者在cpu通电的时候,就把规定cpu的cs:ip寄存器的值强制初始化未0xF000再经过一系列的运算,它就会指向bios的入口地址,读取这个地址的第一个指令。至于为什么cpu会认为它是指令,作者说了。cpu就是只当它是个指令。如何在这个位置它所读取的不是指令,那么对不起,你的机器就是一块砖头。bios默认做的工作就是引导mbr和运行自检,而mbr的特点是,它的扇区末尾的两个字节分别是魔数0x55,0xaa。那么又讲了bios该如何找到mbr所在的位置,就类似于在浩瀚沙海中找一个贝壳的难度。如果不知道mbr的位置,又要花费大量的时间去搜索,因此,又制定了一个规定。将0盘0道1扇区作为mbr的位置。因为约定,一切都变得简单起来。而mbr又是引导操作系统的重要数据块。 第3章: 刚开始围绕地址、section和mbr中的vstart进行解说,然后介绍cpu的实模式也就是8086cpu的工作环境、方式、状态。接下来来到熟悉的环节,计组学过的cpu的工作原理,cpu的内存寻址方式,和实模式下几个汇编命令的解说,然后帮我们回顾汇编和cpu工作方面的知识。之后讲了io接口,然后教我们如何输出内容到显示屏上面,之后是bochs调试,然后介绍了硬盘,最后讲了如何通过mbr引导硬盘中的loader,最终实现加载内核。 第4章: 保护模式,是为了安全而诞生。若不是底层的程序,可以访问到底层,任意修改底层,拥有底层的所有权限。那么这个系统的设计就十分的不安全。保护模式做到了一些限制的方法,例如限制在保护模式下程序的权限,在保护模式下,内存通过映射来让用户程序访问,那么用户程序不是直接访问内存地址的,这样限制了它直接访问的权限。在保护模式下,对于初级的寻址方式进行扩展,对初级的指令也进行了一系列的扩展,例如假设减法指令都要去适配32位的操作数,之后介绍了全局描述符表,处理去微架构,保护模式对内存段的保护等等之类的内容,应该是大概的介绍了一下保护模式。 第5章: 先介绍了获取内存的方法,学习Linux获取内存的方法,发现它是通过调用调用BIOS中断0x15实现的。 然后讲了内存分页机制,先介绍了内存为什么要分页,书中举了个例子来说,系统里有3个进程正在运行,进程A、B、C各占了10MB、20MB

《操作系统真象还原》读后感(四):读书报告

作者介绍:

郑钢,毕业于北京大学,前百度运维工程师。操作系统是他大学第一次考试不及格的科目,后经过对操作系统深层次的学习研究,写下此书。

内容提要:

《操作系统真象还原》共分16章,讲解了开发一个操作系统需要的技术和知识,主要内容有:操作系统基础、部署工作环境、编写MBR主引导记录、完善MBR错误、保护模式入门、保护模式进阶和向内核迈进、中断、内存管理系统、线程、输入输出系统、用户进程、完善内核、编写硬盘驱动程序、文件系统、系统交互等核心技术。

知识点:

什么是操作系统:把重复性工作集中化,有管理策略。操作系统提供给用户进程一些系统调用,当用户进程需要某个资源时,直接调用便可,不用自己再费尽心思考虑硬件的事情了,由操作系统把资源获取到后交给用户进程,用户进程可以专注于自己的工作。可记录状态为了更好地管理内存。操作系统是软件,而软件的逻辑是需要作用在硬件上才能体现出来的。写操作系统需要了解硬件,这些硬件提供了软件方面的接口。

软件如何访问硬件:通过硬件适配设备--IO 接口。访问外部硬件有两个方式:1将某个外设的内存映射到一定范围的地址空间中,CPU 通过地址总线访问该内存区域时会落到外设的内存中,这种映射让 CPU 访问外设的内存就如同访问主板上的物理内存一样.2外设是通过 IO 接口与 CPU 通信的,CPU 访问外设,就是访问 IO 接口,由 IO 接口将信息传递给另一端的外设。

应用程序和操作系统如何配合到一起的:应用程序和操作系统都是软件。 CPU 会将它们一视同仁,甚至, CPU 不知道自己在执行的程序是操作系统,还是一般应用软件, CPU 只知道去CS: ip 寄存器中指向的内存取指令井执行,它不知道什么是操作系统,也无需知道。应用程序加上操作系统提供功能才算是完整的程序。应用程序是通过系统调用来和操作系统配合完成某项功能的。

为什么称为“陷入”内核:把软件分层的话,最外圈是应用程序,里面是操作系统,应用程序处于特权级,操作系统内核处于特权级 。当用户程序欲访问系统资源时,它需要进行系统用。这样 CPU 便进入了内核态,也称管态。

内存为什么要分段:内存是随机读写设备,即访问其内部任何一处,不需要从头开始找,只要直接给出其地址便可。编译器在编译程序时,要根据 CPU 访问内存的规则将代码编译成机器指令,这样编译出来的程序才能在该CPU上运行无误,所以说,在直接以绝对物理地址访问内存的 CPU 上运行程序,该程序中指令的地址也必须得是绝对物理地址,,两个编译出来地址相同的用户程序还真没法同时运行,只能运行一个。于是伟大的计算机前辈们用分段的方式解决了这一问题,让 CPU 采用“段基址+段内偏移地址”的方式来访问任意内存,这样的好处是程序可以重定位了,尽管程序指令中给的是绝对物理地址,但终究可以同时运行多个程序了。

代码分成代码段、数据段?:程序不是 定要分段才能运行的,分段只是为了使程序更加优美,x86 平台的处理器是必须要用分段机制访问内存的,正因为如此,处理器才提供了段寄存器,用来指定待访问的内存段起始地址。对于在代码中的分段,有的是操作系统做的,有的是程序员自己划分的。如果是在多段模型下编程 我们必然会在源码中定义多个段,然后 要不断地切换段寄存器所指向的段,这样才能访问到不同段中的 数据,所以说,在多段模型下的程序分段是程序员人为划分的。如果是在平坦模型下编程,操作系统将整 4GB 内存都放在同 个段中,我们就不需要来回切换段寄存器所指向的段对于代码中是否要分段, 这取决于操作系统是否在坦模型下。CPU 是个自动化程度极高的芯片,就像心脏 样,给它 个初始的收缩,它将永远地跳下去。只要给出 CPU 第一个指令的起始地址,CPU 在它执行本指令的同时,它会自动获取下一条的地址, 然后重复上述过程,继续执行,继续取址。为了让程序内指令接连不断地执行,要把指令全部排在一起,形成一片连续的指令区域,这就是代码这样CPU肯定能接连不断地执行下去。指令是由操作码和操作数组成的,这对于数据也一样,程序运行不仅要有操作码,也得有操作数,操作数就是指程序中的数据。把数据连续地并排在一起存储形成的段落,就称为数据段。指令是连续紧凑的, 其次是通过指令机器码能够判断当前指令长度,当前指令地址+当前指令长度=下一条指令地址。将数据和代码分开的好处有三点,第一,可以为它们赋予不同的属性,第二,为了提高 CPU 内部缓存的命中率,第三,节省内存。编译器负责挑选出数据具备的属性,从而根据属性将程序片段分类,比如,划分出了只读属性的代码段和可写属性的数据段。再补充一下,编译器并没有让段具备某种属性,对于代码段,编译器所做的只是将代码归类到一起而己,也就是将程序中的有关代码的多个 section 合并成一个大的 segment (这就是我们所说的代码段〉,它并没有为代码段添加额外的信息。(2 )操作系统通过设置 OT 全局描述符表来构建段描述符,在段描述符中指定段的位置、大小及属性(包括 宇段和 TYPE 字段)。也就是说,操作系统认为代码应该是只读的,所以给用来指向代码段的那个段描述符设置了只读的属性,这才是真正给段添加属性的地方。(3) CPU 中的段寄存器提前被操作系统赋予相应的选择子(后面章节会讲什么是选择子,暂时将其理解为相当于段基址〉,从而确定了指向的段。在执行指令时,会根据该段的属性来判断指令的行为,若有返回则发出异常。总之,编译器、操作系统、 CPU 个配合在 起才能对程序保护,检测出指令中的违规行为。如果GDT 中的代码段描述符具备可写的属性,那编译器再怎么划分代码段都没有用,有判断权利的只有CPU。

物理地址、逻辑地址、有效地址、线性地址、虚拟地址的区别:物理地址就是物理内存真正的地址。不管在什么模式下,什么虚拟地址、线性地址, 最终都要以物理地址去访问内存,只有物理地址才是内存访问的终点站。在实模式下,“段基址+段内偏移地址”经过段部件的处理,直接输出的就是物理地址, CPU 可以直接用此地址访问内存。无论在实模式或是保护模式下,段内偏移地址又称为有效地址,也称为逻辑地址。线性地址或称为虚拟地址,这都不是真实的内存地址。它们都用来描述程序或任务的地址空间。

什么是平坦模式:平坦模型是相对于多段模型来说的,所以说平坦模型指的就是一个段。多段模型为了访问到 lMB 地址空间,还需要额外打开 A20 地址线,而平坦模型不需要额外打开 A20 地址线,不需要来回切换段基址就可以在地址空间内任意朝翔。

CPU 内部的段寄存器:cs——代码段寄存器、DS——数据段寄存器、ES——附加段寄存器、FS——附加段寄存器、GS——附加段寄存器、SS——堆枝段寄存器。

什么是工程:软件中的工程是指开发一套软件所需要的全部文件,包括配置环境。

什么是协议:协议是 种大家共同遵守的规约,主要用来实现通信、共享、协作:起初是为避免大家各干各的,无法彼此调用对方成果的情况,从而给大家统一一种接口、一组数据调用或者分析的约定。

局部变量和函数参数为什么要放到站中:局部变量,顾名思义其作用域属于局部,局部变量只是自己在用,放在数据段中纯属琅费空间,没有必要,故将其放在自己的战中,随时可以清理。函数参数一方面也是因为局部性导致,另一方面是因为函数是在程序执行过程中调用的,属于动态的调用,编译时无法预测会何时调用及被调用的次数,函数的参数及返回值都需要内存来存储,如果是递归调用的话,参数及返回值需要的内存空间也就不确定了,这取决于递归的次数。

为什么说汇编语言比C语言快:汇编语言生成的指令数更少,从而“显得”执行得快,汇编语言本身就是机器指令的符号化,意思是说, 个汇编语言中的符号对应 个机器指令,它们是一一对应的。高级语言如 语言为了通用性等,需要兼顾的东西比较多,往往还加入了一些额外的代码, 因此编译出来的汇编代码比较多,很多部分都是一些周边功能,并不是直接起作用的,不如用汇编语言直接写功能相关的部分效果来得更直接,C语言被编译成机器指令后,生成的机器指令当然也包括这些额外的部分,相当于多执行了一些“看似没用”的指令,因此会比直接用汇编语言慢。

中断:中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理。发出这样的信号称为进行中断请求。如果事件来自于外部,也就是该事件由外部设备发出并通知了 CPU ,这个事件就称为中断。

BIOS中断、DOS中断、Linux中断:BIOS DOS 都是存在于实模式下的程序,由它们建立的中断调用都是建立在中断向量表( Interrupt Vector Table, IVT )中的。它们都是通过软中断指令int 中断号来调用的。BIOS 中断调用的主要功能是提供了硬件访问的方法,该方法使对硬件的操作变得简单易行。DOS 是运行在实模式下的,故其建立的中断调用也建立在中断向量表中,只不过其中断向量号和 BIOS 的不能冲突。Linux 下执行的中断调用,访问的中断例程是在中断描述符表中,己不在中断向量表里了。

Section和Segment的区别:section 称为节,是指在汇编源码中经由关键字 section segment 修饰、逻辑划分的指令或数据区域,汇编器会将这两个关键字修饰的区域在目标文件中编译成节,也就是说“节”最初诞生于目标文件中。segment 称为段,是链接器根据目标文件中属性相同的多个 section 合并后的 section 集合,这个集合 称为 segment ,也就是段,链接器把目标文件链接成可执行文件,因此段最终诞生于可执行文件中 我们平时所说的可执行程序内存空间中的代码段和数据段就是指的 segment。

转义字符与ASCLL码:字符编码就是用唯一的一个二进制串表示唯一的-个字符。其中最著名的字符编码就是 ASCII码。ASCII 码表中宇符按可见分成两大类,一类是不可见字符,共 33 个,它们的 ASCII 码值是0~31和127 ,属于控制字符或通信专用字符。表中其余的字符是可见字符,它们的 ASCil 码值是32~126 ,属于数字、字母、各种符号。不可见字符引用了另一个可见宇符气’’来搭配其他可见字符,用这种可见字符组合的形式表达不可见字符。面上看,字符飞’’是让其他可见字符的意义变了,所以称气’’为转义字符,但本质上,这两个可见字符合起来才是完整的不可见字符。

什么是虚拟机:百度上虚拟机(Virtual Machine)是计算机系统的仿真器,通过软件模拟具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,能提供物理计算机的功能。没有虚拟机的时候,一台机器只有交给一个用户使用,而且一个人根本无法将这台机器的性能完全发挥出来,造成了极大的浪费不算,还有很多人正等着用呢。于是出现了虚拟机的需求 将一台物理机通过软件逻辑分割成几个虚拟的计算机,每个计算机之间互不干涉,即使一台虚拟计算机崩溃了也只是影响了它自身,不会让整个物理机瘫痪,安全可靠,可以自由测试而不必担心损伤物理机。这不仅在硬件投入上节省了大笔开销,还让更多的人同时使用了计算机资源。

魔数:对魔数简单的阐述就是 不明就理地出现 个数字,不知道其是什么意思,感觉看不透,猜不出,就像魔法一样很神秘。直接出现的 个数字,只要其意义不明确,感觉很诡异,就称之为魔数。为了程序意义清晰可维护性强,尽量还是少用魔数。

看完这本书的一章后,感觉受益匪浅,通过作者颇有趣味的语言使我更加容易去理解操作系统的底层原理。明白了什么是内核,什么是中断,内存为什么要分段等等系列之前我不懂的东西。期待下面的内容。。。

《操作系统真象还原》读后感(五):《操作系统真相还原》读书报告

寒假期间,在我即将开始学习操作系统这门课程的时候,我们老师给我们推荐了几本关于操作系统这门课程的有关书籍,供我们阅读,学习了解操作系统相关知识,在这几本书籍中,我挑了《操作系统真相还原》这本书阅读,在学习操作系统之前,对操作系统一脸茫然,所以,为了能够更加了解操作系统,我觉得这本书对我来说作用特别大。

这本书的作者是郑刚,毕业于北京大学,他写的这本书文字表达能力强,易于理解,语言风格有趣,让人能够很好的沉浸在其中,详细的为我们描述了如何学好操作系统。

这本书分为十五个章节,每个章节的内容都丰富精彩,第一章节是带我们认识操作系统,在我看来,操作系统就是用来控制和管理硬件和软件资源,是计算机硬件最底层的软件,也是最重要的软件,没有了操作系统,那么这台计算机上也就是一个空壳,在现代,操作系统有多种,例如我们将要学习的Linux OS,Unix OS,Windows OS,iOS OS,Android OS等等,正因为有了这些操作系统,我们所使用的手机,电脑才有各种各样的使用方式。

作者一开始就讲了如何编写MBR(主分区引导记录,也就是主引导扇区),它的运行机制存在于硬盘的基础上,它存储在硬盘的第一个扇区上。MBR不是随便放在哪里都行的,首先不能覆盖己有的数据,其次,不能过早地被其他数据覆盖。接下来就是保护模式,由于实模式下操作系统和用户程序属于同一特权级,用户程序所引用的地址都是指向真实的物理地址,也就是说逻辑地址等于物理地址,这从基因上决定了用户程序乃至操作系统的数据都可以被随意地删改,一旦出事往往都是灾难性的,而且不容易排查。为了克服这种低劣的内存管理方式,处理器厂商开发出保护模式。这样,物理内存地址不能直接被程序访问,程序内部的地址(虚拟地址)需要被转化为物理地址后再去访问,程序对此一无所知。

进入了保护模式,就开始了内核,通常将一些与硬件紧密相关的模块,各种常用设备的驱动程序以及运行频率较高的模块,都安排在紧靠硬件的软件层中,将它们常驻内存,称之为内核。大多数OS内核都包含了以下两大方面的功能,首先是支撑功能,里面包含了中断处理,时钟管理,原语操作。第二是资源管理功能,包括了进程管理,存储器管理,设备管理。在时钟管理中,就像书中作者所提到的时间片轮转调度中,每当时间片用完时,便由时钟管理产生一个中断信号,促使调度程序重新进行调度。作者通过代码例子来阐明参数存储方法,用内存来传递参数,还要考虑内存地址,为了避免多进程的参数覆盖问题,每个进程的参数得单独存储在不同地址,得在内存中再为每个进程规划出一块存储参数的内存区域,栈也是位于内存中的,所以最好的方式就是在栈中来保存。这种简单明了的解释,让读者一下豁然开朗。每个进程都有自己的拢,这就是每个内存自己的专用内存空间。其次,保存参数的内存地址不用再花精力维护,己经有栈机制来维护地址变化了,参数在栈中的位置可以通过栈顶的偏移量来得到。操作系统是中断驱动的,如果没有中断,操作系统什么也做不了,作者用程序的执行语句来说明,代码结尾没有while,CPU就一直执行下去,不会停下来,所以操作系统是个死循环。中断分为外部中断和内部中断,外部中断是指来自 CPU 外部的中断,而外部的中断源必须是某个硬件,所以外部中断又称为硬件中断。比如说网卡收到了来自网络的数据包,这时候网卡就会主动通知 CPU, CPU 得到通知后便将数据拷贝到内核缓冲区。内部中断可分为软中断和异常。软中断,就是由软件主动发起的中断,因为它来自于软件,所以称之为软中断。由于该中断是软件运行中主动发起的,所以它是主观上的,井不是客观上的某种内部错误。作者用“int8位立即数”给我们讲述了这是我们即将用到的指令,通过它来调试断点指令,特地说明这里的“int8”中间是没有空格的。Into:这是中断溢出指令,bound:这是检查数组索引越界指令。总结:只要中断关系到“正常”运行,就不受 位影响。另外,这里所说的运行错误,是说指令语法方面的错误。举个例子,比如说在执行 DIV IDIV 除法指令时,处理器发现分母为 (除 ,通常是程序忘记为分母赋值或传给分母的参数有误导致的),除法中分母是不能为 的,这不符合除法要求,将引发 号异常(叫中断也行)。陷入:另外还有一种由CPU内部事件所引起的中断,例如进程在运算中发生了上溢或者下溢,程序出错,如非法指令,地址越界,以及电源故障等问题,通常叫做陷入。中断和陷入的主要区别是信号的来源,即是来自CPU外部,还是内部。说到内存管理,这也是重要的一章,内存是由存储器管理,存储器的层次结构分为多层结构的存储器系统,存储层次至少应具有三级,最高层次为CPU寄存器,中间为主存,最底层是辅存。主存储器与寄存器,主存储器为主存或者内存,是计算机系统的主要部件,用于保存进程运行时的程序和数据,也称可执行存储器。由于主存储器访问速度远低于CPU执行指令速度,为缓和这一矛盾,在计算机系统中引入了寄存器和高速缓存。寄存器具有与处理机相同的速度,所以对寄存器的访问速度最快,完全能与CPU协调工作,但是价格比较昂贵,因此,容量是不会做的很大的。位图,也就是 bitmap ,广泛用于资源管理,是 种管理资源的方式、手段。“资源”包括很多,比如内存或硬盘,对于此类大容量资源的管理 般都会采用位图的方式。位图包含两个概念:位和图位是指 bit ,即字节中的位, 字节中有 个位。图是指 map, map 这个词在很久之前就介绍过啦,地图本质上就是映射的意思,映射,即对应关系。综合起来,位图就是用字节中的1位来映射其他单位大小的资源,按位与资源之间是一对一的对应关系。程序即是一堆指令的集合,而内存是程序的舞台。要想让程序在计算机中运行,必须要将其加载到内存中才可以,原因是处理器被设计成到内存中取指令,这就是处理器的代码段寄存器 cs 和指令指针寄存器 EIP 中存储的是指令所在的内存地址的原因。对用户进程来说,它向内存管理系统,即操作系统,申请内存时,操作系统先从用户进程自己的虚拟地址池中分配空闲虚拟地址,然后再从用户物理内存池(所有用户进程共享〉中分配空闲的物理内存,然后在该用户进程自己的页表将这两种地址建立好映射关系。对于虚拟存储器,就是当用户看到自己的程序能在系统中正常运行时,他会认为该系统具有的内存容量一定比自己的程序大,或者说用户感觉到的内存容量会比实际内存容量大得多,但这只是用户的一种错觉,这是虚的,这就被人们称为虚拟存储器,虚拟存储器具有多次性,对换性,虚拟性等特征,在虚拟存储器中允许将一个作业分多次调入内存。如果采用连续分配方式,要求必须将作业装入一个连续的内存区域中,则必须事先为作业一次性地申请一个足以容纳整个作业的内存空间,以便能将该作业分先后的多次装入内存。

I/O系统,也就是输入/输出系统,是OS的重要组成部分,用于管理诸如打印机和扫描仪等I/O设备,以及用于存储数据,如磁盘驱动器和磁带机等各种存储设备。终端可以说是输出端口,也称为控制台,这是在计算机历史中遗留下来的概念。在过去计算机还是奢侈品,为了充分利用计算机资源,允许多个用户同时连接到机器上,这类似 Windows 多用户的概念,为的是让更多的用户能够控制计算机,因此终端便称为控制台。I/O系统的基本功能有隐藏物理设备的细节,与设备的无关性,对于OS而言,应允许在不需要将整个操作系统进行重新编译的情况下,增添新的设备驱动程序,以方便新的I/O设备的安装。还有提高处理机和I/O设备的利用率,对I/O设备进行控制,确保对设备的正确共享,错误处理等功能。I/O设备的类型有按使用特性分类,按传输速率分类等。在文件管理这章节中,对文件和文件系统并不是了解很多,文件系统的管理功能是将其管理的程序和数据通过组织为一系列文件的方式实现的,而文件则是指具有文件名的若干相关元素的集合,元素通常是记录,而记录又是一组有意义的数据项的集合。所以基于文件系统的概念,可以把数据组成分为数据项,记录和文件三级。数据项分为基本数据项和组合数据项,基本数据项是用于描述一个对象的某种属性的字符集,是数据组织中可以命名最小的逻辑数据单位,又称为字段。组合数据项是由若干个基本数据项组成的,简称组项。文件的类型按用途可分为系统文件,用户文件和库文件,按文件中数据的形式分类可分为源文件,目标文件和可执行文件。按存取控制属性分类可分为只执行文件,只读文件和读写文件。按组织形式和处理方式分类可分为普通文件,目录文件,特殊文件。索引文件有按关键字建立索引,具有多个索引表的索引文件。索引顺序文件是对顺序文件的一种改进,它基本上克服了变长记录的顺序文件不能随机访问,以及不便于记录的删除和插入的缺点,但它仍保留了顺序文件的关键特征,即记录是按关键字的顺序组织起来的。它又新增了两个特征,一个是引入了文件索引表,通过该表可以实现对索引顺序文件的随机访问;另一个是增加了溢出文件,用它来记录新增加的,删除的和修改的记录。目录查询技术有线性检索法和hash方法。有了文件的创建,就有了文件的保护,现代的OS中,几乎都配置了用于系统中资源进行保护的保护机制,并引入了“保护域”和“访问权”的概念。为了对系统中的对象加以保护,应由系统来控制进程对对象的访问,对象可以是硬件对象,如磁盘驱动器,打印机,也可以是软件对象,如文件,程序。我们把一个进程能对某对象执行操作的权力,称为访问权。从而引入了访问矩阵的概念,访问矩阵有基本的访问矩阵和具有域切换权的访问矩阵。

在这十五个章节中,最感兴趣的就是用户进程和线程了,在多道程序环境下,程序的执行属于并发执行,以此失去了封闭性,所以通常的程序是不能参与并发执行的,为了使参与并发执行的每个程序都能独立运行,在操作系统中必须为之配置一个专门的数据结构。所谓进程,就是正在进行的程序,是程序的一次执行,是一个程序及其数据在处理机上顺序执行时所发生的活动,是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。进程从创建到运行,分为两步,进程创建的工作是由函数process_execute 完成的,进程的执行是由时钟中断调用 schedule, schedule 从就绪队

列中调度进程完成的,毫无疑问的是进程必然是创建在先,执行在后。什么是线程,在本书中,作者是用代码来表示线程是如何进行的,线程是一套机制,此机制可以为一般的代码块创造它所依赖的上下文环境,从而让代码块具有独立性,在原理上线程能使一段函数成为调度单元,使函数能被调度器认可,从而能够被专门调度到处理器上执行。进程与线程的区别是进程拥有独立的地址空间,不同的地址空间就是不同的页表,因此我们在创建进程的过程中需要为每个进程单独创建一个页表。由于线程具有许多传统进程所具有的特征,因此又称之为轻型进程,传统进程称为重型进程。进程是作为独立调度和分派的基本单位,所以进程是能独立运行的基本单位。在每次被调度时,都需要进行上下文切换,开销较大,而在引入线程的OS中,已经把线程作为调度和分派的基本单位,因而线程是能够独立运行的基本单位。线程与进程的比较在一下几个方面,调度的基本单位,并发性,所拥有的资源,他们各自的独立性,系统的开销以及支持多处理系统。线程实现的方式有内核支持线程KST,用户级线程ULT以及组合方式。阻塞是线程自己发出的动作,也就是线程自己阻塞自己,并不是被别人阻塞的,阻塞是线程主动的行为,己阻塞的钱程是由别人来唤醒的,唤醒是被动的。调度器只负责挑选“有运行意愿、准备好运行”的钱程上处理器运行,如果线程没有运行的意愿,调度器

也不能强迫它,这倒不是因为“民主”,其实线程巴不得总在处理器上运行,永远不下来,所以它不是不想运行,而是不能运行。原因是运行的条件不具备,停止运行实属无奈,因此,即使是强制运行也没有好下场。调度器的功能只是去挑选哪个线程运行,即使再差的调度算法也会保证每个线程都有运行的机会,哪怕只是运行几个时钟周期。因此,调度器并不决定线程是否可以运行,只是决定了运行的时机,线程可否运行是由线程自己把控的 当线程被换上处理器运行后,在其时间片内,线程将主宰自己的命运。阻塞是一种意愿,表达的是线程运行中发生了一些事情,这些事情通常是由于缺乏了某些运行条件造成的,以至于线程不得不暂时停下来,必须等到运行的条件再次具备时才能上处理器继续运行。因此,阻塞发生的时间是在线程自己的运行过程中,是线程自己阻塞自己,并不是被谁阻塞。最后读到末尾,学会了进程的运行以及线程的运行,内存在CPU中的重要性,以及文件的创建,线程的创建等等,作者组织的语言通透,表达能力强,每一个内容,每一章节,都很详细地为我们阐述了各类硬件,软件的用处,详细的例子,都是我们所接触过的,把我们不懂的都描绘的简简单单,过程不复杂,这本操作系统真相还原参考书是值得我们去阅读的,也是郑刚作者的一大心血。

本文由作者上传并发布(或网友转载),绿林网仅提供信息发布平台。文章仅代表作者个人观点,未经作者许可,不可转载。
点击查看全文
相关推荐
热门推荐