页面回收

背景

linux操作系统设计的时候提供了cache的功能,如果有空闲内存就可以用来作为cache提升性能,例如page cache缓冲硬盘中的内容,dcache,icache缓存文件系统的metadata数据,这些内容是为了提升性能而设计的,还可以再次从硬盘中重新读取来构建对象,所以这部分内容可以在内存紧张的时候可以直接释放。
另外除了提供缓存机制,还提供了缓冲机制,当写文件的时候,默认不会直接进行写入硬盘,而是会在page cache中缓冲,一直到超时或者脏页过多时进行回写操作,这样可以减少随机的IO数量和重复写操作,这部分页在内存紧张的时候需要首先回写到硬盘,之后可以进行回收.
对于匿名页,例如进程中的堆,栈区域,它是没有后备文件的,linux为匿名页创建了swap机制,可以是分区,也可以是文件,在开启了swap功能的系统中可以将匿名页当做文件一样写到磁盘中,在访问数据的时候再次从swap中恢复.

页面回收的基本思想就是将磁盘和内存看做一体,只是访问速度有差异,将经常访问的数据放到速度比较快的内存中,不经常访问的数据放到磁盘上.

用户进程的地址空间相互隔离,而内核是所有应用共用的地址空间,虽然同样都是经过页表映射访问物理内存,但是他们的访问频度相差很大,所有的进程陷入到内核中时都要访问内核空间的数据,所以对内核进行页面回收是十分不明智的.

用户进程只能看到虚拟地址空间,访问时通过页表转换到物理地址,而linux上内核对应用进程提供的内存都是虚假的,只有在实际访问的时候才按需分配,也叫lazy paging. Linux中通过MMU转换时的异常提供修复机制,也就是我们常说的缺页异常,是应用进程lazy paging的基础,理论上用户空间的所有虚拟地址都可以不分配实际的物理内存,只有实际访问时在缺页异常中进行页面分配、文件映射等操作。

linux在设计的时候是面向多种应用的,虽然页面回收包括其中的swap,背后的lazy paging机制非常影响性能,但是通过复用物理内存确实可以提升系统的寿命和运行容量。

下面系统的总结内存回收的内容,解决几个问题:

  1. 哪些页面可以被回收
  2. 页面回收的策略
  3. 页面回收的细节实现
  4. 对于不用页面的回收方式

页面回收的对象

先来看一下哪些页不能不回收,首先内核中的页绝大多数都不能别回收,linux除了它的核心代码之外还有module模块,当module被加载之后除了可以被卸载,只能使用部分export的api之外,它得到的待遇和core中的代码是相同的,总之对于加载成功的module是完全信任的。而内核空间是所有进程公用的,内核中使用的页通常是伴随整个系统运行周期的,频繁的页换入和换出是非常影响性能的,所以内核中的页基本上不能回收,不是技术上实现不了而是这样做得不偿失。
另外一种是应用程序主动申请锁定的页,它的实时性要求比较高,频繁的换入换出和缺页异常处理无法满足它对于时间上的要求,所以这部分程序可能使用mlock api将页主动锁定,不允许它进行回收。

其他用途使用的物理页基本上都是可以进行回收的,可以分成两大类:

  1. 文件映射的页,包括page cache,slab中的dcache,icache,用户进程的可执行程序的代码段,文件映射页面。
    其中page cache包括文件系统的page,还包括裸块设备的buffer cache,万物皆文件,block也是一种文件,它也有关联的file,inode等。另外根据页是否是脏的,在回收的时候处理有所不同,脏页需要先回写到磁盘再回收,干净的页可以直接释放。
  2. 匿名页,包括进程使用各种api(malloc,mmap,brk/sbrk)申请到的物理内存(这些api通常只是申请虚拟地址,真实的页分配发生在page fault中),包括堆、栈,进程间通信中的共享内存,pipe,bss段,数据段,tmpfs的页。这部分没有办法直接回写,为他们创建swap区域,这些页也转化成了文件映射的页,可以回写到磁盘。

