驱动学习笔记(一)


首先要想学习好驱动就的了解很多关于驱动的事,因为驱动程序都是加载在windows 的内核模式下,他与windows系统的其他组件进行密切交互,其实微软让windows尽可能的在不同的硬件平台上运行,增加可移植性,必须根据市场的需要相对容易的移植到新的体系结构上,下面是微软为了解决在操作系统上出现的几大难题的具体办法,有句话叫“知己知彼、百战不殆”,呵呵

为了实现可移植性,
微软把windows 设计成软件分层的体系结构,和硬件紧密联系的只有硬件抽象层(HAL ,hardware abstraction layer)而操作系统的其他重要的组件几乎和硬件没有关系,就使操作系统的大部分不依赖特定硬件,当需要windows移植到别的平台时,只需要修改相关的硬件抽象层,还提出面向对象编程的思想

解决兼容性问题:
要想一定更可执行程序可以运行在不同的windows版本上,直接制定了统一的可执行文件格式,并且保持一致的API接口(虽然内部实现不同),保证二进制级的兼容性。还引入了环境子系统,不同的环境子系统提供相应的API支持(小菜认为是虚拟机的前身)

解决可靠性:
windows的健壮性和可靠性主要是源于用户模式和内核模式的划分,应用程序运行在特权级别低的用户模式,在用户模式下,所有的错误操作都会被早做系统侦测到。并给与提示,而操作系统的大部分核心代码,运行于特权级别比较高的内核模式下,操作系统是经历严格测试的,可以保证正确性,对于任何涉及操作硬件的操作、应用程序都无法在用户模式下完成,必须通过对内核模式中的系统调用来完成,in a word ,就是类似我们的中央集权制度

解决健壮性:
windows的健壮性同样来自自身的分层设计,而且每一层的特权是不同的,处在最上层的应用程序,对于操作系统的造作就就仅限于对API的操作,API
是操作系统给用户层的唯一接口,当应用程序想访问硬件设备的时候,必须向操作系统发出请求,操作系统会检测到应用程序通过API提出的请求,并校检
请求的参数,当参数非法时,会返回一个错误,这大大提高系统的健壮性和可靠性

解决可扩展性:
可扩展性是指操作系统方便增加新的功能和支撑新的硬件,并且对已有的代码影响达到最小,早在win2000中,操作系统就实现了一个跨越性的改变就是在把内核在从执行体组件中分离出来,操作系统只是负责关于线程的调度工作,线程运行在自己的线程上下文中,线程上下文就是指CPU寄存器的状态,比如堆栈寄存器、指令寄存器、还包括线程ID、线程的优先级、线程的本地存储等相关信息。

内核的主要作用:
内核的主要作用是实现调度线程活动,其他的操作系统组件如内存管理组件、进程管理组件等作为独立的内核组件,统称为执行程序组件,执行程序组件暗战模块化的方法设计,在需要改进的时候可以修正或者增加这行程序组件

对于I/O 处理:
windows 的I/O操作是基于异步设计的,也就是在线程在发起一个I/O请求的时候。可以不等待这个I/O 操作完成,就发起下一个I/O请求,这样CPU就不会浪费时间花在等待I/O操作完成上

对于多任务处理:
windows是基于多进程和多线程,并且尽可能使多个任务并行执行,在内核调度线程的时候,应该是尽可能多让各个线程看上去是在同事运行的,而不是都在等待状态,这样会最小化处理器的等待时间,这样就解决了windows的CPU的高度并行化

对于异步性 的支持:
windows是完全支持异步操作,当用户提出一个I/O 请求的时候,不用等到I/O 操作结束就可以立即返回,接着去执行其他的操作,这样的就是说CPU不用花时间浪费在等待上,而是去做更有意义的事情。这样大大提高和了操作系统对I/O 的吞吐量,在我们编写驱动程序的时候应该让程序尽可能支持异步操作,提高I/O 吞吐能力

上面就是为了学习在windows这个庞然大物上编程索要做的科普,其实上面的一些知识点也不过是操作系统的特点,学过《操作系统原理》的小伙伴都知道哈,简单的概括就四条:1.实时性,2.异步性,3.可扩展性。4.共享性

一、用户模式和内核模式

总体上windows是分为内核模式(kernel mode ) 和 用户模式(user mode),说到操作系统的内核模式和用户模式,一般是和CPU的特权层联系在一起,intel 的386 CPU 就有四个特权层,分别是第0环(Ring 0)、第1环(Ring 1)、第2环(Ring 2)、第3环(Ring 3)。 ring 0 是最高特权层,就是可以执行任意代码,而在ring 3层就是最低特权级别,执行有限代码,其他的CPU也是也是有类似的特权级别windows的核心代码都是运行在内核模式下,而非内核代码是运行在用户模式下,运行在内核模式下的windows核心组件是安全的,切不会受到恶意攻击,所以这些核心组件可以进行所有权限的操作,而在用户模式下的应用程序是不安全的容易受到攻击,所以用户模式下的应用操作是受限的,如果应用程序想尽心一些敏感造作,如访问物理内存,物理端口,应用程序是需要向内核模式下的组件提出请求

二、操作系统与应用程序
操作系统与应用程序是相互隔离的,操作系统的核心代码是运行在特权模式下的,即内核模式,而应用程序是在非特权模式下的,即用户模式,操作系统和应用程序的关系类似于服务器(server)和客户端(client)的关系,一个服务端对应多个客户端(其实一个驱动对象对应多个设备对象)


三、操作系统分层
这个就不细讲了,都是赘述。。。。

四、windows操作系统总体架构
windows即可以运行在单CPU的PC上,也可以运行在对称的多CPU的PC(AMD负载平分),也可以运行在主从多CPU的PC上(intel 386 多核,负载主要在主CPU上)win32是windows为了兼容其他版本的windows程序打造的其中一个最主要子系统


五、应用程序和win32子系统
如vc提供的 MFC,就是在win32和应用程序之间加了一层封装而已,windows API 主要分为3类,USER函数,GDI函数,和KERNEL函数
USER函数:这类函数管理窗口、菜单、对话框和控件
GDI函数:这类函数在物理设备上执行绘图操作
KERNEL函数:这类函数管理非GDI资源,如进程、线程、文件和同步服务,

操作系统在加载应用程序时,还会将user32.dll 、gdi32.dll、和kernel32.dll加载到内存,其他的不管需要加载啥DLL都离不开这三个DLL ,在win2k的之前,三个函数完全担任windows的重担,(就像USA的三权制衡一样),到win2k上三个系统的功能被完全抽象进了内核模式,这三个DLL就只剩下了“躯壳”了,之所以要直接把user32和GDI模块实现移进内核是为了提高运行速度,减少在层次切换带来的花销,
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值