10 2011 档案
TSS(任务状态段)
摘要:1 什么是TSS TSS 全称task state segment,是指在操作系统进程管理的过程中,任务(进程)切换时的任务现场信息。 2 TSS工作细节 TSS在任务切换过程中起着重要作用,通过它实现任务的挂起和恢复。所谓任务切换是指,挂起当前正在执行的任务,恢复或启动另一任务的执行。在任务切换过程中,首先,处理器中各寄存器的当前值被自动保存到TR(任务寄存器)所指定的TSS中;然后,下一任务的TSS的选择子被装入TR;最后,从TR所指定的TSS中取出各寄存器的值送到处理器的各寄存器中。由此可见,通过在TSS中保存任务现场各寄存器状态的完整映象,实现任务的切换。 3 TSS的格式...
阅读全文
C语言中volatile关键字与汇编__volatile__
摘要:在gcc中,可以使用 __asm__ 进行汇编语言的内嵌。 __volatile__ 表明编译器不要优化代码,后面的指令保持原样。C语言关键字volatile表明某个变量的值在外部可能被改变,因此对这些变量的存取不能缓存到寄存器,每次使用都要重新存取。
阅读全文
Linux进程调度的运行队列
摘要:当Linux内核要寻找一个新的进程在CPU上运行时,必须只考虑处于可运行状态的进程,(即在TASK_RUNNING状态的进程),因为扫描整个进程链表是相当低效的,所以引入了可运行状态进程的双向循环链表,也叫运行队列(runqueue)。运行队列容纳了系统中所有可以运行的进程,它是一个双向循环队列该队列通过task_struct结构中的两个指针run_list链表来维持。队列的标志有两个:一个是“空进程”idle_task、一个是队列的长度。有两个特殊的进程永远在运行队列中待着:当前进程和空进程。前面我们讨论过,当前进程就是由cureent指针所指向的进程,也就是当前运行着的进 程,但是请注意,
阅读全文
linux 进程的pid分配策略——pid位图算法 [转]
摘要:在研究进程fork()的时候,这个调用了do_fork(),其中do_fork()又涉及到进程的pid分配,这个东西的源代码有许多个版本,而且各自都不是一样的。昨天晚上研究了一晚上,今天从下午研究到现在,总算把内核中pid位图算法有一个整体的把握了。明天早上继续完成这篇博客,现在小小的庆祝一下,明天完成。 首先我们先看一个程序,这个程序是我从网上找的,这个程序的主要部分也是内核中的代码,下面我们就来分析一下这个程序。注:原程序有许多bug虫,下面的程序是我修改正确之后的程序,也算是有一点自己的共享吧,另外,原程序没有解释,我的解释估计还算详细吧,不废话了,我们一起来分析一下程序吧。小知识:..
阅读全文
关于C语言中 字符串常量的问题
摘要:昨天晚上我编写了一段简短的C语言程序(Linux环境下),编译能够通过,但是运行的时候老是报段错误。我当时非常郁闷,因为代码不长。其中主函数中有这样一句话: char *str="epmzm bpmzm qa eqtt bpmzm qa i eig";以后的代码对这个字符串进行操作(修改了其中的字符)。但是改成char str[]="epmzm bpmzm qa eqtt bpmzm qa i eig";之后就能正常运行了。我想了很久,也和同学进行了讨论。最后还是我想出了原因。第一种方式首先创建一个字符串常量并用str指针指向它,这在语法上当然没有错。但
阅读全文
关于C++ 牛人推荐的好书(转载)
摘要:首先肯定要读一读Bjarne Stroustrup的The Design and Evolution of C++,了解 一下这个语言的历史。接下来就可以看别的书了,但要不停地回头看这本书,看到 你不断地学到的新技术是怎么样一点点地被接纳到这个语言中去的。 第一本书因人而异,基础好一些的,可以看Stanley B. Lippman的C++ Primer,这 本书非常地巨大,你打星号的部分可以不要看。基础不太好的,可以看Stanley B. Lippman的Essential C++,这本书份量要轻得多,不过四个C++的范型都讲了,而 且讲得非常清楚。 第二本应该停止技术层面的东西,静下心来看看
阅读全文
好的学习Linux的网站
摘要:http://blog.csdn.net/yunsongice?viewmode=list
阅读全文
红黑树
摘要:红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由鲁道夫·贝尔发明的,他称之为"对称二叉B树",它现代的名字是在 Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中获得的。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n是树中元素的数目。 用途和好处红黑树和AVL树一样都对插入时间、删除时间和查找时间提供了最好可能的最坏情况担保。这不只是使它们在时间敏感的应用如实时应用(real
阅读全文
B树,B+树,B-树和B*树
摘要:B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字; 如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变B树结构(插入与删除结点)不需要移动大段的内存
阅读全文
遗传算法入门
摘要:遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 。 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。因此在介绍遗传算法前有必要简单的介绍生物进化知识。一.进化论知识 作为遗传算法生物背景的介绍,下面内容了解即可: 种群(Population):生物的进化以群体的形式进行,这样的一个群体称为种群。 个体:组成种群的单个生物。 基因 ( Gene ) :一个遗传因子。 染色体 ( Chromosome ) :包含一组的基因。 生存竞争,适者生存:对环境适应度高的、牛B的个体参与繁殖的机会比较多,后代就会越来越多。适应度低...
阅读全文
大白话解析模拟退火算法
摘要:一. 爬山算法 ( Hill Climbing ) 介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。 爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。如图1所示:假设C点为当前解,爬山算法搜索到A点这个局部最优解就会停止搜索,因为在A点无论向那个方向小幅度移动都不能得到更优的解。图1二. 模拟退火(SA,Simulated Annealing)思想 爬山法是完完全全的贪心法,每次都鼠目寸光的选择一个当前最优解,因此只能搜索到局部的最优值。模拟退火其实也是一种贪心算法
阅读全文
C语言中的字符串截取函数及应用
摘要:/*========================================================子数整数源程序名 num.??? (pas,c,cpp)可执行文件名 num.exe输入文件名 num.in输出文件名 num.out对于一个五位数a1a2a3a4a5,可将其拆分为三个子数:sub1=a1a2a3sub2=a2a3a4sub3=a3a4a5例如,五位数20207可以拆分成sub1=202sub2=020(=20)sub3=207现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1,sub2,.
阅读全文
C语言中字符串处理函数拾锦
摘要:C语言中字符串处理函数拾锦之前在学习C语言的时候,知道C语言库函数中有很多字符串处理函数,但是没怎么好好利用它。最近,发现它们的作用实在太大了,而且有些是我从来都没有用过的。今天想整理一下,方便以后使用。比较容易理解的,就没有举例说明。使用有关字符串处理的库函数,务必包含头文件string.h,即#include <string.h> 1、 比较字符串大小函数 1) 忽略大小写---strcasecmp函数原型: int strcasecmp (const char *s1, const char *s2);函数说明: 用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异2)
阅读全文
powerDesigner 教程
摘要:一、概念数据模型概述 概念数据模型也称信息模型,它以实体-联系(Entity-RelationShip,简称E-R)理论为基础,并对这一理论进行了扩充。它从用户的观点出发对信息进行建模,主要用于数据库的概念级设计。 通常人们先将现实世界抽象为概念世界,然后再将概念世界转为机器世界。换句话说,就是先将现实世界中的客观对象抽象为实体(Entity)和联系 (Relationship),它并不依赖于具体的计算机系统或某个DBMS系统,这种模型就是我们所说的CDM;然后再将CDM转换为计算机上某个 DBMS所支持的数据模型,这样的模型就是物理数据模型,即PDM。 CDM是一组严格定义的模型元素的集合,
阅读全文
C语言文件操作
摘要:1,两种文件存取方式(输入,输出方式) 顺序存取 直接存取 2,数据的两种存放形式 文本文件 二进制文件 13.2文件指针 定义文件类型指针变量的一般形式: FILE *指针变量名; 例如: FILE *fp1,*fp2; 13.3打开文件 在使用文件之前,需打开文件.在C里使用fopen函数打开文件.格式为: fopen(文件名,文件使用方式); 此函数返回一个指向FILE类型的指针.如: FILE *fp; fp=fopen("file_1","r"); 如果调用成功,fp就指向file_1,否则返回为NULL,所以为了保证文件的正确使用,要进行测试
阅读全文
C语言和C++中动态申请内存
摘要:在C语言和C++的动态内存的使用方法是不同的,在C语言中要使用动态内存要包含一个头文件即 #include<malloc.h>或者是#include<stdlib.h>然后用C语言的系统函数 void * malloc(usignedsize);来获得动态分配的内存,这个函数参数是需要申请的内存的字节数,返回的是一个申请到的内存的首地址,这个返回的内存的类型是 void ,所以需要根据需要进行强制类型转换,例如 int *array; array= (int*)malloc(sizeof(int)*10);这样就动态申请到了一个有10个int型变量的内存空间了。 但是在
阅读全文