- 博客(212)
- 资源 (18)
- 收藏
- 关注
原创 多线程中使用fork()导致分页
最近和同事一起处理了一个 fuse 的大bug;首先看堆栈:Core was generated by `/sf/cluster/bin/pmxcfs'.Program terminated with signal SIGABRT, Aborted.#0 0x00007f2debdcc475 in raise () from /lib/x86_64-linux-gnu/libc.so.6(gdb...
2018-04-28 17:41:18 1246
原创 为什么CSDN做的越来有丑了??
为什么CSDN做的越来越丑了?真不知道CSDN的产品经理怎么当的,视觉设计师是怎么做的,真是做的越来越差了。丑的我都无法接受了。不要站在自己的角度,不要站在公司的角度,也不要站在技术的角度 去做产品,这样只能把产品做死。我们应该站在用户角度、使用者的角度 来思考问题。因为你们产品是给这两者来使用的,要了解他们的本质需求。可能你们自己觉得挺好的,有创新,有改进。那是因为你们对自己产品
2018-02-06 11:21:29 1913 6
转载 linux文件系统之mount流程分析
本质上,Ext3 mount的过程实际上是inode被替代的过程。例如,/dev/sdb块设备被mount到/mnt/alan目录。那么mount这个过程所需要解决的问题就是将/mnt/alan的dentry目录项所指向的inode屏蔽掉,然后重新定位到/dev/sdb所表示的inode索引节点。在没有分析阅读linux vfs mount代码的时候,我的想法是修改dentry所指向的inod
2017-09-01 10:04:00 3803
原创 linux c删除文件中指定内容行或指定行
1、增加个临时文件;把源文件内容逐个字节或者逐行读取出来,然后修改或者丢弃,放到临时文件中,当把源文件中所有内容过滤后,再把临时文件全部覆盖回源文件;2、读取到内存中修改;把整个文件读取到内存中,然后修改,再覆盖回到源文件;我们应该怀疑下,为什么 shell 命令可以很方便的删除、修改文件内容,这绝对不会有临时文件产生,也不会占用多大内存,或者可以说占用的内存不会随着文件的大小而改变?
2017-04-16 00:16:37 15912 1
转载 linux文件读写流程
在《linux内核虚拟文件系统浅析》这篇文章中,我们看到文件是如何被打开、文件的读写是如何被触发的。对一个已打开的文件fd进行read/write系统调用时,内核中该文件所对应的file结构的f_op->read/f_op->write被调用。本文将顺着这条路走下去,大致看看普通磁盘文件的读写是怎样实现的。 linux内核响应一个块设备文件读写的层次结构如图(摘自ULK3):
2017-03-29 17:26:56 2976
转载 网络IO虚拟化
IO 虚拟化简介前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理。作为一个完整的风诺依曼计算机系统,必然有输入计算输出这个步骤。传统的IO包括了网络设备IO,块设备IO,字符设备IO等等,在KVM虚拟化原理探究里面,我们最主要介绍网络设备IO和块设备IO,其实他们的原理都很像,但是在虚拟化层又分化开了,这也是为什么网络设备IO虚拟化和块设备IO虚拟化要分开讲的原因。这一章介绍
2017-03-28 11:30:51 1795
转载 CPU虚拟化
上一篇文章笼统的介绍了一个虚拟机的诞生过程,从demo中也可以看到,运行一个虚拟机再也不需要像以前想象的那样,需要用软件来模拟硬件指令集了。虚拟机的指令集直接运行在宿主机物理CPU上,当虚拟机中的指令设计到IO操作或者一些特殊指令的时候,控制权转让给了宿主机(这里其实是转让给了vm monitor,下面检查VMM),也就是一个demo进程,他在宿主机上的表现形式也就是一个用户级进程。用一张
2017-03-28 09:01:02 1296
转载 QEMU启动过程
虚拟机启动过程第一步,获取到kvm句柄kvmfd = open("/dev/kvm", O_RDWR);第二步,创建虚拟机,获取到虚拟机句柄。vmfd = ioctl(kvmfd, KVM_CREATE_VM, 0);第三步,为虚拟机映射内存,还有其他的PCI,信号处理的初始化。ioctl(kvmfd, KVM_SET_USER_MEMORY_REGION, &mem);第四步,将
2017-03-27 16:47:08 5553
转载 QEMU镜像格式:qcow2 与 raw
qcow2 的基本原理qcow2 镜像格式是 QEMU 模拟器支持的一种磁盘镜像。它也是可以用一个文件的形式来表示一块固定大小的块设备磁盘。与普通的 raw 格式的镜像相比,有以下特性:更小的空间占用,即使文件系统不支持空洞(holes);支持写时拷贝(COW, copy-on-write),镜像文件只反映底层磁盘的变化;支持快照(snapshot),镜像文件能够包含多
2017-03-27 11:47:50 4459
转载 RRD 数据库简介及操作
RRD 数据库简介及操作最近公司在部署了一套小米开源的监控平台 — open-falcon ,有机会认识了 RRD (更多被称作 RRDTool)。好久没 blog 了,今天跟大家分享一下这个数据库。RRD 简介RRDtool refers to Round Robin Database tool .Round robin is a technique that
2017-03-23 09:33:34 17405 1
转载 编写守护进程的实例
守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用 的进 程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。 比如,作业规划进程crond,打印进程lpd等。守护进程的编程本身并不复杂,复杂的是各种版本的
2017-03-21 15:24:22 923
原创 qemu-kvm内存虚拟化原理
关系:客户机虚拟地址---> 哈希表 ---> 影子页表 ---> 虚拟地址--->宿主物理地址; 哈希表之所以用物理地址映射(到影子页表是用虚拟机地址的)是因为每个客户机只有一个哈希表,而虚拟地址每个客户机有多个进程对应的虚拟机地址,也有多个影子表。而物理地址只有一个;以通过物理地址唯一来对应哈希表唯一,并且影子页表也是通过cr3来确定唯一;
2017-03-20 11:59:18 1676
转载 libvirt的virsh命令和qemu参数转换
运行虚拟机有多种方式,其中可以使用qemu-system-x86或者qemu-kvm来运行虚拟。另外还可以使用libvirt的virsh命令从xml文件定义来运行虚拟机。而网上许多的教程或者示例使用qemu命令参数来运行的,如果使用libvirt来运行可能会无从下手,不知道对应的参数。libvirt从Domain的配置文件启动虚拟机虚拟机(有时Domain,guest都表示虚拟机的
2016-12-28 16:45:46 7542
原创 node + express 中ejs页面中文乱码问题
1、在页面上设置 2、如果还不行,那就是文件本身不是utf-8的格式;linux中的文件格式一般是utf-8的,而Windows上的格式一般是gb2312 和 iso-8859-1 的;因为有的时候我们是在Windows上调试页面,调试满意后再上传到linux,就会导致这样的问题;查看文件的格式:file -i main.ejsmain.ejs: text/html;
2016-12-15 00:57:23 4711
原创 父进程为1号进程(ppid=1)的僵尸进程处理和分析
但是,父进程为1号进程的进程 其实也是有可能成为僵尸进程的。下面说几种情况:1、进程还在被其它进程使用,退出;2、进程的子线程还在执行任务,但主线程已经死掉了(可能主线程已经被杀了,systemd停止服务时会发SIGTERM信号);3、进程阻塞在某一IO请求上,这时控制权已交到内核手上,这时如果子进程被KILL掉, 那么就成为父进程ID为1的僵尸进程,这个进程不会退出,会一直阻塞直到IO请求被满足;
2016-11-02 21:02:10 35724
转载 病毒分析--mirai物联网病毒
物联网僵尸网络病毒“Mirai”在上月参与发起了针对KrebOnSecurity安全站点的大规模分布式DDoS攻击,新一类僵尸网络从各种容易被感染的物联网设备中发起,流量巨大防不胜防。“Mirai”可以高效扫描物联网系统设备,感染采用出厂密码设置或弱密码加密的脆弱物联网设备,被病毒感染后,设备成为僵尸网络机器人后在黑客命令下发动高强度僵尸网络攻击。本文针对Mirai源码进行详细分析。1.
2016-11-01 17:30:01 14064 1
转载 qemu中虚拟网卡概念
注册博客园已经好长时间,一直以来也没有在上面写过文章,都是随意的记录在了未知笔记上,今天开始本着分享和学习的精神想把之前总结的笔记逐步分享到博客园,和大家一起学习,一起进步吧!2016-09-20 17:11:05 其实之前已经有分析过网桥的原理,但是当时对其理解还是局限于表面,对于其本身的实现原理并没有结合linux源代码进行分析,那么本次实际上是要分析qemu对于网卡
2016-10-10 20:30:06 3867
转载 qemu网络虚拟化之数据流向分析二
2016-09-27 上篇文章大致介绍了qemu网络虚拟化相关的数据结构,本篇就结合qemu-kvm源代码分析下各个数据结构是如何初始化以及建立联系的。这里还是分为三个部分:1、Tap设备区2、Hub区3、NIC区1、Tap设备区在net.c中有数组记录下net client 初始化的相关函数 1 static int (*
2016-10-10 20:13:58 1075
转载 qemu网络虚拟化之数据流向分析一
插曲: 今天下午欣喜的想写点关于qemu网络部分的功能,但是中途出现了点小插曲,电脑被某人搞得死机了,并且文章也没有保存。结果,,,就只能重新写了!!所以这里强烈建议开发团队提供自动保存的功能!言归正传,前段时间自己写过关于Linux 内部网桥的实现原理以及数据包从物理网卡到达Linux网桥进行转发,再到Tap设备的流程。从qemu网络虚拟化整体框架来看,这部分只能算是前
2016-10-10 17:58:58 1223
转载 使用strace, ltrace寻找故障原因的线索
2012-03-23 wcdj在GNU/Linux环境下,当程序出现“疑难杂症”的时候,如何快速定位问题呢?本文介绍strace/ltrace的一些使用方法,内容主要来自个人的读书笔记(可见参考文献)。strace/ltrace 是一类不错的工具,在工作中经常会用到,其主要可以用于:(1) 了解一个程序的工作原理(可以了解Linux下很多常用的命令实现的原理);(2
2016-08-18 20:03:14 1067
转载 systemd详解
CentOS 7 使用systemd替换了SysV。Systemd目的是要取代Unix时代以来一直在使用的init系统,兼容SysV和LSB的启动脚本,而且够在进程启动过程中更有效地引导加载服务。systemd的特性有:支持并行化任务同时采用socket式与D-Bus总线式激活服务;按需启动守护进程(daemon);利用 Linux 的 cgroups 监视进程;
2016-08-17 10:47:05 1332
转载 走进Linux之systemd启动过程
编译自:http://linoxide.com/linux-how-to/systemd-boot-process/作者: Aun Raza原创:LCTT https://linux.cn/article-5457-1.html译者: zpl1025本文地址:https://linux.cn/article-5457-1.html2015-5-17 20:33 评
2016-08-17 10:44:27 5267
转载 recovery: ASCII cpio archive (SVR4 with no CRC)——cpio格式的recovery解压缩和重新打包的方
中兴U930HD手机CPU采用的是联芯科技的LC1810,该平台系统的recovery.img 和boot.img 的打包格式跟其他平台(如高通、MTK、英伟达等)不一致,研究了半天终于将930HD的recovery替换了,步骤如下1、用第三方工具root手机之后,采用dd命令导出recovery.img到sd卡adb shellsudd if=/dev/block
2016-07-08 18:59:03 2274
转载 linux panic分析
Oops: 0000 [#1] PREEMPT SMP Modules linked in: capidrv kernelcapi isdn slhc ipv6loop dm_multipath snd_ens1371 gameport snd_rawmidi snd_ac97_codecac97_bus snd_seq_dummy snd_seq_oss
2016-07-02 09:28:57 1132
转载 查看设备、文件被哪个进程使用
lsof简介 lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接 和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通
2016-06-27 11:36:23 19914
转载 System.map解析
第一部分:System.map的作用有关System.map文件的信息好象很缺乏。其实它一点也不神秘,并且在整个事情当中它并不象看上去那么得重要。但是由于缺乏必要的文档说明,使其显得比较神秘。它就象耳垂,我们每个人都有,但却不知道是干什么用的。注意,我并不会是百分之一百正确的。例如,一个系统很可能没有/proc文件系统支持,但是大多数系统肯定有。这里我假定你是“随大流的”,并有一个典型配置
2016-06-20 23:41:33 1174
转载 linux宕机后根据地址来查看哪个函数出错
本文以获取内核函数 sys_open()的地址为例。 1)从System.map文件中直接得到地址: $ grep sys_open /usr/src/linux/System.map 2)使用 nm 命令: $ nm vmlinuz | grep sys_open 3)从 /proc/kallsyms 文件获得地址:
2016-06-20 23:26:44 1481
转载 do ... while(0) 的妙用
在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。1. do...while(0)消除goto语句。通常,如果在
2016-06-16 16:04:17 494
原创 SSD卡驱动中trim命令的实现原理
有关trim命令的简介 可以看下http://blog.csdn.net/yuzhihui_no1/article/details/46519701这里就大概的说下驱动中对trim命令的实现吧,由于对公司代码的保密性,这里就不沾贴代码了,就大概的说下实现原理;首先是块设备的基本框架:队列 queue和绑定队列的函数先说说一般的块设备框架,
2016-05-06 00:00:13 2642
原创 linux文件系统之读流程 SYSCALL_DEFINE3(read, xxx)
SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count);fget_light();fcheck_files();ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos);1、struct iovec结构体 struct iovec { void __user *iov_base; /*
2016-05-05 00:50:55 3427
转载 struct file 和 struct file_struct
在具体介绍这几个结构以前,我们需要解释一下文件描述符、打开的文件描述、系统打开文件表、用户打开文件表的概念以及它们的联系。1.文件对象在Linux中,进程是通过文件描述符(file descriptors,简称fd)而不是文件名来访问文件的,文件描述符实际上是一个整数。Linux中规定每个进程能最多能同时使用NR_OPEN个文件描述符,这个值在fs.h中定义,为1024*1024(2.0版
2016-05-02 21:35:33 5956
原创 linux中页缓冲和块缓冲之概念
页缓冲在《linux内核情景分析》一书的第5.6节文件的写与读一章中说明的很详细,这里摘抄下来;在文件系统层中有三隔主要的数据结构,file结构、dentry结构和inode结构;file结构:代表目标文件的一个上下文,不同进程可以在同一文件上建立不同的上下文,而且同一进程也可以通过打开一个文件多次而建立起多个上下文。因此不能在file结构上设置缓冲区队列,因为这些file结构体之间都不共
2016-04-27 22:41:01 6568
原创 linux内存管理--实际分配函数 buffered_rmqueue
不管是快速分配还是慢速分配,实际分配内存的都是 buffered_rmqueue()函数,其他的都是在选择从哪个地方来分配比较合适;还是先来说说各个参数:struct zone *preferred_zone 表示分配所能接受的最大zone类型struct zone *zone 表示就在该zone上分配内存;int order 表示分配页的阶数gfp_t gfp_flag
2016-04-27 22:39:41 5891
原创 linux内存管理--slab
struct kmem_cache *kmem_cache_create(const char *name, size_t size, size_t align, unsigned long flags, void (*ctor)(void *)) { return kmem_cache_create_memcg(NULL, name, size, align, f
2016-04-27 22:38:26 4325
原创 linux内存管理--高端内存映射
void *kmap(struct page *page){ might_sleep(); if (!PageHighMem(page)) return page_address(page); return kmap_high(page);}/** * page_address - get the mapped virtual ad
2016-04-27 22:30:03 1134
原创 linux内存管理--vmalloc
/** * vmalloc - allocate virtually contiguous memory * @size: allocation size * Allocate enough pages to cover @size from the page level * allocator and map them into contiguous kernel
2016-04-27 22:29:10 4425
原创 linux内存管理--慢速分配内存页 __alloc_pages_slowpath
page = __alloc_pages_slowpath(gfp_mask, order, zonelist, high_zoneidx, nodemask, preferred_zone, migratetype);static inline struct page *__alloc_pages_slowpath(g
2016-04-27 22:27:56 4230
原创 linux内存管理--分配内存页(快速) get_page_from_freelist
page = get_page_from_freelist(gfp_mask|__GFP_HARDWALL, nodemask, order, zonelist, high_zoneidx, alloc_flags, preferred_zone, migratetype);static struct page *get_page_fr
2016-04-27 22:26:58 5078
原创 linux内存管理--伙伴系统分配内存准备工作
linux内核内存管理的代码改变的有点大,主要是细节方面;首先从 __get_free_pages()开始总结起:unsigned long __get_free_pages(grp_t gfp_mask, unsigned int order)/* * Common helper functions. */ unsigne
2016-04-27 22:26:07 1736
原创 __get_free_pages
说下分配策略,这个分配策略主要是获取到节点的编号(也就是得到 pgdat 结构体);下面是分配策略的结构体static inline struct page *__alloc_pages(gfp_t gfp_mask, unsigned int order, struct zonelist *zonelist){
2016-04-27 22:24:51 2054
嵌入式Linux之我行系列
2015-07-20
Oracle VM VirtualBox 桥接模式驱动
2015-03-10
软件开发电子书百宝箱
2014-08-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人