页面回收的策略

页面回收主要有两种方式:后台异步回收和同步阻塞回收,其中后台回收主要是指kswapd线程中进行的页面回收,两种方式除了是否堵塞当前的页面分配之外,回收的力度也有所不同,kswapd在zone的空闲页满足high watermark之后就停止回收,而直接回收在回收到一定数量的页(当前32个页)就会停止.
直接回收是在申请页面的路径上,它的上下文比较复杂,可能是IO栈上或者文件系统中申请的页面,这时候页面回收的时候不能进行回写磁盘的动作,因为这时候的回写可能又会触发新一轮的页面申请,陷入到死循环中。

页面回收的基准watermark

申请内存的时候,首先会检查是否内存紧张,也就是到达当前zone的空闲页帧是否小于watermark,如果低于low watermark会开始内存回收,保证申请结束后水位还能满足要求,这样尽量在内存开始紧张的时候就后台慢慢回收,此时只回收那些没有映射的页并且不需要回写的页。
申请不到内存之后,首先会wakeup kswapd线程在后台进行回收,等待短时间之后再次尝试页申请,系统希望通过kswapd后台回收方式能够得到足够的内存,这样不会影响正常的页面申请.
最后申请失败,则开始同步内存回收,这时候直接堵塞住了内存申请的路径,页面回收结束后再次开始进行页面申请。

alloc_page申请内存时会表明自身的紧急情况,用来指示当内存紧张时是否应该等待

__GFP_REPEAT:内存紧张时,等待内存回收结束,之后再次尝试,目前重试3次
__GFP_NOFAIL:内存紧张时,唤醒kswapd之后周期性再次尝试获取页,如果一直没有获取到就一直循环
__GFP_NORETRY:尝试获取内存,获取不到就返回失败
__GFP_NOMEMALLOC:清除该标志位的时候,申请的时候不管watermark是否到达min,只要有就分配给他

水位的计算可以通过vm.min_free_kbytes来调节,系统默认是1024,根据zone的大小进行调节,和min_free_kbytes成正相关的,但是规定了上下限128k-64M,这样在小内存的系统中仍然会预留足够的紧急内存处理核心模块的内存分配,在大内存系统中不会造成太多的空闲内存浪费,这些是通用场景的经验调值,可以根据自身业务场景调节的。紧急内存是为了特殊场景使用的,例如页面回收,对于脏页和匿名页需要写到磁盘上,这中间需要经过文件系统,IO栈等,他们也需要申请buffer_head之类的内存.

 * min_free_kbytes = 4 * sqrt(lowmem_kbytes)   //DMA+DMA32+NORMAL zone bytes* 16MB:    512k                                                                    * 32MB:    724k                                                                    * 64MB:    1024k * ......* 16384MB: 16384k

根据各个zone占据low mem的比例平分了min_free_kbytes,计算出每个zone的pages_min和low,high水位参数。

enum zone_watermarks {                                                              WMARK_MIN,                                                                      WMARK_LOW,                                                                      WMARK_HIGH,                                                                     NR_WMARK                                                                                                                                   
};
名称 字段描述 计算方式
min zone的预留页面数目,如果空闲物理页面的数目低于 pages_min,那么系统的压力会比较大,此时,内存区域中急需空闲的物理页面,页面回收的需求非常紧迫。 (zone page /lowmem page)*lmin_free_kbytes
low 控制进行页面回收的最小阈值,如果空闲物理页面的数目低于 pages_low,那么内核会开始进行后台页面回收。 pages_min + pages_min/4
high 控制进行页面回收的最大阈值,如果空闲物理页面的数目多于 pages_high,则内存区域的状态是理想的。 pages_min + pages_min/2

页面回收中的LRU

Linux 中的页面回收是基于 LRU(least recently used,即最近最少使用 ) 算法的,它假设过去一段时间内频繁使用的页面,很快可能会被再次访问到,已经很久没有访问过的页面在未来较短的时间内也不会被频繁访问到。因此,在物理内存不够用的情况下,这样的页面成为被换出的最佳候选者。

