自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (1)
  • 收藏
  • 关注

转载 哈希表

 1.哈希表      根据给定的关键字,按照某种算法得出该关键字的哈希值,然后直接用哈希值读取所要查找的关键字记录。理论上哈希表是最快的查找表,他的查找时间复杂度理论上可以达到O(1),也就是直接读取。但是现实中往往哈希表的存储容量是有限的,而且不同的关键字有可能经过哈希算法得出相同的哈希值,因此有可能不同的关键字会映射到相同的哈希表项,这样就产生了冲突,这个现象叫做碰撞。      这里就可以明确出哈希表中最关键的两个部分,第一个就是哈希函数(散列函数),第二就是解决冲突的办法。这两个因素综合决定了哈希

2010-12-13 22:44:00 2936

转载 Linux 2.4调度系统分析

杨沙洲 (pubb@163.net)国防科技大学计算机学院杨沙洲,目前在国防科技大学计算机学院攻读软件方向博士学位,对于文章的建议和意见,请直接与 pubb@163.net联系。 <br /> <br />简介: 本文详尽地分析了Linux 2.4内核中调度系统的工作原理,特别是i386体系结构下SMP系统的调度表现。通过对2.4调度系统实现原理及其细节的分析,文章在文末指出了2.4调度系统在功能上、实时性上以及多处理机系统表现上存在的不足,为后继的2.6系统的分析作铺垫。<br />  <br />在开源

2010-12-07 10:56:00 934

转载 Linux 2.4调度系统分析

杨沙洲 (pubb@163.net)国防科技大学计算机学院杨沙洲,目前在国防科技大学计算机学院攻读软件方向博士学位,对于文章的建议和意见,请直接与 pubb@163.net联系。 <br /> <br />简介: 本文详尽地分析了Linux 2.4内核中调度系统的工作原理,特别是i386体系结构下SMP系统的调度表现。通过对2.4调度系统实现原理及其细节的分析,文章在文末指出了2.4调度系统在功能上、实时性上以及多处理机系统表现上存在的不足,为后继的2.6系统的分析作铺垫。<br />  <br />在开源

2010-12-07 10:56:00 751

原创 Linux 进程调度分析

<br />李方军 1,2 蒋波 1 邓豫蜀 1 <br />( 1. 中国工程物理研究院工学院,四川 绵阳 621900 ; <br />2 . 西南交通大学 信息科学与技术学院,四川 成都 610031 ) <br />摘 要:进 程调度是多任务操作系统的核心。 Linux 中的每个进程用 task_struct 结构来描述,进程调度的依据是 task_struct 结构中的 policy 、 priority 、 counter 和 rt_priority 。 Linux 根据 policy 将进程划

2010-12-03 16:14:00 1732

转载 linux内核进程调度机制

<br />Linux的进程管理由进程控制块、进程调度、中断处理、任务队列、定时器、bottom half队列、系统调用、进程通信等等部分组成。<br />进程调用分为实时进程调度和非实时进程调度两种。前者调度时,可以采用基于动态优先级的轮转法(RR),也可以采用先进现出算法(FIFO)。后者调度时,一律采用基于动态优先级的轮转法。某个进程采用何种调度算法由改进程的进程控制块中的某些属性决定,没有专门的系统用来处理关于进程调度的相关事宜。Linux的进程调度由schedule()函数负责,任何进程,当它从系

2010-12-03 15:50:00 933

原创 关于linux内核中 等待队列 数据结构之思考

关于linux等待队列,大体有如下描述:等待队列是一个双向循环链表,在这个链表中,有两种数据结构:等待队列头(wait_queue_head_t)和等待队列项(wait_queue_t)。等待队列头和等待队列项中都包含一个list_head类型的域作为"连接件"。等待对头wait_queue_head_t 和等待队列元素wait_queue_t的定义如下://队头结构struct __wait_queue_head { spinlock_t lock; struct list_head task_list;

2010-12-02 10:51:00 859

