《一个64位操作系统的设计与实现》是一本由田宇著作,人民邮电出版社出版的平装图书,本书定价:139.00元,页数:692,特精心从网络上整理的一些读者的读后感,希望对大家能有帮助。
●对于这种研究上层应用的选手来说还是有点难,毕竟方向是不一样的。以后有机会再读一下吧,大量的代码完全没心思读了
●比《操作系统真象还原》更具有实践性,比《orange's 一个操作系统的实现》讲解的更详细,建议三本书都读一读。
●- 一个64位操作系统的设计与实现: 基于i7x64 引入诸多linux内核设计精髓
●本书中对很多操作系统的概念进行了非常细致的解释,比如逻辑地址、线性地址、物理地址、段管理机制、页管理机制,并且有详细的代码带你亲自对这些东西进行操作,解决了学习操作系统时很多似懂非懂的概念,学习到了很多东西。 不过我在学习了前9章之后,后面再看就没有一开始的冲动和兴奋的感觉了,可能是读书时固有的倦怠。这应该怎么破?
《一个64位操作系统的设计与实现》读后感(一):对了解操作系统的基本实现有很大帮助
本书对会讲很多的细节,也帮忙整理了资料,查阅起来很方便。它的问题我觉得就是代码的注释太少了,也许之前有解释过为什么这么写,但是后面再遇到的时候就不解释了,我也不是超忆症,所以遇到这些没有解释的代码而我又正好忘记了之前解释过,我就会花很多时间去想为什么代码要这么写,卡在一个地方一段时间,但是总体上还是不错的,主要是细节多。
《一个64位操作系统的设计与实现》读后感(二):《一个64位操作系统的设计与实现》读书报告
读书报告:一个64位操作系统的设计与实现 【作者简介】 田宇 Linux内核爱好者,曾在多家大中型软件公司从事软件开发工作,参与过多款高端嵌入式产品的开发研制,主要负责Linux内核和驱动的研发,以及开源操作系统环境的深度定制。 【内容概要】 1.基于Intel Core i7处理器的64位多核操作系统2.引入诸多Linux内核的设计精髓3.既可在Bochs虚拟机中执行,又可通过U盘引导运行于笔记本电脑 本书讲述了一个64位多核操作系统的自制过程。此操作系统自制过程是先从虚拟平台构筑起一个基础框架,随后再将基础框架移植到物理平台中进行升级、完善与优化。为了凸显64位多核操作系统的特点,物理平台选用搭载着Intel Core-i7处理器的笔记本电脑。与此同时,本书还将Linux内核的源码精髓、诸多官方白皮书以及多款常用协议浓缩于其中,可使读者在读完本书后能够学以致用,进而达到理论联系实际的目的。全书共分为16章。第1~2章讲述了操作系统的基础概念和开发操作系统需要掌握的知识;第3~5章在虚拟平台下快速构建起一个操作系统模型;第6~16章将在物理平台下对操作系统模型做进一步升级、优化和完善。本书既适合在校学习理论知识的初学者,又适合在职工作的软件工程师或有一定基础的业余爱好者。 【本书在表达、处理等方面的特别之处】 鉴于本书采用迭代方式循序渐进地去实现一个操作系统,而并非一次性构建起来,所以在开发的每个环节都会对之前的代码进行修改、调整和升级。先介绍了引导程序,并通过汇编语言编写boot实列来讲解原理,化繁为简,深入浅出,这部分内容描写非常细腻,大大降低了读者的阅读门槛。紧接着开始内核层的介绍,一般我们研究Linux就是研究内核了,这是最重要的组成部分,但是直接阅读内核源码是一件非常枯燥的事情,能跟着书去学习会轻松很多,这一章也是举了很多例子。最后介绍了应用层,平时我们都是直接与应用层交互,这部分内容会相对简单一些。前面三章是初级篇,作者也留了一些问题,会在后面的章节进行更加深入的剖析。 1.引入诸多Linux内核的设计精髓 2.基于Intel Core i7处理器的64位多核操作系统 3.既可在Bochs虚拟机中执行,又可通过U盘引导运行于笔记本电脑 【书中令人印象深刻部分】 令我最深刻是高级中段处理单位,这本节开篇已经提及了每个Local APIC都由一组数量庞大的APIC寄存器组成,这些寄存器各司其职,是我对本书一个量变到质变的一个重要章节,这一部分的整体结构和功能描述让我对本书理解加深了印象 【作者在书中传递的讯息】 在计算机领域,中国的发展速度仍然落后于发达国家,师资力量不足是在所难免的。一些学校只是概括性地传授微机原理、汇编语言、计算机组成原理、编译原理、操作系统等基础知识,甚至还可能只将它们作为选修课程。当时作为学生的我觉得这些课程不重要,没有认真细致学习,但在工作多年的反思中才发现,它们是融会贯通计算机领域的必要知识,它们往往决定了一个人能在计算机行业走多远。而且,目前中国软件行业仍以外包为主,能够静下心来做技术储备、基础知识培训的自主研发型公司少之又少,这种局面使得我们想在工作中弥补基础知识依然十分困难。以上种种原因,作者想通过一系列图书把现代操作系统的真实面貌展现给读者,并希望借此寻找有兴趣和有能力的朋友们一起开发这款操作系统。考虑到对操作系统感兴趣的读者不在少数,基础知识的掌握水平势必参差不齐。为了照顾到各个方面,本书将尽量做到既适合在校学习理论知识的初学者,又适合在职工作的软件工程师或有一定基础的业余爱好者。 【个人最喜爱的部分】 我本人比较留意重点标记与备注,其中的提示以及重要点都有注明,我对图文并茂比较能够理解,而本文有着文图共同发挥作用,使得我对本文解解加深,理解透彻,也更能体会作者的用意。 【对本书的评价和观感(如是否值得向其它读者推介);】 要在一个月内看完这本书真的很难,我耐着性子看完了,但是看得不够深入,有些地方没有吃透,所以感想可能也不够深刻吧,打算过阵子再看一遍。从目录就可以看出,内容非常的全面,循序渐进地讲解底层知识,一开始手把手教你搭建环境,然后才开始基础知识的介绍。先介绍了引导程序,并通过汇编语言编写boot实列来讲解原理,化繁为简,深入浅出,这部分内容描写非常细腻,大大降低了读者的阅读门槛。紧接着开始内核层的介绍,一般我们研究Linux就是研究内核了,这是最重要的组成部分,但是直接阅读内核源码是一件非常枯燥的事情,能跟着书去学习会轻松很多,这一章也是举了很多例子。最后介绍了应用层,平时我们都是直接与应用层交互,这部分内容会相对简单一些。前面三章是初级篇,作者也留了一些问题,会在后面的章节进行更加深入的剖析。 我不想把每一章都介绍了什么拿出来说,这样并不会有什么帮助,如果你想知道每一章的内容,你应该自己去看书。我更愿意说明这本书值得一读的地方,其实很多人都渴望学习Linux的底层知识,但是由于学习门槛较高,所以真正对底层了解的人并不多,有这样一本书应该是非常幸福的,它能引导你去学习,而不是让你一个人漫无目的地学习,其实看完这本书,很多细节我都讲不出来,但是我有了一个轮廓,知道是怎么回事了,至少在别人讨论这些技术的时候我明白他们在说什么了,而不是完全插不上话的那种,当然这样肯定是不够的,这是一本需要反复去啃的书,你不可能只读一遍就弄懂所有的精髓,我认为至少三遍。 为什么要学Linux,首先你得搞清楚作为一个技术人,我们不应该跟普通人一样只停留在GUI界面的傻瓜式点击,而应该去看背后的原理,操作系统的实现应该是每个程序员都乐此不疲的,我们应该有这样的追求,去不断探索背后的原理,去学习操作系统的实现。过程中会遇到很多困难,还好有这本书可以指引我们,避免走很多弯路。 这本书的高级篇介绍了很多高深的知识,不过读者也只是需要汇编、C的一些基础罢了,能把这么复杂的知识写得如此清晰明了,可见作者深厚的功底,读者需要做的就是仔细去看书了,然后书中也给了源代码,可以供读者练习,练习是必不可少的,最好自己能够把代码写出来,这样才是真的学到了。 本书大力推荐给其他有共同意愿的人! 【读后感】 1.本书让我联想到对未来工作中深入的一种探讨,它给我带来的是一种对编程的一种质变,一种新的领悟,仿佛打开了新世界的大门一般的透彻,本书是我在转专业过来以后对软件工程专业理解和探讨最深的一门书,本书虽然厚,但内容理解了以后便能如鱼得水,并不觉得有多难,也很坚定了自己对未来的定位,以及对未来的学习规划。 2.对于未来要从事软件工程专业的我在看完这本,书后第一个疑问便是、Linux在各领域发展的现状与趋势,以及Linux在服务器领域的发展, 尤其在政府、金融、农业、交通、电信等国家关键领域。在未来工作中对工作中的深入,独立安装linux系统的技能独立安装linux系统的技能,以及一些概念混淆,希望到时候询问老师。 无法摆脱Windows的思维方式,接触电脑的时候都是从windows开始,windows的思维方式已经根深蒂固。不过现在你已经打算开始学习linux了,就要忘记windows上的一些方式,不然的话在以后的学习中,你会觉得很烦躁,怎么常用的操作或者是快捷键都不能用了呢?这个时候你就呵呵了。Linux中最主要的是命令化,虽然现在的linux的很多发行版正在往界面化发展,但是命令依然是linux的主流,至少一些基础的命令你还是要会的,这样你在工作或者学习的时候才会达到事半功倍的效果。在linux中你要习惯没有界面和鼠标。养成linux操作习惯 这个与上面第一点摆脱windows的思维方式是相对的,就是要养成linux所独特的额习惯。 命令是要学习的,不一定学习所有的,在以后的使用中慢慢积累,常用的记熟就可以了。 3.提醒了我未来对该本书更深入的学习 ,对我的启发是深入学习linux,!个人理解的读linux内核需要的基础:在此之前,希望先把应用层的东西学一下,那样会比较好理解 , 掌握至少50个以上的常用命令,反思以后应该先是计算机知识的准备,这个道理大家都容易理解,认为是老生常谈,但你的计算机知识准备得是不是很细致、全面。其次,专业英语的准备,因为系统管理需要用到命令行模式,而用命令行模式必须涉及到专业英语。虽然随着Linux操作系统的升级,它的图形界面越来越好,功能越来越强,甚至可与微软Windows图形界面相媲美,是不是意味着我们可以抛弃命令行模式,我个人不是这样认为。相反,如果想成为Li nux的高手或希望以后从事Li nux 的研发、系统维护工程师,专业英语的熟练程度,决定你职业生涯能走多远。初学不必讲究深度,而要广度,在接触到Linux一些命令时,先不要急于去全部掌握命令的各个参数等。我认为要先明白命令它的基本作用,归类等,例如执行查看帮助命令、常用系统工作命令、系统状态检测命令、工作目录切换命令文本文件编辑命令、文件目录管理命令、打包压缩与搜索命令等,归类后再分类,举一反三,等到用到的时候先知道它是属于哪个类型的命令,再细细研究命令的详细参数。总体来说,先了解Linux的整体结构或者框架,再针对Linux的具体方面进行各个击破 4.思想上的转变是从原来对本专业的不自信变为如今对自己未来的肯定,并且会更加努力并且坚定的对本专业的努力和上进 5.本书引起的期望Linux已成为全球应用发展增长最快的操作系统,其应用范围非常丰富,希望自己在今后的学习中能够更加深入,并且能够从事该行业,我相信有一天我不会后悔你曾经的选择的。 【从本书有何收获】 本书讲述了一个64位多核操作系统的自制过程。此操作系统自制过程是先从虚拟平台构筑起一个基础框架,随后再将基础框架移植到物理平台中进行升级、完善与优化。为了凸显64位多核操作系统的特点,物理平台选用搭载着Intel Core-i7处理器的笔记本电脑。与此同时,本书还将Linux内核的源码精髓、诸多官方白皮书以及多款常用协议浓缩于其中,可使读者在读完本书后能够学以致用,进而达到理论联系实际的目的。我们应该有这样的追求,去不断探索背后的原理,去学习操作系统的实现。过程中会遇到很多困难,还好有这本书可以指引我们,避免走很多弯路。资料的选择重要性对于一个技术宅来说,资料是不可或缺的,无论是博客、网站、论坛、书籍等等,相信他都可以给你说出一大堆的。但是他的这些东西不全都是适合你自己的,论坛网站等一些还是可以的,一些书籍或者其他的一些资料,要看个人了,不是公认好的就是好的,适合你自己的才是最好的,对于新手来说,还是通俗易懂的比较好,这样不好打击你的自信心,所以还是先看一些基础的书籍比较好。总之,linux是一个功能强大,用途非常广泛的系统,如果你学好了,那么对于之后的学习和工作都是有很大的帮助的,你可以有很多的方向可以发展。不过我觉的这些都是在你学的基础上才可以做到的,必须要有自律性,学习也要有个规划,不能三天打鱼两天晒网那样;再者要学会考虑,技术这行,最重要的就是有自己的想法,利用想法才创造更大的价值。初学者应该有的Linux学习环境从基础入手,杜绝使用图形化界面。 【引用本书或其它书籍的内容,或日常用语】 一款功能完备、方便易用的操作系统,是由一套庞大的结构组成的。 研发任何一款软件都需要有完整的开发环境
《一个64位操作系统的设计与实现》读后感(三):《一个64位操作系统的设计与实现》
《一个64位操作系统的设计与实现》
本书作者为田宇,田宇是Linux内核爱好者,曾在多家大中型软件公司从事软件开发工作,参与多款高端嵌入式产品的开发研制,主要负责Linux内核和驱动的研发,以及开源操作系统环境的深度定制。阿里云系统软件高级专家——Oliver Yang(杨勇)曾评论:“经历了数十年的发展演化,操作系统创新的步伐变得越发缓慢。时至今日,那些奠定现代操作系统的功能特性已经基本稳定,近年来并无根本性的创新。而另一方面,Linux开源社区变得越来越庞大,代码依旧迅速演进且纷繁庞杂。因此,想要通过阅读Linux内核源代码,深入地学习和掌握操作系统内核的设计和工作原理,已经成为了一件很有挑战的事情。尽管市面上关于操作系统及Linux内核的经典图书层出不穷,然而,“纸上得来终觉浅”。如果能够在阅读经典图书之外亲自动手实践,深刻领悟操作系统如何与硬件交互、如何管理硬件资源,那将对理解操作系统的设计与原理大有助益。“
本书第一部分讲的是操作系统相关知识介绍及环境搭建。其中包含两章内容:1、操作系统概述;2、环境搭建及基础知识。什么是操作系统?这个概念是非常宽泛的,哪怕一条指令的单片机,也可以称为嵌入式操作系统。总之,操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。操作系统的组成结构,包含内核层与应用层。内核层主要由引导启动、内存管理、异常/中断处理、进程管理、设备驱动、文件系统等模块组成,而系统API库和应用程序则属于应用层的范畴。之所以将内核层和应用层分开,是因为内核层主要负责控制硬件设备、分配系统资源、为应用层提供健全的接口支持、保证应用程序正常稳定运行等全局性工作。而应用层主要负责的是人机交互工作。编写操作系统需要的知识:1、硬件方面:首先掌握处理器与外围设备的电路组成,其次,阅读这些硬件设备的芯片手册。2、软件方面:熟悉运用汇编语言和C语言就足够编写操作系统了。环境搭建及及基础知识:开发操作系统主要使用汇编语言和C语言再加上些许灵活多变的设计思想即可。开发软件有VMware,编译环境CentOS 6,Bochs是一款开源的可调试虚拟机软件,NASM编译器是Intel处理器的i386汇编语言。
本书第二部分是初级篇,它将快速搭建起一个操作系统雏形。Boot引导程序,它主要负责开机启动和加载Loader程序;Loader引导加载程序则用于完成配置硬件工作环境、引导加载内核等任务。为什么所有操作系统都从boot引导程序开始?当BIOS自检结束后会根据启动选项设置(这里指软驱启动)去选择启动设备,即检测软盘的第0磁头第0磁道第1扇区,是否以数值0x55和0xaa两字节作为结尾。引导扇区里的程序叫作引导程序。org是Origin的英文缩写,意思位起始地址或源地址。加载Loader程序的最理想方法是从文件系统中把Loader程序加载到内存里。考虑到代码的易实现性,本操作系统将选用逻辑简单的FAT12文件系统来装载Loader程序和内核程序。从Boot跳转到Loader程序,向其移交处理器的控制权。Loader引导加载程序,与Boot引导程序挥手作别后,此刻的处理器控制权已经移交到Loader引导加载程序,它必须在内核程序执行前,为其准备好一切所需数据,比如硬件检测信息、处理器模式切换、向内核传递参数等。从实模式进入保护模式再到IA-32e模式,在实模式下,程序可以操作任何地址空间,而且无法限制程序的执行权限,但却给程序执行的安全性和稳定性带来了灾难性的后果。在保护模式里,处理器按程序的执行级别分为0、1、2、3四个级别(由高到低)。最高级别0由系统内核使用,最低级别3由应用程序使用。IA-32e模式不仅简化段级保护措施的复杂性,升级内存寻址能力,同时还扩展页管理单元的组织结构和页面大小,推出新的系统调用方式和高级可编程中断控制器。内核执行头程序,什么是内核执行头程序?所谓内核执行头程序,其实是内核程序中的一小段汇编代码。当Loader引导加载程序移交控制权后,处理器便会执行Kernel内核程序的这段代码。内核执行头程序负责为操作系统创建段结构和页表结构、设置某些结构的默认处理函数、配置关键寄存器等工作。内核主程序,或称为核主函数,相当于应用程序的主函数,它与主函数的不同之处在于,内核主程序在正常情况下是不会返回的。因为内核执行头程序没有给内核主程序提供返回地址,而且关机、重启等功能也并非是在内核主程序返回的过程里实现的,所以没有必要让内核主程序返回。屏幕显示,为了在屏幕上显示颜色,则必须通过帧缓冲存储器来完成。帧缓冲存储器,简称帧缓存或帧存,它是屏幕显示画面的一个内存映像,帧缓存的每个存储单元对应屏幕上的一个像素,整个帧缓存对应一幅帧图像。在屏幕上显示色彩,在向帧缓存写入数据前,还必须了解帧缓存的格式,即一个像素点能够显示的颜色值位宽。Loader引导加载程序设置的显示模式可支持32位颜色深度的像素点,其0-7位代表
蓝颜色,8-15位代表绿颜色,16-23位代表红颜色,24-31位是保留位。这32bit位值可以组成16M种不同颜色,可以表现出真实的色彩。系统异常,在处理器的运行过程中,经常会由于执行某条指令、访问内存空间或越权访问等问题,而导致程序无法继续执行,此时处理器会展厅当前的操作转而执行相应的错误处理,这个错误被称作异常。异常的分类,分为错误(fault)、陷阱(trap)、终止(abort),当终止异常产生后,程序现场不可恢复,也无法继续执行。系统异常处理,处理器采用类似于汇编指令CALL的调用方法来执行异常/中断处理程序。当处理器捕获到异常/中断时,便会根据异常/中断处理程序。不管是异常处理程序还是中断处理程序,在处理程序的起始处都必须保存被中断程序的执行线程。在操作系统种,内存管理单元是操作系统最为重要的一个组成部分,而物理内存页是内存管理单元的基础管理对象。因此,初始化内存管理单元的首要任务就是汇总可用物理内存页的相关信息,方可实现可用内存页的分配功能。中断处理,中断大多是由外部硬件设备(如鼠标、键盘、硬盘、光驱等)产生,并向处理器发送事件请求信号。中断请求信号可能是关于数据读写操作的,也可能是关于对外部设备控制的。8259APIC作为单核处理器时代的经典种断控制器,已被PC机广泛使用。在通常情况下,PC机会采用两片8259A芯片级联的方式,将外部硬件设备的中断请求引脚与处理器的中断接收引脚关联起来。初始化命令字ICW,ICW寄存器组共包含ICW1、ICW2、ICW3、ICW4四个寄存器,它们必须按照从ICW1到ICW4的顺序进行初始化。触发中断,外部硬件中断与处理器异常一样,它们都使用IDT来索引处理程序,其不同之处在于异常是处理器产生的任务暂停,而中断是外部设备产生的任务暂停,因此中断和异常的处理工作都需要保存和还原任务现场。键盘驱动,键盘控制器芯片大多采用Intel 8042以及兼容芯片,键盘控制器芯片通过PS/2接口(或一些USB接口)与外部键盘设备相连。实现键盘中断捕获函数,首先必须屏蔽键盘中断请求信号以外的所有中断请求信号,随后便可在中断处理函数do_IRQ种添加键盘扫描码的接受代码,并将键盘扫描码值打印在屏幕上。进程管理,进程作为用户操作的实体,它贯穿操作系统的整个生命周期,而程序是由若干段二进制码组成的,进程可以说是程序的运行态抽象,及运行于处理器种的二进制码叫作进程,保存在存储介质中的二进制码叫作程序。进程作为拥有执行资源的最小单位,它为每个程序维护着运行时的各种资源,比如进程ID、进程的页表、进程执行现场的寄存器值、进程各个段地址空间分布信息以及进程执行时的维护信息等,它们在程序的运行期间会被精粹或实时更新。PCB用于记录进程的资源使用情况(包括软件资源和硬件资源)和运行态信息等,每当进程发生调度切换时,都必须将执行现场的寄存器值保存起来,以备再次执行时使用。由于系统调用API不会生成错误码,为了既兼顾中断/异常处理程序,又兼顾系统调用API处理程序,因此这里将中断/异常处理程序的执行过程来设计struct pt _regs结构体。Init进程,进程间的切换过程主要涉及页目录的切换和各寄存器值的保存与恢复等知识点。由于进程间的切换过程必须在一块公共区域内进行,故此这块区域往往由内核空间提供。应用层,跳转到应用层,由于系统内核位于0特权级的内核层,而应用程序位于3特权级的应用层,若想从内核层进入应用层,在特权级跳转的过程种必须提供目标代码段和栈段以及其他跳转信息。实现系统调用API,系统调用API作为应用层与内核层间的重要通信手段已被使用到各种应用场合,但应用层与内核层间的通信手段不只系统调用API一种,我们还可采用中断、地址重映射等方式在这两层间建立通信链接,不过最广泛使用的通信方式还是系统调用API。实现一个系统调用处理函数,字符串打印功能的系统调用接口是基于color_printk函数实现的。
第三部分高级篇,运行模式,分为实模式、保护模式、系统管理模式、虚拟8086模式、IA-32e模式。通用寄存器,通过它们才可实现算术与逻辑运行、地址寻址以及访问内存等功能。IA-32体系结构下的通用寄存器有EAX、EBX、ECX、ESI、EDI、EBP和ESP。CPUID指令,用于鉴别处理器信息以及检测处理器支持的功能,它在任何模式下的执行效果均相同,它可以查询两类信息:基础信息和扩展信息,这两类均有主功能号。标志寄存器EFLAGS包含有状态标志位、控制标志位以及系统标志位。控制寄存器,目前,Intel处理器共拥有6个控制寄存器(CR0、CR1、CR2、CR3、CR4和CR8),它们由若干个标志位组成,通过这些标志位可以控制处理器的运行模式、开启扩展特性以及记录异常状态等功能。MSR寄存器组,可提供性能检测、运行轨迹跟踪与调试以及其他处理器功能。地址空间,地址空间在一般情况下主要为两大类:虚拟地址空间和物理地址空间,而虚拟地址空间分为:逻辑地址、有效地址、线性地址等,这些地址空间可以互相转换的,掌握它们的特点和关系,可以帮助我们更好理解各运行模式的地址转换过程。虚拟地址是抽象地址的统称,它们大多不能独立转换为物理地址。实模式,作为Intel处理器家族诞生的第一种运行模式已经存在了很多年,现在它仅用于引导启动操作系统和更新硬件设备的ROM固件,为了兼顾处理器的向下兼容性,他一直存在于处理器的体系结构种。实模式的特点是采用独特的段寻址方式进行地址访问,处理器在此模式可直接访问物理地址。保护模式的概念,它采用全新的分段管理机制和分页管理机制来代替实模式仅基于段的寻址方式。保护模式的段管理机制较实模式的段机制复杂许多,而且并非在实模式段机制的基础上进行的扩展。获取物理地址空间信息,只要检测出物理地址的映射信息后,操作系统便可根据这些信息构筑物理内存管理单元。内核主程序功能概述,内核主程序与普通应用程序的主函数极其相似,只不过内核主程序不会以正常的return方式返回,如果内核主程序返回或者执行结束,基本上说明此系统的大限将至。基于SLAB内存池技术的通用内存管理单元,应用层的内存管理功能主要负责对进程地址空间内的堆空间进行划分,从而为进程提供可用内存。通用内存的分配函数kmalloc,该函数用于在内核层种分配通用内存。Kmalloc函数可在通用内存的分配过程中,根据传入的参数值实现多种分配策略。通用内存的回收函数kfree,它与kmalloc组成一对功能相反的互补函数。APIC概述,APIC摒弃了单核处理器的INTR中断请求引脚,而采用总线方式通信。I/O APIC控制器的基础信息,它不像Local APIC那样用有多种访问方式。I/O APIC位于主板芯片组中,它对外提供了三个间接访问寄存器。I/O APIC作为中断请求的中转芯片,不停地将外部I/O设备发送来的中断请求封装成中断消息,再将其投递至目标处理器核心。中断模式,分为三类,PIC中断模式,Virtual Wire中断模式和Symmetric I/O中断模式。I/O APIC控制器的初始化,通常情况下,必须经过页表映射和及地址寻址才能实现I/O APIC的初始化。Linux的中断处理机制概念,它为了及时响应并快速处理各类设备的中断请求,便将中断处理单元拆分为上下两部分,即中断上半部和中断下半部。键盘和鼠标控制器,键盘和鼠标作为电脑的基础输入设备,已经伴随着电脑的发展,历经了很长一段时间。它们都必须借助控制器才能向处理器发送中断请求和数据。对于现代电脑来说,主板都集成有Intel8042键盘控制器或兼容芯片,该芯片不光用于控制键盘设备,还控制着A20地址线的开启、系统重启以及操作鼠标控制器等功能。硬盘设备初探,鉴于硬盘设备的数据传输过程是异步操作,其驱动的逻辑结构比较复杂。硬盘设备的概述,不论是硬盘设备、软盘设备还是U盘设备,它们与键盘、鼠标等设备的最大区别在于它们以数据块(扇区)作为传输单位,而非字节,这类设备称为块设备。Linux的块设备结构概述,机械硬盘作为一种低俗的大容量存储设备,它的磁头寻道时间很可能比扇区的读写时间还要长,这使得磁头寻道时间不容忽视。多核处理器的IPI通信机制介绍,多核处理器间的IPI通信机制是以Local APIC和I/O APIC为载体,借助中断投递方式与其他处理器通信。
总之,这是一本值得我们学习的好书,能丰富我们的知识,让我们对操作系统有更深的了解。
《一个64位操作系统的设计与实现》读后感(四):一个64位操作系统的设计与实现的读书报告
读书报告--《一个64位操作系统的设计与实验》1.作者简介:田宇 Linux内核爱好者,曾在多家大中型软件公司从事软件开发工作,参与过多款高端嵌入式产品的开发研制,主要负责Linux内核和驱动的研发,以及开源操作系统环境的深度定制。
2.内容概要:本书讲述了一个64位多核操作系统的自制过程。首先从虚拟平台构筑起一个基础框架,随后再将基础框架移植到物理平台中进行升级、完善与优化。为了凸显64位多核操作系统的特点,物理平台选用搭载着Intel Core i7处理器的笔记本电脑。与此同时,本书还将LInux内核的源码精髓、诸多官方白皮书以及多款常用协议浓缩在其中,可使读者在读完这本书后能够学以致用,进而达到理论联系实际的目的。全书共16章。第1~2章讲述了操作系统的基础概念和开发操作系统需要掌握的知识;第3~4章在虚拟平台下快速构建起一个操作系统模型;第6~16章将在物理平台下对操作系统模型做进一步升级、优化和完。 本书籍适合在校学习理论知识的初学者,又适合在职工作的软件工程师或有一定基础的业余爱好者。
3.本书在表达、处理等方面的特别之处:
操作系统由内核层与应用层两部分组成。内核层主要有引导启动、内存管理、异常/中断处理、进程管理、设备驱动、文件系统模板组成,而系统API库和应用程序属于应用层的范畴。
作者在解释一个概念的问题上做的很详细,例如上几图显示,在第一章介绍最基础的概念时,直接引入,一句“什么是操作系统”作为一个小篇章的标题,醒人耳目,列举操作系统的组成结构后,又有图文示意,再有分点作析,思路清晰明了,让一个刚接触的新手有很好的逻辑框架,易于理解,且更好的有助于日后的学习。
之后作者又详细的从硬件和软件两方面来介绍编写操作系统需要的知识,以及本书的简介,可以让读者做好充足的准备,开启操作系统的旅程。
作者在第二章详细的讲解了如何环境搭建,介绍了虚拟机和开发系统,如何使用VMware软件建立虚拟硬件平台,并在虚拟平台上安装操作系统,同时作者还就开发过程中涉及的一些命令展开了扩展了编译器和编译工具,系统工具和命令等知识,让读者了解了更多的内容。
在介绍语法和书写格式时,作者循序渐进,先是说明本书介绍的NASM编译器在语法和书写格式上,与MASM编译器比较相似,然后在逐一介绍相关符号[],$,,举了一个jmp$ 的例子,让读者切实理解,之后再引出“明白了符号$,那么,符号$$又是什么意思呢?”按照读者逻辑思路加深到了$$,层层叠加,徐徐渐进,让读者体会到发现学问这个的快乐。、
4.作者在书中传递的讯息:作者将这本书分为三个部分:第一个部分是操作系统相关知识介绍及环境搭配;第二部分为初级篇;第三部分是高级篇。
l 作者在第一部分为两章,分别写了操作系统的概述和环境搭建及基础知识,第一章介绍了什么是操作系统、操作系统的组成结构、编写操作系统所需要的知识。第二章介绍了虚拟机及开发系统平台的介绍、汇编语言AT&T汇编语言格式与Intel、以及C语言.。
l 在第二部分里包含三部分:第三章讲的是BootLoader引导启动程序,介绍了BIOS的引导原理,教我们如何去写一个Boot引导程序,创建虚拟软盘镜像文件,在Bochs上运行Boot程序,加载Locader到内存,从Boot跳转到Loader程序,,之后介绍了:Loader原理,然后再教我们写一个Loaader程序,从实模式进入保护模式再到IA-32e模式,,从Loader跳转到内核程序。第四章讲的是内核层,先介绍什么是内核执行头程序,再写一个内核执行头程序,之后介绍在屏幕上显示色彩、显示log;第四节介绍了系统异常,包含了系统异常的分类,系统异常处理;第五节写了初级内存管理单元,包括有获得物理内存信息,计算可用物理内存页数,分配可用物理内存页;第六节讲的是中断处理,分别有8259APIC h和触发中断;第七节讲的是键盘驱动,简述了键盘的功能,实现键盘中端捕获函数;第八节讲的是进程管理,简述进程管理模块,PCB,init进程。第五章讲的是应用层,跳转到应用层,实现系统调用API,实现一个系统调用处理函数。
l 第三部分讲的是高级篇,第三部分分为了第六章处理器体系结构、第七章完善BootLoader功能、第八章内核主程序、第九章高级内存管理单位、第十章高级中断处理单元、第十一章设备驱动程序、第十二章进程管理、第十三章文件系统、第十四章系统调用API库、第十五章Shell命令解析器及命令、最后还有一个大大的彩蛋。
第六章讲的是基础功能和新特性,里面包含了运行模式、通用寄存器、CPUID指令、标志寄存器EFLAGS、控制寄存器、MSR寄存器组。地址空间,里面包含了虚拟地址、物理地址。实模式,里面包含了实模式概述、实模式的段寻址方式、实模式的中断向量表。保护模式概述、保护模式的段管理机制保护模式的中断/异常处理机制、保护模式的页管理机制、保护模式的地址转换过程。IA-32e模式主要讲IA-32e模式概述,端管理机制,中断/异常处理机制,业管理机制,地址转换过程。
第七章讲的是完善BootLoader功能,实模式的寻址瓶颈包含了错综复杂的IMBA物理地址空间,突破1mb物理内存瓶颈,实模式下的4Gb线性地址寻址;第二节讲的是获取物理地址空间信息;第三节讲的是操作系统引导加载阶段的内存空间划分;第四节讲的是U盘启动,包含了Usb-FDD、USB-ZIp和USb-Hdd启动模式的简介,以及将Boot引导程序移植到U盘中启动;第五节讲的是在物理平台上启动操作系统;第六节讲的是细说VBE功能的实现,包含VBE规范概述,获取物理平台上启动操作系统VBE相关信息,设置显示模式。
第八章讲的是内核主程序,包含了内核主程序功能概述,操作系统的makeflie编译脚本,操作系统的kernel.ids链接脚本,操作系统的线性地址空间划分,获取处理器的固件信息。
第九章讲的是高级内存管理单元,第一节讲的是SLAB内存池,讲了SLaB内存池概述及相关结构体定义,SLab内存池的创建于销毁,SLab内存池中对象的分配与回收;第二节基于slab内存池技术的通用内存管理单元,主要讲了通用内存管理单元的初始化函数slab_init,,通用内存的分配函数kmalloc,通用内存的回收函数kfree,;第三节调整物理管理功能,主要讲了内存管理单元结构及相关函数调整,调整alloc_pages函数,创建free_pages函数;第四节页表初始化,包含了页表重新初始化,VBE怗缓存区地址重映射。
第十章讲的是高级中断处理单元,第一节讲了APIC的概述;第二节讲的是Local APIC,包含了Local APic的基础信息,整体结构及各功能描述;第三节讲的是I/o APIC,包含了I/o APIC控制器的基础信息,以及整体结构及各引脚功能;第四节中断控制器的模式选择和初始化,包含了中断模式,Locate APIC控制器的初始化和I/o APIC控制器的初始化;第五节讲的是中断处理功能,包含了LINUX的中断处理机制概述和实现中断上半部分处理功能。
第十一章讲的是设备驱动程序,第一节讲的是键盘和鼠标驱动程序,包含了键盘和鼠标控制器,完善键盘驱动实现鼠标驱动;第二节硬盘驱动程序,主要讲了硬盘设备初探以及完善硬盘驱动程序。
第十二章讲的是进程管理,第一节进程管理单元功能概述;多核处理器,包含了超线绪技术与多核技术概述,多核处理器间的IPI通信机制介绍;进程调度器,主要讲了L I N u x进程调度器简介,墙上时钟与定时器,内核定时器,实现进程调度功能;第四节讲的是内核同步方法,讲的是原子变量,信号量化,晚上自选锁;第五节讲的是完善进程管理单元,完善P C B与处理器运行环境,完善进程带哦肚脐和A P处理器引导程序。
第十三章讲的是文件系统,第一节是文件系统的概述,第二节讲的是解析FAT32wenji文件系统简述,通过实例深入解析fat 32文件系统,实现基于路径名的文件系统检索功能;第三节讲的是虚拟文件系统,讲的是L I n u x V F S简介以及实现VFS。
第十四章讲的是系统调用A P i库,第一节讲的是系统调用API结构,;第二节讲的是基于P O S I X规范实现系统调用API库,包含了P O S I X规范下的系统调用 API简介,升级系统调用模块,基础文件操作的系统调用,API的实现,进程创建的系统调用API实现内存管理的基础系统调用。
第十五章的内容是SHELL命令解析器及命令,第一节介绍了shell命令解析器,包含了shall命令解释器的概述,以及实现shell命令解析器;第二节讲的是基础命令,包括了重启命令reboot 工作目录切换命令cd,目录内容显示命令ls, 文件查看命令 cat,程序执行命令 exec 。
l 最后作者还留了个彩蛋
“当读者看到此处时,想必大多数人都会觉得意犹未尽,同时也盼望着尽早看完本书后能够大干一番,虽然本操作系统的主体内容已经结束,但考虑到许多初学者会在调试阶段反复反汇编system文件去查找问题,为了让异常信息便于观察和理解,本节特意为读者映入内核栈反向跟踪技术,此技术可在内核触发异常时打印出内核层的调用过程”这句话包含了作者对读者的寄语,希望读者读完这本书后能够大有作为,大干一番。
5个人喜欢的部分:本人喜欢的部分是初级篇的三个单元,比较基础,比较入门,好理解,是下一部分高级篇的根基,所以比较重视这几个章节的内容,打好基础后,学习后面的高级篇感觉就容易许多。 我最喜欢的一个句子就是“从这里开始你的旅程.......”,这个句子在这本书.介绍完目录后,独立开的一页,下一页就是第一章的对操作系统的概述,我认为学习这门操作系统就好比一场旅行,有明确的目标和路线后才能开始一个完好的旅行,才能真正的弄懂这门学问。
6.对本书的评价和观感(如是否值得向其他读者推介):我认为这本书很有价值,很值得向其他读者推介,首先,第一点就是,作者在行文撰写方面,在第一章介绍最基础的概念时,直接引入,一句“什么是操作系统”作为一个小篇章的标题,醒人耳目,列举操作系统的组成结构后,又有图文示意,再有分点作析,思路清晰明了,让一个刚接触的新手有很好的逻辑框架,易于理解,且更好的有助于日后的学习。再者,作者有着清晰的思路,在这本书的路线很明显,作者将这本书分为三部分,操作系统相关知识介绍及环境搭配、初级篇、高级篇,让读者有着更好的方向去学习,去探索。
7.读后感:(1)书中情节引起的联想 :学完这本书后让我联想到了以后操作系统的应用前景,意识到以后对软件工程这个专业的重要性,所以我更要认真努力加倍的潜心学习,查缺补漏,完善自我,在平日里不断地训练自己,达到十分熟练的地步,才能为以后的工作增添一份力。
(2) 书中内容引起的疑问:1.在初级篇中的第三章,从BOOT跳转到LOader程序,感觉有点吃力,不太好理解;2.在第五章实现一个系统调用的处理函数,不是很熟练,每次都要对照书本,不能很好地掌握。;3.在高级篇中的第九章比较难懂........。
(3) 本书令你有何提醒、启发及反思的部分:
提醒:在阅读这本书的时候,我个人认为首先要有一定的相关基础,掌握好第一二部分的知识,并且要非常的熟练,这样。到了后面的高级篇才不会感觉到困难,打好基础是根本。
启发:读完这本书我认为要更加努力的去学习探究领悟这方面的知识,不断地从挖掘和探索这领域的知识,开阔思域。
反思:在阅读过程中,特别是到了高级篇, 我渐渐的发现有点吃力,原因就是我的知识面不足,导致有些地方不好理解,还有就是我急于求成,前面看的太快了,导致我的基础不够扎实,以至于后面高级篇的时候 ,越发的难理解作者想表达的意思,所以我认为基础才是唯一的捷径,不能急于求成。
(4) 本书引起的思想上的改变:阅读完这本书后,我感觉仿佛打开了一个新世界的大门,在这里我要学习的东西还很多,需要探险的道路还很长,道阻且跻,长路漫漫,唯有保持初心,秉着一副渴望去求学的态度,一只谦虚的态度,多向老师教授们请教,才能多见识见识不一样的世界,在课余时间也要多在网上了解更多关于操作系统有关的内容知识,才能更好的巩固现有的知识,并且开阔我的视野,学无止境,可谓学到老活到老。
(5) 本书令你引发的期望:阅读完这本书后,我期望就是能够在大学生涯中了解更多的相关知识 ,不断地提升自我,完善自我, 拓宽我的知识面,开阔我的视野,能够独立的完成一个操作系统,在以后在步入社会有一番作为,能够很好地掌握这门技术,能干出一番事业。
8.从本书有何收获:阅读完这本书后,收益良多,能够在大学生涯中了解更多的相关知识 ,拓宽我的知识面,开阔我的视野,领略到了一番风景。
9.引用本书或其他书籍的内容,或日常用语:“从这里开始你的旅程.......”,这个句子在这本书.介绍完目录后,独立开的一页,下一页就是第一章的对操作系统的概述,很有深意,让人感觉在一个书海中遨游,从开始的概述,到初级篇,然后深化到高级篇,无一不是一场旅行啊!
《一个64位操作系统的设计与实现》读后感(五):读书报告
读书报告
书籍:《一个64位操作系统的设计与实现》
作者:田宇
内容概要:本书讲述了一个64位操作系统的自制过程。
自己对于操作系统的了解并不多,所以知道的书籍也不多,索性就到新华书店借了几本有关操作系统的书籍,由于对这些书籍并不了解,不知道哪个更适合初学者,所以我又问了一些从事操作系统开发方面的师兄,最后选择了这本《一个64位操作系统设计与实现》,要做短时间内看完这本书并不容易,但我还是耐心地看完了,但是感觉自己仅仅是看到了文字的表面意思,并没有挖掘出内容的深层含义,所以我打算在开课之后,结合老师所讲的内容知识,再回看这本书,仔细品味其中的奥秘。
这本书的内容非常的全面地讲述了一个64位多核操作系统的自制过程。这本书不是那种仅仅围绕代码,靠代码堆砌起来的书,也不是那种全是专业名词,让人觉得摸不着头脑,索然无味的书。这本书采用循序渐进,由浅到深的讲述方法,一开始是教你如何搭建环境,然后才是介绍基础知识。第一部分书中先介绍了操作系统的基本概念,介绍一些硬件方面的知识然后介绍了操作系统的开发语言,并且选择汇编语言来编写boot,对于这部分的内容介绍得非常的详细,通俗易懂,对于刚刚踏入学习操作系统门槛的初学者来说,这样的介绍更容易让初学者接受。第二部分讲述的是内核部分,内核是操作系统的重要组成部分,在这部分中,作者并没有把中心放在代码上,因为内核部分的代码冗长,如果仅仅是看代码,非常的索然无味,能够结合文字的讲述,学习,就会更加轻松,更容易接受。第三部分,讲的是应用层,这部分里作者的介绍比较简单,并没有将这部分用大量的篇幅去讲述,而是边介绍,边讲述,再一边留下问题,让读者在后面的学习中去思考前面的问题,这种讲述模式非常好,既可以让读者更深层次地学习后面的知识,又能在学习后面知识的同时能回顾前面的知识,不会出现一般学习者那种边学边忘的情况。
对后面的章节内容我就不一一赘述了,这本书的优点在于,无论是从事IT行业的专业人员还是在校学生或者是对计算机有兴趣的初学者,多少都会对操作系统有所涉猎,都渴望学习有关操作系统的知识,可是操作系统对于只接触过编程语言的我们来说,学习门槛太高,这一本书的讲解就非常的适合我们,既有代码部分,又能用简单易懂的语言来解释这些代码,不至于让我们的学习枯燥无味,它能让你的整个学习过程中有目标,而不是漫无目的,对于这本书,我并不能将他的所有细枝末节都讲出来,但我大概了解了这本书所讲的内容,知道操作系统到底是什么,这样在我后面上课的时候,能够更轻松地学习,效率肯定能更高,这是一本需要你我反复去啃食推敲的书,绝不是你能一两遍就搞得懂,需要你一遍遍的去翻阅思考。
我们作为软件行业的从业人员,我们不能只注重软件的开发,更应该注重操作系统的学习,因为我觉得软件开发与操作系统的开发应该是叶跟根的关系,我们不能跟普通人一样只满足于对各种界面的单纯的点击使用,我们应该要去剖析其背后的原理,应该去学习操作系统的实现,有了这本书的指引,我们可以更好的学习操作系统,在学习过程中能少犯错。
在书中,作者介绍了很多深层次的知识,但是作者也仅用了简单的汇编语言和C语言,就将这些复杂的知识写得那么易懂,可见作者的高水平。在书中有各部分内容的源代码,我们应该更多的在电脑上敲下这些代码,对于我们学习者来说,大量的练习肯定是必不可少的,最好我们可以自己写出来,这样我们才是真正的学到了知识,而不是只会模仿,只会借鉴前人。
读书笔记
1.何为操作系统?
操作系统的目的是为了方便人们对硬件的使用和交互。
(这里并没有直接给出操作系统的概念,经查阅资料得知,操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。)
操作系统的组成:操作系统由内核层和应用层组成。
内核层:引导启动,内存管理,异常/中断处理,进程管理,设备驱动,文件系统等。
应用层:系统API库,应用程序
由此我对操作系统有了概念性的了解。
2.编写操作系统需要具备一定的硬件和软件的知识
其中硬件方面的核心是CPU。
CPU作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU是计算机中负责读取指令,对指令译码并执行指令的核心部件。中央处理器主要包括两个部分,控制器、运算器,其中还包括高速缓存存储器及实现它们之间联系的数据、控制的总线。电子计算机三大核心部件就是CPU、内部存储器、输入/输出设备。中央处理器的功效主要为处理指令、执行操作、控制时间、处理数据。在计算机体系结构中,CPU 是对计算机的所有硬件资源(如存储器、输入输出单元) 进行控制调配、执行通用运算的核心硬件单元。CPU 是计算机的运算和控制核心。计算机系统中所有软件层的操作,最终都将通过指令集映射为CPU的操作。(书上未具体解释硬件,由查阅资料得到。)
软件方便大致就是汇编语言和C语言 GUN C内嵌汇编语言。
操作系统的开发
开发操作系统主要使用C语言和汇编语言 GUN C内嵌汇编语言。Linux操作系统已经成为开发环境的首选。
开源的轻量级虚拟机为Bochs,其最大的有点是在虚拟平台运行时可以通过命令直接对其进行调试。
在这部分里我了解了操作系统的开发所需要的工具和条件。
ootLoader引导程序(又分为Boot引导程序和Loader引导程序)
oot引导程序
所有操作系统都有boot引导程序开始,boot引导程序仅能作为以及助推器。主要功能是开机启动和加载Loader程序。
Loader引导程序
Loader引导程序用于完成配置硬件工作环境,引导加载内核等。
创建虚拟软盘镜像文件
软盘镜像的概念书上没有给出,由查阅资料得
计算机里CDROM和软盘;ISO是镜像,要用硬盘安装,就刻录成CD光盘;要软盘安装,就要刻录成软盘。
内核层
Loader引导加载程序的任务已经完成任务后,其占用的空间便可以释放掉。处理器把控制权移交给Kernel内核程序,其优先执行内核头程序。所谓的内核执行头程序就是,其实就是内核程序中的一小段汇编代码。
如何把内核执行头程序编译生成到整个内核程序文件的起始处?
我们必须手动编写内核程序的链接脚本。
内核主程序:
内核主程或称为内核主函数,相当于应用程序的主函数,它和应用程序的主函数不同的是,内核主函数在一般情况下是不会返回的。
内核主程序负责调用各个系统模块的初始化函数,在模块结束时,它将控制权交给init进程。
屏幕显示:
在屏幕上显示颜色,必须有帧缓冲存储器。
帧缓冲存储器:简称帧缓存或显存,它是屏幕所显示画面的一个直接映象,又称为位映射图(Bit Map)或光栅。帧缓存的每一存储单元对应屏幕上的一个像素,整个帧缓存对应一帧图像。是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。帧缓存可以在系统存储器(内存)的任意位置,视频控制器通过访问帧缓存来刷新屏幕。 帧缓存也叫刷新缓存 Frame buffer 或 refresh buffer, 这里的帧(frame)是指整个屏幕范围。
帧缓存有个地址,是在内存里。我们通过不停的向frame buffer中写入数据, 显示控制器就自动的从frame buffer中取数据并显示出来。全部的图形都共享内存中同一个帧缓存。帧缓冲驱动的应用广泛,在linux的桌面系统中,Xwindow服务器就是利用帧缓冲进行窗口的绘制。尤其是通过帧缓冲可显示汉字点阵,成为Linux汉化的唯一可行方案。
一个支持OpenGL渲染的窗口 (即帧缓存) 可能包含以下的组合:
· 至多4个颜色缓存
· 一个深度缓存
· 一个模板缓存
· 一个积累缓存
· 一个多重采样缓存(查阅资料得)
系统异常:
处理器运行时,由于执行某条指令,访问内存空间或越权访问等问题,导致程序无法正常运行,此时处理器会停止执行程序而去解决问题,这些问题称为异常。异常有的可以解决恢复,有的不能解决恢复。
异常可以分为三大类:错误,陷阱,终止。
终止异常后,程序不能恢复,无法继续执行。
错误异常和陷阱异常可以当场恢复继续执行,它们的区别是错误异常是重新开始执行,而陷阱异常是直接跳过那个异常继续执行。
内存管理单元通常应用在桌面型计算机或者服务器,通过虚拟存储器使得计算机可以使用比实际的物理内存更多的存储空间。同时,内存管理单元还对实际的物理内存进行分割和保护,使得每个软件任务只能访问其分配到的内存空间。如果某个任务试图访问其他任务的内存空间,内存管理单元将自动产生异常,保护其他任务的程序和数据不受破坏。右图显示了一个典型的使用内存管理单元为多个任务划分的内存映射图。
中断处理:
中断处理的发起是由外部硬件设备提出的,并且由此向处理器发出请求信号。
ICW寄存器组:包括ICW1寄存器、ICW2寄存器、ICW3寄存器、ICW4寄存器。
OCW寄存器组:包括OCW1寄存器、OCW2寄存器、OCW3寄存器。
OCW1是中断屏蔽寄存器,OCW2是8位寄存器,OCW3是8位寄存器。
书中对init进程的概念模糊,经过查阅资料有了更深的了解。
描述init进程,它是内核启动的第一个用户级进程。init有许多很重要的任务,比如像启动getty(用于用户登录)、实现运行级别、以及处理孤立进程。对于Linux系统的运行来说,init程序是最基本的程序之一。但你仍可以大部分的忽略它。一个好的Linux发行版本通常随带有一个init的配置,这个配置适合于绝大多数系统的工作,在这样一些系统上不需要对init做任何事。通常,只有你在碰到诸如串行终端挂住了、拨入(不是拨出)调制调节剂、或者你希望改变缺省的运行级别时你才需要关心init。
当内核启动了自己之后(已被装入内存、已经开始运行、已经初始化了所有的设备驱动程序和数据结构等等),通过启动用户级程序init来完成引导进程的内核部分。因此,init总是第一个进程(它的进程号总是1)。
内核在几个位置上来查寻init,这几个位置以前常用来放置init,但是init的最适当的位置(在Linux系统上)是/sbin/init。如果内核没有找到init,它就会试着运行/bin/sh,如果还是失败了,那么系统的启动就宣告失败了。
当init开始运行,它通过执行一些管理任务来结束引导进程,例如检查文件系统、清理/tmp、启动各种服务以及为每个终端和虚拟控制台启动getty,在这些地方用户将登录系统。
应用层
应用层是七层OSI模型的第七层。应用层直接和应用程序接口并提供常见的网络应用服务。应用层也向表示层发出请求。
应用层是开放系统的最高层,是直接为应用进程提供服务的。其作用是在实现多个系统应用进程相互通信的同时,完成一系列业务处理所需的服务.其服务元素分为两类:公共应用服务元素CASE和特定应用服务元素SASE.
CASE提供最基本的服务,它成为应用层中任何用户和任何服务元素的用户,主要为应用进程通讯,分布系统实现提供基本的控制机制;特定服务SASE则要满足一些特定服务,如文卷传送,访问管理,作业传送,银行事务,订单输入等。这些将涉及到虚拟终端,作业传送与操作,文卷传送及访问管理,远程数据库访问,图形核心系统,开放系统互联管理等等。
处理器体系结构
处理器体系结构Intel处理器体系大体上可以分为IA-32体系结构和IA-32e体系结构。
32位处理器采用的是IA-32体系结构,64位处理器采用的是IA-32e体系结构。
64位运行模式:
实模式,保护模式,系统管理模式,虚拟8086模式,IA-32e模式(长模式)。
通用寄存器:只有通过寄存器才能执行算术和逻辑运算,寻址操作及内存访问等功能。
某些指令的执行一般要依赖某些特定的寄存器。
寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。寄存器是中央处理器内的组成部分。寄存器是有限存储容量的高速存储部件,它们可用来暂存指令、数据和位址。
在计算机领域,寄存器是CPU内部的元件,包括通用寄存器、专用寄存器和控制寄存器。寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。(经查阅资料获得)
标志寄存器EFLAGS:
含有状态标志位,控制标志位,系统标志位。
处理器在初始化时将标志寄存器EFLAGS赋值00000002h。
状态标志:可反应出汇编指令计算结果的状态,计算结果的奇偶性,溢出状态,正负值等皆可通过状态标志表示出来。
Intel处理器共拥有6个控制寄存器(CR0,CR1,CR2,CR3,CR4,CR8),其由若干个标志位组成,控制住处理器的运行模式,开启扩展特性,记录异常状态等功能。
MSR寄存器组:有性能检测,运行轨迹跟踪与调试等功能。
地址空间的概念:
地址空间分为虚拟地址空间和物理地址空间两大类。
虚拟地址空间包括了逻辑地址,线性地址,有效地址等。
物理地址空间:放在寻址总线上的地址。放在寻址总线上,如果是读,电路根据这个地址每位的值就将相应地址的物理内存中的数据放到数据总线中传输。如果是写,电路根据这个地址每位的值就将相应地址的物理内存中放入数据总线上的内容。物理内存是以字节(8位)为单位编址的。(书上并未给出,由查阅资料所得)
虚拟地址:即为抽象地址,一般不能转化成物理地址。
物理地址:真实存在于硬件设备上的地址(包括i/o地址,内存地址)