《深入解析Windows操作系统》第5章节学习笔记

1、每个Windows进程都是由一个执行体进程EPROCESS结构来表示的,EPROCESS和相关数据结构位于系统空间,但是进程环境控制块PEB是个例外,它位于进程空间地址中(因为它包含了一些需要由用户模式代码来修改的信息)。对于每一个执行了Win32程序的进程,WIn32子系统进程Crss为它维护了一个平行的结构CSR_PROCESS。最后,Windows子系统的内核模式部分(Win32.sys)有一个针对每个进程的数据结构W32PROCESS,当一个线程第一次调用Windows的USR或GDI函数(它们是在内核模式中实现的)时,W32PROCESS结构就会被创建。除空闲进程外,每个EPROCESS结构会被执行体对象管理器封装为一个进程对象。一个进程句柄通过进程相关的API提供EPROCESS结构中部分数据以及它的相关结构中数据的访问。一个简化版的关于进程和线程数据结构的框图如下:

下图显示了EPROCESS结构中的关键域:

执行体进程结构的第一个字段称作PCB,代表进程控制块,它是一个KPROCESS类型的结构,代表内核进程。虽然执行体的例程往EPROCESS中保存数据,但是分发器、调度器和终端/时间记账代码——作为操作系统内核的一部分——使用KPROCESS。这使得执行体的高层功能和下面的底层特定功能实现之间能有一层抽象,避免二者之间不必要的依赖。

2、PEB:位于它所描述的进程的用户模式地址空间,包含了映像加载器、堆管理器以及其他需要从用户模式访问它的Windows组件所需的信息。EPROCESS和KPROCESS结构只能从内核模式访问。EPB的字段如下图所示:

3、CSR_PROCSS结构包含专用于Windows子系统(Crsss)的进程信息。这样,只有Windows应用程序才有CSR_PROCESS结构关联到它们。另外,因为每个会话都有它自己的Windows子系统,所以CSR_PROCESS结构会有它自己的Windows子系统,所以CSR_PROCESS结构由每个会化的Crss来维护。CRSS_PROCESS的基本结构如下图所示:

4、WIN32PROCESS:该结构包含内核(Win32k)中的Windows图像和窗口管理代码需要维护的有关GUI进程的状态信息,其基本结构如下图所示:

5、受保护进程:在哪Windows安全模型中,任何一个进程的令牌只要有调试权限就能对机器上其他任何进程请求任意的访问权限(如读写任意进程的内存、注入代码,挂起和恢复线程)。但有时候有些进程需要避免被拥有调试权限的进程随意修改和访问,因此Windows引入了受保护进程(这类进程大多与多媒体相关)。受保护进程与普通进程并存,但是它们对系统其他进程(即以管理员特权运行)可申请的访问权限上增加了重要的限制。受保护进程可以由任何应用程序创建,然而操作系统仅在以下条件允许一个进程被保护:它的映像已经被一个特殊的Windows Media证书数字签名过。

在内核层面上对受保护进程的支持分为两块,首先,进程创建过程完全在内核模式进行以避免注入攻击;其次,受保护进程会在PROCESS结构中设置一个特殊的位,它修饰了进程管理器中安全方面例程的行为,会拒绝某些通常授予管理员的访问权。事实上,对受保护进程仅有的访问权是PROCESS_QUERY、SET_LIMIT_INFORMATION、PROCCESS_TERMINATE和PROCESS_SUSPEND_RESUME。某些特定的访问权对于受保护进程内的线程也是禁用的。

由于Process Explorer使用普通的用户模式Windows API来查询进程内部的信息,它对于受保护进程无法进行某些操作。另一方面,Windbg这样的工具运行于内核调试模式下,使用内核模式基础设施来获取这些信息,得到的信息会更加完整。

6、线程的局部原理:在操作系统层次上,Windows线程是一个由执行体线程对象来表示的。执行体线程对象封装了一个ETHREAD结构体,而ETHREAD结构又含有一个KTHREAD结构作为它的第一个成员,如下图所示:

ETHREAD结构和它指向的结构都位于系统地址空间,唯一的例外是线程环境快TEB,它位于进程地址空间中(同样地,也是因为用户模式组件需要访问它)。并且Windows子系统Crss为Windows进程中创建的每个线程维护了一个平行的结构称为CSR_THREAD。另外,对于那些已经调用了任一Windows子系统USER或者GDI函数的线程,Windows子系统的内核模式部分(Win32.sys)为每个这样的线程维护了一个数据结构,称为W32THREAD结构,线程的KTHREAD结构指向了W32THREAD结构。

ETHRED的第一个字段是Tcb,也称为线程控制块,其类型是KTHREAD。KTHREAD结构包含了Windows内核为这些正在运行的线程执行线程调度、同步和计时而需要访问的信息。

