阿里巴巴高级研发工程师
信号在内核中的表示 执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending)。
信号分类 不可靠信号 Linux信号机制基本上是从UNIX系统中继承过来的。早期UNIX系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,它的主要问题是: 1.进程每次处理信号后,就将对信号的响应设置为默认动作。
信号分类 不可靠信号 Linux信号机制基本上是从UNIX系统中继承过来的。早期UNIX系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,它的主要问题是: 1.进程每次处理信号后,就将对信号的响应设置为默认动作。
中断 中断是系统对于异步事件的响应, 进程执行代码的过程中可以随时被打断,然后去执行异常处理程序; 计算机系统的中断场景:中断源发出中断信号 -> CPU判断中断是否屏蔽屏蔽以...
中断 中断是系统对于异步事件的响应, 进程执行代码的过程中可以随时被打断,然后去执行异常处理程序; 计算机系统的中断场景:中断源发出中断信号 -> CPU判断中断是否屏蔽屏蔽以...
概述 守护进程是在需要在后台长期运行不受终端控制的进程,通常情况下守护进程在系统启动时自动运行,在服务器关闭的时候自动关闭;守护进程的名称通常以d结尾,比如sshd、xinetd、crond、atd等。
概述 守护进程是在需要在后台长期运行不受终端控制的进程,通常情况下守护进程在系统启动时自动运行,在服务器关闭的时候自动关闭;守护进程的名称通常以d结尾,比如sshd、xinetd、crond、atd等。
Wait的背景 当子进程退出的时候,内核会向父进程发送SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止) 子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它只保留最小的一些内核数据结构,以便父进程查询子进程的退出状态。
Wait的背景 当子进程退出的时候,内核会向父进程发送SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止) 子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它只保留最小的一些内核数据结构,以便父进程查询子进程的退出状态。
进程的几种终止方式 (1)正常退出 从main函数返回[return] 调用exit 调用_exit/_Exit (2)异常退出 调用abort 产生SIGABOUT信号 由信号终止 Ctrl+C [SIGINT] .
孤儿进程与僵尸进程 孤儿进程: 如果父进程先退出,子进程还没退出那么子进程的父进程将变为init进程。
进程 VS. 程序 什么是程序? 程序是完成特定任务的一系列指令集合。 什么是进程? [1]从用户的角度来看:进程是程序的一次执行过程 [2]从操作系统的核心来看:进程是操作系统分配的内存、CPU时间片等资源的基本单位。
文件共享 一个进程打开了两个文件 文件表条目(file-table-entry): 1.
功能:获取文件元数据 #include #include #include int stat(const char *path, struct stat *buf); int fsta...
什么是I/O 输入/输出是内存和外设之间拷贝数据的过程: 设备->内存: 输入操作 内存->设备: 输出操作 高级I/O: ANSI C提供的标准I/O库函数成为高级I/O, ...
计算机系统硬件组成 总线 贯穿整个系统的一组电子管道称为总线, 分为: 片内总线 系统总线 数据总线DB 地址总线AB 控制总线CB 外部总线 I/O设备 I/O设备是系统与外界联系的通道 键盘鼠标是输入设备,显式器是输出设备,磁盘既是输入设备也是输出设备,输入输出是相对于内存来说的。
完整源代码: http://download.csdn.net/detail/hanqing280441589/8450041 红黑节点设计与实现 template class Red...
Insert完善 根据规则4, 新增节点必须为红; 根据规则3, 新增节点之父节点必须为黑.
----原文链接:http://www.cnblogs.com/biyeymyhjob/archive/2012/08/01/2617884.html------ Linux进程通过一个task_struct结构体描述,在linux/sched.h中定义,通过理解该结构,可更清楚的理解linux进程模型。
DFS 从图中某个顶点V0 出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到(使用堆栈).
图的结构定义 图是由一个顶点集 V 和一个弧集 E构成的数据结构。 Graph = (V , E ) 其中,E = {| v,w∈V 且 P(v,w)} 表示从 v 到 w 的一条弧,并称 v 为弧尾,w 为弧头。
完全二叉树 首先让我们回顾一下完全二叉树的两个性质: 性质1:具有n个结点的完全二叉树的深度为[logn](向下取整)+1。
哈希表 根据设定的哈希函数 H(key)和所选中的处理冲突的方法,将一组关键字映射到一个有限的、地址连续的地址集 (区间) 上,并以关键字在地址集中的“映像”作为相应记录在表中的存储位置,如此构造所得的查找表称之为“哈希表”。
二叉排序树的特征 二叉排序树或者是一棵空树,或者是具有如下特性的二叉树: 1.每一元素都有一个键值, 而且不允许重复; 2.若它的左子树不空,则左子树上所有结点的值均小于根结点的值; 3.若它的右子树不空,则右子树上所有结点的值均大于根结点的值; 4.它的左、右子树也都分别是二叉排序树。
树的基本术语 1.结点:{数据元素+若干指向子树的分支} 2.结点的度:分支的个数(子树的个数) 3.树的度:树中所有结点的度的最大值 4.叶子结点:度为零的结点 5.分支结点:度大于零的结点(包含根和中间结点) 6.(从根到结点的)路径:由从根到该结点所经分支和结点构成; 7.结点的层次:假设根结点的层次为1,则根的孩子为第2层,如果某节点在第L层,则其子树的根在L+1层。
基数排序是一种借助“多关键字排序”的思想来实现“单关键字排序”的内部排序算法。 实现多关键字排序通常有两种作法: 最低位优先法(LSD) 先对K[0]{基数的最低位}进行排序,并按 K(0) 的不同值将记录序列分成若干子序列之后,分别对 K[1] 进行排序,..., K[d-1]依次类推,直至最后对最次位关键字排序完成为止。
链式队列是基于单链表的一种存储表示, 其形状如下图所示: (队列的队头指针指向单链表的第一个结点, 队尾指针指向单链表的最后一个结点, 注意没有无用的空[头/尾]节点) ...
采用链式存储的栈成为链式栈(或简称链栈), 链栈的优点是便于多个栈共享存储空间和提高其效率, 且不存在栈满上溢的情况(因为链栈是靠指针链接到一起,只要内存够大, 则链栈理论上可以存储的...
双向链表的操作特点: (1) “查询” 和单链表相同; (2)“插入” 和“删除”时需要同时修改两个方向上的指针。
循环链表:最后一个结点的指针域的指针又指回第一个结点的链表; 循环单链表与单链表的区别在于:表中最有一个节点的指针不再是NULL, 而改为指向头结点(因此要对我们原来的MyList稍作修改), 从而整个链表形成一个环.
为了向 STL 致敬(O(∩_∩)O~), 我们模仿STL中的list的迭代器, 我们也自己实现一个MyList的迭代器, 以供遍历整个链表的所有元素: 首先:Node节点需要做如下修改(注意...
链表的链接: 将第二条链表的所有内容链接到第一条链表之后, 其完整实现代码与解析如下: //链表的链接 template void MyList::concatenate(cons...
链表简介 数组的缺点: 1.元素插入:除了在数组的末尾插入元素之外,在数组的其他任何位置插入元素都需要进行数组元素的频繁移动(插入位置之后的元素都需往后移动), 时间复杂度约为O(N); 2.
队列 队列简称队, 也是一种操作受限的线性表, 只允许在表的一端进行插入, 而在表的另一端进行删除.
栈是一种只允许在一端进行插入或删除操作的线性表.其特点为:先进后出(FILO)/后进先出(LIFO); 栈 VS.
归并排序的基本思想: 将两个或两个以上的有序子序列”归并”为一个有序序列:假定待排序表含有n个记录, 则可以看成是n个有序的子表, 每个子表长度为1, 然后两两归并, 得到[n/2]个长度为2或1的有序表,; 再量量归并, .
快速排序是最流行的,也是速度最快的排序算法(C++ STL 的sort函数就是实现的快速排序); 快速排序(Quicksort)是对冒泡排序的一种改进。
Permutation(排列组合) 排列问题: 设R = {r1, r2, ... , rn}是要进行排列的n个元素, Ri = R-{ri}; 集合X中元素的全排列记为Permutatio...
顺序查找 适用范围: 没有进行排序的数据序列 缺点: 速度非常慢, 效率为O(N) //实现 template Type *sequenceSearch(Type *begin, Ty...
Swap的简单实现 //C语言方式(by-pointer): template bool swapByPointer(Type *pointer1, Type *pointer2) ...
装了双系统(Windows和Linux)的机器重新安装Windows后会导致Linux的引导丢失而无法进入原先的Linux系统[其原因是Windows会覆盖原先MBR中的Linux的BootLoader-GRUB]。
查看运行时数据 print - 查看变量值 ptype – 查看变量类型 #ptype i #ptype “aaa” 打印字符串”aaa”的类型 #ptype array 打印...
头文件与库文件 1、概要 在使用C语言和其他语言进行程序设计的时候,我们需要头文件来提供对常数的定义和对系统及库函数调用的声明。
原文链接:http://blog.csdn.net/statdm/article/details/7759100 本文要介绍的ldd和nm是linux下,两个用来分析程序很实用的工具。
gcc简介 1、 gcc是GNU Compiler Collection的缩写。最初是作为C语言的编译器(GNU C Compiler),作者为Richard Stallman,是GNU项目的奠基者;现在已经支持多种语言,如C、C++、Java、Pascal、Ada、COBOL语言等 。
概述 gdb是GNU debugger的缩写,是编程调试工具。 功能 1、启动程序,可以按照用户自定义的要求随心所欲的运行程序。
make常用内嵌函数 1、函数调用 $(function arguments) #$引用的结果就是函数生成的结果 2、Makefile下常用的函数 1)$(wildcard PATTERN) #匹配当前目录下的文件 例如:src=$(wildcard *.
Linux下的tree命令 --Linux下目录树查看 有时我们需要生成目录树结构,可以使用的有ls -R,但是实际效果并不好 这时需要用到tree命令,但是大部分Linux系统...
复杂实例 #示例1:在上一个示例的基础上再增加一个可执行文件03test[修改之处已标红] .
流程控制语句 三、select/in[较少用] 格式: [python] view plaincopy select [变量] in [关键字] do command 1 .