摘要: P1,P2,...,Pn互斥:软件方法 软件方法能够实现并发过程在一个或多个共享主存的处理器上执行。这些方法通常基于在访问内存是基本互斥条件的假设,也就是说,尽管允许访问的顺序事先没有安排,但同时访问主存中的同一地址的操作(读或写)被内存仲裁器串行化了。此外,也没有考虑硬件、操作系统或是编程语言的支持。全局变量enmu blooean(false=0;true=1);boolean flag[2]={0,0};Dekker算法如下:当P0要进入它的临界区时,它设置它的flag为true,然后检查P1的flag,如果为false,则P0可以立即进入它的临界区,否则,P0咨询true,如果发现tu 阅读全文
posted @ 2012-01-11 15:05 在云中漫步 阅读(5308) 评论(3) 推荐(2) 编辑
摘要: 原文地址:http://alexbellos.com/?p=725我有两个孩子。一个是出生在星期二的男孩。我有两个男孩的概率是多少?我刚从亚特兰大回来,在那里我参加了一个关于数学、猜谜和魔术的会议。其中有一个会谈,是一个站在代表前面的叫Gary Foshee问的问题,就是上面提的问题,那是他全部的谈话。概率甚至会对很优秀的数学家也带来恐惧,因为它是如此充满了疯狂的反直觉。就像Gary Foshee的问题。你会觉得这个男孩出生在哪一天是没有什么不同的......但它确实是这样!在我们解决之前--认为这是初步问题:我有两个孩子。一个是男孩,我有两个男孩的概率是什么?要回答这个问题,需考虑孩子们可能 阅读全文
posted @ 2011-12-31 11:57 在云中漫步 阅读(2500) 评论(8) 推荐(3) 编辑
摘要: ·执行:这个状态值对应于两个状态。一个运行进程或者正在执行,或者准备执行。·可中断:这是一个阻塞状态,此时进程正在等待一个事件(如一个I/O操作)的结束、一个可用的资源或另一个进程的信号。·不可中断:这是另一种阻塞状态,它与可中断的区别是,在不可中断的状况下,进程正在直接等待一个硬件条件,因此不会接受任何信号。·停止:进程已被终止,并且只能由来自另一个进程的被动动作恢复。例如,一个正在被调试的进程可以被置于停止状态。·僵死:进程已被终止,但由于某些原因,在进程表中仍然有它的任务结构。 阅读全文
posted @ 2011-12-23 14:16 在云中漫步 阅读(1064) 评论(1) 推荐(2) 编辑
摘要: 由于不同进程中的线程可能并发执行,因而Windows支持进程间的并发性。此外,同一个进程中的多个线程可以分配给不同的处理器并且同时执行。一个含有多线程的进程在实现并发时,不需要使用多进程的开销。同一个进程中的线程可以通过它们的公共地址空间交换信息,并访问进程中的共享资源,不同进程中的线程可以通过在两个进程间建立的共享内存交换信息。一个面向对象的具体多线程的进程是实现服务器应用程序的一种有效方法。一个现有的Windows线程处于以下六种状态之一:·就绪态:可以被调度执行,微内核分流器跟踪所有就绪进程,并按优先级顺序进行调度。·备用态:备用线程已经被选择下一次在一个特定的处理器 阅读全文
posted @ 2011-12-22 10:01 在云中漫步 阅读(4599) 评论(0) 推荐(1) 编辑
摘要: 当发生一个中断、陷阱或系统调用时,处理器被置于内核模式,控制权转交给操作系统。如果操作系统完成其操作后,确定需要继续运行当前进程,则进行一次模式切换,在当前进程中恢复恢复被中断的进程。在某种程度上,操作系统的这种视图是非常值得注意的。在某些时候,一个进程可以保存它的状态信息,从就绪态进程中选择另一个进程,并把控制权释放给这个进程。之所以说这是一种混杂的情况,是因为在关键时候,在用户进程中执行的代码是共享的操作系统代码而不是用户代码。基于用户模式和内核模式的概念,即使操作系统例程在用户进程环境中执行,用户代码也不能篡改或干涉操作系统例程。这进一步说明进程和程序的概念是不同的,它们之间不是一对一的 阅读全文
posted @ 2011-12-09 11:03 在云中漫步 阅读(1037) 评论(0) 推荐(2) 编辑
摘要: 操作系统设计层次层名称对象示例操作13shell用户程序设计环境shell语言中的语句12用户进程用户进程退出、终止、挂起和恢复11目录目录创建、销毁、连接、分离、查找和列表10设备外部设备,如打印机、显示器和键盘打开、关闭、读和写9文件系统文件创建、销毁、打开、关闭、读和写8通信管道创建、销毁、打开、关闭、读和写7虚存段、页读、写和取6本地辅存数据块、设备通道读、写、分配和空间5原始进程原始进程、信号量、准备就绪列表挂起、恢复、等待和发信号4中断中断处理调用、屏蔽、去屏蔽和重试3过程过程、调用栈、显示标记栈、调用、返回2指令集计算栈、微程序解释器、标量和数组数据加载、保存、加操作、... 阅读全文
posted @ 2011-12-02 10:53 在云中漫步 阅读(252) 评论(0) 推荐(1) 编辑
摘要: Pick 定理 设以整数点为顶点的多边形的面积为S,多边形内部的整数点数为N,多边形边界上的整数点数为L,则 N+1/2L-1=S. 对于N与L的计算由下面的程序给出:typedef struct Point{ int x,y;}POINT;int gcd(int a,int b) //求数a,b的最大公因数{ if(b==0) return a; else return gcd(b,a%b);}多边形边上的网格点个数有下列程序段给出:int OnEdge(int n,POINT *p){ int i,ret=0; for(i=0;i<n;i++) ret+=gcd(fabs(p[i]. 阅读全文
posted @ 2011-11-02 12:49 在云中漫步 阅读(1697) 评论(2) 推荐(0) 编辑
摘要: #include <stdio.h> #include <stdlib.h>#include <malloc.h>#include <math.h>#include <string.h>//除了x的最低有效字节外,其他的位都取补typedef unsigned char *byte_pointer;void show_bytes(byte_pointer start,int len){ int i; for(i=len-1;i>=0;i--) printf("%.2x ",start[i]); printf( 阅读全文
posted @ 2011-07-23 15:15 在云中漫步 阅读(320) 评论(1) 推荐(0) 编辑
摘要: #include <stdio.h> #include <stdlib.h>#include <malloc.h>#include <math.h>#include <string.h>typedef unsigned char *byte_pointer;void show_bytes(byte_pointer start,int len){ int i; for(i=len-1;i>=0;i--) printf("%.2x ",start[i]); printf("\n");}void 阅读全文
posted @ 2011-07-23 11:14 在云中漫步 阅读(212) 评论(0) 推荐(0) 编辑
摘要: #include <stdio.h> #include <stdlib.h>#include <malloc.h>#include <math.h>#include <string.h>typedef unsigned char *byte_pointer;void show_bytes(byte_pointer s){ printf("%c ",s); printf("\n");}void inplace_swap(int *x,int *y){ *y=*x ^ *y; show_bytes( 阅读全文
posted @ 2011-07-18 18:21 在云中漫步 阅读(236) 评论(0) 推荐(0) 编辑