- 博客(19)
- 资源 (5)
- 收藏
- 关注
原创 硬中断、软中断和信号
硬中断是外部设备对CPU的中断,软中断是中断底半部的一种处理机制,信号则是由内核(或其他进程)对某个进程的中断。 ①硬中断是由外部事件引起的因此具有随机性和突发性; 软中断是执行中断指令产生的,无面外部施加中断请求信号,因此中断的发生不是随机的而是由程序安排好的。②硬中断的中断响应周期,CPU需要发中断回合信号(NMI不需要); 软中断的中断响应周期,CPU不需发中断回
2015-10-06 11:12:24
1140
原创 系统调用,进程切换
模式切换 不等同于 进程上下文切换当进程调用系统调用或者发生中断时,CPU从用户模式(用户态)切换成内核模式(内核态),此时,无论是系统调用程序还是中断服务程序,都处于当前进程的上下文中,并没有发生进程上下文切换。当系统调用或中断处理程序返回时,CPU要从内核模式切换回用户模式,此时会执行操作系统的调用程序。如果发现就需队列中有比当前进程更高的优先级的进程,则会发生进程切换:当前进
2015-09-10 19:46:49
6541
4
原创 CPU时间
用户CPU时间:用户态进程执行时间。系统CPU时间:内核态进程执行时间。CPU时间:用户CPU时间+系统CPU时间。时钟时间(墙上时钟时间):和系统中同时运行的进程数有关,可能发生阻塞等。为阻塞+就绪+运行时间的总和。
2015-09-10 15:05:59
567
原创 素数的验证范围到数的开方
假设范围大于数的开方,则另个数必定小于数的开方。若两个数都大于数的开方,则相乘必定大于这个数。所以只需要验证2到这个数的开方范围内就可以。
2015-08-29 15:22:12
564
原创 给定数组的子数组最大和
#include #include int maxSum(int* a,int n) { int sum=0;//其实要处理全是负数的情况,很简单,如稍后下面第3点所见,直接把这句改成:"int sum=a[0]"即可//也可以不改,当全是负数的情况,直接返回0,也不见得不行。 int b=0; for(int i=0
2015-08-28 15:37:42
336
原创 链接属性和存储类型
链接属性全局变量和函数具有external链接属性,其余标识符的链接属性则为none。static关键字可以使链接属性变为internal,而且static只对缺省链接属性为external的声明才有改变链接属性的效果。存储类型有三个地方可以用于存储变量:普通内存、运行时堆栈、硬件寄存器。变量的缺省存储类型取决于它的声明位置:一:凡是在任何代码块之外声明的变量总是存储于静态
2015-08-25 23:33:42
415
原创 被调用函数与堆栈
1) 在栈上创建。在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。 栈内存分配运算内置于处理器的指令集中,一般使用寄存器来存取,效率很高,但是分配的内存容量有限。2) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用 free或delete来释放内存。动态内存的生存期
2015-08-25 16:06:59
266
原创 求pi的小数点后800位
#include #include long a=10000,b,c=2800,d,e,f[2801],g; int main() { for(;b-c;) f[b++]=a/5; for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a) for(
2015-08-24 22:14:32
480
原创 查找整数组成字符串的下一个字符串
一般而言,设P是[1,n]的一个全排列。 P=P1P2…Pn=P1P2…Pj-1PjPj+1…Pk-1PkPk+1…Pn find: j=max{i|Pi1} k=max{i|Pi>Pj} 1, 对换Pj,Pk, 2, 将Pj+1…Pk-1PjPk+1…Pn翻转P’= P1P2…Pj-1PkPn…Pk+1PjPk-1…
2015-08-24 22:10:55
286
原创 算术移动和逻辑移动
算术左移、逻辑左移、算术右移、逻辑右移有什么不同?算术左移:末尾添0;逻辑左移:末尾添0;算术右移:左端最低位填充;逻辑右移:左端添0。 算术左移和算术右移主要用来进行有符号数的倍增、减半;逻辑左移和逻辑右移主要用来进行无符号数的倍增、减半. 算术左移和算术左移虽然方式是一样的,但他们表示的移位后数的范围是不一样的,有符号数左移(算术左移)位后的范围是-128—
2015-08-18 23:03:37
1383
原创 32位与64位平台
char a=0xff;32位扩展变量a为整型则为0xffffffff;64位扩展变量a为整型位0xffffffffffffffff;
2015-08-18 20:52:27
376
原创 可重入函数与不可重入函数
主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。 也可以这样理解,重入即表示重复进入,首先它意味着这个函数可以被中断,其次意味
2015-08-18 20:48:28
269
原创 linux内存分配方法
基于linux 驱动开发以及应用开发. 当想要分配内存的时候,要面对很多的内存分配函数: malloc、 kmalloc、 vmalloc、 alloc_page、 dma_alloc ...简单归纳如下:malloc: 分配用户空间内存 .不保证物理连续.linux中用户空间和内核空间不能直接互相访问内存,要通过copy_from_user 、copy_to_user 或者mmap影射
2015-08-18 16:57:52
656
原创 进程与线程区别
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体, 是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线
2015-07-16 16:57:36
221
原创 tcp/ip基本概念
TCP/IP协议的工作流程如下: ●在源主机上,应用层将一串应用数据流传送给传输层。 ●传输层将应用层的数据流截成分组,并加上TCP报头形成TCP段,送交网络层。 ●在网络层给TCP段加上包括源、目的主机IP地址的IP报头,生成一个IP数据包,并将IP数据包送交链路层。 ●链路层在其MAC帧的数据部分装上IP数据包,再加上源、目的主机的MAC地址和帧头,并根据其目的MAC地址
2015-07-15 15:23:09
270
原创 哈希表
哈希表对于查找具有优势,这里举一个例子。数组num[5]={1,2,3,4,5,5},首先给定哈希表的长度为10,初始化哈希表,表中的元素包括值和索引值,初始值为-1,索引值为null。hashtable [ num [ i ] ].index = i。对于数组中相同的数,在其hashtable [ ]下插入对应的链表。
2015-07-14 15:39:26
234
原创 Unix网络编程中第一个例子出现connect error: Connection refused
这个问题我来回答,linux 现在因为安全问题,各个发行版本默认是不开daytime服务的。由于要打开端口,所以服务端程序需要用root权限执行,所以你可以先 sudo ./daytimetcpsrv然后再开一个终端运行 ./daytimetcpcli 就可以看到返回的时间了
2015-07-07 22:38:45
1059
转载 信号量、互斥体和自旋锁
转至:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/21/2602015.html一、信号量 信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是共享内存方式的进程间通信。本质上,信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况。一般说来,为了获得共享资源,进程需要执行下列操作:
2015-07-07 22:09:21
212
触摸屏知识大全
2014-03-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人