《深入解析windows操作系统》第1章读书笔记

1、服务:指操作系统中可以被调用的例程(即函数,等价于系统调用?)、设备驱动程序或者服务器进程。一些特定术语如下:

        1)Windows API函数:指Windows API中已经被文档化、可被调用的子例程(函数),如CreateProcess、CreateFile和CreateMessage等。

        2)原生的系统调服务:即系统调用,指操作系统中未文档化、可在用户模式下调用的底层服务。如NtCreateProcess是一个内部系统服务,Windows中的CreateProcess函数就是调用NtCreateProcess函数来创建新的进程。

        3)内核支持函数(或者例程):指位于Windows操作系统内部且只能在内核模式下调用的子例程。

        4)Windows服务:指由Windows服务控制管理器启动的进程。

        5)动态链接库DLL:指一组可调用的子例程,合起来被链接成一个二进制文件,使用这些子例程的应用程序可以动态地加载此二进制文件。应用程序可以共享DLL,Windows保证在内存中只有一份DLL代码,供所有引用该DLL的应用程序共享。

2、进程:程序是一个静态的指令序列,而进程是一个容器,二者有着本质上的区别。进程中包含了执行程序的特定实例时所用到的各种资源。从最高层次的抽象来看,windows进程的构成元素如下:

        1)私有的虚拟地址空间;

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

        3)已打开句柄的列表:这些句柄执行各种系统资源,如信号量、通信端口和文件。该进程内所有的线程都可以访问这些系统资源;

        4)被称为访问令牌的安全环境:它标识了该进程关联的用户、安全组、特权、UAC(用户账户控制)虚拟化、会话、以及有限的用户状态;

        5)进程ID:唯一标识符(在内部,进程ID还是客户ID的一部分);

        6)至少一个执行线程;

3、线程:是一个进程内的实体,也是windows执行此进程时的调度实体。线程包括以下一些基本的部件:

        1)一组代表处理器状态的CPU寄存器中的内容;

        2)两个栈:内核栈和用户栈,分别用于线程在内核模式下执行使用和用户模式下执行使用;

        3)线程局部存储区域TLS:各个子系统、运行库和DLL都会使用到这个存储区域;

        4)线程ID:线程的唯一标识符,是内部结构客户ID的一部分,进程ID和线程ID是从同一个名字空间中产生的,所以它们永远不会重叠;

        5)有时候线程也会有它们自身的安全环境或者令牌:多线程服务器应用程序要模仿其客户的安全环境时,通常会使用线程自己的安全环境;

4、纤程(Fiber):纤程可以使得一个应用程序可以调度它自己的“线程”的执行过程,而不用依赖于Windows内置的基于优先级的调度机制(将CPU的执行从一个线程切换到另一个线程,将不可避免的涉及到内核调度器,这可能是一个开销昂贵的操作,尤其是两个线程经常频繁来回的切换)。因此纤程也被称之为“轻量级”线程或者用户态线程,从调度的角度来看,纤程间的切换对于内核是不可见的,因为它们是在用户模式下的Kernel32.dll中实现的。在其他高级语言(如golang)中,纤程又被称为协程。

6、虽然线程有自己的执行环境,但是同一个进程内的所有线程共享该进程的虚拟地址空间(以及属于该进程的其他资源)。这意味一个进程内的线程可以完全地读或者写该进程的虚拟地址空间。然而在特殊情况下,一个进程中的线程可能会引用另一个进程的地址空间,这种情况主要有两种:

        1)第二个进程将自己的一部分私有地址空间变成共享内存区(在Windows API中称为文件映射对象)

        2)第一个进程有权限打开第二个进程,从而可以使用诸如ReadProcessMemory和WriteProcessMemory等跨进程的内存函数

7、除了私有地址空间和一个或多个线程外,每个进程还有一个安全环境和一个已打开句柄的列表,这些句柄执行诸如文件、共享内存区、互斥体、事件或者信号量等某个同步对象等等,如下图所示.

