关闭

操作系统学习常见疑惑问与答[接口规范部分]

发表于:2010-11-02 10:36

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  大三的时候已经学过了《操作系统原理》这门课,虽然学习过程中做过一些实验,但对操作系统的认识仍然停留在理论的层面上,对于如何才能编程实现一个真正的操作系统缺乏可操作的方案,于是有了我现在进行的学习计划。按照计划,近期我读了一些有关操作系统编写的书籍,也参考了网上很多的文章,接触了不少国内这方面的论坛,总算对编写操作系统有了一个大概的认识。在这期间,我曾经被许多小的问题困扰过,并且我认为许多初学操作系统的同学也会跟我一样有相同的困惑,所以我将自己找到的答案和心得以问答的形式记录在此,希望能给后来者提供参考,同时也当作自己的学习备忘。

  学习还在继续,问题也在不断增加,所以我会不断丰富问答的内容。其中部分回答摘自网上的文章,我会注明,而大部分回答则是我自己的见解。如果大家读后认为回答有不对或理解偏差的地方,还请留言指正。

  需要说明的是我这里讨论的操作系统是指基于IA构架80386以上CPU的操作系统,并不包括其他计算机构架之上的操作系统或嵌入式操作系统。

  1、问:操作系统如何能够开始控制一台计算机,操作系统的起点是什么?

  答:操作系统的“开端”一般被认为是引导程序(Boot),它是操作系统程序中最早被计算机硬件系统加载入内存并执行的部分,引导程序一般规定长度为512个字节,就是从这512字节开始,操作系统被一步步装载入计算机内存,进而最终控制整台计算机。那么引导程序是如何被找到并加载入计算机内存的呢?这里涉及到硬件厂商和软件厂商的协调。协调的结果如下:当计算机加电启后,首先转去执行BIOS中的程序进行硬件自检,如果自检成功,则开始尝试在可引导介质中依次寻找引导程序,可引导介质就是我们计算机的软盘驱动器,光盘驱动器以及硬盘等存储设备,搜索的顺序是按照BIOS里设置的引导顺序进行的。

  对于软盘来说,计算机会检查软盘的0面0磁道0扇区(被称为boot sector引导扇区),由于每个扇区512字节,因此刚好容纳下引导程序。如果该扇区最后两个字节依次是55H和AAH,那么就表明该扇区存储的是一段引导程序,进而由BIOS程序将这512个字节依次复制到0X7C00开始的内存单元,然后计算机会跳转到地址0X7C00处执行。至此,计算机真正开始执行我们自己编写的代码了。因为512字节很少,无法利用它做一些复杂的事,所以通常将这512字节的代码用来从存储器载入另一个程序,这个程序不受512字节的限制,因此可以用它来做一些载入系统内核,初始化操作系统的工作,通常这个程序被称为loader。

  与此相类似,硬盘Boot Sector也就是硬盘的第一个扇区,它由MBR(Master Boot Record), DPT(Disk Partition Table) 和 Boot Record ID三部分组成。 MBR又称为主引导记录,占用Boot Sector的前446个字节(0~0x1BD),存放系统主引导程序(它负责从活动分区中装载并且运行系统引导程)。 DPT即主分区表占用64个字节(0x1BE~0x1FD),记录磁盘的基本分区信息。主分区表分为四个分区项,每项16个字节,分别记录每个主分区的信息(因此最多可以有四个主分区)。 Boot Record ID即引导区标记占用两个字节(0x1FE~0x1FF),对于合法引导区,它等于0xaa55,这是判别引导区是否合法的标志),合法引导区将会被计算机加载到0x7c00处,并执行之。

  由此可见,引导程序有以下特点:软盘中的引导程序应该少于510字节(除去引导标志0x55aa的两个字节),事实上有些时候会更少,因为某些文件系统需要在引导扇区添加若干信息,将占去一些字节;硬盘上的引导程序应少于446字节;引导程序有最大字节限制,但没有最小字节限制,引导程序和其他数据(如ox55aa标志,硬盘分区表等数据)加起来不足512字节的空间需要用数据填充,但应保证程序不会执行到这些数据。

  光盘或USB盘的启动过程没有研究过,希望有研究的朋友指点^_^.

  2、问:显卡有自己的显存,内存ram中也有一块叫显存,比如A0000开始的那一段,我想问一下这两个显存是一码事吗?

  答:要弄清楚这个问题,首先要知道什么是地址映射,为什么平时我们说内存地址空间,而不是说内存空间。因为实模式下,20根地址线,最多可以寻址1M内存,也就是我们有1M的地址资源,这1M的地址我们除了用来寻址物理内存外,还要用它来寻址访问bios rom,还有各种外设的rom(因为计算机体系中并没有提供其他的手段来访问这些rom).这样,1M的地址并不是所有都对应到了物理内存上,有的地址对应到了BIOS的rom,有的则对应到了显卡的显存里。比如A0000开始的一段地址范围被用来寻址图形模式的显存,而B8000开始的一段地址范围用来寻址字符模式的显存。当你用这些范围的地址进行读写“内存”的时候,实际上并没有访问到物理内存,而是被定位到显卡的显存上去了,也就是说在当前这种状况下,这些地址对应的物理内存单元就没用了,因为访问被重定向了,所以永远不可能被访问到。由此也解释了为什么要用“地址空间”这个术语,而不是用内存空间,在这里,我们能用连续的地址,但这些地址并不是都到物理内存上去寻址,而是被各个外设的rom和物理内存瓜分了。所以问题中“内存ram中也有一块叫显存”本身就是错误的说法,这个时候的地址已经不对应着内存了。以下附上PC系统启动时的地址映射安排:

  3、DPL,RPL,CPL 之间的联系和区别是什么?RPL和CPL是必须相同吗?如果相同,为什么要釆用两个而不改用一个呢?

  答:特权级是保护模式下一个重要的概念,CPL,RPL和DPL是其中的核心概念,查阅资料无数,总结如下:

  简单解释:

  CPL是当前进程的权限级别(Current Privilege Level),是当前正在执行的代码所在的段的特权级,存在于cs寄存器的低两位。

  RPL说明的是进程对段访问的请求权限(Request Privilege Level),是对于段选择子而言的,每个段选择子有自己的RPL,它说明的是进程对段访问的请求权限,有点像函数参数。而且RPL对每个段来说不是固定的,两次访问同一段时的RPL可以不同。RPL可能会削弱CPL的作用,例如当前CPL=0的进程要访问一个数据段,它把段选择符中的RPL设为3,这样虽然它对该段仍然只有特权为3的访问权限。

41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号