LRU 算法的基本原理很简单,在访问页的时候对其进行标记,对于活动的页不断的提升它在链表中的位置,这样不经常活动的页自然就会落到LRU链表尾部。单个链表如果没有计数只能根据他们的相对位置表示两种状态:最近被访问和最近没有被访问,但是对于被访问的频次没有反应,访问1次和访问100次得到的待遇是一样的,所以内核使用了两个LRU链表来维护页的老化程度:active_list和inactive_list,这样它能够表示4种状态,对于访问频次更高的提升到active_list中,对于访问频次较低的逐渐老化到inactive_list中。

对于记录页是否被访问的方式,有的arch上提供了硬件置位,例如x86,在页表项中增加了一个accessed位,当页面被访问到的时候被MMU自动置位,之后需要通过软件来清除这个标志位。如果arch不支持硬件置位,则需要软件在每次访问页的时候进行软件标记,也就是page中的PG_referenced标志位。
page在LRU中迁移
其中,1 表示函数 mark_page_accessed(),2 表示函数 page_referenced(),3 表示函数 activate_page(),4 表示函数 shrink_active_list()。

active_list和inactive_list

当每次访问页的时候,软件会主动进行mark_page_accessed来标记当前页已经被访问过,因为不是所有的arch MMU都能自动设置accessed标记,所以需要软件主动设置标记。代码中的注释详细的说明了根据当前页面的状态进行状态迁移。

/*  * Mark a page as having seen activity. * * inactive,unreferenced    ->  inactive,referenced                             * inactive,referenced      ->  active,unreferenced                             * active,unreferenced      ->  active,referenced                               */                                                                             
void fastcall mark_page_accessed(struct page *page)                             
{                                                                               if (!PageActive(page) && PageReferenced(page) && PageLRU(page)) {           activate_page(page);                                                    ClearPageReferenced(page);                                              } else if (!PageReferenced(page)) {SetPageReferenced(page); }
}

而page_referenced()一个是测试当前page是否最近被访问过,如果当前页被访问过则清除page的访问标记。当一个page被多次映射,例如一块匿名共享内存作为进程间通信使用,一个可执行文件被执行多次,此时会有反向映射的数据结构来记录有哪些虚拟地址区域映射了该页,遍历所有的反向映射区域,检查vma对应的页表项并清除accessed位,除此之外还检查vma的flag是否被锁定VMLOCKED,通过mlock告诉系统不希望这块区域被交换出去,只要其中有vma标记被锁定或者被访问,就不会swap out这个页。和访问页时随时标记mark_page_accessed不一样,只有在后台页面回收或者直接页面回收的时候才会清除页的标记。

activate_page完成从inactive_list到active_list头部的迁移,主要是上面的mark_page_accessed中当前页PG_active=0和PG_referenced=1时进行页面迁移。早期的实现直接完成page在链表间的迁移,从3.x之后都是将页从inactive_list中摘除先放到lru缓存中,缓存满的时候再放入active_list中,lru缓存会解释。
shrink_active_list是页面回收过程中的一环,从active_list中摘除部分PG_referenced=0的页,先批量放到中间链表l_hold上,判断当前回收的压力和页面状态分别放到中间链表l_active和l_inactive中,最终批量放到zone的active_list和inactive_list上。
上面4种方式共同完成了lru两个链表的内部循环,而页面回收的时候从inactive_list中尾部获取到可回收页进行回收彻底从LRU删除,那么页又是怎么加入到LRU中的?
在页面回收的时候,对不同的页面是有倾向性的,主要是回收代价的大小,首先回收哪些没有映射的页面代价最小,例如page cache中预读的但是还没有映射的页,直接回收不需要任何IO和页表项修改,主要是内核中的可回收页。其次是经过映射的页,这部分主要是用户空间进程使用的页面,包括堆、栈、数据段、shmem共享的内存,映射文件的页。内核对于用户空间使用页都是laze paging的模式,为他们分配或者映射页主要是缺页异常触发之后才实际分配物理页。

