linux
zhanglei_1991
野生程序猿一只
展开
-
异步通知机制内核实现 及 驱动编写 (重要)
转载于: http://blog.csdn.net/wenqian1991/article/details/50333655 基本没有修改过,特此标注 /* *1.概念: 异步通知机制:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,是一种“信号驱动的异步I/O”。 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收转载 2016-11-24 16:36:58 · 716 阅读 · 0 评论 -
epoll例程——简单的server和client
客户端从标准输入读入一行,发送到服务端服务端从网络读取一行,然后输出到客户端客户端收到服务端的响应,输出这一行到标准输出 服务端代码如下:#include #include /* basic system data types */#include /* basic socket definitions */转载 2016-08-06 16:02:08 · 3996 阅读 · 1 评论 -
g++/gcc编译选项
编译过程一般分为四个阶段: 预处理(也称预编译,Preprocessing) gcc -E test.c -o test.i 或 gcc -E test.c 编译(Compilation) gcc -S test.i -o test.s 汇编 (Assembly) gcc -c test.s -o test转载 2016-08-01 14:13:51 · 3697 阅读 · 0 评论 -
socket阻塞与非阻塞,同步与异步,select,pool,epool
socket阻塞与非阻塞,同步与异步作者:huangguisu1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做转载 2016-08-02 18:01:22 · 688 阅读 · 0 评论 -
linux锁机制
在linux内核中,有很多同步机制。比较经典的有原子操作、spin_lock(忙等待的锁)、mutex(互斥锁)、semaphore(信号量)等。并且它们几乎都有对应的rw_XXX(读写锁),以便在能够区分读与写的情况下,让读操作相互不互斥(读写、写写依然互斥)。而seqlock和rcu应该可以不算在经典之列,它们是两种比较有意思的同步机制。atomic(原子操作):所谓原子操作,转载 2016-08-02 16:57:29 · 950 阅读 · 0 评论 -
UNIX Socket(IPC)
socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIXDomain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进转载 2016-08-05 21:18:44 · 783 阅读 · 0 评论 -
Linux Socket编程(网络)
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的。本文的主要内容如下:1、网络中进程之间如何通信?2、Socket是什么?转载 2016-08-05 21:15:28 · 211 阅读 · 0 评论 -
linux系统性能分析命令ps.pstree及top详解
linux系统常用的性能分析命令有ps pstree及top等,今天我们详细看下各命令的使用1.psps命令是平时比较常用的查看进程的命令,ps 是显示瞬间进程的状态,并不动态变化;如果想对进程运行时间监控,需要用 top 工具。ps命令就是最基本、也是非常强大的进程查看命令。根据显示的信息可以确定哪个进程正在运行、哪个进程被挂起、进程已运行了多久、进程正在使用的资源、进程的相对优先转载 2016-08-02 11:14:52 · 6065 阅读 · 0 评论 -
linux中fork()函数详解
一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来转载 2016-08-02 11:04:18 · 176 阅读 · 0 评论 -
vim终极配置方案
vim版本最好高于7.3,利用插件管理器移除不必要的插件https://github.com/spf13/spf13-vim - star 5,287 ; Fork 1,593(推荐)https://github.com/amix/vimrc - star 3,482 ; Fork 1,203https://github.com/humiaozuzu/dot-vimrc - s转载 2016-08-02 10:16:34 · 326 阅读 · 0 评论 -
高并发网络编程之epoll详解
在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在大数据、高并发、集群等一些名词唱得火热之年代,select和poll的用武之地越来越有限,风头已经被epoll占尽。本文便来介绍epoll的实现机制,并附带讲解一下select和poll。通过对比其不同的实现机制,真正理解为何epoll能实现高并发。se转载 2016-08-06 16:03:39 · 239 阅读 · 0 评论 -
IO多路复用之epoll总结(分函数_较规范)
1、基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。2、epoll接口 epoll操作过程需要三个接口,分别如下:转载 2016-08-06 16:12:31 · 356 阅读 · 0 评论 -
高并发的epoll+线程池,业务在线程池内
我们知道,服务器并发模型通常可分为单线程和多线程模型,这里的线程通常是指“I/O线程”,即负责I/O操作,协调分配任务的“管理线程”,而实际的请求和任务通常交由所谓“工作者线程”处理。通常多线程模型下,每个线程既是I/O线程又是工作者线程。所以这里讨论的是,单I/O线程+多工作者线程的模型,这也是最常用的一种服务器并发模型。我所在的项目中的server代码中,这种模型随处可见。它还有个名字,叫“半转载 2016-08-06 16:16:46 · 14665 阅读 · 4 评论 -
Linux 内存映射函数 mmap()函数详解
原文地址:http://blog.csdn.net/dlutbrucezhang/article/details/9080173一、概述 内存映射,简而言之就是将用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,同样,内核空间对这段区域的修改也直接反映用户空间。那么对于内核空间用户空间两者之间需要大量数据传输等操作的转载 2016-12-01 10:11:30 · 503 阅读 · 0 评论 -
深入分析Tasklet机制
原文地址:http://blog.csdn.net/ce123/article/details/7768941深入分析Tasklet机制一、tasklet使用Tasklet的使用比较简单,每个Tasklet结构体有一个函数指针,指向你自己定义的函数。当我们要使用 tasklet ,首先新定义一个tasklet_struct结构,并初始化好要执行函数指针,然后将它挂接到转载 2016-12-01 09:40:01 · 561 阅读 · 0 评论 -
linux文件描述符
在Linux中,进程是通过文件描述符(file descriptors,简称fd)而不是文件名来访问文件的,文件描述符实际上是一个整数。Linux中规定每个进程能最多能同时使用NR_OPEN个文件描述符,这个值在fs.h中定义,为1024*1024(2.0版中仅定义为256)。每个文件都有一个32位的数字来表示下一个读写的字节位置,这个数字叫做文件位置。每次打开一个文件,除非明确要求,否则转载 2016-09-19 11:44:35 · 307 阅读 · 0 评论 -
epoll的两种触发模式
linux异步IO浅析 http://hi.baidu.com/_kouu/blog/item/e225f67b337841f42f73b341.html epoll有两种模式,Edge Triggered(简称ET) 和 Level Triggered(简称LT).在采用这两种模式时要注意的是,如果采用ET模式,那么仅当状态发生变化时才会通知,而采用LT模式类似于原来的select/转载 2016-08-22 14:02:26 · 408 阅读 · 0 评论 -
linux内核相关问题
1) Linux中主要有哪几种内核锁? Linux的内核锁主要是自旋锁和信号量。自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图请求一个已被争用(已经被持有)的自旋锁,那么这个线程就会一直进行忙循环——旋转——等待锁重新可用。要是锁未被争用,请求它的执行线程便能立刻得到它并且继续进行。自旋锁可以在任何时刻防止多于一个的执行线程同时进入临界区。Linux中的信号量转载 2016-08-07 19:40:31 · 388 阅读 · 7 评论 -
Linux下core文件调试方法
在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。1.core文件的生成开关和大小限制 1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。 2) 使用ulimit -c filesize命令转载 2016-08-07 17:27:09 · 497 阅读 · 3 评论 -
16个Linux服务器监控命令
如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Linux 系统管理员。有些 Linux 发行版会提供 GUI 程序来进行系统的监控,例如 SUSE Linux 就有一个非常棒而且专业的工具 YaST,KDE 的 KDE System Guard 同样很出色。当然,要使用这些工具,你必须在服务器跟前进行操作,而且这些 GUI 的程转载 2016-08-07 17:03:22 · 246 阅读 · 0 评论 -
Linux改变进程优先级 linux Nice命令
本文介绍下linux nice命令的用法,使用nice命令改变Linux进程优先级,有需要的朋友参考下。在执行du、tar等命令时,会造成系统负载飙升,Apache响应缓慢。这时nice命令改变进程优先级可能能缓解这种状况。nice命令用于调整Linux系统中进程的优先级。通俗地讲,linux系统中,进程有-19到19这39个优先级。-19最优先转载 2016-08-07 11:10:15 · 1387 阅读 · 0 评论 -
GDB详解
1 简介2 生成调试信息3 启动GDB 的方法4 程序运行上下文 4.1 程序运行参数 4.2 工作目录 4.3 程序的输入输出5 设置断点 5.1 简单断点 5.2 多文件设置断点 5.3 查询所有断点6 观察点7 条件断点8 维护停止点9 为停止点转载 2016-08-06 18:13:58 · 276 阅读 · 0 评论 -
Linux进程PID哈希实现
linux系统中每个进程由一个进程id标识,在内核中对应一个task_struct结构的进程描述符,系统中所有进程的task_struct通过链表链接在一起,在内核中,经常需要通过进程id来获取进程描述符,最简单的方法可以通过遍历task_struct链表并对比id的值来获取,但这样效率太低,尤其当系统中运行很多个进程的时候。 linux内核通过PID散列表来解决这一问题,能快速的通过进程转载 2016-08-01 21:16:56 · 1232 阅读 · 0 评论 -
Linux虚拟内存与物理内存
首先,让我们看下虚拟内存: 第一层理解1. 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构 2. 一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间,哪些数据在哪里,都由进程控制表中的task_struct记录,task_struct中记录中一条链表,记录中内存转载 2016-08-01 21:09:28 · 444 阅读 · 0 评论 -
并发服务器设计
并发服务器就是能够同时处理多个客户端请求的服务器。并发服务器可通过多进程或者多线程程序来实现,这里采用多进程程序。服务器#include#include#include#include#include#include#include/*定义了struct sockaddr_in*/void main(){ int sockfd; /*创建socket转载 2016-08-01 21:02:00 · 359 阅读 · 0 评论 -
vi/vim基本使用方法
vi/vim 基本使用方法本文介绍了vi (vim)的基本使用方法,但对于普通用户来说基本上够了!i/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、 windows。vi编辑器是所有Unix及Linux系统下标转载 2016-04-07 17:02:47 · 247 阅读 · 0 评论 -
QT信号和槽用于对象之间的通信
信号和槽信号和槽用于对象间的通讯。信号/槽机制是Qt的一个中心特征并且也许是Qt与 其它工具包的最不相同的部分。在图形用户界面编程中,我们经常希望一个窗口部件的一个变化被通知给另一个 窗口部件。更一般地,我们希望任何一类的对象可以和其它对象进行通讯。例如,如 果我们正在解析一个XML文件,当我们遇到一个新的标签时,我们也许希望通知列表 视图我们正在用来表达XML文件的结构。较老的工具包转载 2016-03-05 10:41:10 · 8503 阅读 · 0 评论 -
ubuntu14.10+QT4编写ARM9(mini2440)应用的配置与安装
转自:http://blog.csdn.net/muyang_ren/article/details/42004427版权声明:本文为博主原创文章,博客地址:http://blog.csdn.net/muyang_ren目录(?)[+]笔记本:ubuntu14.10(32位)ARM9开发板:mini2440(友善之臂提供的Supe转载 2016-03-03 13:00:55 · 2118 阅读 · 0 评论 -
移植tslib1.4到tiny6410
因为很久之前写的,不记得参考了哪些文献,如果涉及到版权问题,请联系本人。由于tiny6410的一线触摸,所以需要改程序,照别人的:打开tslib/plugins/input-raw.c把其中的ts_input_read 函数改成如下:static int ts_input_read(structtslib_module_info *inf, struct原创 2016-03-03 12:37:42 · 310 阅读 · 0 评论 -
移除linux内核中dm9000驱动+编译uboot
因为涉及到ARM和DSP之间的通信,查阅了许多资料,多数是通过HPI接口,但是6410有没有专用的HPI驱动,于是只能自己编写,看了芯片手册和相关资料,最终采用的方案发现HPI所用的那些引脚被以太网口占用了,受条件限制只能把DM9000的驱动卸载掉,编写hpi驱动加载进去,导致的后果是之前配置的nfs没法用了,拷贝程序只能通过sd卡,后来尝试过把dm9000驱动编译成模块,动态加载卸载,在试的过程原创 2016-03-03 12:27:29 · 510 阅读 · 0 评论 -
tiny6410 驱动模块开机自动加载
修改开机启动文件rcSvi /etc/init.d/rcS 在modprobe fa_cpu_pfn 2>/dev/null 下面一行添加 insmod lib/modules/2.6.38-FriendlyARM/XX.ko mknod /dev/HPI c 200 0 即可 额外修改:删除了qtopia,注释了rcS中的部分启原创 2016-03-03 12:25:47 · 354 阅读 · 0 评论 -
编译6410内核文件+编译驱动为模块
拷贝6410光盘文件A下Linux文件夹中的linux-2.6.38-20111205.tgz(与开发板所用内核版本相同)文件到ubuntu的/root文件夹下并解压到此文件夹 解压后进入其根目录。执行命令:cp config_mini6410_a70 .config ;注意: a70后面有个空格,然后有个“.”开头的config(a70为开发板的触摸屏型号)#make zImage原创 2016-03-03 12:22:21 · 447 阅读 · 0 评论 -
ubuntu10.10软件源不支持的解决方案
因为很久之前做的记录,不记得参考哪里的文献,涉及到版权问题,请联系本人在ubuntu10.10中开发时,apt-get 命令出现了无法下载的,谷歌下了原因,是因为ubuntu10.10已经过了支持期。但是找到了相应的解决方案就是从老版本的软件库里下载软件就行啦,具体解决方案如下1. 请打开sources.listgksu gedit /etc/apt/sources原创 2016-03-03 11:15:23 · 525 阅读 · 0 评论 -
利用镜像安装ubuntu10.10
安装主文件下的虚拟机vmware,版本为12.00,安装序列号网上很多,可以自己找下,或者利用注册机生成。安装完后打开vmware,选择打开虚拟机,选择文件Ubuntu.vmx(在镜像所在的ubuntu文件夹里)点击编辑虚拟机设置,其中网络适配器选择NAT模式,共享文件夹选总是启用,并在自己电脑盘内设置一个用于ubuntu和windows之间共享文件的文件夹。然后开启此虚拟原创 2016-03-03 10:38:24 · 965 阅读 · 0 评论 -
Linux 标准目录结构
原文地址:http://www.cnblogs.com/Bob-FD/archive/2012/07/12/2588233.html初学Linux,首先需要弄清Linux 标准目录结构/root --- 启动Linux时使用的一些核心文件。如操作系统内核、引导程序Grub等。home --- 存储普通用户的个人文件ftp --- 用户所有服务httpdsamba转载 2016-04-07 17:05:16 · 207 阅读 · 0 评论 -
vi/vim编辑器必知必会
原文地址:http://www.cnblogs.com/Bob-FD/archive/2012/12/04/2801382.html一、我们为什么要学习vim编辑器?Linux的命令行界面下面有非常多的文本编辑器。比如经常听说的就有Emacs、pico、nano、joe与vim等。vim可以看做是vi的高级版。我们为什么一定要学习vim呢?有以下几个原因:(1)所有的U转载 2016-04-07 17:06:59 · 215 阅读 · 0 评论 -
linux中强大且常用命令:find、grep
原文地址:http://www.cnblogs.com/Bob-FD/p/3205341.html在linux下面工作,有些命令能够大大提高效率。本文就向大家介绍find、grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们。本文结构如下:find命令find命令的一般形式find命令的常用选项及实例find与xargsgrep命令grep命令的转载 2016-04-07 17:09:47 · 237 阅读 · 0 评论 -
Linux多进程程序设计
用到的函数的功能主要有获取进程id、创建进程、进程退出、进程等待、执行程序。 获取进程id:getpid(),getppid() 创建进程:fork(),vfork() 进程退出:exit() 进程等待:wait() 执行程序:exec(),system()getpid函数原型:pid_t getpid(void)头文件:功能:返回调用该函数的进程id,且该函数转载 2016-08-01 20:36:08 · 1430 阅读 · 0 评论 -
Linux多线程程序设计
原文地址:http://blog.csdn.net/u011012049/article/details/47419331线程:线程可以理解为“轻量级”的进程,它与创建它的进程共享代码段和数据段,同时拥有自己独立的栈。pthread_create原型:int pthread_create(pthread_t *thread,const pthread_attr_t *att转载 2016-08-01 20:12:17 · 1965 阅读 · 0 评论 -
Linux的进程/线程间通信方式总结
Linux系统中的进程间通信方式主要以下几种:同一主机上的进程通信方式 * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal) * System V进程通信方式:包括信号量(Semaphore), 消息队列(Message Queue), 和共享内存(Shared Memory)网络主机间的进程通信方式转载 2016-08-04 21:01:15 · 206 阅读 · 0 评论