[笔记]深入解析Windows操作系统《一》概念和工具(一)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: [笔记]深入解析Windows操作系统《一》概念和工具

前言

本章将介绍Microsoft Windows操作系统的关键概念和术语,比如:

  • Windows API、
  • 进程、
  • 线程、
  • 虚拟内存、
  • 内核模式和用户模式、
  • 对象、
  • 句柄、
  • 安全性
  • 注册表等。

这些概念和术语将贯穿全书。

同时也会介绍一些可用来探查Windows内部的工具,比如:

  • 内核调试器
  • 性能监视器,
  • 以及来自Windows Sysinternals 的一些关键工具。

此外,还将说明如何以WDK (Windows Driver Kit)SDK (Platform Software Development Kit)作为资源,来找到关于Windows内部机理的进一步信息。

请一定要理解本章中讲述的所有内容,本书其余章节将以此为基础。

1.1 Windows操作系统的版本

(这个列表会持续更新)

可参考:

Windows系统历史版本简介

操作系统版本

产品名称 内部版本号 发布日期
Windows NT 3.1 3.1 1993.7
Windows NT 3.5 3.5 1994.9
Windows NT 3.51 3.51 1995.5
Windows NT 4.0 4.0 1996.7
Windows 2000 5.0 1999.7
Windows XP 5.1 2001.12
Windows Server 2003 5.2 2003.3
Windows Vista 6.0 2007.1
Windows Server 2008 6.0 2008.3
Windows 7 6.1 (编译版本7600) 2009.10
Windows 7 SP1 6.1.7601 (编译版本7601)
Windows Server 2008 R2 6.1(编译版本7600) 2009.10
Windows 8 6.2.9200
Windows Server 2012 R2 6.3
Windows 8.1 6.3.9200
Windows 8.1(Update1) 6.3.9600
Windows Server 2016 10.0*
Windows Server 2019 10.0*
Windows 10 10.0.10240
Windows Server 2022 10.0*
Windows 10(1511) 10.0.10586
Windows 10(1607) 10.0.14393
Windows 10(1703) 10.0.15063
Windows 10(1709) 10.0.16299
Windows 10(1803) 10.0.17134
Windows 10(1809) 10.0.17763
Windows 10(1903) 10.0.18362

注“Windows 7”这一产品名称中的“7”并非指内部版本号,而是Windows家族的世代编号。实际上,为了使应用兼容性问题尽可能小,Windows 7的版本号其实是6.1,如表1.1所示。这使得那些检查大版本号的应用程序在Windows 7上可以像在Windows Vista上那样继续执行。事实上,Windows 7和Server 2008 R2有同样的版本号和编译版本,因为它们是从同样的Windows代码基编译而来。

1.2 基础概念和术语

Windows API

Windows应用编程接口(API)是针对Windows操作系统家族的用户模式系统编程接口。在64位版本的Windows推广以前,32位版本Windows操作系统的编程接口被称为Win32 API,以区别于原来的16位版本Windows的编程接口,即16位WindowsAPI。

术语WindowsAPI兼指Windows的32位和64位编程接口。

Windows API 常用的又分为几个大类:

  • 基本服务
  • 组件服务司
  • 用户界面服务
  • 图形和多媒体服务
  • 消息和协作
  • 网络
  • Web服务

关于 .Net

Microsoft.NET框架组成:

  • 框架类库(FCL,Framework Class Library)的类库
  • 提供了托管代码执行环境的公共语言运行库(CLR,Common Language Runtime)

托管代码执行环境包含一些特性:

  • 即时编译
  • 类型检验
  • 垃圾回收 GCC
  • 代码访问安全性等。

由于CLR具有这些特性,因此它所提供的开发环境能够提高开发人员的生产效率,减少常见的编程错误。

.NET框架的组件之间的关系

Win32 API 历史

第一次使用:microsoft Windows 3.0

起因:成为Windows NT启动之初,替代32位 OS/2 Presentation Manager API.

服务、函数、例程

windows 特定的术语的含义:

  • Windows API函数指Windows API中已被文档化的、可被调用的子例程。
    例如CreateProcess、CreateFile和GetMessage。
  • 原生的系统服务(或者系统调用)指操作系统中未文档化的、可在用户模式下调用的底层服务。
    例如,NtCreateUserProcess是一个内部系统服务,Windows的CreateProcessi函数调用该服务来创建新的进程。有关系统调用的定义,参见第3章“系统机制”的“系统服务分发”一节。
  • 内核支持函数(或例程)指位于Windows:操作系统内部且只能在内核模式下调用的子例程(关于内核模式,本章后文将给出定义)。
    例如,ExAllocatePoolWith Tag就是个这样的例程,设备驱动程序调用该例程可以向Windows系统堆(称为内存池)申请内存。
  • Windows服务指由Windows服务控制管理器启动的进程。
    例如,Task Scheduler服务运行在用户模式进程中,它支持at命令(类似于UNIX命令at或cron)。(注意,虽然注册表将Windows设备驱动程序定义为“服务”,但是,在本书中不这样使用。)
  • DLL(动态链接库)指一组可调用的子例程,合起来被链接成一个二进制文件,使用这些子例程的应用程序可以动态地加载此二进制文件。
    例如Msvcrt.dll(C运行库)和Kernel32.dl(一个Windows API子系统库)。Windowsl的用户模式组件和应用程序大量使用了DLL.

DLL比静态库的优势在于,应用程序可以共享DLL,Windows保证在内存中只有一份DLL代码,供所有引用该DLL的应用程序共享。注意,非可执行的NET程序集也被编译成DLL,但是,它们没有导出任何子例程,而是由CLR解析出编译的元数据,以便访问对应的数据类型和成员。