TEB内部有一个称为TIB(线程信息块)的头,主要作用是为了保证OS/2和Win9X应用程序的兼容性。当通过一个初始TIB创建新线程的时候,它也允许异常和栈信息被保存进一个较小的TIB中。TEB存储了有关映像加载器和各种Windows DLL的环境信息。因为这些组件运行在用户模式下,所以它们需要一个在用户模式下可写的数据结构。

Windows实现了一个优先级驱动的、抢占式调度系统——具有最好有限的就绪线程运行,而该线程可能仅限于在允许它运行(或者设定为偏好的)的处理器上运行,这种现象称为处理器亲和性。

Windows调度代码是在内核中实现的,然而,内核中不存在单独的“调度器”模块或者例程——调度代码散步在内核中凡是会发生与调度相关的事件的各处,执行这些任务的例程合起来称为内核的“分发器”。

7、线程环境切换:一个线程的环境和用于环境切换的过程随处理器体系结构的不同而不尽相同。一个典型的环境切换需要保存和加载以下数据:指令指针EIP、内核栈的指针、指向该线程运行所在的地址空间(该进程的页表目录)的指针。内核把老线程的这些信息保存起来:将这些信息压入到老线程的内核栈中,更新站指针,然后将此栈指针保存到老线程的KTHREAD块中。然后内核栈指针被设置为新线程的内核栈,新线程的环境被加载进来。如果新线程位于另外一个进程中,那么,内核还会降新进程的页目录表加载到一个专门的处理器寄存器中,从而使用新进程的地址空间。如果一个需要被交付的内核APC正在等待处理器,则一个IRQL为1的中断就会产生。否则处理器的控制被传递给新线程中已经被恢复的指令指针,于是新线程开始运行。

一个线程可能会通过调用某个Windows等待函数来等待某个对象(如事件、互斥体、信号量、IO完成端口、进程、线程、窗口消息等)从而进入等待状态,主动放弃对处理器的使用。但是放弃处理器的线程并不是降低优先级了,该线程只是被内核移动到了它正在等待的对象的等待队列中。

8、理想处理器:一个线程的理想处理器是该线程被创建的时候,利用进程控制块中的一个种子来选定的。每当一个线程被创建时,该种子就会递增。所以,一个进程中的每个新线程的理想处理会循环经理当前系统上所有可用的处理器。但是这种分配方法假定了一个进程内的线程完成的是等量的工作。然而在现实中这个往往是不可能的,更常见的是,由一个或者多个线程做事务管理工作,其他另有一组工作者线程。因此,一个多线程程序想要充分利用底层平台的优势,使用SetThreadIdealProcessor函数来为它的线程指定理想的处理器编号是更有用的,或者使用SetThreadIdealProcessorEx函数为线程选择一个亲和处理器组号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/589071.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

『跨端框架』Flutter环境搭建

『跨端框架』Flutter环境搭建 资源网站简介跨平台高性能发展历程跨平台框架的比较成功案例 环境搭建(windows)基础环境搭建Windows下的安卓环境搭建Mac下的安卓环境配置资源镜像JDKAndroid StudioFlutter SDK问题一问题二问题三修改项目中的Flutter版本 …

Java中的字符流

