2012年7月4日
摘要: 系统为每个用户进程创建一个task_struct 来描述该进程,该结构体包含了一个指针指向该进程的虚拟地址空间映射表。实际上task_struct和地址空间映射表一起用来表示一个进程。由于进程的地址空间是私有的,因此在进程间上下文切换时,系统开销比较大,为了提高系统的性能,许多操作系统规范里引入了轻量级进程的概念,即线程在同一个进程中创建的线程共享该进程的地址空间,Linux里同样用sask_struct来描述一个线程,线程和进程都参与统一的系统调度。通常线程是指共享相同地址空间的多个任务。使用线程的优势:大大提高了任务切换的效率,避免了额外的TLB&cache的刷新多线程通过第三方的 阅读全文
posted @ 2012-07-04 21:46 孟浩依然 阅读(434) 评论(0) 推荐(0) 编辑
  2012年7月3日
摘要: fs_11c14是华清远见的一款开发板,主芯片是LPC111C4,这个芯片一共有48个管脚,其中2个晶振管脚,4个电源引脚,42个通用输入输出管脚。芯片手册可以在网上下载。LPC1114内部包含有cortex-m0内核,cortex-m0内核自己也集成了一些外设,其中比较重要的是一个时钟SysTick,即系统定时器,它采用的是晶振时钟,所以比较精确。fs_11c14开发板集成了很多芯片资源,具体可以在百度上搜fs_11c14,里面有文档。下面对fs_11c14进行详细分析:时钟的设置:LPC_SYSCON->PRESETCTRL |= (0x1<<2); //外设复位控制寄存 阅读全文
posted @ 2012-07-03 21:29 孟浩依然 阅读(3704) 评论(0) 推荐(0) 编辑
  2012年6月28日
摘要: wait函数和waitpid函数,函数原型: pid_t wait(int *status )status是一个整型指针,指向的对象用来保护子进程退出时的状态。例如: pid = wait(&status)这status假设为 0x0400,说明 第一个字节保存的是中断信号的编号,倒数第二个字节是保存exit()中的数字。函数的返回值成功返回的是子进程的进程号,失败返回-1;调用wait函数的意义是使进程阻塞,直到任意一个子进程结束或者是该进程直接收到一个信号为止。如果该进程没有子进程或者其子进程已经结束,wait函数会立即返回。waitpid(pid_t pid,int * stat 阅读全文
posted @ 2012-06-28 22:52 孟浩依然 阅读(322) 评论(0) 推荐(0) 编辑
  2012年6月20日
摘要: exec提供了一种在进程中启动另外一个程序的执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段。在执行完之后,原调用进程的内容除了进程号外,其他全部都被替换了。1.可执行文件查找方式exec族中的函数以p结尾的函数可以只给出文件名,系统会自动从环境变量“$PATH”所包含的路径中进行查找。即 结尾不是p的,必须要给出文件的路径,并且最后的参数为NULL;2.参数表传递方式两种方式:逐个列举或是将所有参数通过指针数组传递。以函数名的第五位字母来区分,字母为“l”(list)的表示逐个列举的方式;字母“v”(vertor)的表示将所有参数构造成 阅读全文
posted @ 2012-06-20 19:59 孟浩依然 阅读(1007) 评论(0) 推荐(0) 编辑
  2012年6月19日
摘要: 进程的概念:进程是一个独立的可调度的任务。是一个程序一次执行的过程。程序是静态的,是保存在磁盘上的指令的有序集合,没有执行的概念。进程是动态的,他是程序执行的过程,包括创建、调度、消亡,是程序执行的各种资源的总和,是资源管理的最小单位。进程包括:正文段+用户数据段+系统数据段(进程控制块PCB)。进程的分类:1.交互进程:由shell控制运行的,可以在前台,也可以在后台运行的。 -ps -ef | grep a.out ./a.out & 后台运行2.批处理进程: 不属于某个终端,它被提交到一个队列中以便顺序执行3.守护进程:在后台运行,在linux启动时开始执行,在系统关闭时候才结束 阅读全文
posted @ 2012-06-19 21:43 孟浩依然 阅读(416) 评论(0) 推荐(0) 编辑
  2012年6月18日
摘要: 文件IO不带缓存,每个read和write都调用内核中的相应系统调用。文件IO常用函数:open,close,read,write,lseek对于内核而言,所有打开文件都有文件描述符引用。文件描述符是一个非负整数。当打开一个现存文件或创建一个新文件时,你诶和向进程返回一个文件描述符。当读、写一个文件时,用open返回的文件描述符标识该文件,将其作为参数传给read或write。1.open(被打开的文件名(可包含文件路径),int flag, mode)falg : O_RDONLY,O_WDONLY,O_RDWR,O_CREAT,O_EXCL(如果存在返回错误信息)O_TRUNC(如果已存在 阅读全文
posted @ 2012-06-18 21:41 孟浩依然 阅读(2899) 评论(0) 推荐(1) 编辑
摘要: IO文件操作时最常用的也最基本的内容。linux文件系统是由两层结构构建:第一层是虚拟文件系统(VFS),第二层是各种不同的具体文件系统。VFS是吧、把各种具体的文件系统的公共部分抽取出来,形成一个抽象层,是系统内核的一部分。它位于用户程序和具体的文件系统中间。它对用户程序提供了标准的文件系统的调用接口,对具体的文件系统,它通过一系列的对不同文件系统公用的函数指针来实际调用具体的文件系统函数,完成实际的各有的操作。任何使用文件系统的程序必须经过这层接口来使用它。通过这种方式,VFS就对用于屏蔽了底层文件系统的实现细节和差异。通过 cat /proc/filesystems命令可以查看系统支持哪 阅读全文
posted @ 2012-06-18 20:52 孟浩依然 阅读(8185) 评论(0) 推荐(0) 编辑
  2012年6月16日
摘要: #include <stdio.h>#define N 6#define M 1<<10typedef struct {int pi[N];int end;}pathtype;int main(){ int array[N][N] ={ // v0 v1 v2 v3 v4 v5 /*v0*/ { 0, 20, 15, M, M, M}, /*v1*/ { 2, 0, 4, M, 10, 30}, /*v2*... 阅读全文
posted @ 2012-06-16 17:30 孟浩依然 阅读(376) 评论(0) 推荐(0) 编辑
摘要: 图的深度和广度优先算法#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <strings.h>#define N 5#define M 10typedef int datatype;typedef struct { datatype data[M]; int front,rear;}sequeue;sequeue * create(){ sequeue * sq; if((sq = (sequeue *)malloc(sizeof(sequeue)))==NULL) { 阅读全文
posted @ 2012-06-16 14:42 孟浩依然 阅读(399) 评论(0) 推荐(0) 编辑
  2012年6月14日
摘要: 二叉树的存储:顺序存储浪费空间。二叉树链式存储结构:typedef int datatype;typedef struct node{ datatype data;struct node *lchild,*rchild;}bitree,*root;二叉树的遍历,由于二叉树的递归性质,遍历算法也是递归的。三种基本的遍历算法如下:先访问树根,再访问左子树,最后访问右子树 先根遍历先访问左子树,再访问树根,最后访问右子树 中根遍历先访问左子树,再访问右子树,最后访问树根 后根遍历。/*********************二叉树***********************/#include &l 阅读全文
posted @ 2012-06-14 22:02 孟浩依然 阅读(442) 评论(0) 推荐(0) 编辑