zoukankan      html  css  js  c++  java
  • 操作系统学习笔记二 操作系统结构

    POSIX

    Portable Operating System Interface 可移植操作系统接口。X表明其对Unix API的传承。Linux逐步地基本实现了这一接口;WINDOWS NT部分地实现。


    系统调用

    用户应用程序调用系统调用接口的API(应用程序接口),系统调用接口截获这个请求,并调用操作系统中相应的系统调用。对于用户应用程序来说,不需要知道这里面的细节,只关心操作结果。


    文件

    文件是一个逻辑概念,属于虚拟设备。想想也是哈


    操作系统开发语言

    Linux、Windows XP主要用C编写,少数设备驱动、寄存器操作用汇编,而不是完全使用汇编。

    理由:

    1)开发速度快,代码更紧凑,并易于理解和调试

    2)应用最新的编译技术,重新编译,可以立刻改进既有的产品

    3)更易于移植

    4)与汇编相比,可能执行速度会慢一点,增加了存储要求,但在今天,这些都不是问题。并且现代编译技术可以生成优良的代码,在处理复杂性方面,比汇编高手人工写出来的东西效果更佳

    5)性能的关键在于数据结构和算法,而不是执行速度更快的汇编代码

    6)用高级语言编写出可运行的操作系统以后,可以找出高性能最关键的部分,再用汇编改写

    操作系统结构

    1)简单结构

    没有明确、仔细的定义结构和功能划分,不良后果就是系统容易崩溃,或者难以扩展和增强。比如MS-DOS和早期的Unix。

    一方面,是因为这些操作系统最初比较简单,功能有限,后来慢慢扩充,功能越来越多,超出了原有的范围;另一方面,也受限于当时的硬件水平。


    2)分层

    将操作系统分成若干层,最底层为硬件,最高层为用户接口。每层只能利用较低层的功能和服务。

    优点在于易于构造和调试;

    难点在于如何分层,如何对每一层进行定义,还有层的顺序。

    缺点是命令层层传递,效率稍差。


    3)微内核
    将所有非基本部分从内核中移走,并将它们实现为系统程序或用户程序,这样得到了一个更小的内核。通常,一个微内核包括最小的进程和内存管理、通信功能。

    微内核的主要功能是为客户程序、服务程序之间提供通信。客户程序与服务程序不直接交互,通过微内核进行消息传递。天哪,这不就是中介者模式吗?

    优点是便于扩充。想增加什么,增加服务程序就可以了,无须更改内核。即使要改内核,改动也不大,因为它很小。另外,服务程序之间区隔得很好,一个有问题,不会影响其他。

    缺点是系统功能开销增加(依赖微内核进行通信?),性能有所下降。


    4)模块

    并不将非基本部分抽走,而是对整个内核进行模块划分,变成一种类似太阳系模式:几个可加载的内核模块围绕着一个核心内核。

    注意可加载三个字,意味著可以动态管理;这个管理由核心内核负责。

    同时模块间可以互相调用,无须通过核心内核模块进行通信。

    虚拟机

    单个计算机的硬件抽象为不同的执行部件,使得每个独立的执行环境仿佛在自己的计算机上运行一样。

    虚拟机有着与硬件相同的接口,除此二外,并没有提供额外的功能。

    虚拟机实现有一定难度。因为宿主操作系统有两种模式:用户模式和内核模式,而虚拟机也必须有这两种模式,称为虚拟用户模式和虚拟内核模式。在宿主操作系统上引起从用户模式到内核模式的转换,那么在虚拟机上也要有相应的转换。

    虚拟机软件(提供虚拟机服务的软件)本身运行在宿主操作系统的内核模式,而虚拟机运行在用户模式。

    相应的实例有

    vmWare

    java的JVM

    .NET的CLR

    其中CLR是一种机制,先将.NET源代码编译成中间语言,运行时再结合具体机器编译成本地代码。我觉得这不是一般意义上的虚拟机,因为并没有那种像是运行在自己机器上的幻觉,而是真的运行在自己机器上,只不过运行前在本地编译了而已。

    JVM也有类似的一种机制,可以编译成JIT。但JVM也可以是一般意义上的那种虚拟机。

    系统启动

    开机以后,如何装入操作系统?机器怎么知道操作系统的入口在哪里?

    绝大多数计算机系统都有一小块代码,称为引导程序,可以定位操作系统内核,将它装入内存,从而开始执行。

    如PC,一个简单的引导程序(应该是放在BIOS里)从磁盘上调入一个较复杂的引导程序,再由这个复杂引导程序装入操作系统内核。

    引导程序需要完成一系列工作。通常,要先自检,自检硬件吧,自检通过,再能往下执行。系统所有部分都初始化,从CPU寄存器到设备控制器,以及内存。最后,操作系统得以启动。


  • 相关阅读:
    easyui的datagrid右侧没有边框线
    移除input在type="number"时的上下箭头
    端口被占用的解决办法
    给DOM操作生成的元素添加事件
    前端工具——Gulp篇
    python类型学习
    python对象学习
    Python之系统交互(subprocess)
    如何准确高效的获取数据库新插入数据的主键id
    接口和抽象类有什么区别
  • 原文地址:https://www.cnblogs.com/leftfist/p/4257819.html
Copyright © 2011-2022 走看看