字符流字节流编码表 Java为什么可以区分字母和汉字 package day3; ​ import java.io.UnsupportedEncodingException; import java.lang.reflect.Array; import java.util.Arrays; ​ public class Test {public static void main(String[] args) throws UnsupportedEncoding…

【Mybatis 】什么是mybatis?如何在普通项目中使用?(超详细建议收藏)

文章目录 mybatis第一章1、什么是mybatis2、idea中配置环境3、创建一个普通工程 第二章1、mybatis基本步骤2、导入log4j日志3、使用lombok注解4、mapper.xml文件详情1、parameterType属性2、resultType属性 5、对实体包进行扫描6、SQL语句中的占位符及转义符7、接口方法包含多个…

Flutter笔记:Widgets Easier组件库(5)使用加减器

Flutter笔记 Widgets Easier组件库(5):使用加减器 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress…

【校招】校园招聘中的签约环节,面完HR后的流程(意向书,offer选择与三方协议)

【校招】校园招聘中的签约环节,面完HR后的流程(意向书,offer选择与三方协议) 文章目录 一、面完HR后的流程1、口头oc、谈薪(两个电话)2、邮件意向书、带薪offer(两封邮件)3、签三方&…

算法训练营第十三天 | LeetCode 239 滑动窗口最大值、LeetCode 347 前K个高频元素

LeetCode 239 滑动窗口最大值 本体初始思路是这样的,首先看下给定数组长度和维持一个滑动窗口所需要花费的时间复杂度之间的关系。初步判断是还行的,当然后面被样例打脸了。需要更新成优先队列的解法。原本的解法能通过37/51和46/51的测试用例。但这还不…

基于Spring Boot的校园疫情防控系统设计与实现

基于Spring Boot的校园疫情防控系统设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 管理员登录首页界面图,管理员进入校园疫…

AI大模型探索之路-训练篇10:大语言模型Transformer库-Tokenizer组件实践

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

msmpi 高性能并行计算 移植并行细胞自动机报错

报错情况如图 代码来源 元胞自动机生命游戏C语言并行实现 – OmegaXYZ 稍微修改,因为相对路径在 msmpi 10.1.1 中失效 Microsoft Windows [版本 10.0.22000.2538] (c) Microsoft Corporation。保留所有权利。C:\Users\ASUS>mpiexec -n 9 "C:\Users\ASUS\D…

四信数字孪生水库解决方案,加快构建现代化水库运行管理矩阵

近年,水利部先后出台《关于加快构建现代化水库运行管理矩阵的指导意见》与《构建现代化水库运行管理矩阵先行先试工作方案》等文件,明确总体要求及试点水库、先行区域建设技术要求等,为全面推进现代化水库运行管理矩阵建设工作提供依据。 《2…

自定义Maven项目模板Archetype,快速创建模板项目。

自定义Archetype 创建好模板项目,在项目根目录执行命令对模板做出响应调整将模板安装到本地、远程仓库使用自定义模板 创建好模板项目,在项目根目录执行命令 mvn archetype:create-from-project对模板做出响应调整 如果是多模块项目,可能需…

【数据结构】:链表的带环问题

🎁个人主页:我们的五年 🔍系列专栏:数据结构 🌷追光的人,终会万丈光芒 前言: 链表的带环问题在链表中是一类比较难的问题,它对我们的思维有一个比较高的要求,但是这一类…

【模板】前缀和

原题链接:登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 前缀和模板题。 前缀和中数组下标为1~n。 前缀和:pre[i]pre[i-1]a[i]; 某段区间 [l,r]的和:pre[r]-pre[l-1] 3.…

【C语言】atoi和atof函数的使用

人生应该树立目标,否则你的精力会白白浪费。💓💓💓 目录 •🌙知识回顾 🍋知识点一:atoi函数的使用和实现 • 🌰1.函数介绍 • 🌰2.代码演示 • 🌰3.atoi函数的…

【高校科研前沿】云南大学陈峰研究员联合多家单位在Sci. Bull发文揭示了明末特大干旱背景下北京降水变化及其以太平洋海温变化为主导的驱动新机制

文章简介 论文名称:Coupled Pacific Rim megadroughts contributed to the fall of the Ming Dynasty’s capital in 1644 CE(环太平洋地区的特大干旱影响了公元 1644 年明朝的灭亡) 第一作者及通讯作者:陈峰研究员&王涛研究…

38-4 Web应用防火墙 - WAF的使用及规则

准备:38-3 Web应用防火墙 - 安装配置WAF-CSDN博客 WAF的使用 启动 Nginx /usr/local/nginx/sbin/nginx 为了测试未启动 ModSecurity 时的访问效果,我们可以模拟攻击。要查看当前虚拟机的 IP 地址,可以使用命令 ifconfig 浏览器中访问ip,如果要在真实机中访问就需要关闭…

Linux 学习 --- 编辑 vi 命令

1、vi 基本概念(了解) 基本上 vi 可以分为三种状态,分别是命令模式 (command mode)、插入模式 (Insert mode) 和底行模式 (last line mode),各模式的功能区分如下: 命令行模式 command mode)  控制屏幕光标的移动&a…

c3 笔记7 css基本语法

相关内容:字体、段落、词间距、文字效果(对齐、上下标、阴影)、背景图、背景渐变、…… 单位pt与px的差别pt是印刷使用的字号单位,不管屏幕分辨率是多少,打印到纸上看起来都是相同的,lot的长度是0.01384英寸…

[PS小技能学习]抠图和切图

详情见视频教程:PS小技巧--抠图与切图 今天我们来学习如何使用PS对表情包合辑进行抠图和裁剪保存 1、首先,将图片导入,双击图层新建一个图层 2、然后点击工具栏的魔棒工具,再点击顶部菜单栏的添加到选区 3、点击图片的空白区域即…

《QT实用小工具·五十一》带动画的 CheckBox

1、概述 源码放在文章末尾 该项目实现了带动画效果的多选框&#xff0c;鼠标放在上面或者选中都会呈现炫酷的动画效果&#xff0c;demo演示如下&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef LINEARCHECKBOX_H #define LINEARCHECKBOX_H#include <QCheckBox> …