进程、线程和作业

进程

程序是指一个静态的指令序列,

进程是一个容器,其中包含了执行程序的特定实例时所用到的各种资源。

Windows进程是由以下元素构成的:

  • 私有的虚拟地址空间,这是指该进程可以使用的一组虚拟内存地址。
  • 可执行的程序,它定义了初始的代码和数据,并且被映射到该进程的虚拟地址空间中已打开句柄的列表,这些句柄指向各种系统资源,比如信号量、通信端口和文件,该进程内所有的线程都可以访问这些系统资源。
  • 被称为访问令牌的安全环境,它标识了与该进程关联的用户、安全组、特权、UAC
    (User Account Control,用户账户控制)虚拟化状态、会话,以及有限的用户账户状态。
  • 被称为进程ID的唯一标识符(在内部,进程ID还是标识符客户ID的一部分)。
  • 至少一个执行线程(尽管“空”进程也是有可能的,但没有用处)。
tlist /t 查看进程树

tlisk.exe 位于 C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\tlisk.exe

任务管理查看进程
Process Explorer查看进程的细节

Process Expore 下载地址

线程

线程是一个进程内部的实体,也是Windows执行此进程时的调度实体。

如果没有线程,进程的程序将不可能运行。

线程包括以下一些最基本的部件:

  • 一组代表处理器状态的CPU寄存器中的内容。
  • 两个栈一一一个用于线程在内核模式下执行时,另一个用于线程在用户模式下执行时。
  • 一个被称为线程局部存储(TLS,thread-local storage)的私有存储区域,各个子系统、运行库和DLL都会用到该存储区域。
  • 一个被称为线程ID的唯一标识符(它也是内部结构客户ID〔client ID)的一部分进程D和线程D是从同一个名字空间中产生的,所以它们永远不会重叠)。
  • 有时候线程也有它们自己的安全环境,或者令牌,多线程服务器应用程序要模仿其客户的安全环境时,常常会使用线程自己的安全环境。

易失的寄存器私有存储区域合起来被称为线程的环境(context)。因为这些信息随着Windows所在机器架构的不同而有所不同,所以,此结构必须是与底层架构相关的。

Windows的GetThreadContexti函数允许程序访问这一与架构相关的信息(称为CONTEXT块)。

纤程与用户模式调度器线程

出现的原因:因为将CPU的执行从一个线程切换到另一个线程,将不可避免地涉及内核调度器,所以,这可能是一个开销昂贵的操作,如果两个线程经常频繁地来回切换则尤其如此。

Windows实现了两种机制来降低这一开销:

  • 纤程(fiber)
  • 用户模式调度(UMS,user-mode scheduling)。
相关文章
|
24天前
|
弹性计算 自然语言处理 运维
基于OS Copilot 的深度解析测评
阿里云推出的OS Copilot结合自然语言处理与系统运维,为用户带来高效智能体验。本文通过安装和试用过程,测评其功能和使用感受。安装简单但文档需完善,支持部分Linux发行版。OS Copilot的自然语言交互、任务自动化处理及参数解读功能表现出色,适合运维人员和开发者。未来期待更多优化和扩展。
|
21天前
|
弹性计算 人工智能 自然语言处理
基于OS Copilot 的深度解析测评
OS Copilot是阿里云基于大模型构建的Linux系统智能助手,支持自然语言问答、辅助命令执行、系统运维调优等功能。它能理解多样化指令,简化复杂操作,提供流畅的多轮对话体验,响应迅速。通过自然语言描述需求,OS Copilot可转换并执行相应命令,帮助用户轻松管理阿里云资源,提升系统性能。首次使用体验表明,它对新手友好,安装简单,配置后通过“co”命令启动,为用户提供智能提示和优化建议,极大提高了Linux系统的使用效率。
|
12天前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
27 11
|
29天前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
101 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
2月前
|
人工智能 搜索推荐 API
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
cobalt 是一款开源的流媒体下载工具,支持全平台视频、音频和图片下载,提供纯净、简洁无广告的体验
305 9
Cobalt:开源的流媒体下载工具,支持解析和下载全平台的视频、音频和图片,支持多种视频质量和格式,自动提取视频字幕
|
2月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
169 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
2月前
|
数据可视化 项目管理
个人和团队都好用的年度复盘工具:看板与KPT方法解析
本文带你了解高效方法KPT复盘法(Keep、Problem、Try),结合看板工具,帮助你理清头绪,快速完成年度复盘。
116 7
个人和团队都好用的年度复盘工具:看板与KPT方法解析
|
22天前
|
存储 运维 安全
深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功能和优势。
49 5
|
29天前
|
监控 数据可视化 数据挖掘
直播电商复盘全解析:如何通过工具提升团队效率
直播电商作为新兴商业模式,正改变传统零售格局。其成功不仅依赖主播表现和产品吸引力,更需团队高效协作与分工优化。复盘是提升执行力的关键环节,通过总结经验、发现问题、优化流程,结合在线工具如板栗看板,可提升复盘效率。明确团队角色、建立沟通机制、制定优化方案,确保数据驱动决策,从而在竞争中保持领先。
|
3月前
|
缓存 并行计算 Linux
深入解析Linux操作系统的内核优化策略
本文旨在探讨Linux操作系统内核的优化策略,包括内核参数调整、内存管理、CPU调度以及文件系统性能提升等方面。通过对这些关键领域的分析,我们可以理解如何有效地提高Linux系统的性能和稳定性,从而为用户提供更加流畅和高效的计算体验。
90 17

推荐镜像

更多