页类型 缺页异常中fix过程 对应的lru链表
进程堆、栈、数据段中使用的匿名页,mmap共享内存映射页 do_anonymous_page
do_cow_fault
do_wp_page
lru_cache_add_active到活动匿名页lru链表
映射文件页 filemap_fault add_to_page_cache_lru非活动文件页lru链表

SMP中的lru缓存

在多核系统中,操作active_list/inactive_list链表需要获取锁来防止并发访问,频繁的申请和释放页就会使得锁竞争变得激烈,所以这里使用了per-cpu的lru缓存:pagevec,通过批量操作来减少冲突的概率,当缓存满的时候批量移到active_list/inactive_list中。

struct pagevec {                                                                                                                               unsigned long nr;                                                              unsigned long cold;                                                            struct page *pages[PAGEVEC_SIZE]; //目前是14个页                                              
}; 
static DEFINE_PER_CPU(struct pagevec, lru_add_pvecs) = { 0, };              //缓存加入到inactive链表中的页    
static DEFINE_PER_CPU(struct pagevec, lru_add_active_pvecs) = { 0, };    //缓存加入到active链表中的页

页面回收的倾向性

1、 尽量不要修改page table。例如回收各种没有使用的内核cache的时候,我们直接回收,根本不需要修改页表项。而用户空间进程的页面回收往往涉及将对应的pte条目修改为无效状态。
2、 除非调用mlock将page锁定,否则所有的用户空间对应的page frame都应该可以被回收。
3、 如果一个page frame被多个进程共享,那么我们需要清除所有的pte entry,之后才能回收该页面。
4、 不要回收那些最近访问过的page frame,或者说优先回收那些最近没有访问的page frame。
5、 尽量先回收那些不需要磁盘IO操作的page frame。

页面回收的过程

扫描控制

页面回收需要扫描不同的页,而当前内存的紧急情况也分不同的等级,包括是否开启了swap,是否允许writeback操作等,在页面回收过程中就构造了scan_control对象来指示页面回收的范围。另外回收时还有priority来指示当前页面回收的激烈程度,初始值为12,逐步递减,当前zone需要扫描的页面=LRU链表上的页面除以(2^priority),每次页面回收结束后,如果回收的页面还是不能满足页面申请的要求,伴随着priority的递减逐步增加页面扫描的数量。

