Windows编程学习笔记01-Windows系统概述

Windows的体系结构

Windows体系结构是分层的模块系统,主要层次有硬件抽象层HAL、内核、执行体和大量的子系统集合。前面三个都运行在保护模式下,而各子系统都在用户模式下运行。子系统又可分为环境子系统和保护子系统,其中环境子系统仿真不同的操作系统,保护子系统提供安全功能。如图1-3所示。

执行体:动态链接库、系统进程、用户进程、服务进程

子系统:环境子系统、保护子系统

在这里插入图片描述

在处理器的存储保护中,主要有两种权限状态:

  • 核心态(管态)

    也被称为特权态,是操作系统内核所运行的模式,运行在该模式的代码,可以无限制地对系统存储、外部设备进行访问。

  • 用户态(目态),指非特权状态。

    在用户态下,执行的代码被硬件限定,不能进行某些操作,比如写入其他进程的存储空间,以防止给操作系统带来安全隐患。在操作系统的设计中,用户态也类似,指非特权的执行状态。内核禁止用户态下的代码进行潜在危险的操作,比如写入系统配置文件、杀掉其他用户的进程、重启系统等。

1.内核-核心态

1)内核定义

内核是运行在核心态的一个程序,执行Windows操作系统最基本的操作。

内核代码短小紧凑,可移植性也很好。通常,除了中断服务例程,正在运行的线程是不能抢先内核的。

2)内核主要功能
  • 线程调度
  • 陷入处理和异常调度
  • 中断处理和调度
  • 多处理器同步
  • 供执行体使用的基本内核对象。

2.硬件抽象层 (HAL)-核心态

1)HAL定义

Windows操作系统设计的一个至关重要的方面就是在多种硬件平台上的可移植性,HAL就是关键。HAL是一个可加载的核心态模块HAL.dll

2)HAL功能
  • 为运行在Windows系统上的硬件平台提供低级接口
  • 隐藏各种与硬件有关的细节,例如I/O接口、中断控制器一级多处理器通信机制等任何体系结构专用的和依赖于计算机平台的函数。

3.执行体-用户态

动态链接库、系统进程、用户进程、服务进程?

1)Windows的执行体是NTOSKRNL.EXE的上层(内核是其下层)。

2)执行体可以从用户态导出并且可以调用函数,这些函数的接口在NTDLL.DLL中,通过Win32API可以对它们进行访问。

4.系统进程和系统线程

1)系统进程

系统进程是一种只运行在核心态的“系统线程”宿主。

2)系统线程

具有一般用户态线程的所有属性和描述表,不同点在于它们仅运行在内核态,执行加载于系统空间中的代码。另外,系统线程没有用户进程地址空间,因此必须从系统内存堆中分配动态存储区。

系统线程只能从内核态调用。Windows系统一级不同的设备驱动程序在系统初始化时创建系统线程以执行那些需要线程描述表的操作,例如,发布和等待I/O或其他对象、轮询一个设备等。

系统线程与用户线程的区别

① 系统线程仅运行在核心态

② 系统线程必须从系统内存堆中分配动态存储区

③ 系统线程执行加载于系统空间中的代码

Windows工作原理

动态链接

Windows环境中运行的程序可以共享存储在所谓动态链接库(Dynamic-Link Libraries,DLL)文件中的例程。Windows提供了在运行时把程序和动态链接库中的例程链接起来的机制。其实Windows本身基本上就是一套动态链接程序库。

