摘要: 最近看linux内核的书看的挺多,但是真正实践还几乎没有,所以就想来编个linux内核模块试试。 由于我装的虚拟机没有源码和相应的一些东东(例如build文件夹),所以先编译了内核。 1.先新建一台虚拟机,然后装好linux操作系统 2.下载一份linux内核源代码(我的是linux2.6.18),解压到虚拟机的某个目录下 3.使用make mrproper [root@xyly linux-2.6.39.4]# make mrproper #去除内核的依赖关系及编译后的垃圾信息 4. 配置你所想要的内核模块 [root@xyly linux-2.6.39.4]# mak... 阅读全文
posted @ 2012-11-21 20:16 linux kernel 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 申明:本文来自http://www.cnblogs.com/hustcat/articles/1505618.html,因为觉得写得很好,在此借用进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事的两个概念。造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。处理器总处于以下三种状态之一:1、内核态,运行于进程上下文,内核代表进程运行于内核空间;2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;3、用户态,运行于用户空间。用户空间的应用程序,通过系 阅读全文
posted @ 2012-10-12 08:53 linux kernel 阅读(227) 评论(0) 推荐(0) 编辑
摘要: gcc和gdb分别linux中的编译和调试工具gcc xxx.c -o xxx gcc编译命令,xxx为可执行文件gcc -g xxx.c -o xxxx gcc编译,加g参数主要是用于gdb调试用,产生行号gdb xxxxb 行号/函数名/.....r (程序运行)n(单步调试)p 参数名(查看参数值) 阅读全文
posted @ 2012-10-11 13:03 linux kernel 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。哈希表的做法其实很简单,就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里。而当使用哈希表进行查询的时候,就是再次使用哈希函数将key转换为对应的数组下标,并定位到该空间获取value,如此一来,就可以充分利用到数组的定位性能进行数据定位 阅读全文
posted @ 2012-10-10 19:47 linux kernel 阅读(436) 评论(0) 推荐(0) 编辑
摘要: 1.1 多任务系统 多任务系统可以同时交错的执行多个进程。在单处理器上,它会给你好像是多个处理器在运行的假象。 有两种类型的多任务操作系统:协同多任务处理和抢占式多任务处理。linux是抢占式操作系统。每个进程的执行时间片在执行前就已经准备好了。可以防止一个进程垄断处理器。在现代处理器中,这个时间是可变的 在协同多任务处理器中,一个进程可以执行到它自动放弃处理器为止。1.2 linux进程调度 进程的两种类型: 1.I/O消耗型:进程的大部分时间用来提交I/O请求或者等待I/O请求,这样的进程经常处于可运行状态。 2.处理器消耗型:大多数时间在执行代码上,除非抢占,否则它可以一直运... 阅读全文
posted @ 2012-10-10 13:52 linux kernel 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 1.1进程概述 进程就是处于执行期的程序,但进程不仅仅局限于一段可执行代码。通常还包括其他资源(例如打开的文件,内部数据,处理器状态,数据段等等)。在现代操作系统中,进程提供了两种虚拟机制:虚拟处理器(进程调度)和虚拟内存(虚拟内存管理)。各个线程之间可以共享虚拟内存,但是拥有各自的虚拟处理器。注:在linux中进程的另一个名字是任务(task)。1.2进程描述符及任务结构 内核把进程的列表存放在叫做任务队列(task list)的循环链表中。链表中的每一项都是类型为task_sruct的类型,称为进程描述符。它包含了进程的所有信息(例如它打开的文件、进程的地址空间、挂起的信号、进程的状态.. 阅读全文
posted @ 2012-10-08 13:48 linux kernel 阅读(232) 评论(0) 推荐(0) 编辑
摘要: linux内存对于大块内存的分配时直接从页内存中分配,用伙伴关系进行管理,就是把内存用例如get_free_pages()这样的分配函数。linux中的所有物理页是通过mem_map数组进行管理的, 阅读全文
posted @ 2012-10-08 08:48 linux kernel 阅读(158) 评论(0) 推荐(0) 编辑