故名思义,分布式系统就是将系统的应用层,数据层或其它部分构架成分布(物理和逻辑上的都可以)状(通常是网状)。分布式系统通常是为了增强系统的可扩展性、稳定性和执行效率。比如在线游戏通常就是分布系统,里面所谓的“区”就是分布系统里子例程。而分布式数据库其实也可以称作分布式系统,数据持久化层是分布的(数据存在不同的数据库中,可交互,有一套综管系统来维护数据的完整性和准确性)
所以说分布式系统更准确地说是一种系统构架概念,不是一种技术,
C#对网络的支持挺不错的,封装得很好,你主要可能看看网络通信这一块东西。然后机械工业出版社有一本分布式系统的书,做了全面阐述。你可以看看。~
下面是百度百科给出的解释:
分布式软件系统(Distributed Software Systems)
是支持分布式处理的软件系统,是在由通信网络互联的多处理机体系结构上执行任务的系统。它包括分布式 *** 作系统、分布式程序设计语言及其编译(解释)系统、分布式文件系统和分布式数据库系统等。
分布式 *** 作系统负责管理分布式处理系统资源和控制分布式程序运行。它和集中式 *** 作系统的区别在于资源管理、进程通信和系统结构等方面。
分布式程序设计语言用于编写运行于分布式计算机系统上的分布式程序。一个分布式程序由若干个可以独立执行的程序模块组成,它们分布于一个分布式处理系统的多台计算机上被同时执行。它与集中式的程序设计语言相比有三个特点:分布性、通信性和稳健性。
分布式文件系统具有执行远程文件存取的能力,并以透明方式对分布在网络上的文件进行管理和存取。
分布式数据库系统由分布于多个计算机结点上的若干个数据库系统组成,它提供有效的存取手段来 *** 纵这些结点上的子数据库。分布式数据库在使用上可视为一个完整的数据库,而实际上它是分布在地理分散的各个结点上。当然,分布在各个结点上的子数据库在逻辑上是相关的。
分布式数据库系统是由若干个站集合而成。这些站又称为节点,它们在通讯网络中联接在一起,每个节点都是一个独立的数据库系统,它们都拥有各自的数据库、中央处理机、终端,以及各自的局部数据库管理系统。因此分布式数据库系统可以看作是一系列集中式数据库系统的联合。它们在逻辑上属于同一系统,但在物理结构上是分布式的。
分布式数据库系统已经成为信息处理学科的重要领域,正在迅速发展之中,原因基于以下几点:
1、它可以解决组织机构分散而数据需要相互联系的问题。比如银行系统,总行与各分行处于不同的城市或城市中的各个地区,在业务上它们需要处理各自的数据,也需要彼此之间的交换和处理,这就需要分布式的系统。
2、如果一个组织机构需要增加新的相对自主的组织单位来扩充机构,则分布式数据库系统可以在对当前机构影响最小的情况下进行扩充。
3、均衡负载的需要。数据的分解采用使局部应用达到最大,这使得各处理机之间的相互干扰降到最低。负载在各处理机之间分担,可以避免临界瓶颈。
4、当现有机构中已存在几个数据库系统,而且实现全局应用的必要性增加时,就可以由这些数据库自下而上构成分布式数据库系统。
5、相等规模的分布式数据库系统在出现故障的几率上不会比集中式数据库系统低,但由于其故障的影响仅限于局部数据应用,因此就整个系统来讲它的可靠性是比较高的。
特点
1、在分布式数据库系统里不强调集中控制概念,它具有一个以全局数据库管理员为基础的分层控制结构,但是每个局部数据库管理员都具有高度的自主权。
2、在分布式数据库系统中数据独立性概念也同样重要,然而增加了一个新的概念,就是分布式透明性。所谓分布式透明性就是在编写程序时好像数据没有被分布一样,因此把数据进行转移不会影响程序的正确性。但程序的执行速度会有所降低。
3、集中式数据库系统不同,数据冗余在分布式系统中被看作是所需要的特性,其原因在于:首先,如果在需要的节点复制数据,则可以提高局部的应用性。其次,当某节点发生故障时,可以 *** 作其它节点上的复制数据,因此这可以增加系统的有效性。当然,在分布式系统中对最佳冗余度的评价是很复杂的。
分布式系统的类型,大致可以归为三类:
1、分布式数据,但只有一个总数据库,没有局部数据库。
2、分层式处理,每一层都有自己的数据库。
3、充分分散的分布式网络,没有中央控制部分,各节点之间的联接方式又可以有多种,如松散的联接,紧密的联接,动态的联接,广播通知式联接等。
---------------------
什么是分布式智能
NI LabVIEW 8的分布式智能结合了相关的技术和工具,解决了分布式系统开发会碰到的一些挑战。更重要的是,NI LabVIEW 8的分布式智能提供的解决方案不仅令这些挑战迎刃而解,且易于实施。LabVIEW 8的分布式智能具体包括:
可对分布式系统中的所有结点编程——包括主机和终端。尤为可贵的是,您可以利用LabVIEW图形化编程方式,对大量不同类型的对象进行编程,如桌面处理器、实时系统、FPGA、PDA、嵌入式微处理器和DSP。
导航所有系统结点的查看系统——LabVIEW Project Explorer。您可使用Project Explorer查看、编辑、运行和调试运行于任何对象上的结点。
经简化的数据共享编程界面——共享变量。使用共享变量,您可轻松地在系统间(甚至实时系统间)传输数据且不影响性能。无通信循环,无RT FIFO,无需低层次TCP函数。您可以利用简单的对话完成共享变量的配置,从而将数据在各系统间传输或将数据连接到不同的数据源。您还可添加记录、警报、事件等数据服务――一切仅需简单的对话即可完成。
实现了远程设备及系统内部或设备及系统之间的同步 *** 作——定时和同步始终是定义高性能测量和控制系统的关键问题。利用基于NI技术的系统,探索设备内部并编写其内部运行机制,从而取得比传统仪器或PLC方式下更为灵活的解决方案。
--------------------
在分布式计算机 *** 作系统支持下,互连的计算机可以互相协调工作,共同完成一项任务。
也可以这么解释:
一种计算机硬件的配置方式和相应的功能配置方式。它是一种多处理器的计算机系统,各处理器通过互连网络构成统一的系统。系统采用分布式计算结构,即把原来系统内中央处理器处理的任务分散给相应的处理器,实现不同功能的各个处理器相互协调,共享系统的外设与软件。这样就加快了系统的处理速度,简化了主机的逻辑结构 。
希望对你有所帮助~ :)
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
#include"stdioh"
#include"stdlibh"
#include"timeh"
void FIFO(void);
void LRU(void);
char a;
int m=4,n=12,i,y[12]={1,2,3,4,1,2,5,1,2,3,4,5}; /m为物理块数,n为要访问的页面数/
typedef struct page{
int num;
int time;
}Page;
Page x[10];
int GetMax(page x) /求出那个物理块中的页面呆的时间最长,返回物理块号/
{
int i;
int max=-1;
int tag=0;
for(i=0;i<m;i++)
{
if(x[i]time>max)
{ max=x[i]time;
tag=i;
}
}
return tag;
}
void Xunhuan()
{
printf("Please select 1:FIFO算法\n 2:LRU算法\n");
scanf("%s",&a);
printf("物理块数:4\n");
//scanf("%d",&m);
for(i=0;i<m;i++) /将空的物理块中数据置为-1/
{
x[i]num=-1;
}
printf("所要访问的页面数:12\n");
//scanf("%d",&n);
//srand(time(NULL));
printf("所要访问的页面号序列为:");
for(i=0;i<n;i++)
printf("%d ",y[i]);
printf("\n");
printf("页面置换步骤如下:\n");
switch(a)
{
case '1':FIFO();break;
case '2':LRU(); break;
}
}
void main()
{
char a;
Xunhuan();
while(1)
{
printf("Continue or Exit:C/Anykey:\n");
scanf("%s",&a);
if(a=='c'||a=='C')
Xunhuan();
else break;
}
exit(0);
}
void FIFO(void)
{
int i,j,u;
for(i=0;i<m;i++)
x[i]time=0;
x[0]num=y[0];
x[0]time=1;
printf(" %d \n",x[0]num);
for(i=1;i<n;i++)
{ u=0;
for(j=0;j<m;j++)
if(x[j]num==y[i])
{
u=1;
break;
}
if(u!=1&&x[m-1]num!=-1)
{
j=GetMax(x);
x[j]num=y[i];
x[j]time=0;
}
if(u!=1&&x[m-1]num==-1)
{
for(j=0;j<m;j++)
{
if(x[j]num==-1)
{x[j]num=y[i];
break;}
}
}
for(j=0;j<m;j++)
if(x[j]num!=-1)
x[j]time++;
for(j=0;j<m;j++)
if(x[j]num==-1)
printf("%2c ",32);
else
printf("%2d ",x[j]num);
printf("\n");
}
}
void LRU()
{
int i,j,u;
for(i=0;i<m;i++)
x[i]time=0;
x[0]num=y[0];
x[0]time=1;
printf(" %d \n",x[0]num);
for(i=1;i<n;i++)
{ u=0;
for(j=0;j<m;j++)
if(x[j]num==y[i]) /物理块中存在相同页面/
{
x[j]time=0; /将相同的物理块的time置为0/
u=1;
break;
}
if(u!=1&&x[m-1]num!=-1) /物理块中无相同页面且物理块已填满/
{
j=GetMax(x);
x[j]num=y[i];
x[j]time=0; /将刚替换的页面所在的物理块time置为0/
}
if(u!=1&&x[m-1]num==-1) /物理块中无相同页面且物理块未填满/
{
for(j=0;j<m;j++)
{
if(x[j]num==-1)
{x[j]num=y[i];
break;}
}
}
for(j=0;j<m;j++)
if(x[j]num!=-1)
x[j]time++; /每执行完一次time加1/
for(j=0;j<m;j++)
if(x[j]num==-1)
printf("%2c ",32);
else
printf("%2d ",x[j]num);
printf("\n"); /格式化输出/
}
}
你需要再写一个读的程序 一起运行。
FIFO的打开规则:
如果当前打开 *** 作是为读而打开FIFO时,若已经有相应进程为写而打开该FIFO,则当前打开 *** 作将成功返回;否则,可能阻塞直到有相应进程为写而打开该FIFO(当前打开 *** 作设置了阻塞标志);或者,成功返回(当前打开 *** 作没有设置阻塞标志)。
如果当前打开 *** 作是为写而打开FIFO时,如果已经有相应进程为读而打开该FIFO,则当前打开 *** 作将成功返回;否则,可能阻塞直到有相应进程为读而打开该FIFO(当前打开 *** 作设置了阻塞标志);或者,返回ENXIO错误(当前打开 *** 作没有设置阻塞标志)。
总之就是一句话,一旦设置了阻塞标志,调用mkfifo建立好之后,那么管道的两端读写必须分别打开,有任何一方未打开,则在调用open的时候就阻塞。
[fiforar] - *** 作系统中内存页面的先进先出的替换算法fifo
[先进先出页面算法程序rar] - 分别实现最佳置换算法(optimal)、先进先出(fifo)页面置换算法和最近最久未使用(LRU)置换算法,并给出各算法缺页次数和缺页率。
[0022rar] - 模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断
[Changerar] - 用java实现 *** 作系统的页面置换 其中包括 最佳置换算法(Optimal)、先进先出算法(First-in, First-out) 、最近最久不用的页面置换算法(LeastRecently Used Replacement)三种算法的实现
[M_Managementrar] - *** 作系统中内存管理页面置换算法的模拟程序,采用的是LRU置换算法
[detail_of_44b0x_TCPIPrar] - TCPIP 程序包加载到44b0x 的ADS12工程文件的说明书。说名了加载过程的细节和如何处理演示程序和代码。演示代码已经上传,大家可以搜索
[OperatingSystemPageReplacementAlgorithmrar] - java *** 作系统页面置换算法: (1)进先出的算法(fifo) (2)最近最少使用的算法(LRU) (3)最佳淘汰算法(OPT) (4)最少访问页面算法(LFU) (注:由本人改成改进型Clock算法) (5)最近最不经常使用算法(NUR)
FIFO(数据结构中的先入先出队列)一般指先入先出队列。
First Input First Output的缩写,先入先出队列,这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令。
在计算机中,先入先出队列是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令(指令就是计算机在响应用户 *** 作的程序代码,对用户而言是透明的)。
重要参数:
满标志:FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写 *** 作继续向FIFO中写数据而造成溢出(overflow)。
空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读 *** 作继续从FIFO中读出数据而造成无效数据的读出(underflow)。
读时钟:读 *** 作所遵循的时钟,在每个时钟沿来临时读数据。
写时钟:写 *** 作所遵循的时钟,在每个时钟沿来临时写数据。
读指针:指向下一个读出地址。读完后自动加1。
写指针:指向下一个要写入的地址的,写完自动加1。
读写指针其实就是读写的地址,只不过这个地址不能任意选择,而是连续的。
module fifo(clock,reset,read,write,fifo_in,fifo_out,fifo_empty,fifo_half,fifo_full);
input clock,reset,read,write;
input [7:0] fifo_in;
output [7:0] fifo_out;
output fifo_empty,fifo_half,fifo_full; //表示存储单元使用情况的标志位
reg [7:0] fifo_out;
reg [2:0] read_ptr,write_ptr,counter; //读,写指针及计数器
reg [7:0] ram [7:0]; //8个8位的存储单元
wire fifo_empty,fifo_half,fifo_full;
always@(posedge clock) //复位信号有效时给系统复位
if (reset)
begin
read_ptr=0;
write_ptr=0;
counter=0;
fifo_out=0;
end
else //做读(数据输出),写(数据输入) *** 作
case({read,write})
2'b00: //没有读写指令
counter=counter;
2'b01: //写指令,数据输入FIFO
begin
ram[write_ptr]=fifo_in; //将输入数据写入存储单元
counter=counter+1; //每写入一个数就让计数器加1
write_ptr=(write_ptr==7)0:write_ptr+1;
/写指针加1,若指针指向最后一个存储单元(write_ptr==7),则把指针指向第一个存储单元/
end
2'b10: //读指令,数据从FIFO输出
begin
fifo_out=ram[read_ptr]; //将存储单元的数据输出
counter=counter-1; //每读出一个数就让计数器减1
read_ptr=(read_ptr==7)0:read_ptr+1;
/读指针加1,若指针指向最后一个存储单元(read _ptr ==7),则把指针指向第一个存储单元/
end
2'b11: //读写指令,同时做数据输入和输出
begin
if(counter==0) //存储单元是空的,所以当前输入数据可以直接输出
fifo_out=fifo_in;
else
begin
ram[write_ptr]=fifo_in;
fifo_out=ram[read_ptr];
write_ptr=(write_ptr==7)0:write_ptr+1;
read_ptr=(read_ptr==7)0:read_ptr+1;
end
end
endcase
assign fifo_empty=(counter==0); //存储单元都是空的时候将标志位fifo_empty置1
assign fifo_full=(counter==7); //存储单元都满了的情况下将标志位fifo_full置1
assign fifo_half=(counter==4); //存储单元占用了一半的时候将标志位fifo_half置1
endmodule
在计算机中,先入先出队列是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令(指令就是计算机在响应用户 *** 作的程序代码,对用户而言是透明的)。如图1所示,当CPU在某一时段来不及响应所有的指令时,指令就会被安排在FIFO队列中,比如0号指令先进入队列,接着是1号指令、2号指令……当CPU完成当前指令以后就会从队列中取出0号指令先行执行,此时1号指令就会接替0号指令的位置,同样,2号指令、3号指令……都会向前挪一个位置,这样解释大家清楚了吧?
图1 先进先出队列
FIFO是队列机制中最简单的,每个接口上都存在FIFO队列,表面上看FIFO队列并没有提供什么QoS(Quality of Service,服务质量)保证,甚至很多人认为FIFO严格意义上不算做一种队列技术,实则不然,FIFO是其它队列的基础,FIFO也会影响到衡量QoS的关键指标:报文的丢弃、延时、抖动。既然只有一个队列,自然不需要考虑如何对报文进行复杂的流量分类,也不用考虑下一个报文怎么拿、拿多少的问题,而且因为按顺序取报文,FIFO无需对报文重新排序。简化了这些实现其实也就提高了对报文时延的保证。
FIFO关心的就是队列长度问题,队列长度会影响到时延、抖动、丢包率。因为队列长度是有限的,有可能被填满,这就涉及到该机制的丢弃原则。常见的一个丢弃原则叫做Tail Drop机制。简单地说就是该队列如果已经满了,那么后续进入的报文被丢弃,而没有什么机制来保证后续的报文可以挤掉已经在队列内的报文。在这种机制中,如果定义了较长的队列长度,那么队列不容易填满,被丢弃的报文也就少了,但是队列长度太长了会出现时延的问题,一般情况下时延的增加会导致抖动也增加。如果定义了较短的队列,时延的问题可以得到解决,但是发生Tail Drop的报文就变多了。
以上就是关于求28X系列DSP与PLC通讯例程(附上我的程序,求指教)全部的内容,包括:求28X系列DSP与PLC通讯例程(附上我的程序,求指教)、一个程序的页面走向,FIFO和LRU页面置换算法、c语言,打开fifo文件时就没有反应,也不报错,就像是被暂停了一样,请问是怎么个情况代码如下。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)