zoukankan      html  css  js  c++  java
  • Windows系统架构

    操作系统模型

     

    大多数操作系统中,都会把应用程序和内核代码分离运行在不同的模式下。内核模式访问系统数据和硬件,应用程序运行在没有特权的模式下(用户模式),只能使用有限的API,且不能直接访问硬件。当用户模式调用系统服务时,CPU执行一个特殊的指令以切换到内核模式,当系统服务调用完成时,操作系统切换回用户模式。

    Windows与大多数UNIX系统类似,驱动程序代码共享内核模式的内存空间,意味着任何系统组件或驱动程序都可能访问其他系统组件的数据。但是,Windows实现了一套内核保护机制,比如PatchGuard和内核模式代码签名。

    内核模式的组件虽然共享系统资源,但也不会互相访问,而是通过传参数的方式来访问或修改数据结构。大多数系统代码用C写的是为了保证可移植性,C语言不是面向对象的语言结构,比如动态类型绑定,多态函数,类型继承等。但是,基于C的实现借鉴了面向对象的概念,但并不依赖面向对象。


    系统架构

    下图是简化版的Windows系统架构实现:



    首先注意那条横线将用户模式和内核模式分开两部分了。横线之上是用户模式的进程,下面是内核模式的系统服务。

    这4种用户模式下的进程分别是:

    • Fixed系统支持进程,比如登陆进程和Session管理器,它们都不是Windows服务(不是通过SCM即服务控制管理器启动的)。
    • 服务进程,比如任务调度器和打印机服务,这些服务一般都需要用户登陆才可以运行。很多服务应用程序,比如sql server和exchange server都以服务的方式运行。
    • 用户程序,可以是Windows32位或64位,Windows3.1 16位,MS-DOS 16位,或者POSIX 32位或64位,注意16位程序只能运行在32位系统上。
    • 环境子系统服务器进程,实现了部分支持操作系统的环境,也可以说是展现给用户或者开发者的个性化界面。Windows NT最初发布时带有Windows,POSIX,OS/2三个子系统,Windows 2000是最后带有POSIX和OS/2的子系统,旗舰版和企业版的Windows也支持一个加强版的POSIX子系统,叫做SUA(基于UNIX的应用)。

    注意:服务进程和用户程序之下的“子系统DLL”。在Windows下,用户程序不直接调用本地Windows服务,而是通过子系统DLL来调用。子系统DLL的角色是将文档化的函数翻译成该用的非文档化的系统服务(未公开的)。

    内核模式的几个组件包括:

    • Windows执行实体,包括基础系统服务,比如内存管理器,进程和线程管理器,安全管理,I/O管理,网络,进程间通信。
    • Windows内核,包括底层系统函数,比如线程调度,中断,异常分发,多核同步。也提供了一些routine和实现高层结构的基础对象。
    • 设备驱动,包括硬件设备驱动(翻译用户I/O到硬件I/O),软件驱动(例如文件和网络驱动)。
    • 硬件抽象层,独立于内核的一层代码,将设备驱动与平台的差异性分离开。
    • 窗口和图形系统,实现了GUI函数,处理用户接口和绘图。

    下表中是Windoows系统核心组件的文件名:

    文件名 组件
    Ntoskrnl.exe 执行体和内核
    Ntkrnlpa.exe(32位才有) 支持PAE
    Hal.dll 硬件抽象层
    Win32k.sys 子系统的内核模式部分
    Ntdll.dll 内部函数
    Kernal32.dll,Advapi32.dll,User32.dll,Gdi32.dll 核心子系统的组件
  • 相关阅读:
    正则表达式学习(转自csdn过客)
    javascript学习笔记(二)--继承
    sql 中print 输出变量值
    禅语摘录
    dTree的分析和二次开发,ajax加载dtree节点(下)(转)
    UpdatePanel的各种情况
    Cocos2dx制作帧动画
    Cocos2dx中文显示乱码
    Struts2 过滤器与拦截器
    创业不是纸上谈兵,把你的商业计划扔进垃圾桶吧
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3159695.html
Copyright © 2011-2022 走看看