挂起: 比如读取一个文件要两分钟,那么程序就被挂起两分钟,必须等读取完成后,才会返回给线程完成程序的后续操作。
为了解决挂起问题,微软就弄了个叫做I/O完成端口的机制来提高程序的运行性能。
I/O完成端口:比如读取一个文件,这个操作会立即被返回给线程,然后文件读取被系统处理,当处理的读取操作完成后,在叫线程过来拿读取后的结果,这样程序就不会被卡死。
简单的说就能让程序挂起来的时候,可以执行别的操作。
文件内核对象:比如说,一个文件的存储大小是A-B,那么这就会出现一个文件内核对象来维护他,这是操作系统自动生成的,他所表示的是一个单位和事务。
设备的打开方式—>句柄
拿打开文件示例:当程序调用API,在R3层中会跟R0层通信,燃后R0层会去访问硬件,打开文件。但是很多软件都会去打开文件,为了做到唯一标识,这时在R0层中会产生一个文件内核对象(内核对象只会存在于内存中),R0层如果直接将读取到的文件返回给程序,消耗的资源会非常的多,而且R3和R0层之间是不会直接有数据往来的。R0层会重新开辟一块空间来存储读取到的文件,然后R0成会把内核对象的编号返回到R3层,返回的这个编号就是句柄。!!!!API会根据返回的句柄到R0成开辟的公共空间里面去取出读取进去的文件,然后返回给程序。 所以,句柄其实就是内核对象,一个内核对象代表的就是一个事物的抽象。