其中初始的扫描控制参数如下,

    struct scan_control sc = {                                                  .gfp_mask = gfp_mask,.may_writepage = !laptop_mode,	//是否允许回收匿名页和脏页.swap_cluster_max = SWAP_CLUSTER_MAX,	//直接回收页数量大于该值时结束回收.may_swap = 1, //是否开启了swap.swappiness = vm_swappiness, //文件映射页和匿名页回收时的倾向,范围从0-100,默认60,值越高对匿名页回收越积极 };

链表转移

  1. 扫描active_list,根据当前优先级选择需要扫描zone,当active_list上页太少时就不再扫描了,可以通过不断调高优先级加大扫描力度.为了减少对于lru链表的竞争,在收缩active_list链表的时候创建了三个临时链表:l_hold,l_active,l_inactive,批量从active_list中移除和添加页.
    首先从active_list链表尾部摘取需要扫描的页,放到临时链表l_hold中,这样后续的处理可以访问在l_hold中,之后检查是否回收这些扫描过的页.如果当前不需要回收页表映射过的页,将这这部分页从l_hold移到l_active中.
    如果当前没有可用的swap,将匿名页从l_hold移到l_active中.
    再次检查是否访问过该页面,不回收最近访问过的页,将页从l_hold移到l_active中.
    剩余的页都是可以回收的,从l_hold中转移到l_inactive中;之后将l_active批量加入到active_list的lru缓存中,将l_inactive中的页批量加入到inactive_list的lru缓存中.
  2. 扫描inactive_list,直接从链表尾部摘除页到page_list上,之后shrink_page_list开始进行页面回收,回收失败的页仍然保留在page_list,按照当前状态加回到对应的lru链表上.

slab的回收

并不是所有的slab都可以回收的,只有那些注册了shrinker的才能收缩,在申请和释放的时候他们也会维护类似于LRU这样的老化链表,当收缩的时候进行回收

页面回收

shrink_page_list

  1. 页面回收不包括PG_locked,PG_writeback的页,前者表示页正在使用中,后者表示页正在被回写
  2. 再次检查页是否被访问过,准备回收的页PG_active=0,PG_referenced=0并且已经不在lru链表中了,当页被访问过之后PG_referenced=1,但是PG_active一定不会被置位,它又不是新分配的页,不能凭空从inactive_list直接跃升到active_list.
  3. 对于匿名页,需要在swap中分配位置,如果swap已经满的情况就不能swap out了.之后page先加入到swap cache中,它是类似于page cache一样的结构,因为一个页可能在多个vma中被映射使用,只有当所有的区域都解除了映射之后,它才会从swap cache中移除,实现页面回收.在加入到swap cache之后它标记当前页PG_dirty,在下面的pageout中将页内容先写入到磁盘.
  4. 对于页表映射的页需要逐个解除映射,linux使用反向映射来管理多个虚拟地址和物理页的对应关系,对于匿名页和文件映射页都是遍历反向映射区间.对于匿名页,需要更新它在swap中的位置到页表项中,这样在缺页中断中仍然能够从swap中恢复数据,并且将反向映射关系进行销毁.对于文件页来说就比较简单了,只需要将反向映射解除就OK了.
    try to unmap
  5. 对于需要进行回写的页进行处理,包括文件脏页,匿名页。文件脏页都是基于文件系统的,文件系统定义的address_space->a_ops->writepage进行实际回写,它再往下就属于IO栈的东西了;对于匿名页,它是属于swap管理的,有自己的address_space和address_space_operations。当页回写成功,释放页的引用计数,最后一个引用计数释放时将页返回给buddy系统.
static const struct address_space_operations swap_aops = {.writepage  = swap_writepage,
}
  1. 对于不能回收的页和回收失败的页,将他们再次返回,根据page的状态加入到LRU链表中

页面回收终止条件

1.对于kswapd中的页面回收,当zone的page高于high watermark之后就会停止页面回收
2.对于直接页面回收,每次回收页面数量大于SWAP_CLUSTER_MAX就会终止,如果扫描页面较多,它会主动wakeup pdflush线程将脏页回写来释放更多的页.
3.如果回收不到任何的页,代表系统已经到了绝境了,为了生存开始自残:OOM,和斗地主一样,哪个进程占用的物理内存最多就它释放物理页.

reflink:
https://www.ibm.com/developerworks/cn/linux/l-cn-pagerecycle/
http://www.wowotech.net/memory_management/page_reclaim_basic.html

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 中国第一代黑客代表人物档案

    中国第一代黑客代表人物档案我 国最早一批黑客大约出现在1994年,其黑客行为持续到1999年底。代表性的组织就是GOODWELL(龚蔚)等五人组织的绿色兵团。据称,极盛时期注 册会员达到3000多人,成员遍布全国各地。谢朝霞、彭哥、PP(彭泉)、天行(陈伟山)、黄鑫是第一代黑客中…...

    2024/4/19 4:52:58
  2. remix-ide的三种使用方式

    如何实现一个hello word语句输出 这里写图片描述 {{uploading-image-404522.png(uploading...)}} 代码演示运行方式 VS code IDE,代码编写,基本的语法检查 Remix IDE,简单代码编译运行看结果.方便学习 Truffle 环境,生产环境,较为复杂的代码编译部署 Remix IDE简介 基于浏览器的…...

    2024/4/14 22:09:05
  3. “社交网络”——《The Wiley Handbook of Human Computer Interaction》

    简介 在线社交网络已经改变了人们与互联网以及人与人之间的互动方式。它们极大地减少了维持本应逐渐消失的关系所需要的努力,并且为了解人类行为和过去从未为人所知的关系提供了窗口。仅Facebook,在当时或写作时,每月就有大约20亿活跃用户。Instagram、Twitter、Pinterest和…...

    2024/4/14 22:09:03
  4. IOS-2-C语言和Objective-C语言衔接学习资料

    前言:在IOS学习中。通常会先学习一周的C语言,两周的Objective-C语言,这是今后开发的最基础最重要的部分,以下给大家分享一下培训课上的精简资料: C语言和Objective-C语言衔接学习资料,PPT格式,简单易懂。可迅速掌握。 资料链接: C语言:http://download.csdn.net/detai…...

    2024/4/20 13:18:16
  5. 你了解全面的ATE自动测试技术吗?

    自动测试设备ATE Primer自动测试或自动测试设备广泛用于生产测试中,以便在最短的时间内完成最佳测试:有几种不同类型可用。自动测试设备,ATE包括:ATE基础知识自动光学检测,AOI自动X射线检测,AXI在线测试,ICT功能测试,FATE开发测试策略ATE自动测试设备是当今电子测试领域…...

    2024/5/7 2:25:05
  6. myeclipse2014版安装freemarker IDE

    MyEclipse2014版本改动虽小,但是时不时会遇到一些经常遇不到的问题,比如安装freemarkerIDE: MyEclipse2014中安装FreeMarker插件,这绝对是最简单的方法。步骤如下: (一)打开http://sourceforge.net/projects/freemarker-ide/files/ 下载最新版本,目前本人下载时最新版本…...

    2024/4/18 12:28:00
  7. 文件系统中的目录查找

    Linux中的一个进程在识别一个文件的时候,将文件名传递给VFS层,VFS要根据文件名查找这个文件的索引节点inode,以备后续对该文件的操作。通过文件名查找文件索引节点的过程就叫做路径查找(path lookup)。本文是在阅读目录查找代码时随手记录的笔记,会在不断的学习中不断补充。…...

    2024/4/18 8:18:06
  8. 2018年最受黑客欢迎的12款操作系统

    对所有的新手来说,了解最好的操作系统是非常重要的,这将帮助他们有效地执行他们的工作。大多数用于黑客攻击的操作系统(OS)都基于Linux内核,因此,Linux是专业黑客最喜欢的操作系统。 喜欢的话关注收藏评论转发比心么么哒! 1.黑客首选:Kali LinuxKali Linux是黑客们使用…...

    2024/4/14 22:24:16
  9. Ext4 打开文件 do_sys_open,关于iNode获取的流程

    如果打开的文件已经存在的情况 lookup_open -> lookup_dcache -> d_lookup -> ext4_lookup -> ext4_iget_normal -> ext4_iget ->iget_locked当创建文件的时候: lookup_open -> vfs_create ->(钩子)ext4_create -> ext4_new_inode_start_han…...

    2024/4/30 22:22:03
  10. 测试开发流程图-自制定版

    ...

    2024/4/14 22:24:14
  11. 基于spark的社交网络分析-社团挖掘-链路预测-scala实现

    基于spark的Facebook社团挖掘数据集:SNAP数据中的facebook数据集从图论的角度来说,社团挖掘问题就是相当于一个图的分隔问题,即给定一个图G=(V,E),顶点集V表示社交网络中的用户,边集E表示用户之间的友好关系,社团挖掘的目的就是找到一种最优的分割图的方法,使得分割后形…...

    2024/4/14 22:24:14
  12. 从零开始做远控 源代码及已编译|中国黑客六道

    ​​Hello!!!众位道友好呀好久没玩远控了,挺怀念的晒晒中国黑客六道​在服务端生成客户端,特点是自定义域名和端口,不用每次更改端口就编译一次客户端:1.修改客户端的main.cpp文件,让服务端创建客户端时能自定域名和端口​​2.把编译好的发布版本客户端放到服务端的目录…...

    2024/4/14 22:24:13
  13. Python 各种IDE比较

    本文转自:http://blog.csdn.net/cserchen/article/details/7036435 发信人: RunningOn (挥着翅膀的男孩), 信区: Python 标 题: python IDE比较与推荐我先给一个初步的表格吧,大家如果有什么意见,或有补充,欢迎提出。有些我没有用过,先不写了。以下是我使用过的python ID…...

    2024/4/14 22:24:11
  14. C语言学习之补码的深刻理解

    学到C语言的本质之补码时(http://learn.akae.cn/media/ch14s03.html)。发现不是很理解,特别是这段描述。 如果8个bit采用2sComplement表示法, 负数的取值范围是从10000000到11111111(-128~-1), 正数是从00000000到01111111(0~127)。于是搜索了不少资料,总算理清了这一…...

    2024/4/14 22:24:10
  15. 解剖linux内核之文件系统

    虚实结合 文件系统主要分为两个部分:vfs和ext2(以ext2为例),一虚一实,vfs是在机子启动的时候在内存中建立的,机子关掉便不存在了,是虚的;ext2是在磁盘介质上的,是磁盘在格式化的时候确定的,机子关机后仍然在磁盘上存在。 在磁盘上的ext2文件系统那个的格式如下:Ext2…...

    2024/4/14 22:24:10
  16. PeopleRank从社交网络中发现个体价值

     Jan 20, 2014 Tags: HadoopMapReducePageRankpeoplerranksocial Comments: 8 CommentsPeopleRank从社交网络中发现个体价值Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加…...

    2024/4/16 11:35:18
  17. MPLAB X IDE调试代码

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! 1. 在Project 窗口中,选择项目或将其设为主项目(右键单击项目并选择“Set as main”)。2…...

    2024/4/19 19:44:13
  18. 小程序测试号 appscreat 这么取

    小程序测试号 appscreat 怎么取?其实挺简单的,上图:打开你的微信小程序开发工具,如果是测试号,则点击开发工具上的 测试号 ,如图:(怎么创建测试号?这个so easy),在开发工具新建项目的时候,就可以选到了有没有? 还不能找到,你就给我留言吧,只能帮你到这了。好的,…...

    2024/4/14 22:09:18
  19. 再见,黑客江湖

    32岁的傅明供职于国内一家著名的杀毒软件公司。他长相平平,说话拘谨,一副标准的计算机程序员形象。只有聊起黑客时,才会挂起一抹不屑的微笑,属于高手的微笑。 他曾是一名叱咤风云的计算机黑客,参加过数次所谓的“爱国大战”。他曾身处一个神秘的江湖,属于黑客的江湖。那里…...

    2024/4/16 10:46:25
  20. C语言核心技术——函数

    C语言文章更新目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分析 VS2019编写简单的C程序示例 简单示例,VS2019调试C语言程序 C语言基础-基本算法…...

    2024/4/14 22:09:14

最新文章

  1. 9.Admin后台系统

    9. Admin后台系统 Admin后台系统也称为网站后台管理系统, 主要对网站的信息进行管理, 如文字, 图片, 影音和其他日常使用的文件的发布, 更新, 删除等操作, 也包括功能信息的统计和管理, 如用户信息, 订单信息和访客信息等. 简单来说, 它是对网站数据库和文件进行快速操作和管…...

    2024/5/7 3:45:03
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/6 9:38:23
  3. 巨控科技新品发布:全方位升级,引领智能控制新纪元

    标签: #巨控科技 #智能控制 #新品发布 #GRM560 #OPC560 #NET400 在智能控制领域,巨控科技始终以其前沿技术和创新产品引领着市场的潮流。近日,巨控科技再次以其行业领先的研发实力,推出了三大系列的新产品,旨在为各行各业提供更…...

    2024/5/5 9:14:44
  4. Android Framework学习笔记(2)----系统启动

    Android系统的启动流程 启动过程中,用户可控部分是framework的init流程。init是系统中的第一个进程,其它进程都是它的子进程。 启动逻辑源码参照:system/core/init/main.cpp 关键调用顺序:main->FirstStageMain->SetupSel…...

    2024/5/4 10:39:30
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/4 23:54:56
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/6 9:21:00
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57