摘要:
1、什么是程序?什么是进程?它们有什么区别?定义:程序:程序(Program)是一个静态的命令集合,程序一般放在磁盘中,然后通过用户的执行来触发。触发后程序会加载到内存中成为一个个体,就是进程。进程:进程(Process)的一个比较正式的定义是〔在自身的虚拟地址空间运行的一个单独的程序。〕〔个人理解:进程的本质是一个被加载到内存中并获得系统资源使之运行的程序实例〕区别:程序通常是一个二进制文件,不占用系统的运行资源。进程是一个随时都可能发生变化的、动态的、使用系统运行资源的程序。而且一个程序可以启动多个进程。2、进程组和作业定义:作业(Job):完成一个特定任务的一组进程称为作业(主要体现在管 阅读全文
摘要:
#1 设置测试系统 &想要在运行的内核当中扩展模块,就必须先准备好一个内核源代码树(可以是“主线”内核,也可以是发行版内核),构造一个新的内核,然后安装到自己的系统中,作为测试系统;#2 Hello World 模块 &构造好内核树之后,就可以开始编写模块了。我们先从简单的 “Hello World 模块”入手: 1 #include 2 #include 3 MODULE_LICENSE("Dual BSD/GPL"); 4 5 static int hello_init(void) 6 { 7 printk(KERN_ALERT "Hello, 阅读全文
摘要:
#1 设备驱动程序的作用 &设备驱动程序的作用在于提供机制,而不是策略。所谓机制,即“需要提供什么样的功能”;所谓“策略”,即“如何使用这些功能”。前者精于设计,专注细节;后者实现调用,不需要知道任何与硬件相关的信息。 &决定设备驱动通常不带策略的主要原因是:不同的环境需要不同的方式来使用硬件,而设备驱动针对底层硬件,不可能为每一种方式都编写一个策略。因此,我们让驱动程序提供机制,而让系统高层提供策略。 当然,有时候我们也要在驱动程序当中实现一些策略。例如,某个数字 I/O 驱动程序只提供以字节为单位访问硬件的方法,这样就可以避免编写额外的代码来处理单个数据位的麻烦。 & 阅读全文
摘要:
不管是初步跨入Linux殿堂的新手,还是具有多年经验的专家,在安装或编译软件包的过程中或多或少的都会遇到包的依赖问题,从而导致安装过程无法继续,比如管理员在安装LAMP时,包需要libgd.so文件,而这个文件属于GD软件包。但是在安装GD软件包时,可能这个软件包跟其他软件包又具有依赖关系,又需要安装其他软件包才行。这时有的管理员便失去耐心。在遇到这种Linux软件包依赖关系问题时,该如何解决呢?在谈这个具体的措施之前,先跟大家聊聊Linux系统里的软件依赖性问题。 一、什么是依赖性 程序依赖于程序代码的共享库,以便它们可以发出系统调用将输出发送到设备或打开文件等(共享库存在于许多方面,而.. 阅读全文
摘要:
有两个数,用大数减去小数,直到结果为0为止;Code is as follow:AREA item1,CODE,READONLYENTRYCODE32STARTMOV R0,#80; Set R0=80MOV R1,#33; Set R1=33LOOPCMP R0,R1; Compare R0,R1SUBLT R1,R1,R0; If R1>R0,then R1=R1-R0SUBGT R0,R0,R1; If R0>R1,then R0=... 阅读全文
摘要:
/ 预处理命令 / 宏定义 / 一般形式:#define 宏名 字符串 # 表示这是一条预处理命令 宏名是一个标识符,必须符合C语言标识符的规定 字符串可以是常数、表达式、格式化字符串等 / 注意: (1)如果在串中含有宏名,则不进行替换 (2)如果串长于一行,可在行末尾用"\"续行 (3)#define 出现在程序中函数的外面,宏名的有效范围为整个源文件 (4)可以用#undef 终止宏定义的作用域 (5)宏定义时参数要加括号,如不加括号,有时会引起错误 ... 阅读全文
摘要:
/ 结构体 / 声明结构体类型的一般形式: struct 结构体名[--表示的是这个结构体的类型] { 成员列表 }; [不要漏掉这个";"] / 声明结构可以放在main函数内,也可以放在main函数外 / 定义结构体变量的一般形式: struct 结构体名 结构体变量名; 如:struct Product product1; / 声明结构体的同时定义结构体变量(可以是多个) 如: struct Product { char name[10]; char color[10]; ... 阅读全文
摘要:
/指针 /指针变量指向一个变量的地址 /给指针变量赋的值只能是地址 /指针变量的赋值 /{ int a; int *p; p=&a; } or { int a; int *p=&a; } /指针必须先定义后使用 /不能把一个具体的数赋给指针 / &是取地址运算符,&q 表示取变量 q 的地址 / *是指针运算符,*p 表示返回指定地址内变量的值 / 因此,p=&q 表示的是地址;scanf 中 &q 表示往该地址写入操作数;printf 中的 q 表示输出变量 q 地址中存放的操作数;*p 表示输出变量 p 指向的地址中存放的操作数 / & 阅读全文
摘要:
/数据类型及占用字节char1个字节{-128~127}int2、4个字节,取决于平台是16位还是32位机子{-65536~65535}short int2个字节{-32768~32767}long int4个字节{-2147483648~21474833647}float4个字节{-3.4*10^-38~3.4*10^38}double8个字节{-1.7*10-308~1.7*10^308}long double8个字节{1.7*10^-308~1.7*10^308}/数据类型强制转换时,由高阶向低阶转换可能导致数据丢失;/前缀自增与后缀自增的区别在于:前缀先自增再赋值,后缀先赋值再自增;/ 阅读全文
摘要:
运算优先级口诀:括号成员第一; //括号运算符[]() 成员运算符. ->全体单目第二; //所有的单目运算符比如!、~、++、 --、 +(正)、 -(负) 、指针运算*、&乘除余三,加减四; //这个"余"是指取余运算即%移位五,关系六; //移位运算符:> ,关系:> = <= 等等于(与)不等排第七;//即== 和!=位与异或和位或; //这几个都是位运算: 位与(&)异或(^)位或(|) "三分天下"八九十; 逻辑或跟与; //逻辑运算符:|| 和 &&十二和十一; //注意顺序:优先级( 阅读全文
摘要:
在 Windows 中,我们常常使用Daemon Tools和Virtual CloneDrive等虚拟光驱软件挂载光盘镜像,下面我们一起来学习在 Linux 中如何挂载 ISO 文件。在 Linux 中挂载 ISO 文件有两种方式,第一种是使用 mount 命令,在终端中输入如下命令即可:sudo mount -o loop filename.iso /cdrom其中 filename.iso 是需要挂载的 ISO 文件的文件名,而 /cdrom 则是作为挂载点的目录,也就是说挂载之后 ISO 文件中的内容可以在该目录中找到,需要注意的是如果使用其他目录的话需要保证该目录已经存在。挂载完成之 阅读全文
摘要:
(1)一般技巧1.善用搜索引擎:怎么使用搜索引擎?其实很简单,就是学会定位“关键字”。只要定位准确,自然就可以找到比盲搜相关度更大的结果。关于如何定位,你可以去搜索一下谷歌搜索技巧,看一些相关网页,我就不赘述了。简单一点的:http://www.google.com/insidesearch/tipstricks/all.html复杂一点的:http://www.williamlong.info/archives/728.html2.善用网盘:网盘这个词是前几年流行不久的,但是一直没有受到很大的重视,直到近年来“云”技术的出现和发展,比如你可能熟知的360云盘、百度云以及腾讯的微云 and s 阅读全文
摘要:
一,grep命令有什么用个人觉得grep命令就是一个对文本或输出进行匹配并控制输出的一个工具,看一下下面的参数,部分翻译了,有不对的地方,还请指正;grep--help匹配模式选择:-E,--extended-regexp扩展正则表达式egrep-F,--fixed-strings一个换行符分隔的字符串的集合fgrep-G,--basic-regexp基本正则-P,--perl-regexp调用的perl正则-e,--regexp=PATTERN后面根正则模式,默认无-f,--file=FILE从文件中获得匹配模式-i,--ignore-case不区分大小写-w,--word-regexp匹配 阅读全文
摘要:
wheel 组的概念 wheel 组的概念继承自 UNIX。当服务器需要进行一些日常系统管理员无法执行的高级维护时,往往就要用到 root 权限;而“wheel” 组就是一个包含这些特殊权限的用户池;也就是说,如果你不是“wheel”组的成员,就无法取得 root 权限进行一些特权的操作;为什么需要 wheel 组? 通常在UNIX下,即使我们是系统的管理员,也不推荐用 root 用户登录来进行系统管理。一般情况下用普通用户登录,在需要 root 权限执行一些操作时,再 su 登录成为 root 用户。但是,任何人只要知道了 root 的密码,就都可以通过 su 命令来登录为 root ... 阅读全文
摘要:
sudo 简介: 在 Linux 中系统管理员可以通过 sudo 实用程序让用户或组能够作为另一个用户运行命令。换句话说,可以分派命令特权,而不需要另一个用户的密码。root 用户通过在 /etc/sudoers 文件中设置 sudo 条目完成这个过程。使用 visudo 命令编辑此文件。在分派特权时,必须相信得到特权的用户会慎重地使用它。这里要澄清一个误解:sudo 不仅用于让用户作为 root 用户运行某些命令;它主要用于让另一个用户作为应用程序用户/所有者运行应用程序或系统命令。如果系统上当前安装了 sudo,它不会覆盖现有的 sudoers 文件。但是,一定要保留 /etc/sudo. 阅读全文
摘要:
1、Linux 文件系统的目录结构/ Linux文件系统的入口,也是处于最高一级的目录;/bin 系统所需要的那些命令位于此目录,比如 ls、cp、mkdir等命令;功能和/usr/bin类似,这个目录中的文件都是可执行的、普通用户都可以使用的命令。作为基础系统所需要的最基础的命令就是放在这里。/boot Linux的内核及引导系统程序所需要的文件目录,比如 vmlinuz initrd.img 文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录;/dev 设备文件存储目录,比如声卡、磁盘... .../etc 系统配置... 阅读全文
摘要:
引用:http://blog.csdn.net/embeddedsoft/article/details/1351315在嵌入式软件开发过程中,一般来说,花在测试和花在编码的时间比为3:1(实际上可能更多)。这个比例随着你的编程和测试水平的提高而不断下降,但不论怎样,软件测试对一般人来讲很重要。很多年前,一位开发人员为了对嵌入式有更深层次的理解,向Oracle询问了这样的一个问题:我怎么才能知道并懂得我的系统到底在干些什么呢? Oracle面对这个问题有些吃惊,因为在当时没有人这么问过,而同时代的嵌入式开发人员问的最多的大都围绕“我怎么才能使程序跑的更快”、“什么编译器最好”等肤浅的问题。所以 阅读全文
摘要:
引用:http://blog.csdn.net/ce123_zhouwei/article/details/7204458一、I/O端口 端口(port)是接口电路中能被CPU直接访问的寄存器的地址。几乎每一种外设都是通过读写设备上的寄存器来进行的。CPU通过这些地址即端口向接口电路中的寄存器发送命令,读取状态和传送数据。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。二、IO内存 例如,在PC上可以插上一块图形卡,有2MB的存储空间,甚至可能还带有ROM,其中装有可执行代码。 ... 阅读全文
摘要:
apt-get 里面有个 build-dep参数,手册写着:build-dep causes apt-get to install/remove packages in an attempt to satisfy the build dependencies for a source package.build-dep参数是指: 根据源码编译时所需的关系包进行搜索并下载安装. 建立要编译软件的环境,可以这样理解:比如我们现在要手工编译pidgin,那如果想让编译正常通过,你可以事先把编译过程中需要用到的软件包先配置好。如:sudo apt-get build-dep pidgin正在读取软件包 阅读全文
摘要:
How to install and use Chinese Input Method in the English Locale in Ubuntu ?(1) Check if there exists a .txt file named "zh_hans" in the directory of /var/lib/locales/SUPPORTED.D/ ; if it do not exist, goto (2); Else goto (3);(2) Create a .txt file named "zh_hans" in the directo 阅读全文
摘要:
引用:http://blog.csdn.net/raintungli/article/details/5729068软中断、tasklet和工作队列并不是Linux内核中一直存在的机制,而是由更早版本的内核中的“下半部”(bottom half)演变而来。下半部的机制实际上包括五种,但2.6版本的内核中,下半部和任务队列的函数都消失了,只剩下了前三者。本文重点在于介绍这三者之间的关系。(1)上半部和下半部的区别上半部指的是中断处理程序,下半部则指的是一些虽然与中断有相关性但是可以延后执行的任务。举个例子:在网络传输中,网卡接收到数据包这个事件不一定需要马上被处理,适合用下半部去实现;但是用户敲 阅读全文
摘要:
工作队列类似 tasklets,允许内核代码请求在将来某个时间调用一个函数,不同在于:(1)tasklet 在软件中断上下文中运行,所以 tasklet 代码必须是原子的; 而工作队列函数在一个特殊内核进程上下文运行,有更多的灵活性,且能够休眠。(2)tasklet 只能在最初被提交的处理器上运行,而这只是工作队列的默认工作方式。(3)内核代码可以请求工作队列函数被延后一个给定的时间间隔。(4)tasklet 执行的很快, 短时期, 并且在原子态, 而工作队列函数可能是长周期且不需要是原子的,两个机制有它适合的情形。 阅读全文
摘要:
一、轮询的概念: 使用非阻塞I/O的应用程序通常会使用select()和poll()系统调用查询是否可对设备进行无阻塞的访问,select() 和 poll() 系统调用都需要设备驱动程序中的poll函数支持,也就是说,poll 函数为最终执行体。二、Linux下 select 调用的过程:1.用户层应用程序调用 select() ,底层调用 poll()2.核心层调用 sys_select() --> do_select()最终调用文件描述符fd对应的 struct file 类型变量的 struct file_operations *f_op 的 poll 函数。 ## 解释 ## 阅读全文
摘要:
CentOS 6.4安装Fcitx4.0一、首先安装中文支持:$su root#yum install "@Chinese Support"#exit$yum remove ibus注销再登陆二、安装fcitx下载fcitx输入法源码,百度搜索即可,我下载的是华军软件园提供的“Fcitx 小企鹅输入法 4.0 正式版”。先安装fcitx所依赖的库:yum install gettext gettext-devel libXft libXft-devel libXpm libXpm-devel解压缩源码包:unzip fcitx-4.0.0.tar.ziptar zxf fc 阅读全文
摘要:
概念1:阻塞与非阻塞 阻塞是指在执行设备操作时,若不能获得资源则挂起进程,同时将CPU 礼让给其他进程使用,被挂起的进程进入休眠态,被从调度器的运行队列移走,直到条件被满足,它又将被调度器调度进来,再次判断能否获得资源。 而非阻塞在获取不到资源时并不挂起,它会不停的查询,直到它的时间片用完(放弃,等待下一次调度)为止,这样反而占用CPU。概念2:进程的休眠 休眠(被阻塞)进程被标志为一个特殊的不可执行状态,并从调度器的运行队列中移走。 进程休眠有各种原因,但肯定都是为了等待一些事件。事件可能是一段时间、从文件I/O读更多数据,或者是某个硬件事件。 休眠有两种相关的进程状态:TASK_... 阅读全文
摘要:
一、需要了解的概念知识概念1:临界区(1)维基百科对临界区的定义: 在同步的程序设计中,临界区段(Critical section)指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。 当有线程进入临界区段时,其他线程或是进程必须等待(例如:bounded waiting 等待法),有一些同步的机制必须在临界区段的进入点与离开点实现,以确保这些共用资源是被互斥或的使用,例如:semaphore。(2)形象点的解释: 对某一代码段A来说,在程序中可能被多次执行,把A的一次执行过程称为A的代码执行路径(简称代码路径)。 当两个或两... 阅读全文