8、虚拟地址描述符VAD:指一些数据结构,内存管理器利用这些数据结构来记录进程正在使用的虚拟地址(类似于页表和页目录表?)。

9、作业:Windows在进程模型的基础上提供了一个扩展,称为作业。作业对象的主要功能是,使一组进程被当做一个整体i来管理和维护,通过作业对象,可以对特定的属性进行控制,也可以对一个进程或者所有与作业相关的进程进行限制。作业对象弥补了Windows平台上缺乏结构化的进程树的不足,且功能远比Unix风格的进程树强大。

10、虚拟内存:Windows实现了一个基于平面(线性)地址空间的虚拟内存系统,使每个进程独立拥有一个很大的私有地址空间。虚拟内存提供了一个内存逻辑视图,它可能并不对应于内存的物理布局。在程序运行的时候,内存管理器借助于硬件的支持,将虚拟地址转译或者映射成真正存放数据的物理地址。操作系统通过控制这一保护和映射机制,可以确保一个进程不会闯入另一个进程中,也不会改写操作系统的数据。

11、在Windows中,虚拟地址空间被划分成两部分,低半部分(0x0~0x7FFFFFFF)分配给进程,作为它们独有的私有存储空间(用户进程空间),而高半部分(0x80000000~0xFFFFFFFF)则用作操作系统的内存(内核空间)。低半部分的地址空间的映射关系会发生变化,以便总是反映出当前正则执行的进程的虚拟地址空间,而高半部分的地址空间的映射关系总是由操作系统的的虚拟内存使用。

12、内核模式和用户模式:为了避免用户应用程序修改或者访问关键的操作系统数据,Windows使用了两种处理器访问模式:用户模式和内核模式。用户程序运行在用户模式下,操作系统的代码运行在内核模式下。内核模式下,处理器允许访问所有的系统的系统内存和所有的CPU指令。通过让操作系统拥有比应用程序更高的特权级,处理器为操作系统提供了一层必要的保护,确保行为不正常的应用程序不会破坏系统整体的稳定性

13、虽然每个Windows进程都有自己私有的内存空间,但是内核模式的操作系统和设备驱动程序代码共享同一个和虚拟地址空间(高半部分的内核空间),也即所有应用程序共享同一个内核空间。虚拟内存中的每一个页面都被标记了处理器必须在什么访问模式下才可以读或者写该页面。系统空间(即内核空间)中的页面只有在内核模式下才可以访问,而用户地址空间中的所有页面都可以在用户模式下访问。只读页面(比如那些包含静态数据的页面)在任何模式下都是不可写的。在一些支持不可执行内存吧保护的处理器上,Windows将包含的数据页面标记为不可执行,从而防止数据区域被无意或者恶意地当做代码执行。

13、内核对象:在Windows系统中,内核对象是指某个静态定义的对象类型的单个运行实例。对象类型由系统定义的数据类型、在该数据类型的实力上进行操作的一组函数,以及一组对象属性构成。对象属性是对象中的数据域,每个对象属性定义了对象的一部分状态。对象方法,即操作对象的手段,通常用于读取或者改变对象的属性。对象和普通数据结构之间最根本的区别是,对象的内部结构是不透明的。使用者必须调用一个对象服务才能获得对象内部的数据或者把数据放到对象内部(感觉像编程中的一条规则:是使用方法访问类型的属性而不是直接访问)。并非Windows系统中的所有数据结构都是对象,只有确实需要被共享。、保护。命名或者让用户模式程序看得到(通过系统服务/系统调用)的数据才被放到对象中。

14、注册表:Windows中的系统数据库,包含了引导和配置系统所必须的信息、全系统范围内控制Windows操作的软件设置、安全数据库以及针对每个用户的配置设置。

15、符号文件:包含了函数和变了的名称以及数据结构的布局和格式,它们是由链接器产生的。

