Strut

Linux 匿名页的反向映射

可紊 提交于 2020-10-28 04:55:17
我们知道LINUX的内存管理系统中有”反向映射“这一说,目的是为了快速去查找出一个特定的物理页在哪些进程中被映射到了什么地址,这样如果我们想把这一页换出(SWAP),或是迁移(Migrate)的时候,就能相应该更改所有相关进程的页表来达到这个目的。 1、为什么要使用反向映射   物理内存的分页机制,一个PTE(Page Table Entry)对应一个物理页,但一个物理页可以由多个PTE与之相对应,当该页要被回收时,Linux2.4的做法是遍历每个进程的所有PTE判断该PTE是否与该页建立了映射,如果建立则取消该映射,最后无PTE与该相关联后才回收该页。该方法显而易见效率极低,因为其为了查找某个页的关联PTE遍历了所有的PTE,我们不禁想:如果把每个页关联的PTE保存在页结构里面,每次只需要访问那些与之相关联的PTE不很方便吗?确实,2.4之后确实采用过此方法,为每个页结构(Page)维护一个链表,这样确实节省了时间,但此链表所占用的空间及维护此链表的代价很大,在2.6中弃之不用,但反向映射机制的思想不过如此,所以还是有参考价值的,可以参考: http://blog.csdn.net/dog250/article/details/5303581 。 2、Linux2.6中是如何实现反向映射 2.1 与RM(Reverse Mapping)相关的结构 page , address

Python time库基本操作方法

三世轮回 提交于 2020-04-23 15:32:12
  time.time()  获取当前时间戳(现在时间与1970年1月1日0时0分0秒的时间差(单位:秒))   time.gmtime(secs)  获取当前时间戳对应的struct_time对象   time.localtime(secs)  获取当前时间戳对应的本地时间的struct_time对象。结果与gmtime不同,UTC时间已自动转换为北京时间。   time.ctime(secs)  获取当前时间戳对应字符串的,内部会调用time.localtime()函数,返回的是当地时间。   time.sleep(secs)  强制等待secs秒。   time.perf_counter()  返回一个性能计数器的值(在分秒内),即一个具有最高可用分辨率的时钟,以测量短时间。它包括了在睡眠期间的时间,并且是系统范围的。返回值的引用点是未定义的,因此只有连续调用的结果之间的差异是有效的。   就是这么多,还有一个叫做时间格式化的东西,我待会儿再说。   这个time.perf_counter()的解释大家看着肯定很吃力,现在我来举个例子:   import time   start = time.perf_counter()   time.sleep(2)   end = time.perf_counter()   print(end-start)   说到底

单片机C语言程序设计基础知识全解析

心已入冬 提交于 2020-01-08 09:54:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 标识符和关键字 (一)标识符 标识符是用来表示源程序中自定义对象名称的符号。其中的自定义对象可以是常量、变量、数组、结构、语句标号以及函数等。 在C51语言中,标识符可以由字母(a~z,A~Z)、数字(0~9)和下划线“_”组成,最多可支持32个字符。 C51标识符的定义不是随意的,应遵循“简洁”和“见名知意”的原则,并需要符合一定的规则: ➢ 标识符的第一个字符必须是字母或者下划线,不能为数字。由于有些编译系统专用的标识符以下划线开头,所以用户在定义标识符时一般不要以下划线开头。 ➢ C51的标识符区分大小写,例如“ch1”和“Ch1”表示两个不同的标识符。 ➢ 用户自定义的标识符不能与系统保留的关键字重复。 (二)关键字 关键字是C51编译器保留的一些特殊标识符,具有特定的含义和用法。单片机C51程序语言继承了ANSI C标准定义的32个关键字,如表3-1所示。 表3-1 C51的关键字 同时C51又结合单片机硬件的特点扩展了19个关键字: _at_ idata sfr16 alien interrupt small bdata large _task_ code bit pdata using reentrant xdata compact sbit data sfr C51数据类型 表3