- 博客(71)
- 资源 (21)
- 收藏
- 关注
原创 Linux nvme驱动分析
Ioctl处理流程:static int nvme_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg){ struct nvme_ns *ns = bdev->bd_disk->private_data; switch (cmd) { cas...
2018-05-23 08:13:26
1883
转载 [转] mutex, semaphore和spinlock的区别
出处:https://blog.csdn.net/Wilsonboliu/article/details/19190861本文由该问题引入到内核锁的讨论,归纳如下为什么需要内核锁?多核处理器下,会存在多个进程处于内核态的情况,而在内核态下,进程是可以访问所有内核数据的,因此要对共享数据进行保护,即互斥处理有哪些内核锁机制?(1)原子操作atomic_t数据类型,atomic_inc(atomic_...
2018-05-22 18:31:38
1211
转载 bss、data和rodata区别与联系
转自:http://blog.csdn.net/laiqun_ai/article/details/8528366有人可能会说,全局内存就是全局变量嘛,有必要专门一章来介绍吗?这么简单的东西,还能玩出花来?我从来没有深究它,不一样写程序吗?关于全局内存这个主题虽然玩不出花来,但确实有些重要,了解这些知识,对于优化程序的时间和空间很有帮助。因为有好几次这样经历,我才决定花一章篇幅来介绍它。
2016-03-10 13:20:55
520
转载 udev用法
转自:http://blog.csdn.net/coroutines/article/details/380678051. 初始化首先调用udev_new,创建一个udev library context。udev library context采用引用记数机制,创建的context默认引用记数为1,使用udev_ref和udev_unref增加或减少引用记数,如果引用记数为0,则释放内部
2016-02-22 15:07:01
1445
转载 va_start和va_end的使用及原理
va_start和va_end使用详解 本文主要介绍va_start和va_end的使用及原理。 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解。 介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理: 1.在C中,当我们无法列出传递函数的所有实参的
2016-02-22 13:54:16
387
转载 windows下python监控系统服务
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://future.blog.51cto.com/26959/831816目的:针对Windows下进程异常退出后,此程序自动启动被监控进程。如:监控Serv-U.exe程序是使用python语言编写,可在Windows下双击MonitorWin32Process
2015-11-26 19:31:20
2369
转载 udev规则
【转】跟我一起写udev规则(译)目录 介绍 关于本文档 更新历史概念 术语: devfs, sysfs, nodes, etc. 为什么? 内置固定命名设计编写规则 规则文件和语义 规则语法 基本规则 sysfs匹配属性 设备级联结构 字符
2015-11-26 11:01:12
417
转载 get_user_pages的意义
get_user_pages的意义,这个函数可以锁定用户页面,将之锁定在内存中不被换出,其实这个函数就是靠增加页面的引用计数来实现的,另外一种锁定页面的方式是调用mlock系统调用,但是后者是主动的锁定,并且在页面的基本属性上保证了不被换出,这是用户可以控制的,而前者使用引用计数的方式是用户所不能控制的,它只是有的时候内核在使用该page,由于内核使用而不能被换出,比如内核在执行aio或者bio,
2015-11-05 16:47:44
4152
转载 spin_lock与spin_lock_irqsaveq区别
个人总结:中断上下文,即由中断引发的中断处理函数的执行过程,由于不是线程,没有tast_struct记录它的状态,因此是不可重入的,所以一旦这个上下文被中断打断,无法恢复。因此如果要用spin lock,一定要使用spin_lock_irqsave的禁止中断的版本。而线程环境,由于有task_struct记录所有资源,以及执行记录,所以是可以被中断的。假如上述二者情况在同一个CPU
2015-04-18 10:19:53
692
转载 Printk代码分析
转自:http://book.51cto.com/art/200712/62871.htm总结:printk使用spin lock保护输出,因此是原子的,它还是用了一个长度为1024的临时buffer存储临时数据,然后在写入__log_buf.遇到的问题:使用BIO工具打印数据时,异步使用printk打印的大量数据会冲突,造成许多数据丢失。2.1.4 prin
2015-04-16 17:02:28
1454
转载 va_start和va_end的使用及原理
转载地址:http://www.cnblogs.com/hanyonglu/archive/2011/05/07/2039916.html 本文主要介绍va_start和va_end的使用及原理。 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解。 介绍这两个宏之前先看一下C中传递
2015-04-16 15:54:03
377
转载 docker定义
docker, based on lxc tech and is used to make portable package which can be built on one system installed docker and run on many othersystems which also installed docker.Applications run in
2015-02-09 19:02:45
397
转载 MSI及MSIX详解
转自:http://blog.163.com/fabulous_wyg/blog/static/17405078520126273199786/1. 什么是MSIMSI全称Message Signaled Interrupt。当设备向一个特殊地址写入时,会向CPU产生一个中断,即也MSI中断。MSI能力最初在PCI 2.2里定义,在PCI 3.0里被强化,使得每个中断都可以
2015-01-29 15:46:29
12627
1
原创 segment fault问题原因分析
segmengt fault类的错误本质原因就是程序访问了非法的地址:1.引用空指针2.野指针3.访问越界造成的原因有多种:主观原因:1.新申请指针忘记赋NULL,也忘记分配空间,直接使用造成非法访问。2.为指针赋值时,地址经过计算而来。计算过程有问题,导致赋值的地址不正确,比如地址经过计算涉及到类型转换之类操作,很容易因为类型转换造成截断。
2014-12-19 16:07:39
1739
原创 C语言程序架构
1.多模块初始化注册架构一个大型软件由多个模块构成,在初始化过程中,依次调用这些模块的初始化函数,这些初始化函数将这些模块内部提供的可供调用接口集中注册到一个大的数据结构中。然后main函数才开始处理接收到的参数,根据收到参数的不同,去调用大数据结构中不同的接口函数。适用场景:适用于构造交互式程序,初始化时,所有模块都注册好,开始接受用户输入时,根据输入参数调用不同的函数接口。
2014-11-18 16:33:59
2419
原创 不定长数组取值交叉遍历组合生成算法
代码如下:#include int factor[3][4] ={ {0, 1, 2, 3}, {0, 1}, {0, 1, 2}, };int lengths[3] = {4, 2, 3}; void recurisionAccess(int factor[3][4], int lengths[4], int co
2014-10-29 17:26:54
1577
转载 ssh拒绝密码问题
转自:其实这个问题是从 SCP 过来的。用 SCP 在两台 Linux 服务器之间传送备份文件。输入完 root 密码后,总是出现 Permission denied, please try again. 错误字样。用 Passwd 命令修改目标服务器 root 密码后,问题还是一样。判断来判断去,问题依旧。在网上找到几条解决办法:1、/home 权限问题如果 /home
2014-10-15 11:32:33
3413
原创 linux socket编程(udev举例)
union sockaddr_union { struct sockaddr sa; struct sockaddr_in in4; struct sockaddr_in6 in6; struct sockaddr_un un; struct sockaddr_nl nl; struc
2014-08-28 09:47:10
1386
转载 debian软件包管理
转自:http://baike.sogou.com/v63691049.htmubuntu继承与debian,管理方法一致。实用命令:1.dpkg -S /bin/ls 查询文件属于哪个deb包2.dpkg -s linux-image-generic 显示已安装包的信息3.dpkg -l 列出已安装的全部deb包4.dpkg -L 列出已安装包
2014-08-06 15:13:52
1470
转载 scatterlist && DMA
DMA是一种无须CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制。使用DMA可以是系统CPU从实际的IO数据传输过程中摆脱出来,从而大大提供系统的吞吐率。DMA方式的数据传输由DMA控制器(DMAC)控制,在传输期间,CPU可以并发地执行其他任务,当DMA结束后,DMAC通过中断通知CPU数据传输已经结束,然后由CPU执行相应的中断服务程序进行后续处理。在内存中用于
2014-07-17 18:40:54
564
原创 PCI驱动访问设备内存方式
static int nvme_dev_map(struct nvme_dev *dev){int bars, result = -ENOMEM;struct pci_dev *pdev = dev->pci_dev;if (pci_enable_device_mem(pdev))return result;dev->entry[0].vector = pd
2014-07-16 11:18:43
4580
转载 kmalloc、vmalloc、malloc的区别
转自:http://blog.csdn.net/macrossdzh/article/details/5958368
2014-07-15 16:07:19
410
转载 物理地址、虚拟地址(线性地址)、逻辑地址以及MMU的知识
一、首先不得不提的历史 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还有用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是
2014-07-15 16:03:00
592
原创 以新插入磁盘作为grub启动盘修改方法
在一块新磁盘上安装grub,并将它作为启动磁盘的步骤:1.如果该磁盘已经有安装过grub,先修改grub启动磁盘/boot/grub/device.map中描述了grub安装的磁盘。[root@localhost ~]# cat /boot/grub/device.map# this device map was generated by anaconda(hd
2014-07-14 18:04:59
2196
原创 使用其他机器上的硬盘启动Centos5系统panic问题解决方法
Creating a New Initial RAM DiskIf you have changed a motherboard or moved a disk to a different system it may fail to boot due to the lack of appropriate drivers in the initial RAM disk image (i
2014-07-11 10:51:36
996
原创 gnuplot用法
一组数据一个图# gnuplotset terminal pngset output 'iops.png'set title "IOPS" set xlabel "time(ms)"set ylabel "iops"set xrange [5000000:35000000]set yrange [0:100000]plot 'randread_iops.log'
2014-07-08 12:01:51
526
转载 linux清空缓存方法
原文:今天用spot on light 查了一下开发服务器的内存占用,只剩下60MB用下面的方法就可以实现清空缓存频繁的文件访问会导致系统的Cache使用量大增首先使用free -m查看剩余内存[root@Oracle ~]# free -m total used fre
2014-07-01 11:57:12
909
转载 Linux Kernel模块内存泄露的一种查找思路
Linux Kernel模块内存泄露的一种查找思路时间2014-02-14 14:12:11 CSDN博客 原文 http://blog.csdn.net/cjf_iceking/article/details/19191595一.问题描述 最近有个客户报了一个问题:如果运行我们的产品,则每天将会增长大概30M的内存,大概4个多月内存就会耗尽。和大多数程序
2014-07-01 11:55:39
561
原创 crash使用方法
1.Crash 调试vmcore:# pwd /var/crash/127.0.0.1-2014-06-23-12:37:00# crash /usr/lib/debug/lib/module/`uname -r`/vmlinux vmcorecrash> bt /* 打印函数栈 */crash> ps /* 查看系统崩溃时在运行的所有进程 */crash> set 3016
2014-07-01 11:53:12
6989
原创 linux访问windows分区或共享
linux mount windows分区[root@localhost ~]# mount -t cifs -o username=yangzy.fnst,password=Fnst.1234 ]//192.168.150.1/rpm /mnt
2014-06-20 14:18:52
802
原创 C标准IO缓存长度限制0124
echo "..." > /proc/submiter/submiter_entryecho的字符串长度超过1024时会发生两次传递,原因是echo使用C标准IO,即以FILE *f = fopen(file_name, mode, RDONLY)方式打开文件时,C标准IO会使用bufer,但buffer的长度只有1024。使用linux系统调用的直接IO方式,in
2014-06-20 14:15:20
571
原创 git发邮件
1.发单个patchgit status 检查状态git commit 提交修改,提交了之后才能format-patchgit format-patch -1 -s vim 0001-A-test-patch.patch add some comment git send-email 0001-A-test-patch.patch --t
2014-06-20 14:13:43
1322
原创 使用linux命令
同步分区表命令:partprobe(8) or kpartx(8)sed命令用例:sed -i 's/import TestDevice/import TestSetting/' `find . -name "*.py"`sed -i "s|../../../../../utils|../../../../utils|" *sed -i '/s
2014-06-20 14:09:08
457
原创 vim,sed简单命令
sed简单命令:1.删除行删除指定行sed -i '行号d' 文件名删除匹配行sed -i '/匹配内容(正则表达式)/d' 文件名2.插入行在指定行之前插入内容sed -i '行号i 插入内容' 文件名在指定行之后插入内容sed -i '行号a 插入内容' 文件名在匹配行之前插入内容sed -i '/匹配内容(正则表
2014-06-20 14:06:16
2801
原创 linux内核调试
1.使用kdump+debuginfo+crash[root@localhost 127.0.0.1-2014-06-19-03:01:35]# crash /usr/lib/debug/lib/modules/2.6.32-358.el6.x86_64/vmlinux vmcorecrash 6.1.0-1.el6Copyright (C) 2002-2012 Red Ha
2014-06-20 14:02:26
1585
原创 ubuntu软件包管理
deb文件时ubuntu以及debian管理软件的基本单位deb文件解压命令:ar -xv *.debdeb文件安装命令:apt-get install *.deb源文件:/etc/apt/source.list更新源:apt-get updatevncserver安装:apt-get install vnc4serv
2014-06-20 14:00:50
364
原创 kdump设置
1.grub配置# cat /boot/grub/grub.confkernel /vmlinuz-2.6.32-431.el6.x86_64 ... nmi_watchdog=0 crashkernel=auto2.kdump配置# cat /etc/kdump.confext4 /dev/sda5 注:当前系统所在分区path /var/crash 注:vmco
2014-06-20 13:59:29
1646
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人