操作系统模型

 

大多数操作系统中,都会把应用程序和内核代码分离运行在不同的模式下。内核模式访问系统数据和硬件,应用程序运行在没有特权的模式下(用户模式),只能使用有限的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 核心子系统的组件

Windows系统架构的更多相关文章

  1. Windows Internals学习笔记(二)系统架构

    参考资料: 1. <Windows Internals> 2. http://bestcbooks.com 3. Windows Drive Kit 4. Microsoft Window ...

  2. [网站性能1]对.net系统架构改造的一点经验和教训

    文章来源:http://www.admin10000.com/document/2111.html 在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方案,这不仅仅是因为 ...

  3. Windows系统上的.Net版本和.NETFramework的C#版本

    前言 注:本文内容摘自维基百科,用于在墙内时当作笔记看. WinForm 需要.Net最低版本 2.0 WPF需要的.Net最低版本 3.0 (Win7及之上版本自带) C#版本 版本 语言规格 日期 ...

  4. 深度剖析Linux与Windows系统的区别

    当我们每个人接触Linux之前,应该先接触的都是windows吧?但我们一般接触Linux后,习惯linux的管理和使用方法后,我们再回过头再来使用windows的时候,内心其实是拒绝的.我们会觉得图 ...

  5. 性能测试知多少---系统架构分析 转自https://yq.aliyun.com/articles/35147?spm=5176.100239.blogcont24251.8.lS96At

    摘要: 有些事儿一旦放一放就难再拾起来,突然发现<性能测试知多少>这个系列两月没更新,关键时我都不知道啥时候放下的,总容易被各种技术所吸引走,如饥似渴的想学更多的东西,这几天一直有朋友问我 ...

  6. PHP高并发高负载系统架构

    PHP高并发高负载系统架构 1.为什么要进行高并发和高负载的研究 1.1.产品发展的需要 1.2.公司发展的需要 1.3.当前形式决定的 2.高并发和高负载的约束条件 2.1.硬件 2.2.部署 2. ...

  7. 深度剖析Linux与Windows系统的区别,新手必读!

    当我们每个人接触Linux之前,应该先接触的都是windows吧?但我们一般接触Linux后,习惯linux的管理和使用方法后,我们再回过头再来使用windows的时候,内心其实是拒绝的.我们会觉得图 ...

  8. WINDOWS系统Eclipse+NDK+Android + OpenCv

    WINDOWS系统Eclipse+NDK+Android + OpenCv 参考文档博客 1 NDK环境搭建 http://jingyan.baidu.com/article/5d6edee22d90 ...

  9. 2013-6-2 [转载自CSDN]如何入门Windows系统下驱动开发

    [序言]很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从事驱动开发时间不长也不短,大概 ...

随机推荐

  1. WebApiContrib

    https://github.com/WebApiContrib ASP.NET Web API and Protocol Buffers Protocol Buffers are a super e ...

  2. 在Installshield的安装进度中显示自己设置的信息

    原文:在Installshield的安装进度中显示自己设置的信息 以Installscript msi project为例,在installshield所制作的安装包安装过程中显示安装进度的,就在On ...

  3. Chrome控制台 JS调试

    Chrome控制台 JS调试的一些小技巧 $ $_命令返回最近一次表达式执行的结果,功能跟按向上的方向键再回车是一样的,但它可以做为一个变量使用在你接下来的表达式中. $0~$4则代表了最近5个你选择 ...

  4. windows安装MySQL

    1)双击MySQL安装文件mysql-essential-5.0.82-win32.msi.进入欢迎页面. 单击Nextbutton.进入到安装类型页面. 2)在安装类型页面中的第一项是典型安装,第二 ...

  5. JSON数据转换方法 parse()和stringify()

    将对象转换成JSON格式的文本数据 var str = JSON.stringify(data); 将对象转换成JSON对象的方法 var data = JSON.parse(str);

  6. 鼠标hover事件

    JS: // ========== // = 鼠标hover事件 = // ========== function showHide (btn,box) { $(btn).hover(function ...

  7. Asp.Net Identity 深度解析 之 注册登录的扩展

    关于权限每个系统都有自己的解决方案,今天我们来讨论一下微软的权限框架Asp.Net Identity ,介绍如下  http://www.asp.net/identity 这里不在赘余. 很多人认为 ...

  8. Cocos2d-x在Android在竖屏切换

    在Cocos2d-x在,屏幕类型的默认设置是横屏,当我们需要切换到肖像,能够在项目目录打开proj.android目录.找到AndroidManifest.xml文件,直接打开,然后就可以看到里面:s ...

  9. VS多平台开发

    Xamarin技术文档------VS多平台开发   此技术业余时间研究,仅供大家学习参考,不涉及深入研究,有一定开发基础的人员,应该都能较快上手. 一.简介 Xamarin始创于2011年,旨在使移 ...

  10. Windows平台分布式架构实践负载均衡

    Windows平台分布式架构实践 - 负载均衡 概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Li ...