Windows架构

Windows基本架构:主要分为R0-R3四个层级,其中R0(内核态)包括内存、进程、线程、I/O等管理,核心体,设备驱动程序,硬件抽象层(HAL);R3(用户态)包括NTDLL.DLL主要由服务进程、Win32应用程序以及win32子系统动态链接库构成。
用户模式进程有如下四种基本的模型:

  • 固定的系统支持进程,比如登录进程和会话管理器,它们并不是Windows服务;
  • 服务进程宿纳的是Windows服务,比如Task Sechedular和Print Spooer服务。Windows服务往往要求独立于用户登录而运行;
  • 用户应用程序;
  • 环境子系统服务器进程实现了操作系统环境的支持部分。这里所谓的环境是指操作系统展示或给用户或程序员的个性化服务;将基本的Windows执行系统服务的某个子集暴露给应用程序。
  • 其中应用程序和环境子系统通过一个或多个子系统动态链接库发起调用。将一个已文档化的函数转化为一些恰当的内部原生系统服务调用。

Windows子系统组件构成:

  • 对于每个会话,环境子系统进程(csrss.exe)有一个实例加载三个DLL(Basesrv.dll、Winsrv.dll和csrsrv.dll),它们包含下列支持:

    • 创建或删除进程和线程;
    • 对16位DOS虚拟机(VDM)进程的部分支持;
    • SxS/Fusion和清单文件支持;
    • 其他函数,如GetTemplateFile
  • 内核模式设备驱动程序(Win32k.sys)包含下列支持:

    • 窗口管理器,它控制窗口显示,管理屏幕输出,采集来自键盘、鼠标和其他设备的支持,同时也负责将用户消息传递给应用程序;
    • 图形设备接口,它是专门针对图形输出设备的函数库,其中包括线段、文本和图形的绘制函数,以及图形控制函数。
    • DirectX功能的包装函数,Windows对DirectX的支持是在另一个内核驱动程序(Dxgkrnl.sys)中实现的。
  • 控制台宿主进程(Conhost.exe),提供了对控制台应用程序的支持。

  • 子系统DLL(Kernel32.dll、Advapi.dll、User32.dll和Gdi.dll)将已经文档化的Windows API函数,转译成Ntoskrnl.exe和Win32k.sys中恰当的且绝大部分未文档化的内核模式系统服务调用;

  • 图形设备驱动程序,与硬件相关的图形显示器驱动程序、打印机驱动程序和视频微端口驱动程序
    某应用程序调用某个子系统DLL的某个函数时,可能发生下述三件事情之一:

  • 该函数完全是在该子系统DLL中实现的,在用户模式下运行。即该函数并没有给环境子系统进程发送消息,也没有调用Windows执行体系服务,如GetCurrentProcess;

  • 该函数要求调用执行体一次或者多次,如ReadFile函数;

  • 该函数要求在环境子系统进程中完成某些工作。

子系统是由会话管理器(smss.exe)进程启动的

windows内核模式组件包含:

  • Windows执行体包含了基本的操作系统服务,比如内存管理、进程和线程管理、安全性,I/O、网络和跨进程通信;

  • Windows内核是由一组低层次的操作系统功能构成的,比如线程调度、中断和异常分发,多处理器同步。提供了一组例程和基本对象,执行体的其余部分利用这些例程和对象实现更高层次的功能;

  • 设备驱动程序既包括硬件设备驱动程序,也包括像文件系统和网络驱动程序之类的非硬件设备驱动程序。其中硬件设备驱动程序将用户的I/O函数调用转换成特定的硬件设备I/O请求。

  • 硬件抽象层是指一层特殊的的代码,它把内核、设备驱动程序和Windows执行体的其余部分,跟与平台相关的硬件差异隔离起来。

  • 窗口和图形系统实现了图形用户界面功能
    进程:相当于一个容器,包含了执行程序的特定实例时所用到的各种资源。从抽象的程度来看,进程由以下部分组成.

  • 私有的虚拟地址空间。可执行的程序,它定义了初始的代码;

  • 可执行的程序,它定义了初始的代码和数据,并且被映射到该进程的虚拟地址空间中;

  • 已打开句柄的列表,这些句柄指向各种系统资源,该进程内所有的线程都可以访问这些系统资源;

  • 被称为访问令牌的安全环境,它标识了与该进程关联的用户、安全组、特权、uac虚拟化状态、会话,以及有限的用户账户状态;

  • 被称为进程ID的唯一标识;

  • 至少执行一个线程。