16、用户模式的调试:

        16.1侵入式的调试:除非另行指定,否则将调试器附加到一个正在运行的进程上时,将通过Windows函数DebugActiveProcess,在调试器和被调试程序之间建立一个连接。这使得看见恶意检查和改变进程的内存,设置断点,执行其他的调试功能。Windows允许在不杀掉目标进程的情况下停止调试,只要将调试器断开连接即可,不必杀掉进程。

        16.2 非侵入式的调试:这种选择方式下,调试器只是简单的利用OpenProcess函数打开被调试的进程,它并不作为一个调试器负载到目标进程上。这使得使用者可以检查和改变目标进程中的内存,但是不能设置断点。(有点像CE工具默认的工作模式)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP重传,滑动窗口,流量控制,拥塞控制

TCP重传,滑动窗口,流量控制,拥塞控制 TCP重传机制: 超时重传快速重传SACKD-SACK 通过序列号与确认应答判断是否要重传 超时重传: 超过指定时间没有收到确认应答报文,就会重发该数据 触发超时重传的情况…

SpirngBoot整合快递100

目录 一、注册快递100 二、技术文档地址 三、需要认证的key和comcumer 四、spring boot 整合快递 100使用 4.1 引入快递100和hutool的依赖 4.2 将key和comcumer写入application.properties文件中 4.3 新建一个modle,用于将查出来的json数据转成对象 4.4 新建一个controll…

MySql-日期分组

一、分别统计各时间各类型数据条数 数据库的 request_time字段 数据类型:timestamp 默认值:CURRENT_TIMESTAMP 例子: 2024-01-26 08:25:48 原数据: 1、将数据按照日期(年月日)形式输出 按照request_…

5A手控问道手游戏抢装备说明手册

5A手控-问道抢装备方法 下载软件地址:www.aishouk.com 支持win10 和win 11 系统 下载,安装完成后,打开软件。 下载最好选择 CSDN 或者 百度网盘下载 ,官网下载速度很慢。这点大家 需要注意。 注册/登录 打开软件,点…

Mellanox网卡打流命令ib_write_bw执行遇到Couldn‘t listen to port 18515原因与解决办法?

要点 要点: ib默认使用18515命令 相关命令: netstat -tuln | grep 18515 ib_write_bw --help |grep port# server ib_write_bw --ib-devmlx5_1 --port 88990 # client ib_write_bw --ib-devmlx5_0 1.1.1.1 --port88990现象: 根因&#xf…

首页最新 多IP浏览器防关联:如何配置多个独立且稳定的IP地址?

在互联网时代,IP地址的重要性不言而喻。然而,IP关联问题却成为一项令人担忧的隐私和安全挑战。针对这个问题,多IP浏览器是一种解决方案,可以帮助用户单独配置多个独立且稳定的IP地址,有效地防止IP关联。 一、IP关联是…

ipad的文件如何传到手机里 iPad较大文件怎么发送出去 iMazing下载教程

在现代生活中,随着移动设备的普及和多样化,我们经常需要在不同设备之间传输文件,以便在工作、学习或娱乐中更加便捷地使用这些文件。iPad和iPhone是用户广泛使用的设备,我们时常使用它们来存储和访问大量的个人数据。但有时&#…

春游江淮 请来池州|快乘高铁 趣游池州 池州送福利啦

穿群山,越川泽,通绝隘……池黄高铁呼啸而来! 这条高铁巨龙全长约125公里,设计时速高达350公里。沿途设池州、九华山、黄山西、黟县东4座车站,池州站与宁安高铁相接,黟县东站与杭昌高铁相连,如同纽带般串联起皖南“两山一湖”(九华山、黄山、太平湖)风景名胜区。 池黄高铁开通…

下一代云原生应用引擎OpenNJet体验

文章目录 前言OpenNJet 介绍OpenNJet VS NGINXOpenNJet 安装OpenNJet 动态配置体验动态location动态黑名单动态灰度发布 体验感受 前言 作为一名技术人员,我们应时刻保持对行业动态的关注,今天我们就来体验一下号称下一代云原生应用引擎OpenNJet。 Ope…

