windows操作系统
文章平均质量分 81
小飞侠hello
这个作者很懒,什么都没留下…
展开
-
并行、并发、同步、异步、阻塞、非阻塞
阻塞、非阻塞、多路IO复用,都是同步IO,异步必定是非阻塞的,所以不存在异步阻塞和异步非阻塞的说法。换句话说,只有用户线程在操作IO的时候根本不去考虑IO的执行全部都交给CPU去完成,而自己只等待一个完成信号的时候,才是真正的异步IO。异步则相反:“调用”在发出之后,这个调用就直接返回了,所以没有返回结果。当数据没有准备的时候阻塞,往往需要等待缓冲区中的数据准备好过后才处理其他的事情,否則一直等待在那里。IO多路复用(select,poll,epoll)(同步非阻塞,严格地来讲,是把阻塞点改变了位置);原创 2022-12-31 11:50:27 · 717 阅读 · 0 评论 -
Windows io完成端口
Windows 提供一种称为I/O完成端口(I/O Completion Port)机制,能够让I/O的完成处理交由一个专门的线程池来完成,而线程池的线程数量是一个可配置的参数。这种做法将I/O请求的发起动作与完成处理分离到了不同的线程中。CreateIoCompletionPort函数会创建一个I/O完成端口,并使其与一个或多个文件句柄发生关联。I/O完成端口是内核对象。原创 2022-10-20 14:57:51 · 1523 阅读 · 0 评论 -
Windows 设备io
即使函数成功,但若文件存在,且指定了CREATE_ALWAYS 或 OPEN_ALWAYS,GetLastError也会设为ERROR_ALREADY_EXISTS。并且 . 当 FILE_FLAG_OVERLAPPED 被指定 , 程序必须执行重叠参数 ( 指向 OVERLAPPED。当你指定 FILE_FLAG_OVERLAPPED 时 , 读写文件的函数必须指定一个 OVERLAPPED 结构 .FILE_FLAG_OVERLAPPED ,表示是异步io.因为默认是同步io的。原创 2022-10-13 16:51:32 · 426 阅读 · 0 评论 -
Windows内存体系
每一个运行的进程,都会获得一个 4G的内存地址空间,这就是所谓的虚拟内存,这里面的所有地址都是虚拟的,和物理内存啥的并不直接挂钩。而在操作系统那头,这些虚拟地址所映射到的实际地 址,可以是物理内存地址,也可以是页面文件的地址。如果是物理内存小于这个虚拟地址的范围的话,映射的物理内存还可能是重复的物理内存地址片段,使用的时 候可以通过清空内存数据,将内存数据写入页面文件这样的方式进行物理内存的重新利用,以提高物理内存的利用效率。:表示的是页面的大小,32位操作系统是4K是内存管理的最小单位。原创 2022-10-13 11:27:38 · 473 阅读 · 0 评论 -
windows线程池
【代码】windows线程池。原创 2022-09-20 15:20:18 · 676 阅读 · 0 评论 -
信号量内核对象 semaphore
信号量内核对象:(semaphore)对资源进行计数:最大资源计数(表示信号量控制的最大资源的数目)、当前资源计数(表示信号量当前可用的资源数目) 信号量规则:1.如果当前资源计数大于0,信号量处于触发状态 2.如果当前资源计数等于0,那么信号量处于未触发状态 CreateSemaphore() lInitialCount:表示一开始可以使用的资源数目,即当前资源计数;lMaximumCo......原创 2019-11-18 13:23:35 · 377 阅读 · 0 评论 -
windows 互斥量内核对象 Mutex
互斥量内核对象 Mutex 互斥量内核对象能够确保一个进程独占对一个资源的访问。互斥量与关键段(线程同步方式)的行为完全相同,当互斥量是内核对象,而关键段是用户模式下的的同步对象 互斥量对象包含: 一个线程 ID ,使用计数和递归计数 。线程 ID 表示当前占用该互斥量的线程 ID ,递归计数表示该线程占用互斥量的次数,使用计数表示使用互斥量对象的不同线程的个数 互斥量规则:1.线程I......原创 2019-11-18 13:18:52 · 1075 阅读 · 1 评论 -
windows 核心编程下的内存映射文件
虚拟内存实现的硬件基础是分页机制,关于分页机制本文再此不做介绍。虚拟内存实现的另外一个重要基础是局部性原理。局部性是指程序总是趋向于使用最近使用过的数据和指令,也就是说程序执行时所访问的存储器地址分布是相对集中的。局部性原理是应用虚拟内存提升性能的主要原因,也是虚拟内存却别与内存映射文件的本质。内存映射文件虚拟性并不是由于局部性,而是使进程虚拟地址空间的某个区域建立映射磁盘文件的全部或部分内容.........原创 2020-02-26 19:24:38 · 1428 阅读 · 0 评论 -
Windows堆栈
堆的物理存储器来自页交换文件。进程默认堆1堆在进程的地址空间上。2.默认情况下,进程堆的大小为1MB.3.动态链接库是没有所谓的进程默认堆。4.获取进程的默认堆的函数 getprocessheap额外堆1.创建额外堆HeapCreateHANDLE WINAPI HeapCreate(__in DWORD flOptions,__inSIZE_Tdw......原创 2020-02-26 20:06:11 · 832 阅读 · 0 评论 -
windows 内核对象核心知识点
常见的内核对象:事件对象、文件对象、I/O完成端口、邮件槽、互斥对象、进程对象、线程对象、信号量对象、可等待的计时器、线程池工厂对象。 一个对象是不是内核对象,通常可以看创建此对象API的参数中是否需要:PSECURITY_ATTRIBUTES 类型的参数。 内核对象是存在内核地址空间的一种数据结构(结构体),它由操作系统分配,而不是具体的某个进程管理。通过某种。共享机制,系统上所有的进程......原创 2020-02-26 19:22:07 · 740 阅读 · 1 评论 -
windows 线程核心内容
线程 线程由2部分组成:线程的内核对象(存放线程统计信息)和 线程栈(维护线程执行所需的所有函数参数和局部变量) 假如一个进程由2个以上的线程运行,这些线程共享同一地址空间,共享内核对象句柄(因为句柄表是针对每一个进程的) 新线程与负责创建的那个线程在相同的进程上下文中运行,因此新线程可以访问进程内核对象的所有句柄,进程的所有内存以及同一进程中其他所有线程的栈 createthre......原创 2020-02-26 19:23:50 · 655 阅读 · 1 评论 -
windows 进程学习
1.进程分2部分组成:a.内核对象,操作系统管理内核对象,内核对象保存进程统计信息。b.地址空间,包括可执行程序或dll的代码和数据。包括线程堆栈。2.window的入口点函数。但在实际运行中,会先执行c/c++ 运行时启动函数,进行初始化c/c++ 运行库,还有全局变量和j静态c++对象构造。具体如下:此外相关的函数有:getversionex: getcomm......原创 2020-02-26 19:22:51 · 839 阅读 · 1 评论