Windows工作原理的中心思想就是“动态链接”概念。Windows自身带有一大套函数,应用程序就是通过调用这些函数来实现它的用户界面和在屏幕上显示文本与图形的。这些函数都是在动态链接库里实现的。这些文件的名称都带有后缀.dll,或有时带有后缀.exe。在Windows 98中,这些文件通常放在\Windows\SYSTEM子目录下,而在Windows NT中,则放在\WINNT\SYSTEM和\WINNT\SYSTEM32子目录下。
早期 Windows 的大部分只是实现了3个动态链接库。它们分别代表了Windows 的3个主要的子系统,即内核(kernel)、用户(user)以及GDI。虽然新版 Windows中子系统增加了不少,但是通常Windows程序调用的大部分函数实际上仍然以这3个模块为主。

  • 内核(在16位的KRNL386.exe及32位的KERNEL32.DLL中实现)负责操作系统的那些传统工作,包括内存管理、文件输入/输出及任务管理等。

  • 用户(在16位的User.exe及 32位的User32.DLL中实现)指的是用户界面,负责所有的窗口管理。

  • GDI(在16位的GDI.exe及32位的GDI32.DLL中实现)就是图形设备接口,负责在屏幕或打印机上显示文本与图形。

    Windows 98带有上千个函数以供应用程序调用。每个函数都有一个意义明确的名字,比如CreateWindow。不用猜,这个函数是帮程序建立窗口用的。应用程序可能调用的所有函数必须先要在头文件里声明。
    在 Windows程序中,调用Windows 函数与调用C语言的库函数(如 Strlen),没什么两样。最主要的区别就是C语言库函数的机器代码会直接链接到你的程序代码中,而Windows函数则是放在你的程序之外的 DLL里。
    当链接Windows程序以生成执行文件时,一定得链接你的编程环境所提供的特殊的“导入库”(import library)。这些导入库包含所有Windows函数调用要碰到的动态链接库的名字及引用信息。链接程序利用这些信息构建EXE 文件中的表格,当装入程序的时候,Windows要靠这些表格来解析Windows函数调用。
    当Windows程序运行时,它通过一个叫做“动态链接”的进程与Windows接口。每个Windows 的exe文件包含它所要用的各个动态链接库以及库中的函数的引用地址。当一个Windows程序被装入内存之后,程序中的函数调用都被解析成dll函数入口的指针,同时这些被调用的函数也被装入内存(如果还没有在内存中的话)。

Windows历史

版本发布时间说明
Windows 1.01985年11月正式推出发放市场
Windows 2.01987年11月在用户界面上作了若干改动。采用重叠窗口来取代了平铺窗口。增强了键盘及鼠标接口的功能,尤其是针对菜单以及对话框窗口。
Windows 2.1
Windows 3.01990年5月支持英特尔80286、80386以及80486微处理器的16位保护模式操作,可以享用的内存增大到了16MB
Windows 3.11992年4月若干重大特点包括有矢量字体技术,多媒体,对象链接与嵌入(Object Linking and Embedding,OLE),及标准通用对话框。Windows 3.1必须在80286或80386处理器的保护模式下运行,并最少需要1MB的内存。
Windows NT1993年7月32位、抢占式、多任务、多线程、图形操作系统
第一个支持英特尔80386、80486以及奔腾微处理器32位模式的版本
可以访问32位地址空间,并采用32位的指令集。
Windows 951995年8月和 Windows NT一样,Windows 95也支持英特尔80386及其后续微处理器的32位编程模式。
Windows 981998年6月32位、抢占式、多任务、多线程、图形操作系统
主要改进包括性能方面的提高,硬件方面更强有力的支持,以及与因特网及万维网更为紧密的整合。

术语

GUI

图形用户界面(Graphical User Interface,):有时亦称为“虚界面”或“图形窗口环境”。

GDI

针对 Windows环境编写的程序用不着直接访问屏幕或打印机之类的图形显示硬件。Windows自己带有一种图形编程语言(叫做图形设备接口(Graphics Device Interface,GDI)),用来方便地显示图形和格式化文本。Windows把显示硬件虚拟化。这样只要配有合适的Windows设备驱动程序,针对Windows环境编写的程序就可以在任何显卡或打印机上运行。应用程序本身并不需要知道系统到底配备了什么类型的设备。

多任务:多个程序同时运行。

抢占式:用系统时钟把系统中正在运行的各个程序的处理时间分段。

多线程:一个进程有多个线程。

参考:
《Windows 程序设计 第5版》

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘旭员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值