线程使进程内的一个实体,也是Windows执行进程时的调度实体。线程包括以下一些部件:

  • 一组代表处理器状态的CPU寄存器中的内容;
  • 两个栈-一个用于线程在内核模式下执行时,另一个用于线程在用户模式下执行时;
  • 一个被称为线程局部存储(tls)的私有存储区域,各个子系统、运行库和DLL都会用到该存储区域;
  • 一个被称为线程ID的唯一标识符;
    -有时候线程也有它们自己的安全环境或者令牌,多线程服务器应用程序要模仿其客户的安全环境时,常常会使用线程自己的安全环境。

易失的寄存器、栈和私有存储区域合起来被称为线程的环境(Context)。

CPU从一个线程切换到另一个线程不可避免涉及内核调度器,这是一个昂贵的操作,如果两个线程频繁地切换可以采用:纤程(fiber)或者用户模式调度。为了使用纤程需要先调用这个函数

ConvertThreadToFiber

与线程不同的是,纤程不会主动执行需要调用这个函数之后才能执行:

SwitchToFiber

通常情况下,一个进程中的线程不可能无意地引用另一个进程的地址空间,除非两种情况:

  • 第二个进程将它的一部分私有地址空间变成共享内存区,在Windows中称为文件映像对象;
  • 第一个进程有权打开第二个进程,从而可以使用诸如ReadProcessMemeory和WriteProcessMemory等跨进程的的函数。

作业使一组进程被当作一个整体来管理和维护。通过作业对象,可以对特定的属性进行控制,可以对一个进程或者所有与作业有关的进程进行限制。

在Windows 64位中,内核模式代码签名策略规定,64位设备驱动程序必须要经过某个权威结构发放的密钥来签名。用户不能明确地强制安装未经签名的驱动程序,即使管理员用户也不行,但是可以在系统引导时手工禁止,在引导时按下F8键,选择高级引导选项“禁用驱动程序强制签名”

Ntdll.dll是一个特殊的系统支持库,主要用于子系统DLL。包含两种函数:

  • 系统服务分发存根(stub),它们会调用Windows执行体的系统服务。
  • 内部支持函数,供子系统DLL以及其他的原生映像文件使用。

执行体是Ntoskrnl.exe的上层。执行体包含以下类型函数:

-可在用户模式下调用的导出函数。

系统机制

陷进分发包括中断、延时的过程调用(DPC)、异步过程调用(APC)、异常分发、系统服务分发。
软件中断:激发线程分发、并非时间紧急的中断处理、处理定时器到期、在特定线程的环境中异步地执行一个过程、支持I/O异步操作。
对象管理器:执行体内部负责创建、删除、保护和跟踪对象的组件。

