操作系统基本知识(一)

计算机系统体系结构:

  1. 单处理器的计算机系统,它只有一个general purpose 的处理器,它有一个CPU来执行通用的指令集,    另外,里面也包括一些专用的控制器(处理器),比如控制硬盘、网卡、键盘的等,这些控制器通常由操作系统管理; 
  2. 多处理器的计算机系统,可以分为非对称型(asymmetric multiprocessing )与对称型(symmetric multiprocessing, SMP);  在非对称型的多处理器系统中,由其中一个处理器控制与监督其它的处理器工作; 在对称型的多处理器系统中,所有的处理器都是平等的。 对于多处理器计算机系统,通常每一个处理器都有自己的寄存器与缓存,所以的处理器都共享物理内存的; 
    另外,现代的CPU设计,通常在一个chip上设计多个计算单元,常称为多核处理器, 从2006年以后, 现在Intel 与AMD的CPU都本都是多核处理器了。
  3. 集群计算机系统

 

操作系统的相关操作:

  1. 通过双模或多模(dual-mode or multimode) 操作 来确定 可以区分系统(内核或特权)指令还是用户指令, 实现的方法是通过硬件增加一个mode 位来识别; 把一些危险的或特征重要的指令设为特权指令,这样用户就无法执行,确定操作系统的性;
  2. 使用一个timer 进行周期性的中断,来确保了操作系统可以一直掌控着CPU的控制权.  比如,万一个用户进入无限循环时,  通过这么一个中断可以把CPU的控制权交给操作系统;

 

操作系统结构:

  1. 什么是系统调用(system calls)?
    因为在用户状态是没有办法执行内核指令,怎么办??那就通过系统调用来完成吧。它是由操作系统内核提供的一些服务,包括:进程管理、文件操作、内存管理、通信等;
  2. 什么是API(application programming interface)?
    它是应用程序接口, 对于应用程序编程人员是可见的。  它其实是对 系统调用的封装,一个API可以对应一个系统调用,也可以包括多个system calls.  当编程人员使用需要使用内核功能时, 不需要直接调用系统调用,而是通过API来完成,API再去调用相应的systm calls。  为什么这么做??1. 为了程序的可移植性,API常常可以做到统一,而system call 的实现可以不不一样;2. 使用API比直接使用 system call 要简单的多。
    常用的三种API: windows系统的windows API; POSIX based 的系统(unix, linux, MAc OSX)的 POSIX API; JAVA虚拟机的 Java API;
  3. 什么是 system call interface?
    它就是系统调用接口, 它可以截获API中使用的系统函数调用, 然后system call interface 再调用实际的 内核函数完成任务;  system call interface 起到 在API与实际的核函数之间的link 作用;
  4. 操作系统的结构组成?
    1)简单的 monolithic 操作系统;整个内核里包括很多东西;性能高,但是维护、调试难。
    2) 分层的结构,实现简单;
    3)microkernel结构,把一些必要的功能加入内核,其它的都放入到用户态里去;
    4)模块化的结构: 一些必要的功能在内核,加入一些可以加载的其它模块(在内核态);
    5) hybrid system :杂交以上的;

 

操作系统的启动:  (讲启动过程 ,重点说了一下在加载硬盘上的 bootloader程序之前,电脑都干了哪些事, 具体到 bootloader程序, 不同的操作系统不一样吧)

了解一些背景知识:

1. CS:IP 两个寄存器指示了 CPU 当前将要读取的指令的地址,其中  CS  为代码段寄存器,而   IP  为指令指针寄存器 。

2. 1979年,Intel 推出了8088 CPU, 8088内部数据总线都是16位,外部数据总线是8位,可以寻址 1024 KB 的内存; 1981年8088芯片首次用于IBM PC机中,开创了全新的微机时代, 它运行的操作系统也是第一代的DOS系统。也正是从8088开始,PC机(个人电脑)的概念开始在全世界范围内发展起来。

