深入解析Windows操作系统笔记——CH1概念和术语
1.概念和工具
本章主要介绍Windows操作系统的关键概念和术语
1.1操作系统版本
Windows操作系统版本已经很多了
1.2 基础概念和术语
1.2.1 Windows API
Windows API(应用程序接口),是针对Windows操作系统的系统编程接口。
Windows API有几个分类:
n 基本服务
n 组件服务
n 用户界面服务
n 图形和多媒体服务
n 消息和协议
n Web服务
本书重点介绍基本服务(比如,进程和线程,内存管理,I/O,安全性)。
关于.Net和WinFX
.NET FrameWork由框架类库(FCL)和一个提供托管代码运行环境的(CLR)组成。
CLR提供即时编译,类型检查,垃圾回收和代码访问安全性等。
托管代码:在最初编译时,将源代码编译成中间代码(IL),然后在运行时,使用运行库编译器在受控的环境下,将中间代码编译成机器码。
在微软体系下,认为不是托管代码就是非托管代码。
CLR是一个典型的COM服务器,建立在Windows API之上。
而WinFX就是新的Windows API(为vista特别设计的),也提供了托管代码的功能,但是缺容易混淆,后来改为.Net FrameWork 3。(关于WinFX的介绍在第6版中已经没有了)。
.NET FrameWork是对API的一种扩展。
1.2.2 服务、函数和例程
主要介绍一些书中提到的专业术语:
n Windows API函数:主要是指已经被文档化的可调用的子例程
n 原生的系统服务:指操作系统中未文档化的,可以在用户模式下调用的底层服务,如NtCreateProcess
n 内核支持函数(例程):值操作系统内部且只能被内核调用的子例程
n Windows服务:由Windows服务管理器启动的进程(在注册表中,认为驱动定于为服务,但是书中并不这样引用)
n DLL:一组可调用的子例程,合起来被链接成一个二进制文件,应用程序可以动态加载这些二进制文件。
1.2.3 进程、线程和作业
1.2.3.1 进程
程序是指一个静态的指令序列,而进程是程序的实例化,拥有各种资源。一个进程由以下元素组成:
n 私有的虚拟地址空间
n 程序定义的代码和数据,被映射到进程的虚拟地址空间中
n 一个已打开的句柄列表,这些句柄指向各种资源
n 称为访问令牌的安全环境,标示了改进程关联的用户,安全组和特权
n 进程ID,可以唯一识别一个进程
n 至少一个线程
每个进程都指向一个父进程或者创建者进程,但是如果父进程被关闭,进程就会指向一个不存在的父进程。
1.2.3.2 线程
线程是在进程中的实体,也是Windows执行此进程的调度实体,没有线程进程是不可能运行的。
线程的基本部件:
n 一组代表处理器状态的CPU寄存器中的内容
n 2个栈,一个用于线程在内核模式下执行,一个用于线程在用户模式下执行
n 线程局部存储区(TLS),线程私有存储区域,各个子系统,运行库,DLL都会用到这个区域
n 唯一表示线程的线程ID
n 线程自己的安全环境
易失的寄存器,栈,私有存储区域合起来称为线程的环境。
虽然线程有自己的环境,但是同一个进程内的线程共享该进程的虚拟地址空间及其他属于该进程的资源。
也就是说线程可以读写进程内其他线程的内存,但是不能跨进程的访问,除非另外一个进程把虚拟地址空间变成共享内存区。
1.2.3.3 虚拟地址描述符
虚拟地址描述符是一些数据结构,内存管理器使用这个数据结构来记录一个进程所使用的虚拟地址。
1.2.3.4 作业
作业是指,一组进程当一个整体来维护管理。
1.2.4 虚拟内存
Windows 实现了平面地址空间的虚拟内存系统,每个进程感觉自己独立拥有一个很大的私有地址空间。虚拟内存提供了内存逻辑视图,并不对应于内存物理布局。运行的时候,内存管理器借助硬件支持,讲虚拟地址翻译成真正的物理地址。
进程之间就隔离了,一个进程不会访问到另外一个进程的东西。
大多数系统拥有的物理内存比虚拟地址小,所以当内存不够的时候,内存管理器会把内存移动到磁盘,释放内存,让被的进程使用。
在32bit下,4GB的地址空间,其中2GB是内核地址空间,2GB是用户模式地址空间,在起用3gb参数,用户模式地址空间时3GB,内核模式地址空间时1GB
还有AWE地址窗口扩展,可以让32bit系统访问64GB的内存。缺点是程序员自己解决映射关系。
在64bit下地址空间可以达到8T,在Itanium系统上可以达到7T
1.2.5 内核模式和用户模式
为了避免用户程序读写关键操作系统数据,Windows使用了2中处理器访问模式:用户模式,内核模式。用户程序代码运行在用户模式,系统代码运行在内核模式。内核模式允许访问所有系统内存和cpu指令。用内核模式来保护操作系统稳定。
虽然Windows 进程都有自己的地址空间,但是内核模式的操作系统和驱动都是使用同一个虚拟地址空间。
系统空间中的页面只有在内核模式下可以访问,用户空间中的页面在用户模式下都可以访问。
内核模式下运行的代码可以访问所有系统空间中的内存。
因为进入内核模式就缺少保护,所以第三方设备驱动程序加载时要小心。
当用户模式调用系统服务的时候,会切换到内核模式下,当要将cpu控制权返回给用户的时候要先切换到用户模式。
1.2.6 终端服务及多个会话
略
1.2.7 对象和句柄
内核对象是某一个静态定义的对象类型的单个运行时的实例。对象类型包含了一个系统定义的数据类型,在该对象上可用的函数,及一组对象属性。如所有的进程是进程对象类型的一个实例。
对象和普通数据结构的区别是,对象的内部结构是被隐藏的。必须要调用对象服务才能读写对象内部数据。
对象技术的实现了操作系统4个系统任务:
n 提供了可供人读的名称
n 进程间共享资源和数据
n 保护资源,避免未授权访问
n 引用跟踪,如果不再使用可以释放掉。
1.2.8 安全性
Windows的核心安全功能包含:针对所有可共享对象的自主保护,安全审计,登录时密码认证,以及一个资源被一个进程释放后,其他进程看不到上一个进程留下的资源。
1.2.9 注册表
注册表是系统数据库,包含了引道和配置系统所有的信息。也反映了内存中易失的数据窗口,比如当前的硬件状态,性能计数器。
1.2.10 UNICODE
略
1.3 挖掘Windows内部机理
主要介绍了一些调试工具,和Windows SDK
参考
http://zh.wikipedia.org/wiki/WinFX
http://en.wikipedia.org/wiki/Framework_Class_Library
深入解析Windows操作系统笔记——CH1概念和术语的更多相关文章
- 深入解析Windows操作系统笔记——CH3系统机制
3.系统机制 微软提供了一些基本组件让内核模式的组件使用: 1.陷阱分发,包括终端,延迟的过程调用(DPC),异步过程调用(APC),异常分发以及系统服务分发 2.执行体对象管理器 3.同步,包括自旋 ...
- 深入解析Windows操作系统笔记——CH2系统结构
2.系统结构 本章主要介绍系统的总体结构,关键部件之间的交互,以及运行在什么环境. 2.系统结构 2.1 需求和设计目标 2.2 操作系统模型 2.3 总体结构 2.3.1 可移植性 2.3.2 对称 ...
- 【翻译】《深入解析windows操作系统第6版下册》第10章:内存管理
[翻译]<深入解析windows操作系统第6版下册>第10章:内存管理(第一部分) [翻译]<深入解析windows操作系统第6版下册>第10章:内存管理(第二部分) [翻译] ...
- 【摘抄】深入解析Windows操作系统
一.线程是一个进程内部的实体,也是Windows执行此进程时的调度实体.若没有线程,进程的程序将不可能运行.线程包含以下部件: 1.一组代表处理器状态的CPU寄存器中的内容. 2.两个栈:一个用于线程 ...
- Windows操作系统深入解析原理
Windows运用程序编写插口(API)是对于Windows电脑操作系统大家族的客户方式系统软件程序编写插口.在32位版本号的Windows营销推广之前,31位版本号Windows电脑操作系统的程序编 ...
- windows进程/线程创建过程 --- windows操作系统学习
有了之前的对进程和线程对象的学习的铺垫后,我们现在可以开始学习windows下的进程创建过程了,我将尝试着从源代码的层次来分析在windows下创建一个进程都要涉及到哪些步骤,都要涉及到哪些数据结构. ...
- Windows操作系统
Microsoft Windows,是美国微软公司研发的一套操作系统,它问世于1985年,起初仅仅是Microsoft-DOS模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家 ...
- Windows 操作系统
Microsoft Windows,是美国微软公司研发的一套操作系统,它问世于1985年,起初仅仅是Microsoft-DOS模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家 ...
- Js引擎解析执行 阅读笔记
Js引擎解析执行 阅读笔记 一篇阅读笔记 http://km.oa.com/group/2178/articles/show/145691?kmref=search&from_page=1&a ...
随机推荐
- iTextSharp快速使用指南
前言 最近公司一直使用iText开发PDF报表,使用一段时间之后发现iText这个类库虽然是庞大无比,但作为程序猿我们不需要知道所有的类和方法,我们只需要知道如何使用即可. 所以这篇文章就是告诉大家如 ...
- SSH实例(7)
运行结果. 浏览课程: 添加课程: 还有删除课程,这里就不演示了.
- java servlet手机app访问接口(三)高德地图云存储及检索
这篇关于高德地图的随笔内容会多一点, 一.业务说明 对应APP业务中的成员有两类,一是服务人员,二是被服务人员, 主要实现功能, 对APP中的服务人员位置进行时时定位, 然后通过被服务人员登 ...
- objective-c 宏定义UIAlertController公用方法
IOS的方法经常都有更迭,以前弹出框使用 AlertView,现在使用UIAlertController AlertView的宏定义 #define showMessage(__MESSAGE__) ...
- JavaScript对象(Object)
JavaScript的简单数据类型包括数字.字符串.布尔值.null值和undefined值,其他所有的值都是对象.数字.字符串.布尔值“貌似”对象,因为他们拥有方法,但是他们是不可变的. ...
- bootbox.js
bootbox:一个弹出框插件,官网看一下例子就好了:http://bootboxjs.com/examples.html 目前来说应该只要调用bootbox.js就可以了,没有css的问题 1.有最 ...
- Intro.js 网站演示
Intro.js 为您的网站和项目提供一步一步的.更好的介绍 使用简单 引入 js 和 css,然后在代码中加入步骤和介绍. 快速小巧 7 KB 的 JavaScript 和 3 KB CSS,就是全 ...
- bootstrap字体图标在谷歌显示正常,在火狐显示异常的问题
bootstrap字体图标的使用 现在有很多的网站支持字体图标,我所知道的有bootstrap,fontawesome,iconmoon,等等,可能还有其他我并不知道 bootstrap只要你的文件夹 ...
- Zend Studio 中导出 PHP 语法颜色配置
Zend Studio 中,虽然可以自行配置 PHP 语法颜色,但是,没有导出配置的按钮.介个,总不能每次都配置一次吧,那不是累死伦家啦?有图有真相: 强迫症患者总是无法停止折腾,虽然内心总有个声音不 ...
- 【zepto学习笔记01】核心方法$()
前言 我们移动端基本使用zepto了,而我也从一个小白变成稍微靠谱一点的前端了,最近居然经常要改到zepto源码但是,我对zepto不太熟悉,其实前端水准还是不够,所以便私下偷偷学习下吧,别被发现了 ...