Windows基本架构相关推荐

  1. Windows Azure 架构指南 – 第 1卷 发布

    公告:本博客为微软云计算中文博客的镜像博客.部分文章因为博客兼容性问题,会影响阅读体验.如遇此情况,请访问原博客. 正如 David Aiken 最近在其博客中提到的, Microsoft Patte ...

  2. windows下架构svn服务器

    今天,同事说我们这边也要架构一个代码管理器,要我研究一下.我现在上网查了一下资料 在自己总结了一些东西,虽然借鉴别人东西来写,当时自己也加点东西进去了,就属于半原创吧!嘻嘻! 下载 subversio ...

  3. Windows Azure Platform (四) Windows Azure架构

    Windows Azure是由微软发展的一套云计算操作系统,用来提供云计算服务所需要的操作系统与计算与存储平台.他提供的是平台即服务(PaaS).也可以通过VM Role来实现IaaS服务. Over ...

  4. windows当服务器不稳定,Windows网站架构服务器的优劣

    使用Windows平台来构建网站服务器,很大部分由网站管理员的技术背景决定的,早期的技术人员可能更熟悉Windows,或者负责人认为Windows的易用性."短平快"的开发模式.人 ...

  5. windows 打印机架构

    1.介绍 1.1 官方文档 Windows 开发人员文档 - Windows drivers | Microsoft Docs 打印设备 - Windows drivers | Microsoft D ...

  6. Linux和Windows设备驱动架构比较

    毕业后一直在学操作系统, 有时候觉得什么都懂了,有时候又觉得好像什么都不懂,但总体来说自认为对操作系统实现机制的了解比周围的人还是要多一些.去年曾花了几个星期的晚上时间断断续续翻译了这篇对Linux和 ...

  7. 【VS开发】【智能语音处理】Windows下麦克风语音采集

    简介 这是我很早以前的大学毕业设计,忽然间找到贴出来以纪念自己的纯真年代...但是因为CSDN不给面子所以导致短短的一篇文章贴了足足7次..他老提时说文章超过了64K,老大,拜托,那是算上了里面的图片 ...

  8. ReactOS 0.4.11 发布,Windows 系统的开源替代方案

    开发四年只会写业务代码,分布式高并发都不会还做程序员? >>>   ReactOS 团队发布了 ReactOS 0.4.11 版本,他们表示该版本已完成大量内核方面的工作,这有助于提 ...

  9. windows container 踩坑记

    windows container 踩坑记 Intro 我们有一些服务是 dotnet framework 的,不能直接跑在 docker linux container 下面,最近一直在折腾把它部署 ...

最新文章

  1. 重上热搜!北师大教授:给非洲留学生1年10万奖学金真的不算多!
  2. C 回顾 volatile 和 register 修饰符
  3. C# DataGridView控件用法
  4. free是自由,不是免费,从王开源说起
  5. php mysql 配置
  6. 1-4 开发工具的选择
  7. php 父子进程通信,PHP 进程及进程间通信
  8. 局域网聊天软件源码解析
  9. [LintCode] 最长上升子序列
  10. 买了小区一楼的感受是怎样的?
  11. Maven 手动安装JAR包到本地maven仓库后,但在项目中依旧报错找不到JAR包解决方法
  12. android recover 系统代码分析 -- 选择进入
  13. Linux GCC make文件的写法4--清晰版
  14. 修改wordpress的footer内容
  15. 服务器虚拟机系统镜像安装win7系统,VMware虚拟机安装ghost win7系统_VM虚拟机怎么安装w7 iso映像文件?...
  16. 58同城赶集网简历怎么下载?【58同城赶集网简历采集,真实手机号联系方式获取】
  17. 函数的基本用法c语言,C语言(函数基本用法).ppt
  18. java生成api文档工具_api文档自动生成工具
  19. 我为App做测试---搜狐新闻(1)
  20. python实现明星专家系统:人脸识别自动比对

热门文章

  1. iOS 内存泄漏排查方法及原因分析
  2. python requests 设置cookies
  3. Linux 目录和文件权限总结
  4. 第八次网页前端培训笔记
  5. 计算机专业贵州排名2015,2015贵州省大学最佳专业排行榜,贵州大学雄居榜首
  6. Linux_SSH传输文件命令:scp
  7. rancher安装elasticsearch6.4.0的head插件
  8. JAVA8特性之函数式接口-@FunctionalInterface注解
  9. 【千奇百怪】PHP代码质检工具PHPCS分析介绍与使用
  10. 3种Javascript图片预加载的方法详解