1.概念和工具

本章主要介绍Windows操作系统的关键概念和术语

1.概念和工具

1.1操作系统版本

1.2基础概念和术语

1.2.1Windows API

1.2.2 服务、函数和例程

1.2.3 进程、线程和作业

1.2.3.1 进程

1.2.3.2 线程

1.2.3.3 虚拟地址描述符

1.2.3.4 作业

1.2.4 虚拟内存

1.2.5 内核模式和用户模式

1.2.6 终端服务及多个会话

1.2.7 对象和句柄

1.2.8 安全性

1.2.9 注册表

1.2.10 UNICODE

1.3 挖掘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

http://zh.wikipedia.org/wiki/托管代码

http://zh.wikipedia.org/wiki/CLR

深入解析Windows操作系统笔记——CH1概念和术语的更多相关文章

  1. 深入解析Windows操作系统笔记——CH3系统机制

    3.系统机制 微软提供了一些基本组件让内核模式的组件使用: 1.陷阱分发,包括终端,延迟的过程调用(DPC),异步过程调用(APC),异常分发以及系统服务分发 2.执行体对象管理器 3.同步,包括自旋 ...

  2. 深入解析Windows操作系统笔记——CH2系统结构

    2.系统结构 本章主要介绍系统的总体结构,关键部件之间的交互,以及运行在什么环境. 2.系统结构 2.1 需求和设计目标 2.2 操作系统模型 2.3 总体结构 2.3.1 可移植性 2.3.2 对称 ...

  3. 【翻译】《深入解析windows操作系统第6版下册》第10章:内存管理

    [翻译]<深入解析windows操作系统第6版下册>第10章:内存管理(第一部分) [翻译]<深入解析windows操作系统第6版下册>第10章:内存管理(第二部分) [翻译] ...

  4. 【摘抄】深入解析Windows操作系统

    一.线程是一个进程内部的实体,也是Windows执行此进程时的调度实体.若没有线程,进程的程序将不可能运行.线程包含以下部件: 1.一组代表处理器状态的CPU寄存器中的内容. 2.两个栈:一个用于线程 ...

  5. Windows操作系统深入解析原理

    Windows运用程序编写插口(API)是对于Windows电脑操作系统大家族的客户方式系统软件程序编写插口.在32位版本号的Windows营销推广之前,31位版本号Windows电脑操作系统的程序编 ...

  6. windows进程/线程创建过程 --- windows操作系统学习

    有了之前的对进程和线程对象的学习的铺垫后,我们现在可以开始学习windows下的进程创建过程了,我将尝试着从源代码的层次来分析在windows下创建一个进程都要涉及到哪些步骤,都要涉及到哪些数据结构. ...

  7. Windows操作系统

    Microsoft Windows,是美国微软公司研发的一套操作系统,它问世于1985年,起初仅仅是Microsoft-DOS模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家 ...

  8. Windows 操作系统

    Microsoft Windows,是美国微软公司研发的一套操作系统,它问世于1985年,起初仅仅是Microsoft-DOS模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家 ...

  9. Js引擎解析执行 阅读笔记

    Js引擎解析执行 阅读笔记 一篇阅读笔记 http://km.oa.com/group/2178/articles/show/145691?kmref=search&from_page=1&a ...

随机推荐

  1. 点/边 双连通分量---Tarjan算法

    运用Tarjan算法,求解图的点/边双连通分量. 1.点双连通分量[块] 割点可以存在多个块中,每个块包含当前节点u,分量以边的形式输出比较有意义. typedef struct{ //栈结点结构 保 ...

  2. jquery练习

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 疯狂Android讲义 - 学习笔记(二)

    Android应用的用户界面编程 2.1 界面编程与视图(View)组件 Android应用的绝大部分UI组件放在android.widget.android.view包及其子包中,所有UI组件都继承 ...

  4. Struts2例子

    (1)用MyEclipse建立一个Web Project,项目名称为myStruts2,结构如下图: (2)导入struts2需要的包,我是把解压后的struts-2.3.16.3\apps\stru ...

  5. Scalaz(39)- Free :a real monadic program

    一直感觉FP比较虚,可能太多学术性的东西,不知道如何把这些由数学理论在背后支持的一套全新数据类型和数据结构在现实开发中加以使用.直到Free Monad,才真正感觉能用FP方式进行编程了.在前面我们已 ...

  6. FileIputeStream用于读写文件,并且用字节的方式表示出来

    package com.Java; import java.io.FileInputStream; import java.io.FileNotFoundException; import java. ...

  7. Node.js的UnitTest单元测试

    body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; } 在专业化的软件开发过程中,无论什么平台语言,现在都需要UnitTes ...

  8. 与锤子手机HR的对话——创业没有联合创始人,CTO 等高管会把它当做自己的事业吗?

    以下对话,是在被之前的锤子HR磨叽2周约面试折腾的火大的心态下进行…… 这个问题发到知乎,被一群人骂啊……cnblogs都是工程师,估计懂期权参加创业的同学多一些,有空前往知乎声援一下……在这里:ht ...

  9. Intro.js 网站演示

    Intro.js 为您的网站和项目提供一步一步的.更好的介绍 使用简单 引入 js 和 css,然后在代码中加入步骤和介绍. 快速小巧 7 KB 的 JavaScript 和 3 KB CSS,就是全 ...

  10. 25个有用的和方便的 WordPress 速查手册

    如果你是 WordPress 开发人员,下载一些方便的 WordPress 备忘单可以在你需要的时候快速查找.下面这个列表,我们已经列出了25个有用的和方便的 WordPress 速查手册,赶紧收藏吧 ...