原创 自旋锁(Spinlock)使用注意事项

自旋锁比信号量的不同之处是,进程在获得不了自旋锁时会进入循环等待(循环检测锁的状态),而不阻塞。因此,自旋锁的效率要比信号量高,但是仅适用于等待时间比较短的情况。适用自旋锁时要非常慎重,因为进程在持有自旋锁时如果进入sleep状态,则可能导致死锁。因此要仔细考虑在持有自旋锁时进行的那些可能会导致进程sleep的操作。

2010-11-30 09:59:00 1677

转载 container_of 理解

<br />  container_of 理解 收藏<br /><br /><br /><br />问题:如何通过结构中的某个变量获取结构本身的指针???<br /><br />关于container_of见kernel.h中:<br />/**<br />* container_of - cast a member of a structure out to the containing structure<br />* @ptr:     the pointer to the member.<br />

2010-11-28 14:22:00 413

转载 LINUX-VFS的supper bolck、inode、dentry和file关系简述

The common file model consists of the following object types:The superblock objectStores information concerning a mounted filesystem. For disk-based filesystems, this object usually corresponds to a filesystem control block stored on disk.The inode objectS

2010-11-26 11:08:00 1533 1

转载 i节点(inode)和文件描述符(file descriptor)的区别和联系

inode 或i节点是指对文件的索引。如一个系统,所有文件是放在磁盘或flash上,就要编个目录来说明每个文件在什么地方,有什么属性,及大小等。就像书本的目录一样,便于查找和管理。这目录是操作系统需要的,用来找文件或叫管理文件。许多操作系统都用到这个概念,如linux, 某些嵌入式文件系统等。当然,对某个系统来说,有许多i节点。所以对i节点本身也是要进行管理的。 在linux中,内核通过inode来找到每个文件,但一个文件可以被许多用户同时打开或一个用户同时打开多次。这就有一个问题,如何管理

2010-11-26 10:52:00 7682

转载 文件结构体struct file(Linux 2.6.23内核) (转)

struct file结构体定义在/linux/include/linux/fs.h(Linux 2.6.11内核)中,其原型是:struct file {        /*         * fu_list becomes invalid after file_free is called and queued via         * fu_rcuhead for RCU freeing         */        union {                struct list_he

2010-11-26 10:17:00 6863

转载 字符设备驱动 架构分析

<br />Char Device Driver<br /><br />相关数据结构:<br /><br />struct cdev {<br />        struct kobject kobj;<br />        struct module *owner;<br />        const struct file_operations *ops;<br />        struct list_head list;<br />        dev_t dev;<br />     

2010-11-25 17:09:00 545

原创 Linux 字符设备驱动中的数据结构

struct cdev: 定义于 linux/include/linux/cdev.h 中,原型如下struct cdev { 13 struct kobject kobj; 14 struct module *owner; 15 const struct file_operations *ops; 16 struct list_head list; 17 dev_t dev; 18 un

2010-11-24 22:40:00 594

原创 课程设计──LINUX字符驱动

别人博客上摘来的,我写不出来,先学习下课程设计──LINUX字符驱动dev.c 代码#ifndef __KERNEL__#define __KERNEL__#endif#ifndef MODULE#define MODULE#endif//#include #include #include #include #include #include #include #include #include #include #include #in

2010-11-24 16:29:00 664

原创 The art of good programming

The art of good programming is in choosing the best trade-off between flexibility and efficiency

2010-11-23 15:52:00 488

原创 这两周的总结

<br />这两周学习了EJB和J2EE方面的东西,<br />首先,看了2本书: headfist EJB 和轻量级J2EE企业应用实战。<br />对于headfist EJB ,只是快速的浏览了一遍,对EJB中的一些概念和结构有了了解,比如说EJB中的几中类型的Bean等,但是仅仅是概念上的了解,没有实践项目的感知,所以感觉理解的很朦胧。<br />对于轻量级J2EE企业应用实战,详细阅读了前两章的东西,书中讲的很易懂,并且实例代码很好。所以安装了myeclipse和mysql,在学习了servlet

2010-11-21 18:58:00 554

原创 关于ejb中的BMT和CMT

<br />几天在学习EJB,发现其中的东西真是很复杂和繁琐, 例如EJB中的事务管理,<br />我们可以在自己的bean代码中使用代码创建和管理自己的事务,这中方式就是BMT(bean-managed transaction); <br />PICTURE:<br /><br />还可以把事务的写在bean的部署描述文件中,这样就不用自己去写事务相关的代码了,把这个包袱直接甩给容器就行了。这种方式就是CMT(Container managed rd transaction)。<br /><br />

2010-11-21 18:58:00 1529

原创 《LINUX与UNIX SHELL编程指南》读后感

适合初学者看,讲的很仔细<br />例子十分丰富,可以边看边实践

2010-11-21 18:57:00 400

原创 今天的收获--c#委托

<br />做个winform的程序,不知道怎么窗口回调,忽然想起了c#里有委托的概念,可是从来没有弄明白是干什么的,所以查查了资料,并且运行了个实例,总算对委托有些认识了。<br /><br />委托是一个类,可以用其实例来代理一类方法,这些方法的参数列表必须和委托的声明相同。<br /><br />using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication2{

2010-11-21 18:57:00 428

原创 自旋锁与信号量

<br />自旋锁与信号量"类似而不类",类似说的是它们功能上的相似性,"不类"指代它们在本质和实现机理上完全不一样,不属于一类。<br /><br />自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环查看是否该自旋锁的保持者已经释放了锁,"自旋"就是"在原地打转"。而信号量则引起调用者睡眠,它把进程从运行队列上拖出去,除非获得锁。这就是它们的"不类"。<br /><br />但是,无论是信号量,还是自旋锁,在任何时刻,最多只能有一个保持者,即在任何时刻最多只能有一个执行单元获得

2010-11-21 18:56:00 410

原创 Linux 用户态和内核态

<br />1. 内存的申请和释放:<br /><br />用户态下,可以使用malloc()和free()<br />内核态下,需要使用kmalloc()和kfree(), 原型如下:<br />void *kmalloc(unsigned int len, int priority);<br />void kfree(void *__ptr);<br />kmalloc的priority参数通常设置为GFP_KERNEL,如果在中断服务程序里申请内存则要用GFP_ATOMIC参数,因为使用GFP_KER

2010-11-21 18:56:00 1446

原创 linux 信号量使用实例

<br />信号量是一种睡眠锁。它是实现同步操作,防止竟态的方式之一。任何进程在对共享数据进行读写操作之前必须获得用来保护共享数据的信号量,否则不能供访问权限,信号量会把这个访问进程放进一个等待队列中(这个等待队列是在信号量初始化过程中被初始化的),然后让其进入睡眠状态。这是处理器重新调度,去执行其他进程的操作。保护共享数据的信号量被释放,被这个信号量放进等待队列的进程会被激活,获得该信号量,然后对共享数据进行访问。<br /><br />下面的代码演示了在设备驱动程序的读写操作中,信号量的使用<br />

2010-11-21 18:55:00 2940

原创 Linux设备驱动 中的几个关键数据结构

<br />大部分的基础性的驱动操作包括3个重要的内核数据结构,称为file_operations,file,和inode。需要对这些结构的基本了解才能够做大量感兴趣的事情。<br />struct file_operations是一个字符设备把驱动的操作和设备号联系在一起的纽带,是一系列指针的集合,每个被打开的文件都对应于一系列的操作,这就是file_operations,用来执行一系列的系统调用。<br />struct file代表一个打开的文件,在执行file_operation中的open操作时被

2010-11-21 18:54:00 825

原创 LDD 3 中的struct原型

struct scull_dev {struct scull_qset *data; /* Pointer to first quantum set */int quantum; /* the current quantum size */int qset; /* the current array size */unsigned long size; /* amount of data stored here */unsigned int access_key; /* used by sculluid a

2010-11-21 18:53:00 470

原创 【转载】C++文件操作(一)

<br />1. 文件的概念<br />    以前进行的输入输出操作都是在键盘和显示器上进行的,通过键盘向程序输入待处理的数据,通过显示器输出程序运行过程中需要告诉用户的信息。键盘是C++系统中的标准输入设备,用cin流表示,显示器是C++系统中的标准输出设备,用cout流表示。<br />    数据的输入和输出除了可以在键盘和显示器上进行之外,还可以在磁盘上进行。磁盘是外部存储器,它能够永久保存信息,并能够被重新读写和携带使用。所以若用户需要把信息保存起来,以便下次使用,则必须把它存储到外存磁盘上。<

2010-11-21 18:39:00 907

原创 关于动态数组

2008-10-20 15:241. 什么是动态数组?<br />关于动态数组的理解,一般有两种:一是编译时大小不确定的数组,而是在使用中可以变长的数组。我个人觉得第一种更准确。<br />2. 实现(c++中)<br />一是:堆上实现的变长数组 ,如 int *pArray = new int[size]; <br />          动态多维数组可以使用下面思维来实现:比如要实现动态二维数组,则可以先定义一个一维指针数组,每个指针再指向一个一维数组,如下:<br />int line0[]={1,

2010-11-21 18:39:00 374

原创 【转载】C++文件操作(二)

2008-10-24 09:33<br />    2. 字符文件的访问操作<br /><br />    C++文件包括字符文件和字节文件两种类型,对它们的访问操作各不相同。这一小节专门讨论对字符文件的访问操作,下一小节再讨论对字节文件的访问操作。<br /><br />    当只需要对数据进行顺序输入输出操作时,则适合使用字符文件。对字符文件的访问操作包括向字符文件顺序输出数据和从字符文件顺序输入数据这两个方面。所谓顺序输出就是依次把数据写入到文件的末尾(当然文件结束符也随之后移,它始终占据整个文件空

2010-11-21 18:38:00 442

原创 c++类型转化

2008-10-24 10:37版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 <br />http://ivanvic.blogbus.com/logs/1920125.html <br /><br />atof(将字符串转换成浮点型数) <br />相关函数 <br />atoi,atol,strtod,strtol,strtoul <br />表头文件 <br />#include <br />定义函数 <br />double atof(const char *nptr); <br

2010-11-21 18:37:00 284

原创 C++/C运算符的优先级

<br />从上到下,优先级由高到低。<br /> <br />优先级<br />运算符<br />结合律<br />1<br />( )     [ ]     ->(指向成员)     .(取成员)    后置++    后置-- <br />从左至右<br />2<br />!   ~  前置++  前置--  (类型) sizeof    + -(负号)    *    & <br />从右至左<br />3<br />*   /   % <br />从左至右<br />4<br />+   - <

2010-11-21 18:36:00 312

原创 函数参数的入栈顺序

2008-10-30 15:11在发生函数调用时,参数的入栈顺序是从右向左的,有时不注意这个问题会导致一些错误。例如:#include #include using namespace std;void coutdiy(int a,int b,int c);int main(){int i=1;coutdiy(i,i++,i++);system("PAUSE");return 0;}void coutdiy(int a,int b,int c){coutcoutcout}

2010-11-21 18:35:00 482

原创 动态链接库与静态链接库

<br /><br />动态链接是只建立一个引用的接口,而真正的代码和数据存放在另外的可执行模块中,在运行时再装入,动态链接库的文件模块一般是dll文件。 <br />而静态链接是把所有的代码和数据都复制到本模块中,运行时就不再需要库了。静态链接库的模块一般是lib文件 <br /><br />DLL的静态调用就是将lib库包含到exe文件中来调用库函数 <br />DLL的动态调用的是DLL内的库函数,它与exe文件是分离的。

2010-11-21 18:35:00 298

原创 常见排序算法

<br />一、插入排序(Insertion Sort)<br />1. 基本思想:<br />   每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。<br />2. 排序过程: <br />【示例】:<br />[初始关键字] [49] 38 65 97 76 13 27 49<br />     J=2(38) [38 49] 65 97 76 13 27 49<br />     J=3(65) [38 49 65] 97 76 1

2010-11-21 18:34:00 368

原创 关于const的理解

2008-11-11 15:03<br />onst char *const * keywords <br /><br />const char const * keywords <br /><br />const char *const keywords <br /><br />const char const keywords <br /><br />请问以上四种定义, <br />所得出的变量有什么区别,各代表什么?(请从维数、用途等方面简要说明) <br /><br />答曰:<br />1. (

2010-11-21 18:33:00 319

原创 转】STL摘要一:通用工具(pair,auto_ptr,std::rel_ops)

2008-11-10 13:31<br />C++标准库中的通用工具,他们多是短小精悍的函数或者类,完成那些最一般的工作,大致如下: <br /> <br />============================================================<br />对组<br />|<br />|->名称----->pair<br />|->动机----->方便<br />|->思想----->结构<br />|->应用----->如果某个函数要求传回两个值,可能比较有用<br /

2010-11-21 18:33:00 509

原创 Windows搜索dll的顺序

Windows 平台的大多数程序都使用各种动态链接库 (DLL) 来避免重复实现功能。操作系统为每个程序加载若干个 DLL,具体由程序的类型决定。当程序不指定 DLL 的绝对位置时,将使用默认的搜索顺序来找到它。默认情况下,操作系统所使用的搜索顺序为: <br />1.<br />内存<br />2.<br />KnownDLLs<br />3.<br />清单与 .local<br />4.<br />应用程序目录<br />5.<br />当前工作目录<br />6.<br />系统目录(%syst

2010-11-21 18:32:00 688

原创 关于堆和栈

<br />1、内存分配方面:<br />    堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式是类似于链表。可能用到的关键字如下:new、malloc、delete、free等等。<br />    栈:由编译器(Compiler)自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。<br />2、申请方式方面:<br />    堆:需要程序员自己申请,并指明大小。在c中malloc函数如p1 = (char

2010-11-21 18:31:00 362

原创 windows下进程间通信的手段

2008-11-12 14:08<br />摘要随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求。编写多进程/多线程程序成为现代程序设计的一个重要特点,在多进程程序设计中,进程间的通信是不可避免的。Microsoft Win32 API提供了多种进程间通信的方法,全面地阐述了这些方法的特点,并加以比较和分析,希望能给读者选择通信方法提供参考。<br />关键词进程进程通信 IPC Win32 API<br />1 进程与进程通信<br />  进程是装入内存并准备执行的程序,每个进

2010-11-21 18:31:00 301

原创 Java栈与堆

----对这两个概念的不明好久,终于找到一篇好文,拿来共享 1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。 2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共 享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点

2010-11-21 18:30:00 279

原创 类对象类型的转化

<br />存在继承关系的类的对象之间可以进行转化:<br />子类对象类型可以转化为父类类型,<br />例如,一个函数的参数是父类对象,而传递进来的参数是子类对象,那么子类对象类型自动转化父类对象:<br />但是父类对象不能转为子类对象。<br /># include <iostream><br />using namespace std;<br />class A <br />{<br />   public:<br />   void printm()<br />   {<br />   cout

2010-11-21 18:29:00 409

原创 Java程序员面试必备的32个要点(转自CSDN)

第一,谈谈final, finally, finalize的区别。 <br /><br /><br /><br />final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。finalize是 Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 <br /><br /><br /><br />第二,Anonymous Inner Class (匿

2010-11-21 18:29:00 336

linux下的共享文件操作

如何在linux下共享文件的操作说明,对于想在windows下访问linux系统文件的很有帮助

2008-11-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除