3. PC机的设计师将8088CPU 可以寻址的 1M 中的低端640KB用作RAM,供DOS及应用程序使用, 这就是640K的基本内存; 高端的384KB常称作上位内存, 则保留给ROM、视频适配卡等系统使用。从此,这个界限便被确定了下来并且沿用至今。这384K中的的低128KB是显示缓冲区,高64KB是系统BIOS(基本输入/输出系统)空间,中间192KB空间用于其它留用,如下图所示。在微软的操作系统没有彻底脱离DOS的时候,即使你的电脑装有几兆或几十兆内存,但如果你使用以DOS为核心的操作系统,那么你也只有640K的内存可以直接使用,1M以上的内存要通过一些内存管理工具才能使用。从Windows 95开始,才不存在常规内存的限制了,所有的内存,不管是8M还是128M,都可以被直接使用。

image_thumb[5]

 

操作系统的启动过程: 

1. 当在我们刚刚接通电源的时候,整个系统由BIOS控制,电压还不太稳定,主板芯片组会向CPU发出reset的命令让CPU开始初始化,同时主板芯片组等待电源发出POWE GOOD命令,一旦电源发出POWER GOOD命令,主板芯片组就会撤出 reset 的命令, 此时,这时候,CS:IP 两个寄存器指向FFFF0H地址, CPU从 FFFF0H 地址开始执行寻址指令(这个地址是在BIOS内而不再内存里面),在这个地址中无论是AMI BIOS还是Award BIOS,在这个地址中都会存储一条跳转命令,直接跳转到系统BIOS中真正的启动代码处(这个代码一定在 F0000H至 FFFFFH之间的某个地方),BIOS的代码都是在BIOS芯片ROM中的,那个跳转命令也是在ROM中的。 

补充:为什么是 FFFF0H的位置加入跳转指令呢?

BIOS ROM芯片里面的程序是在计算机出厂的时候直接烧录在里面的,完成一些主机自检等操作,并提 供一些访问磁盘等基本输入输出服务,由于不同的计算机厂商生产的计算机所带的外设不一样,因此,这段程序大小也限机型的不同而不一样, 所以,不能把这个段代码的地址设置为从 00000H开始, 为了解决这个问题,8086规 定,CPU均从0xFFFF0处开始执行,而在0xFFFF0处,放一条无条件转移指令JMP,跳转到BIOS的代码处(这个都是厂商自己规定);

 

2. 运行BISO的代码,干什么事呢?POST自检!
主要的工作就是执行主机自检(POST),当BIOS检查到硬件正常后,按照 CMOS 中对启动设备的设置顺序检测可用的启动设备。BIOS将相应启动设备的第一个扇区(也就是MBR扇区)读入内存地址为0000:7C00H 处,并检查MBR的结束标志位是否等于55AAH(活动盘的标志),若不等于则转去尝试其他启动设备,如果没有启动设备满足要求则显示"NO ROM BASIC"然后死机。

补充:为什么是07C00H处呢?(http://blog.csdn.net/bkxiaoc/article/details/50380835

“0x7C00” 第一次出现是在 “IBM PC 5150” 的 BIOS 的 19号中断例程中。

IBM PC 5150 是现代 x86 PC 的鼻祖,为了保证向下兼容的原则,”0x7C00”得以保留。 19号中断例程 就是 “POST”(Power On Self Test) ,上电自检(包括检查是否存在驱动器),之后将启动盘的第一分区的第一扇区的 512b 数据拷贝到 0x7c00处。  0x7c00”是由 IBM PC 5150 BIOS开发团队决定(David Bradley博士)。

“0x7C00 = 32KiB - 1024B” 有什么特殊含义? 是为了解决系统和 CPU 内存分布的需求!!

BIOS 决定这个地址的理由如下:
  1. 32kb是符合(DOS)系统加载的最小空间
  2. 8086/8088 0x0 - 0x3ff用于BIOS的中断向量和BIOS数据区域。
  3. 引导扇区是512字节,boot 程序需要的数据/堆栈 大于 512 字节。
  4. 因此,0x7c00, 32KB 的最后 1024B 被选中了。

系统加电启动后,可以自由使用 0x7c00起始的, 32KB 的最后 1024B空间。

 

3. 这时候就需要磁盘第一扇区上的MBR代码了,linux与windows的代码不一定一样, 以linux 为例,说明:

具体参考:https://www.cnblogs.com/ronny/p/7787259.html, 写的很明白;

 

 

 

 

posted @ 2018-02-05 23:31  殷大侠  阅读(1941)  评论(0编辑  收藏  举报