亚马逊的Listing是否会导致店铺关联?

亚马逊账号关联是否有可能因为listing产品引起的呢?也会存在关联,但如果其中一个站点出了问题,另一账号跟着出事的情况不多见(因为亚马逊本来就支持卖家到各个站点开店把产品销售的各个区域)。很多客户有过相关的经验都…

一曲《少年中国说》令人情怀激荡

今天,作为四川籍人的本“人民体验官”,将充满自豪感地推广人民日报官方微博文化产品《看我中国少年!川传学子热血合唱少年中国说》。 图片:来源“人民体验官”推广平台 人民微博说:“百年前,梁启超先生一篇…

VTK —— 二、教程六 - 为模型加入3D微件(按下i键隐藏或显示)(附完整源码)

代码效果 本代码编译运行均在如下链接文章生成的库执行成功,若无VTK库则请先参考如下链接编译vtk源码: VTK —— 一、Windows10下编译VTK源码,并用Vs2017代码测试(附编译流程、附编译好的库、vtk测试源码) 教程描述 本…

HFSS19 官方案例教程W03 - SMA接头与微带分支

SMA接头与微带分支 1►射频接头简介 连接器是电子测量中必不可少的重要部件,无论测试仪表还是DUT,无论线缆还是附件,处处都有形形色色的不同连接器的身影。对于射频工程师而言,经常用到的连接器有N型、BNC型、SMA型、3.5 mm、2.92 mm、2.4 mm、1.85 mm、1 mm这几种 (上…

OI Wiki—枚举

//新生训练,搬运整理 简介 枚举(英语:Enumerate)是基于已有知识来猜测答案的问题求解策略。 枚举的思想是不断地猜测,从可能的集合中一一尝试,然后再判断题目的条件是否成立。 要点 给出解空间 建立简洁…

NCC导入导出开发

📣NCC导入导出开发 ✨1. 导入流程图 ✨2. 实现步骤 🐴1. 前端代码实现。 🐴2. 配置文件创建与设置。 🐴3. 后端代码实现。 🐴4. 注册后端代码类。

一文掌握Vue依赖注入:原理、应用场景以及最佳模块化与单元测试实践,提升代码的可维护性与模块化程度

Vue 中的依赖注入(Dependency Injection, DI)机制通过 provide 与 inject API,实现了跨组件层级间的数据与服务透明传递,使父组件能够向其任意深度的子孙组件“注入”依赖,而不需要通过层层传递 props 或使用全局状态管…

接口测试 - postman

文章目录 一、接口1.接口的类型2. 接口测试3. 接口测试流程4. 接口测试用例1. 测试用例单接口测试用例-登录案例 二、HTTP协议1. HTTP请求2. HTTP响应 三、postman1. 界面导航说明导入 导出用例集 Get请求和Post请求的区别:2.postman环境变量和全局变量3. postman 请求前置脚本…

《Fundamentals of Power Electronics》——Boost电路及仿真

Boost电路的拓扑结构如下所示: 下面是在simulink中搭建的一个Boost电路的仿真实验平台,其中直流输入电压为100V,电感值为1mH(模拟电阻为1毫欧),电容值为470uF,负载为50欧姆,占空比选择为0.5,开关…

探索的时光 (整数三分)

本题链接:登录—专业IT笔试面试备考平台_牛客网 题目: 样例: 输入 5 3 2 1 2 3 输出 28 思路: 根据题意,已经给出了运算函数 当我们看到这些函数的时候,联想一下,它们的单调性,以…

【建议收藏】用AI快速生成一个网页(名侦探柯南~灰原哀主题网页),适合大学生web期末大作业

下面是提供给AI的提示词和AI给出的代码以及成果展示 1、生成一个网页导航栏,宽度为1300px,高度为60px。导航区域在导航栏最右侧不超出导航栏,高60px,宽度500px,里面是5个导航菜单项横向排列,每个宽度100px&…