随笔分类 -  Linux

摘要:在底层代码中看到这样一条语句: system("/system/bin/sh -c \"am broadcast -a android.intent.action.AT_AIRPLANE_MODE --ez state true\"");system 这是干什么的啊?? 经google原来system是系统调用,执行一个系统命令。 这里system加上其参数的意思: 调用system,通过shell,执行可执行程序或者脚本am, 发送broadcast Action为:android.intent.action.AT_AIRPLANE_MODE 广播参数 阅读全文
posted @ 2013-05-03 10:40 __Shadow 阅读(4035) 评论(0) 推荐(0)
摘要:EWOULDBLOCK:用于非阻塞模式,不需要重新读或者写EINTR:指操作被中断唤醒,需要重新读/写 在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中)。从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作(对文件或socket)的时候。 例如,以 O_NONBLOCK的标志打开文件/socket/FIFO,如果你连续做read操作而没有数据可读。此时程序不会阻塞起来等待数据准备就绪返 回,read函数会返回一个错误EAGAIN,提示你的应用程序现在没有数据可读请.. 阅读全文
posted @ 2013-04-10 17:11 __Shadow 阅读(12903) 评论(0) 推荐(0)
摘要:【整理】ps命令输出字段的含义Linux中的ps命令,用于查看进程状态信息。其输出内容有很多列,每一列中又有很多字母或符号表示很多种不同意思。先贴个例子:MTLG>ps PID Uid VSZ Stat Command 1 root 132 S /sbin/init 2 root RWN [ksoftirqd/0] 3 root SW< [events/0] 4 root SW< [khelper] 5 root SW< [kthread] 6 root SW< [kblockd/0] 7 root SW [pdflush] 8 root SW [pdflush] 阅读全文
posted @ 2013-01-09 09:21 __Shadow 阅读(4115) 评论(0) 推荐(0)
摘要:编译C文件用GCC编译C++文件(包括.C/C++文件)用G++看看编译C++文件常用方法:单个文件: g++ file.cpp 这是最简单形式,缺省输出为a.out,可以用-o命令指定输出文件,比如g++ file.cpp f.out 多个文件: g++ -c 1.cpp -o 1.o g++ -c 2.cpp -o 2.o g++ 1.o 2.o -o prog.out 链接成可执行文件:一般用g++ -o file file.cpp 多个文件是g++ -o file file1.cpp file2.cpp ... 编译C++... 阅读全文
posted @ 2012-11-28 11:29 __Shadow 阅读(6537) 评论(0) 推荐(0)
摘要:通常实现双向链表的数据结构:struct list_node1{ struct list_node1 *next,*prev; type1 m1; type2 m2;};struct list_node2{ struct list_node2 *next,*prev; type1 m1; type2 m2;};……对于每一种数据结构都定义了其特定的实现链表的结构和对应的方法(add/del)操作链表; 但对于具有大量不同数据结构,都要使用链表的系统中,如果为每一种数据结构定义特定的结构,和操作方法,无疑使代码变得重复和臃肿,需要实现一种通用的双向链表方法,... 阅读全文
posted @ 2012-10-19 15:17 __Shadow 阅读(7326) 评论(0) 推荐(3)
摘要:一 块I/O基本概念字符设备:按照字符流的方式被有序访问的设备。如串口、键盘等。块设备:系统中不能随机(不需要按顺序)访问固定大小的数据片(chunk 块)的设备。 如:硬盘、软盘、CD-ROM驱动器、闪存等。都是通过以安装文件系统的方式使用。块设备的组成: 扇区:是块设备中最小的可寻址单元(常见大小512字节);是块设备的基本寻址和操作单元。 块:是文件系统最小逻辑可寻址单元,文件系统的抽象,只能通过块访问文件系统。通常包含多个扇区。 当一个块被调入内存时(读入后或等待写出时),它要存储在一个缓冲区中;每个缓冲区与一个块对应,缓冲区相当于是磁盘块在内存中的表示;块大小不超过一个页面,... 阅读全文
posted @ 2012-09-27 09:36 __Shadow 阅读(2085) 评论(0) 推荐(0)
摘要:Linux下常见命令 原文地址:http://www.cnblogs.com/Gaojiecai/archive/2011/11/03/2234888.html=============安装和登陆命令========================================Mount:挂载命令。把存储介质指定成系统中的某个目录,比如挂载光驱mount /dev/cdrom把CDROM挂载,可在目录/mnt/cdrom下查看内容。umount:卸载命令,比如umount /dev/cdromexit:退出终端命令。shutdown:关闭linux系统,后面可加参数,比如shut do... 阅读全文
posted @ 2012-09-26 19:21 __Shadow 阅读(2121) 评论(0) 推荐(0)
摘要:虚拟文件系统虚拟文件系统:内核子系统VFS,VFS是内核中文件系统的抽象层,为用户空间提供文件系统相关接口;通过虚拟文件系统,程序可以利用标准Linux文件系统调用在不同的文件系统中进行交互和操作。VFS作为抽象层: 文件系统被安装在一个特定的安装点上,该安装点在全局层次结构中被称作命名空间,所有的已安装文件系统都作为根文件系统树的枝叶出现在系统中。 文件系统主要的对象:超级块对象:代表一个已安装文件系统;struct super_block {}索引节点对象:代表一个文件;struct inode {}目录项对象:代表一个目录项,路径的一个组成部分;struct dentr... 阅读全文
posted @ 2012-09-26 16:09 __Shadow 阅读(1447) 评论(0) 推荐(0)
摘要:一 页 内核把物理页作为内存管理的基本单位;内存管理单元(MMU)把虚拟地址转换为物理地址,通常以页为单位进行处理。MMU以页大小为单位来管理系统中的也表。 32位系统:页大小4KB 64位系统:页大小8KB内核用相应的数据结构表示系统中的每个物理页: <linux/mm_types.h> struct page {}内核通过这样的数据结构管理系统中所有的页,因此内核判断一个页是否空闲,谁有拥有这个页,拥有者可能是:用户空间进程、动态分配的内核数据、静态内核代码、页高速缓存……系统中每一个物理页都要分配这样一个结构体,进行内存管理。二 区 Linux内存寻址存在问题:一些硬件只能用 阅读全文
posted @ 2012-09-21 19:16 __Shadow 阅读(12461) 评论(0) 推荐(0)
摘要:一 内核中的时间观念 内核在硬件的帮助下计算和管理时间。硬件为内核提供一个系统定时器用以计算流逝的时间。系统定时器以某种频率自行触发,产生时钟中断,进入内核时钟中断处理程序中进行处理。 墙上时间和系统运行时间根据时钟间隔来计算。利用时间中断周期执行的工作: 更新系统运行时间; 更新实际时间; 在smp系统上,均衡调度程序中各处理器上运行队列; 检查当前进程是否用尽了时间片,重新进行调度; 运行超时的动态定时器; 更新资源消耗和处理器时间的统计值;二 节拍率 系统定时器的频率;通过静态预处理定义的——HZ;系统启动按照HZ值对硬件进行设置。体系结构不同,HZ值也不同;HZ可变的。 //内核... 阅读全文
posted @ 2012-09-21 09:39 __Shadow 阅读(11055) 评论(0) 推荐(0)
摘要:一 原子操作 指令以原子的方式执行——执行过程不被打断。1 原子整数操作 原子操作函数接收的操作数类型——atomic_t//定义atomic_t v;//初始化atomic_t u = ATOMIC_INIT(0);//操作atomic_set(&v,4); // v = 4atomic_add(2,&v); // v = v + 2 = 6atomic_inc(&v); // v = v + 1 = 7//实现原子操作函数实现static inline void atomic_add(int i, atomic_t *v){ unsigned lon... 阅读全文
posted @ 2012-09-20 09:38 __Shadow 阅读(5034) 评论(0) 推荐(0)
摘要:一 临界区和竞争条件 临界区:访问和操作共享数据的代码段。 竞争条件:多个执行线程处于同一个临界区中。 处于竞争条件:造成访问的数据或者资源不一致状态:对资源i的访问:ProcessA和B访问后得到正确的结果应该是9: 进程是并发执行,有可能得到的结果是:8 防止这种情况的发生:保证对资源的访问原子操作。二 加锁 锁:采用原子操作实现,原子操作不存在竞争。 造成并发原因: l 中断:随时可以打断当前执行的进程代码; l 软中断和tasklet:任何时刻能唤醒调度软中断和tasklet,打断当前正在执行的代码; l 内核抢占:当前任务被抢占; l 进程睡眠:唤醒调度... 阅读全文
posted @ 2012-09-19 20:12 __Shadow 阅读(2205) 评论(0) 推荐(0)
摘要:一 中断 硬件通过中断与操作系统进行通信,通过对硬件驱动程序处注册中断处理程序,快速响应硬件的中断。硬件中断优先级很高,打断当前正在执行的程序。有两种情况: 硬件中断在中断处理程序中处理 硬件中断延后再进行处理 这个具体硬件相关,在中断处理程序中处理,打断了当前正在执行的程序;所有中断都将被屏蔽;如果占用时间太长不合适,造成系统交互性,反应能力都会受到影响。 需要在其中判断平衡: 如果一个任务对时间非常敏感,将其放在中断处理程序中执行; 如果一个人和和硬件相关,将其放在中断处理程序中执行; 如果一个任务要保证不被其他中断打断,将其放在中断处理程序中执行; 其余情况考虑延后机制中执行——下... 阅读全文
posted @ 2012-09-13 17:46 __Shadow 阅读(2171) 评论(0) 推荐(0)
摘要:一 用户空间和内核空间Linux内核将这4G字节虚拟地址空间的空间分为两部分: l 将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为“内核空间”。 l 将较低的3G字节(从虚拟地址 0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间)。 因为每个进程可以通过系统调用进入内核,因此Linux内核由系统内的所有进程共享。于是从具体进程的角度来看,每个进程可以拥有4G字节的虚拟空间。如此划分提供对系统内核安全保护机制。二 系统调用 用户空间的进程和内核空间程序如何进行交互?——系统调用 l 为用户空间提供统一的抽象接口... 阅读全文
posted @ 2012-09-13 11:20 __Shadow 阅读(1657) 评论(0) 推荐(0)
摘要:进程调度: 在可运行态进程之间分配有限处理器时间资源的内核子系统。一 调度策略1 进程类型 I/O消耗型进程:大部分时间用来提交I/O请求或是等待I/O请求,经常处于可运行状态,但运行时间短,等待请求过程时处于阻塞状态。如交互式程序。 处理器消耗型进程:时间大都用在执行代码上,除非被抢占否则一直不停的运行。 综合型:既是I/O消耗型又是处理器消耗型。 调度策略要在:进程响应迅速(响应时间短)和最大系统利用率(高吞吐量)之间寻找平衡。2 调度概念 优先级:基于进程价值和对处理器时间需求进行进程分级的调度。 时间片:表明进程被抢占前所能持续运行的时间,规定一个默认的时间片。时间片过长导致系统交互性 阅读全文
posted @ 2012-09-11 15:43 __Shadow 阅读(7558) 评论(0) 推荐(0)
摘要:一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源。 线程是进程中活动的对象,每个线程都拥有独立的程序计数器、进程栈和一组进程寄存器。 内核调度的对象是线程而不是进程。对Linux而言,线程是特殊的进程。二 进程描述符及任务结构 内核使用双向循环链表的任务队列来存放进程,使用结构体task_struct来描述进程所有信息。1 进程描述符task_struct struct task_struct {}结构体相当大,大约1.7K字节。大概列出一些看看: 2 分配进程描述符 当进程由于中断或系统调用从用户态转换到内核态时,进程所使用的栈也要从用户栈切换到内核栈... 阅读全文
posted @ 2012-09-10 15:39 __Shadow 阅读(3448) 评论(0) 推荐(0)
摘要:内核与操作系统: 内核是操作系统的核心部分,包含了系统运行的核心过程,决定系统的性能,操作系统启动内核被装入到RAM中;操作系统与底层硬件设备交互和为运行应用程序提供执行环境。Linux内核与微内核比较: 微内核:内核只需要一个很小的函数集,通常包括几个同步原语,一个简单的调度程序和进程间通信机制。运行在微内核之上的几个系统进程实现系统级功能:内存分配,设备驱动程序……完全的模块化进程。任何操作系统层都是独立的程序模块,通过模块化的方法定义明确清晰的软件接口与其它层交互。内核中暂且不需要执行的系统进程可以被调出或者撤销。微内核便于移植和充分利用RAM,但开销大效率是个问题。 宏内核:Lin.. 阅读全文
posted @ 2012-09-07 15:03 __Shadow 阅读(6872) 评论(0) 推荐(1)
摘要:转载:http://www.ibm.com/developerworks/cn/linux/l-async/AIO 简介 Linux 异步 I/O 是 Linux 内核中提供的一个相当新的增强。它是 2.6 版本内核的一个标准特性,但是我们在 2.4 版本内核的补丁中也可以找到它。AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果。I/O 模型在深入介绍 AIO API 之前,让我们先来探索一下 Linux 上可以使用的不同 I/O 模型。这并不是一个详尽的介绍,但是我们将试图介绍. 阅读全文
posted @ 2012-09-06 16:50 __Shadow 阅读(2547) 评论(0) 推荐(0)
摘要:linux中fork()函数详解(原创!!实例讲解)(转载)一、fork入门知识一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。 我们来看一个例子:[cpp]view plaincopy/**fork_test.c*version1*Createdon:20 阅读全文
posted @ 2012-08-31 10:00 __Shadow 阅读(238912) 评论(14) 推荐(39)