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

news2025/1/16 1:32:09

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.coloradmin.cn/o/1623230.html

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

相关文章

基层设备人如何开展TPM:从理念到实践的深度心得

在制造业的基层工作中,设备维护与管理如同稳固的基石,为生产流程的顺畅运作提供了坚实的保障。TPM,这一全面生产维护的理念,已在众多企业中落地生根,成为提升设备效能和企业竞争力的有力工具。那么,作为基层…

学习操作系统路线

操作系统 简介 本课程为计算机专业学生量身定制,补足计算机操作系统相关知识,查漏补缺,也可用于考研复习。内容包括:操作统概述、进程管理、内存管理、文件管理、输入/输出管理等章节。内容力求精炼、重点突出、条理清晰、深入浅…

【ruoyi-vue】axios的封装理解和基本使用

axios的配置 ruoyi的前端对axios进行了封装,让我们发get请求或者是post请求更加方便了。 ruoyi对axios的封装在下面文件中:打开文件,可以看到它有三个显眼的方法,分别是request拦截器、response拦截器和通用下载方法。ruoYi接口地…

LeetCode 315—— 计算右侧小于当前元素的个数

阅读目录 1. 题目2. 解题思路一3. 代码实现一4. 解题思路二5. 代码实现二 1. 题目 2. 解题思路一 参考 剑指 Offer——数组中的逆序对,我们依然借助于归并排序中的合并操作来计算某个元素右侧小于它的元素个数。 如上图最左边所示,第五行开始进行第一次…

Multitouch 1.27.28 免激活版 mac电脑多点触控手势增强工具

Multitouch 应用程序可让您将自定义操作绑定到特定的魔术触控板或鼠标手势。例如,三指单击可以执行粘贴。通过执行键盘快捷键、控制浏览器的选项卡、单击鼠标中键等来改进您的工作流程。 Multitouch 1.27.28 免激活版下载 强大的手势引擎 精心打造的触控板和 Magic …

js 模拟鼠标移动事件,并监听鼠标移动

代码实现 function simulateClick( x, y) {// 获取目标元素 const element document.querySelector("xxxxx"); // 创建一个鼠标移动事件 var mouseMoveEvent new MouseEvent(mousemove, {screenX: x window.screenX, screenY: y window.screenY, clientX: x,…

使用gdb调试遇到No symbol table is loaded. Use the “file“ command.怎么办?

问题排查 出现下面问题,通常是没有处于调式模式环境下,所以我们需要在gcc指令后加 【-g】。 因为,我么的gcc编辑器默认是动态链接,而且是realese发布版本。 想要解决也很简单 主要思路就是在gcc -g。 在makefile文件如下进行修改即…

cpp-tbox 之 RPC 通信服务

jsonrpc 序列化与反序列化基于的是json Proto 该类设计用于处理网络或传输层数据接收和发送,同时提供一些回调函数接口来定义如何处理接收到的数据和发送数据,也就是整个RPC的框架类 对于接收请求的回调函数,参数是请求id,方法…

科技云报道:AIGC掀算力需求革命,边缘计算将不再“边缘”

科技云报道原创。 随着以大模型为代表的AIGC时代拉开序幕,算力需求持续爆发,AI与边缘深度融合已是大势所趋,越来越多的企业开始积极布局GenAI。 GenAI技术的商用化部署和应用成为企业竞逐的新阵地,勾勒出大模型从“技术力”转向…

测试开发高频面试题(持续更新)

什么是测试开发以及其在软件开发流程中的作用。在过去项目中的测试策略和方法。是如何确保测试的全面性和质量的?讲解一下测试金字塔(Test Pyramid)模型,并解释各个层级的测试类型和其重要性。描述一下持续集成(CI&…

AI:165-Coze自定义赛博风格Bot-图片生成操作指南

Coze是由字节跳动推出的一个AI聊天机器人和应用程序编辑开发平台,旨在帮助用户快速创建各种类型的聊天机器人、智能体、AI应用和插件,并将其部署在社交平台和即时聊天应用程序中,如Discord、WhatsApp、Twitter、飞书、微信公众号等。 这个平…

02、java语言为什么要配置环境变量?配置环境变量的两种方案?遇到问题的几种解决办法

探讨笔记 1、java 语言为什么要配置环境变量?其一、未配置环境变量之前,能否执行 java、javac 的命令?其二、未配置环境变量之前,在 Windows 命令行窗口,如何执行相关命令?其三、未配置环境变量之前&#x…

1小时学会SpringBoot3+Vue3前后端分离开发

首发于Enaium的个人博客 引言 大家可能刚学会Java和Vue之后都会想下一步是什么?那么就先把SpringBoot和Vue结合起来,做一个前后端分离的项目吧。 准备工作 首先你需要懂得Java和Vue的基础知识,环境这里就不多说了,直接开始。 …

Spring Boot-基础操作,常用工具,配置文件

lombok工具 首先将lombok的依赖引入 Lombok是一个实用的Java类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。 日志操作 自定义日志打印 有以下两步: 在一个类中先获…

Vue3 实现 Three.js粒子特效

效果 <template><div id"waves" /> </template><script setup> import { ref, onMounted, onUnmounted } from "vue"; import * as THREE from "three";const amountX ref(50); const amountY ref(50); const color …

MySQL统计一个表的行数,使用count(1), count(字段), 还是count(*)?

为什么要使用count函数&#xff1f; 在开发系统的时候&#xff0c;我们经常要计算一个表的行数。比如我最近开发的牛客社区系统&#xff0c;有一个帖子表&#xff0c;其中一个功能就是要统计帖子的数量&#xff0c;便于分页显示计算总页数。 CREATE TABLE discuss_post (id i…

线性模型算法-完结总结篇

简介 该篇文章就是在CSDN上更新的最终版本。 本文章将介绍&#xff1a;机器学习中的线性模型有关内容&#xff0c;我将尽可能做到 详细地介绍线性模型的所有相关内容,模块如下&#xff0c;希望这些将有助于读者了解这种最初步但却强大的算法&#xff1a; 线性回归逻辑回归 S…

【ENSP】VRRP配置方法

VRRP配置步骤 1.配置虚拟ip地址作为网关&#xff0c;进行切换路由器 2.配置vrrp优先级&#xff0c;越大越优先 3.配置延迟抢占时间 4.配置备份组监视接口 AR1路由器配置 u t m #关闭提示 sys …

Zilliz Cloud 助力 AI 在线教育:智慧树的创新之路

在信息技术飞速发展的今天&#xff0c;教育行业正经历着一场深刻的变革。智慧树&#xff0c;作为全球领先的学分课程运营服务平台&#xff0c;始终站在教育创新的前沿。 为了进一步提升教育质量和效率&#xff0c;智慧树携手 Zilliz Cloud&#xff0c;共同开启了一场教育与技术…

Linux——(grep指令及zip/tar压缩指令)

1.grep指令 语法&#xff1a; grep【选项】查找字符串 文件 功能&#xff1a; 在文件中搜索字符串&#xff0c;将找到的行打印出来 常用选项&#xff1a; -i &#xff1a;忽略大小写&#xff0c;所以大小写视为相同 -n &#xff1a; 顺便输出行号 -v &#xff1a;反向选择&…