摘要: 第二章 Linux内核1 内核开发特点1)内核编译时不能访问C库;2)浮点数很难使用;3)内核只有一个定长堆栈;4)注意同步和并发。第三章进程管理1 current宏:查找当前运行进程的进程描述符。2 进程状态(5种)TASK_RUNNING :1)正在运行;2)在运行队列中等待执行。TASK_INTERRUPTIBLE:进程正在睡眠,可以被信号唤醒。TASK_UNINTERRUPTIBLE:进程正在睡眠,不会收到信号被唤醒。TASK_ZOMBIE:僵死态,进程已经结束,父进程未使用wait4()。TASK_STOPPED3 进程上下文进程进入内核空间时,current宏依然有效,内核“代表进 阅读全文
posted @ 2012-08-20 20:23 sinaxyz 阅读(2904) 评论(0) 推荐(0) 编辑
摘要: 1.page 主要成员atomic_t count;//这个页的引用数. 当这个 count 掉到 0, 这页被返回给空闲列表.void *virtual;//如果页被映射,则表示这页的内核虚拟地址; 否则, NULL.unsigned long flags;//描述页状态的一套位标志. 这些包括 PG_locked, 它指示该页在内存中已被加锁, 以及 PG_reserved,//它防止内存管理系统使用该页2.vm_area_struct 主要成员unsigned long vm_start;//VMA 开始于unsigned long vm_end; //VMA 结束struct file 阅读全文
posted @ 2012-08-20 20:12 sinaxyz 阅读(414) 评论(0) 推荐(0) 编辑
摘要: 1、将文件checkout到本地目录svn checkoutpath(path是服务器上的目录)例如:svn checkout svn://192.168.1.1/pro/domain简写:svn co2、往版本库中添加新的文件svnaddfile例如:svn add test.php(添加test.php)svn add*.php(添加当前目录下所有的php文件)3、将改动的文件提交到版本库svn commit-m "LogMessage"[-N][--no-unlock] PATH(如果选择了保持锁,就使用--no-unlock开关)例如:svn commit -m & 阅读全文
posted @ 2012-08-20 17:01 sinaxyz 阅读(230) 评论(0) 推荐(0) 编辑
摘要: linux服务器上,多少会出现一些僵尸进程,下面介绍如何快速寻找和消灭这些僵尸进程的方法首先,我们可以用top命令来查看服务器当前是否有僵尸进程,在下图中可以看到僵尸进程数的提示,如果数字大于0,那么意味着服务器当前存在有僵尸进程下面,我们用ps和grep命令寻找僵尸进程ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'命令注解:-A 参数列出所有进程-o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)这四个参数因为状态为 z或者Z的进程为僵尸进程,所以我们使用grep抓取 阅读全文
posted @ 2012-08-20 16:39 sinaxyz 阅读(270) 评论(0) 推荐(0) 编辑
摘要: malloc函数void *malloc(int size); 说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。malloc 与free 是C++/C 语言的标准库函数,new/delete 是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象在消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编 阅读全文
posted @ 2012-08-20 15:31 sinaxyz 阅读(3409) 评论(0) 推荐(1) 编辑
摘要: fork创建一个新进程clone按指定条件创建子进程execve运行可执行文件exit中止进程_exit立即中止当前进程getdtablesize进程所能打开的最大文件数getpgid获取指定进程组标识号setpgid设置指定进程组标志号getpgrp获取当前进程组标识号setpgrp设置当前进程组标志号getpid获取进程标识号getppid获取父进程标识号getpriority获取调度优先级setpriority设置调度优先级modify_ldt读写进程的本地描述表nanosleep使进程睡眠指定的时间nice改变分时进程的优先级pause挂起进程,等待信号personality设置进程运 阅读全文
posted @ 2012-08-20 15:02 sinaxyz 阅读(950) 评论(0) 推荐(0) 编辑
摘要: select系统调用select系统调用允许程序同时在多个底层文件描述符上等待输入的到达(或输出的完成)。这意味着终端程序可以阻塞到有事情可做为止。类似的,服务器也可以通过同时在多个打开的套接字上等待请求到来的方法来处理程序。select实现1、使用copy_from_user从用户空间拷贝fd_set到内核空间2、注册回调函数__pollwait3、遍历所有fd,调用其对应的poll方法(对于socket,这个poll方法是sock_poll,sock_poll根据情况会调用到tcp_poll,udp_poll或者datagram_poll)4、以tcp_poll为例,其核心实现就是__po 阅读全文
posted @ 2012-08-20 11:16 sinaxyz 阅读(1732) 评论(0) 推荐(1) 编辑
摘要: 简介:Linux中最常用的输入/输出(I/O)模型是同步 I/O。在这个模型中,当请求发出之后,应用程序就会阻塞,直到请求满足为止。这是很好的一种解决方案,因为调用应用程序在等待 I/O 请求完成时不需要使用任何中央处理单元(CPU)。但是在某些情况中,I/O 请求可能需要与其他进程产生交叠。可移植操作系统接口(POSIX)异步 I/O(AIO)应用程序接口(API)就提供了这种功能。基本 Linux I/O 模型的简单矩阵每个I/O模型都有自己的使用模式,它们对于特定的应用程序都有自己的优点。同步阻塞I/O最常用的一个模型是同步阻塞I/O模型。在这个模型中,用户空间的应用程序执行一个系统调用 阅读全文
posted @ 2012-08-20 10:46 sinaxyz 阅读(459) 评论(0) 推荐(0) 编辑