filebench查看每个负载的参数特性 下面是filebench中fileserver的负载设置;通过观察负载设置,找到有用的设置信息;在readfile中,iosize=$iosize,表示读操作的IO size;在appendfile中,iosize = $meanappendsize,表示写操作的IO size;set $filesize=cvar(type=cvar-gamma,parameters=mean:1310...
虚表指针初始化顺序 无继承时:1、分配内存2、初始化列表之前赋值虚表指针3、列表初始化4、执行构造函数体有继承时:1、分配内存2、基类构造过程(按照无继承来)3、初始化子类虚表指针4、子类列表初始化5、执行子类构造函数体Q:虚表指针在初始化列表之前被赋值,可以放在初始化列表之后赋值吗?即顺序是:列表初始化、虚表指针赋值、构造函数体??class B{public: virtual int...
terminal开启多个窗口并切换 1、正常方式打开一个terminalCtrl + Alt + T2、同一个terminal开启另一个窗口Ctrl + shift + T3、切换窗口切换第一个窗口Alt + 1切换第二个窗口Alt + 2切换第n个窗口Alt + n...
gem5 FS模式下mount文件到shell 下面是根据我自己的实际情况,写一点总结。教程:1、挂载linux-x86.imgmount -o loop,offset=32256 linux-x86.img /mnt2、看看/mnt目录下是否有内容,有内容则挂载成功ls /mnt3、把要传输的文件拷贝到/mnt目录下cp ./hello /mnt4、在启动FS模拟之前,确保该loop设备已经被卸载了umount /...
gem5+NVMain联合编译 1.注册bitbucket账号进入官网,注册即可,记住你的用户名及邮箱,在后面会用到。2.获取NVMain使用权打开https://bitbucket.org/mrp5060/nvmain/并登陆bitbucket账号,登陆后重新打开前面这个网站获取下载命令我的命令是:hg clone https://jason_lee2419@bitbucket.org/mrp5060/nvmai...
git clone指定分支的代码 今天想学习一下开源中国Android客户端的app源码,源码的Git地址:http://git.oschina.net/oschina/android-app,如下图所示:由于Master主分支上没有放置源码,因此需要切换到指定的Tag分支去查看,如下图所示:切换到v2.8.1这个分支就可以看到具体的代码了,如下图所示:使用Git下载指定分支命令为:git clone -b 分支名 ...
GitHub一些基础操作 创建本地分支git branch 新分支创建本地新分支,并切换到新分支git branch -b 新分支查看本地分支git branch查看当前分支信息git status查看日志信息git log查看远程分支git remote -v在远程仓库创建新分支git push origin 新分支———————————————————————————————————————...
kmalloc和vmalloc的区别 kmalloc和vmalloc完全不同。kmallockmalloc申请一段物理地址和逻辑地址连续的内存空间。 /* 申请一段物理地址连续的内存空间 */static __always_inline void *kmalloc(size_t size, gfp_t flags){ if (__builtin_constant_p(size)) { if (size > KMA...
内核模块中使用未导出的函数 一般我们在编写内核模块时,可以直接使用内核中使用EXPORT_SYMBOL或者EXPORT_SYMBOL_GPL导出的函数,没有导出的内核函数不能直接使用。否则会报错未定义:WARNING:“do_sys_open”[/home/tiany/paper/mod/mySdelNotEcrypt_success/hello.ko]undefined!那么我们到底能不能使用内核中没有导出的函数呢?答...
内存管理---匿名页面管理 一、匿名页面这些内存页面保存了一些通常所说的机动性最强的内容,或者可以认为是银行的活期存款,这些内存可以随时被使用,随时被归还。例如用户通过malloc–>>mmap申请的内存,或者通过brk/sbrk扩大的堆空间。相对于mmap文件、文件系统元数据之类的内容,这些空间对用户来说最为顺手,也最为常见。但是管理起来也比较复杂,因为这里涉及到这些页面如果被同时使用了很多,系统内存负载将会...
Linux swap详解 推荐一篇blog,写的十分详细。特别是里面的流程图对于理解整个swap有很大的帮助。http://tinylab.org/linux-swap-and-zramfs/简介内存管理基本概念内存管理区 Struct ZonePFN(Page Frame Number)页 Struct PagePTE 与 VMA内存回收匿名页的内存回收 - 交换Zram 交换技术...
F2FS:struct curseg_info结构 F2FS在运行时,F2FS在“Main Area”区域管理6个活跃的log,分别是Hot/Warm/Cold node log和Hot/Warm/Cold data logs,每一个log对应着一个独立的segment。Hot node : contains direct node blocks of directories.Warm node : contains dir...
f2fs读取磁盘block过程:do_read_inode f2fs:依据inode的节点号,将inode对应的block读到页缓存f2fs_iget依据索引节点号,查找对应的inode,若没有,则创建一个新的inode,读取磁盘上的inode所在的block,生成f2f2_inode对象去初始化这个新inode。其中,当inode不存在时,需要创建新的inode,同时还要从磁盘上读取inode所在的block;因此,这次主要针对f2fs读取磁盘bl...
inode_hashtable哈希表及f2fs查找inode过程 文件系统中的所有inode存放在一个名为inode_hashtable的全局哈希表中。另一方面,所有的inode还存放在超级块中的s_inode链表中。inode_hashtable哈希表加快了对索引节点对象的搜索。前提是必须知道索引节点号和文件所在文件系统对应的超级块对象。该inode_table位于fs/inode.c中:static unsigned int i_hash_mask ...
普通文件和块设备文件的page cache问题 注:本文代码基于linux-3.18.31,此版本中块缓存已经合入页缓存。写在前面普通文件和块设备文件都有一个address_space对象,inode中分别维护两个成员指向这两个不同的address_space,分别是i_mapping和i_data。需要注意的是,这两个page cache中可能拥有磁盘上相同的数据(即拥有相同的页数据)。struct inode { ………… con...
bio,request,request_queue的关系 通用块层的核心数据结构称为bio描述符,它描述了块设备的io操作。每一个bio结构都包含一个磁盘存储区标识符(存储区中的起始扇区号和扇区数目)和一个或多个描述与IO操作相关的内存区段(bio_vec数组)bio结构中的字段/* * main unit of I/O for the block layer and lower layers (ie drivers and * stacking...
从文件 I/O 看 Linux 的虚拟文件系统 1 引言Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等。通过使用同一套文件 I/O 系统 调用即可对 Linux 中的任意文件进行操作而无需考虑其所在的具体文件系统格式;更进一步,对文件的 操作可以跨文件系统而执行。如图 1 所示,我们可以使用 cp 命令从 vfat 文件系统格式的硬盘拷贝数据到 ext3 文件系统格式的硬盘;而这样的操作涉及到两个不同的文件...
Linux IO子系统和文件系统读写流程 我们所有分析的,是基于2.6.32及其后的内核.我们在Linux上总是要保存数据,数据要么保存在文件系统里(如ext3),要么就保存在裸设备里。我们在使用这些数据的时候都是通过文件这个抽象来访问的,操作系统会把我们需要的数据提交给我们,而我们则无需和块设备打交道。从下图,我们可以清除的看到:I/O子系统是个层次很深的系统,数据请求从用户空间最终到达磁盘,经过了复杂的数据流动。对设驱开发人...
container of()函数与拓展 container of原理其实,原理很简单: 已知结构体type的成员member的地址ptr,求解结构体type的起始地址。 type的起始地址 = ptr - size (这里需要都转换为char *,因为它为单位字节)。到此,该函数已经讲完,是不是很简单??? 其实也不是,这里并没有提到size如何计算,而令我们头晕的正是这里。好吧,先上c...
local_irq_save和 local_irq_restore关闭和打开中断 如果你要禁止所有的中断该怎么办?在2.6内核中,可以通过下面两个函数中的其中任何一个关闭当前处理器上的所有中断处理,这两个函数定义在 < asm/system.h >中: void local_irq_save(unsigned long flags); void local_irq_disable(void);对 local_irq_save的调用将把当前中...
struct file中f_mode和f_flags区别 mode_t f_mode:文件模式(FMODE_WRITE,FMODE_READ),用在创建文件时使用它通过FMODE_READ和FMODE_WRITE位来标识文件是否可读或可写,因为内核在调用驱动程序的read和write前已经检查了訪问权限。所以不必为这两个方法检查权限。在没有获得相应訪问权限而打开文件的情况下,对文件的读写操作将被内核拒绝,驱动程序无需为此而作额外的推断。unsig...
如何编译和更换Linux系统内核 step0 — 完成编译和安装Linux需要的基本条件内核源代码从http://www.kernel.org即可下载代码,注意你需要下载的是完整的源代码包(点击tarball即可下载),而不是patch或change log之类。编译需要的软件编译kernel需要一些基本的develop工具软件,比如make和编译器,当然还有其他一些重要的工具,Debian系列的系统可以用如下...
QEMU挂载磁盘 1、 建一個5G的raw格式的虛擬磁盤,大小根據自己的需要設定。 $ qemu-img create test.img 5G2、接着运行qemu并加载磁盘:$ qemu-system-x86_64 -kernel /usr/src/linux-4.6.2-x86_64/arch/x86/boot/bzImage -initrd ~/Downloads/initramfs.img...
Linux C中struct的初始化允许部分初始化并且支持乱序 在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式。该方式是某些C教材(如谭二版、K&amp;R二版)中没有介绍过的。这种方式称为指定初始化(designated initializer)。 下面我们看一个例子,Linux-2.6.x/drivers/usb/storage/usb.c中有这样一个结构体初始化项目: static struct usb_driver usb...
文件读写基本流程 读文件1、进程调用库函数向内核发起读文件请求;2、内核通过检查进程的文件描述符定位到虚拟文件系统的已打开文件列表表项;3、调用该文件可用的系统调用函数read()3、read()函数通过文件表项链接到目录项模块,根据传入的文件路径,在目录项模块中检索,找到该文件的inode;4、在inode中,通过文件内容偏移量计算出要读取的页;5、通过inode找到文件对应的addres...
FTL详细资料 FTL产生过程如果仅仅是SSD的使用者,一定不会在意在SSD内部居然还存在一个复杂的软件层Flash Translation Layer(FTL)。其实就是这个FTL才是SSD固态硬盘的软件核心技术。正因为有了FTL,NAND Flash才能被当成硬盘来使用;文件系统才可以直接把SSD当成普通块设备来使用。由于FTL是SSD设计厂商最为重要的核心技术,因此,没有一家厂商愿意透露这方面的技术信息...
浅谈哈希表(HashTable)——拉链法、哈希桶、Probing探测方法 概述 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f...
内核调试出现value optimized out的问题 最近在用gdb调试内核的过程中经常会有< value optimized out>的提示,首先分析该提示出现的原因,我的理解是可能这些被优化的变量已从内存中被移到了寄存器中,所以会找不到。为了能在调试过程中看到所有的变量,不知道能不把内核编译为-O0?若可以的话,又需要在什么地方来改呢?在所有的CONFIG中,我只发现了一个CONFIG_CC_OPTIMIZE_FOR_SI...
编译内核出现:implicit declaration of function 修改内核,添加了一些函数,重新编译后,出现以下情况:经过查看源码:自定义的page_is_NVM的函数定义位置 在 使用位置 的后面,这在C语言的语法中是错误的;解决方法:在文件首部,添加该函数的声明即可。...
vim 分屏显示 水平切割::split :split xxx(要打开的文件名) :new(在新窗口创建文件) <CTRL+W>+ k:跳转到上面的窗口 (若为大写K,则是把当前窗口调至上方) <CTRL+W>+ j:跳转到下面的窗口 (类似于上)垂直切割::vsplit :vsplit xxx(要打开的文件名) :vnew(在新窗口创建文件) :only 取...
Ubuntu vimrc配置文件存放位置 Ubuntu如何设置VI 下文对Ubuntu vimrc的设置适用于Ubuntu与Fedora系统,其他系统没有得到验证。 在Ubuntu中vim的配置文件存放在/etc/vim目录中,配置文件名为Ubuntu vimrcUbuntu vimrc已被广泛应用但是也在不断的更新,这里介绍Ubuntu vimrc安装设置使用,帮助大家安装更新Ubuntu vimrc系统。Ubuntu如何设置VI ...
VFS中的read/write系统调用 VFS中的read/write系统调用 VFS所隐含的主要思想在于引入了一个通用的文件模型(common file model),这个模型能够表示所有支持的文件系统。VFS是所有文件系统的抽象。 linux内核对每个文件读写操作都必须使用一个指针,指向要访问的具体文件系统的适当函数。换句话说,当应用程序对read()或是write()调用引起内核调用相应的sys_read()或...
QEMU+gdb调试Linux内核全过程 1、编译源码(Linux kernel 4.6.2)make menuconfig执行make menuconfig时报错缺少库文件需要安装依赖库sudo aptitab instab libncurses5-dev首先编译内核,编译内核时注意要选两个选项。(注意:除此之外kernel hacking选项下其他的选项都不要选,否则会出现断点无法拦截的情况。这个说法有待验证)...
linux和Windows下用sublime text3编译运行C,C++ 安装MinGW1、首先安装MinGW,默认安装位置是C:\MinGW。2、安装完成后,右键“我的电脑”->属性 ->高级->环境变量,在系统环境变量PATH里添加C:\MinGW\bin;3、 新建LIBRARY_PATH变量,在值中加入C:\MinGW\lib。(标准库位置)4、 新建C_INCLUDEDE_PATH变量,值设为C:\MinGW\include。...
GCC编译源码出错:Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0 接上篇博客,因为上一篇博客没有解决实际问题,所以这次继续解决问题:之前测试过gcc4.4.0版本,发现不适合这个方法(具体原因,后面会说)。测试版本:gcc4.6.2See Installing GCC: Configuration for the full documentation. A major benefit of running srcdir/configure fro...
GCC编译源码出错error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8. 使用gem5时需要更换内核,但是编译内核需要低版本的GCC。原系统gcc版本是5.6.0,需要更换成gcc4.4.0.在编译安装gcc过程中出错,error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0,出错原因是需要这些库的支持,所以解决方法就是寻找相应的源码库安装即可,下面是解决方法。首先下载GMP、MPC...
C++ STL替换string中的空格(其他字符) //替换字符串中指定的字符//先find该字符,删除元素,最后插入元素void string_replace(string &st1, char c){ string::iterator tmp = find(st1.begin(), st1.end(), c); while (tmp != st1.end()) { auto x = st1....
C++STL的泛型算法 泛型算法只是依赖于迭代器的操作,而不是依赖于容器泛型算法可以分为3大类:下面的vec和vec2代表相同类型的容器1.只读算法:只允许读取其输入范围内的元素,而不改变元素 find(vec.cbegin(), vec.cend(), k)查找算法:前两个参数表示元素范围的迭代器,第三个参数k表示要查找的元素,查找成功则返回等于第一个元素的迭代器,查找失败返回尾后指针...
C++使用lambda表达式(二) 具体使用结合lambda表达式和for_each等STL泛型算法。结合for_each废话不说,上例子vector < string > st;st.push_back("ab");st.push_back("wet");st.push_back("peterhwet");st.push_back("ttgrry");st.push_back("wer"
C++使用lambda表达式(一) lambda表达式配合容器、迭代器使用最佳。对于C++这门语言来说来说,“Lambda表达式”或“匿名函数”这些概念听起来好像很深奥,但很多高级语言在很早以前就已经提供了Lambda表达式的功能,如C#,Python等。声明Lambda表达式Lambda表达式完整的声明格式如下: [capture list] (params list) mutable exception-&g...
C++编译错误与运行时错误 笔试题里经常会有这样的题目,让你判断运行时错误还是编译错误。在这里将它总结一下。在调试过程中,运行时错误是最麻烦的问题。因为编译错误可以由编译器检查出来,而大多数编译器对运行时错误却无能为力。查错和纠错的工作完全由用户自己来完成。运行时错误还分为两种:1、一种是由于考虑不周或输入错误导致程序异常(Exception),比如数组越界访问,除数为零,堆栈溢出等等。2、另一种是由...
如何写typedef类型别名 之前无论在阅读带有typedef的语句或者自己写一个typedef语句时,都会很麻烦。 最近有空看了一个他的详细用法,总结出了一个自己的想法:例如:、//对于一个二维数组typedef int (*int_array)[4];typedef int *int_point;int a[2][4] = { { 1,2,3,4, },{ 5,6,7,8, } };for (int_ar...
GitHub邀请合作者加入项目 1、点击进入GitHub之后,可以看到有Settings设置标签2、点击进入Settings设置,左侧菜单栏选择Collaborators3、选择之后,在右侧输入框中输入需要加入的合作者的用户名或邮箱地址,如何记不住全称,可以输入关键字,这里是可以模糊匹配的,会出现匹配到的列表,然后选择对应需要添加的合作者。然后点击右侧的Add collaborator按钮 ...
git上clone别人的项目、提交代码以及更新最新代码 1.clone项目 例如这是我们正要寻找的开源项目。首先要做的是fork代码到自己的库,点击右上角的fork按钮,之后这个项目就会在出现在自己的库中。如下图所示: 这时候这个项目就出现在自己的库中。打开git bash。 执行如下命令:git clone git@github.com:JasonLeeLJQ/RIA_Test.git后面的SSH是这样的得到的:如图,...
python中执行shell命令的几个方法小结 最近有个需求就是页面上执行shell命令,第一想到的就是os.system, 代码如下:os.system('cat /proc/cpuinfo')但是发现页面上打印的命令执行结果 0或者1,当然不满足需求了。尝试第二种方案 os.popen() 代码如下:output = os.popen('cat /proc/cpuinfo')print output.read()通...
安装scrapy报错 Python.h: 没有那个文件或目录 安装scrapy的时候报错,其实这个错误是一个间接,由其依赖引起。 build/temp.linux-x86_64-2.7/twisted/test/raiser.o twisted/test/raiser.c:4:20: fatal error: Python.h: 没有那个文件或目录 #include “Python.h” ^ compilation terminated. er...
linux下创建virtualenv时指定python版本 virtualenv是python开发中一个重要的工具,它可以帮助我们创建一个干净的python解释环境,创建虚拟环境时,这个虚拟环境的 python版本往往是系统默认的2.x版本.别急,我们只需要一条简单的命令就可以创建一个python3.x的虚拟环境virtualenv -p /usr/bin/python3 py3env其中,py3env是虚拟环境的名称,可以根据自己的需求命...
用命令创建MySQL数据库 一、连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1、 连接到本机上的MYSQL。 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码. 如果刚安装好MYSQL,超级用户root是没有密码的,故直接...
mysql-python安装 参考自:https://www.cnblogs.com/halu126/p/6617828.html操作系统:ubuntu16.04-gnome首先要安装mysql数据sudo apt install mysql-server我们使用pip进行安装第三方模块系统python版本为2.7.12,默认没有pip,首先安装pipsudo apt install python-...
Ubuntu解决包依赖关系 问题:apt-get install libprotobuf-dev下列软件包有未满足的依赖关系: libprotobuf-dev : 依赖: zlib1g-dev 但是它将不会被安装 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。原因:Linux下经常需要安装不同类型的库,在Ubuntu中,这些类库都是以“lib_name-vers...
requests.get中response乱码问题---编码问题 参考如下: https://segmentfault.com/q/1010000000340967 python保存网页到本地出错 https://segmentfault.com/q/1010000000341014 使用requests库抓取页面的时候的编码问题
Xpath当前节点寻找父节点下的子节点 HTML的结构如下:<section class="AutoTest"> <a title="xpath" href="#"></a> <div style="#"> webdriver ui auto Test ! </div>&
Ubuntu安装openpyxl出现的问题以及解决方案 安装openpyxl之前,需要将pip更新到最新版本,如果不更新到最新版本,会出现如下的报错: 更新pip命令:sudo pip install --upgrade pip安装完最新的pip之后,执行如下命令:(一定要使用root权限)sudo pip install openpyxl出现如下信息,就说明安装成功了。...
解决No module named 'openpyxl' - Python 3.4 - Ubuntu 参考:http://www.itkeyword.com/doc/5783741505463668x366/no-module-named-openpyxl-python-3-4-ubuntureason::pip refers to Python 2 as a default in Ubuntu, this means that pip install x will install t...
同步中断、异步中断区别 区别:1、同步中断是由cpu内部的电信号产生的中断,其特点为当前执行的指令结束后才转而产生中断,由于有cpu主动产生,其执行点必然是可控的。2、异步中断是由cpu的外设产生的电信号引起的中断,其发生的时间点不可预期。中断有两种,一种是CPU本身在执行程序的过程中产生的,一种是由CPU外部产生的。 外部中断,就是通常所讲的“中断”(interrupt)。对于执行程序来说,这种“中断...
进程内核栈、用户栈 1.进程的堆栈 内核在创建进程的时候,在创建task_struct的同事,会为进程创建相应的堆栈。每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈;当进程在内核空间时,cpu堆栈指针寄存器里面的内容是内核栈空间地址,使用内核栈。2.进程用户栈和内核栈的切换 当进程因为中...
pfn_to_page()和page_to_pfn() pfn_to_page()和page_to_pfn()#define page_to_pfn(page) ((unsigned long)((page) - mem_map) + PHYS_PFN_OFFSET)根据给出页地址求出对应的页帧号。两个结构相减,得出的是两者之间的对象个数,加上起始帧号偏移,即给出页地址的相对绝对页号。#define pfn_to_page(pfn) (me...
__SetPageBuddy & __ClearPageBuddy __SetPageBuddystatic inline void set_page_order(struct page *page, unsigned int order) { set_page_private(page, order); __SetPageBuddy(page); }__ClearPageBuddystatic inline v...
GitHub上传本地代码/更新本地代码 上传本地代码第一步:去github上创建自己的Repository,创建页面如下图所示: 红框为新建的仓库的https地址 第二步: echo “# aaa” &amp;amp;amp;amp;gt;&amp;amp;amp;amp;gt; README.md 注意:aaa是新创建的仓库名第三步:建立git仓库 git init第四步:将项目的所有文件添加到仓库中 git add .第五步:...
linux内存源码分析 - SLAB分配器概述 基于linux 2.6.34 之前说了管理区页框分配器,这里我们简称为页框分配器,在页框分配器中主要是管理物理内存,将物理内存的页框分配给申请者,而且我们知道也可页框大小为4K(也可设置为4M),这时候就会有个问题,如果我只需要1KB大小的内存,页框分配器也不得不分配一个4KB的页框给申请者,这样就会有3KB被白白浪费掉了。为了应对这种情况,在页框分配器上一层又做了一层SLAB层,SLAB分配...
likely()与unlikely()函数的意义 看内核时总遇到if(likely( )){}或是if(unlikely( ))这样的语句,最初不解其意,现在有所了解,所以也想介绍一下。likely() 与 unlikely()是内核中定义的两个宏。位于/include/linux/compiler.h中, 具体定义如下:#define likely(x) __builtin_expect(!!(x), 1)#define unl...
Linux进程上下文 进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事。造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。处理器总处于以下状态中的一种: 1、内核态,运行于进程上下文,内核代表进程运行于内核空间; 2、内核态,运行于中断上下文,内核代表...
Linux中的TLB小结 TLB(Translation Lookaside Buffer)转换检测缓冲区TLB是一个内存管理单元,用于改进虚拟地址到物理地址转换速度的缓存。 TLB是一个小的,虚拟寻址的缓存,其中每一行都保存着一个由单个PTE(Page Table Entry,页表项)组成的块。如果没有TLB,则每次取数据都需要两次访问内存,即查页表获得物理地址和取数据。重点:加快线性地址(逻辑地址...
TKinter布局之pack pack布局非常简单,不用做过多的设置,直接使用一个 pack 函数就可以了。1、我们使用 pack 函数的时候,默认先使用的放到上面,然 后 依次向下排,它会给我们的组件一个自认为合适的位置 和大小,这是默认方式。2、可接受的参数: side:按扭停靠在窗口的哪个位置 left: 左 top: 上 right: 右 botton: 下 ...
Python3下用tkinter和PIL实现简单的显示图片 想做看图工具的,必然要支持jpg、png等常见格式,但tkinter是个纯粹的GUI库,不像GTK、QT那样大而全,所以只支持gif和ppm两种格式,局限很大,必须搭配图像处理库,才能实现基本的看图功能 在python生态系统里,最常用的图像处理库是PILPython3下库的安装 这两个库在python3下跟python2有一定差异: tkinter首字母变成小写 PIL官方...
内存管理之:页和页框&地址变换结构 一、基本概念1、页和页框的区别划重点::逻辑地址空间分为若干页;物理内存空间分为若干页框(也叫作块)页 分页存储管理是将作业的逻辑地址划分为一系列同等大小的部分,称为页。 并为各页加以编号,每个作业的页的编号都是从0开始的。页框 与之类似,把可用的物理内存也划分为同样大小的连续的部分,称为块或页框。同样为块也进行标号,从0#开始。...
NVM和DRAM混合存储小结 与 DRAM 相比,新型 NVM 具有扩展性好、静态能耗低以及非易失性等优势,有望用于内存系统。 然而,NVM 同样存在着写延迟长、写功耗大等缺点,如 PCM 的写延迟为150ns左右,明显大于 DRAM 的写延迟;DRAM的写能耗为4×10-15J/b,而PCM 的写能耗为6×10-12J/b,也显著大于 DRAM 的写能耗。将 NVM 用 于内存系统有 3 种不同的内存 结构: 第1种
常用垃圾回收算法 今天我关于常见的垃圾回收算法来做个总结,我们最常听到的是Java虚拟机里的垃圾回收机制,其实垃圾回收的概念最先并不是Java里首先提出来的,垃圾回收这个概念很早就已经被提出来了,并且已经在其他语言中得到了应用。 关于垃圾回收的机制,这里不再解释,这篇文章我主要介绍常见的垃圾回收算法,当然还有其他的。算法一:引用计数法。这个方法是最经典点的一种方法。具体是对于对象设置一个引用...
内存分配方式与内存分配算法 内存分配方式有两种,连续内存分配方式和离散内存分配方式。不同的分配方式又有不同的分配算法。内存分配算法,其实就是:有一大块空闲的资源,如何合理地分配资源?内存分配的思想可以用到很多其他的领域。比如Java虚拟机是如何将内存分配与回收的?再比如文件系统是如何将磁盘块分配与回收的?其本质就是如何把空闲的资源分配出去,分配之后又如何回收?目标就是分配快,回收也快,而且还不浪费。那么,就需要根据资源的...
ubuntu16.04安装Scrapy 安装过程:http://blog.csdn.net/qq_30242609/article/details/52810765如果遇见如下问题: 在Ubuntu中,有时候运用sudo apt-get install 安装软件时,会出现一下的情况 E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporar...
Python:爬虫异常处理URLError & HTTPError '''爬虫异常处理URLErrorHTTPError:是URLError的子类,所以如果URLError和HTTPError同时出现的话,要将HTTPError写在前面,URLError写在后面'''import urllib.requestimport urllib.error'''URLError错误'''req = urllib.request.Request('ht...
Ubuntu输入法使用回车键后字符间距异常的问题 问题如下: 使用拼音输入法输入时: 此时使用enter键会出现下面的情况:《字符间距明显变大》 解决方法:在输入法中找到“全半角切换”,进行切换;这样就可以了! 我使用的是搜狗输入法,很容易就找到了。...
Python使用re实现str.strip()方法,去除首尾的空格 主要用到的新知识:‘+d_str+’ 对某一个d_str变量中的字符串进行正则匹配话不多说,先上代码;'''类似于str方法中的strip方法去除首尾两端的指定字符或字符串'''import redef py_strip(p_str, d_str=' '): temp = re.search(r'[^('+d_str+')].*',p_str).group() ...
Python爬虫获取代理ip及端口 '''爬取代理ip可以作为模块使用,在使用代理ip的时候直接调用该模块即可。'''import reimport urllib.requestdef ExtractIP(url='http://www.xicidaili.com/'): headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:5...
正确使用正则表达式 '''正则表达式的使用'''import re#通过re模块,将正则表达式编译成模式对象,用模式对象进行匹配p = re.compile(r'ab+')temp = p.match('bcdeabc')#match对象的方法if None != temp: print(temp.group()) #返回匹配的字符串 print(temp.start()) ...
urllib中的urlopen函数 urlopen返回 一个类文件对象,他提供了如下方法:>参数 url 表示远程数据的路径,一般是 http 或者 ftp 路径。参数 data 表示以 get 或者 post 方式提交到 url 的数据。参数 proxies 表示用于代理的设置。urlopen 返回一个类文件对象,它提供了如下方法: read() , readline() , readlines(),...
爬虫隐藏自身的ip并伪装成浏览器 爬虫隐藏自身的ip并伪装成浏览器1、使用代理访问就是说使用代理Ip,代理ip访问url之后,再将网页的内容在传给本机的ip;'''使用代理访问'''import urllib.requestimport randomurl = 'http://www.whatismyip.com.tw'#创建一个iplist,随机使用ipiplist = ['219.223.251....
Python3 chardet模块查看编码格式 chardet模块可以查看如下的编码格式 需要注意的是,如果遇到GBK2312等编码的,在decode和encode时,一律使用GBK进行编码或者解码,这是因为GBK是其他GBK编码的超集,向下兼容所有的GBK编码。下面是一个例子:#coding=utf-8import urllib.requestimport chardeturl = 'http://www.baidu.co...
python3 魔法方法:属性访问 类中的获取属性、设置属性的方法:重载属性访问函数'''类中的获取属性、设置属性的方法:重载属性访问函数'''class C: #定义当该类的属性被访问时的行为(不管是不是存在该属性,若不存在,则调用__getattr__(self,name)) #例如:对于类的实例对象object,执行print(object.x)获取object的x属性,就会调用该函数 ...
Ubuntu下安装sublime并解决不能输入中文的问题 Ubuntu下下载使用sublime进入官网http://www.sublimetext.com/3下载你的Sublime Text 3,然后解压文件。把解压后得到的文件移动到/usr/lib/下sudo mv sublime_text_3 /usr/lib/给它添加终端快捷命令,以后你在终端输入subl就可以打开sublime了sudo ln -s /usr/lib/subl...
python3 timeit:计算小段代码的执行时间的模块 timeit:计算小段代码的执行时间的模块这个python官方推荐的代码计时模块,比time模块更好'''计算小段代码的执行时间的模块'''import timeitdef test(): text = 'i love you' if 'o' in text: pass#执行test函数十万次的时间a = timeit.timeit(st...
python中与类相关的BIF 和类相关的BIF#issubclass(class,classinfo),class是否是classinfo的子类(继承关系)class A: def __init__(self): self.x = 1 def getSize(self): return self.x def setSize(self,value): ...
python3 类中声明一个静态函数--@staticmethod @staticmethod声明该函数为类中的静态函数,为所有的实例对象所共有class A: total = 0 def fun1(self): A.total += 1 print('父类正在被调用') ''' 定义一个静态函数(静态方法) 使用@staticmethod ''' @staticm...