fifo

【IPC通信】有名管道FIFO

冷暖自知 提交于 2020-04-17 02:21:08
【推荐阅读】微服务还能火多久?>>> 前面学习过(匿名)管道(见前面博客),匿名管道只能用于有亲缘关系的各个进程之间,为了解决这个限制,UNIX系统进而引入了FIFO,也称为有名管道(named pipe)。 FIFO(first in, first out),是一个半双工数据流,也即一个半双工管道。不同于匿名管道的是,每个FIFO有一个路径名(或文件名)与之关联,也即FIFO的名字。有了名字,无亲缘关系的进程间就可以通过管道进行数据传输了。 创建FIFO的方式: 使用shell命令 mkfifo创建一个有名管道 使用C库函数mkfifo创建一个有名管道 使用shell命令 mkfifo创建一个有名管道 [infor@s123 FIFO]$ mkfifo npipe [infor@s123 FIFO]$ ls -l prw-r--r-- 1 infor app 0 Nov 13 11:32 npipe 上面我们创建了一个有名管道npipe,我们可以看到有名管道其实是一个文件,文件类型是“p”,管道类型。 我们在开启两个终端,分别为A和B。在A终端下将数据写入管道,在B终端下将数据读出来。 [infor@s123 FIFO]$ ping 10.4.123.124 >> npipe #会阻塞在这里,等待另一个进程读 在终端A下将ping的结果写入管道npipe

python matplotlib 可视化操作实例

Deadly 提交于 2020-03-21 05:07:03
具体代码: # encoding: utf-8 # coding = utf-8 import sys reload(sys) sys.setdefaultencoding('utf8') from matplotlib.font_manager import FontProperties import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import matplotlib print ( matplotlib.matplotlib_fname() ) #mpl.rcParams['font.family'] = 'sans-serif' #mpl.rcParams['font.sans-serif'] = [u'Simsun'] #mpl.rcParams['axes.unicode_minus'] = False font = FontProperties(fname=r"/Users/zhao/anaconda2/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/Songti.ttc") #font = {'family' : 'SimSun' } #mpl.rc('font', **font) str =""

DMA---直接存储器访问

霸气de小男生 提交于 2020-03-12 13:37:22
一、DMA简介 DMA传输实现高速数据移动过程无需任何CPU操作控制。 DMA控制器是独立于Cortex_M4内核的。 STM32F407共有2个DMA控制器,DMA1只有外设到存储器和存储器到外设的传输模式,DMA2具有外设到存储器、存储器到外设以及存储器到存储器的传输模式。 传输模式: 1》外设到存储器(P--->M):把外设数据寄存器内容转移到指定的内存空间。 2》存储器到外设(M--->P):把特定存储区内容转移到外设的数据寄存器中。 3》存储器到存储器(M--->M):把一个指定的存储区内容拷贝到另一个存储区空间。 二、功能框图 (1)外设通道选择 每个DMA控制器具有8个数据流,每个数据流对应8个外设通道,每个通道对应不同的DMA请求。 外设通道选择要解决的主要问题是决定哪一个外设作为该数据流的源地址或者目标地址。 每个外设请求都占用一个数据流通道,相同外设请求可以占用不同数据流通道。 (2)仲裁器 仲裁器用来管理判断哪个数据流的优先级高。 仲裁器管理数据流方法分为两个阶段:第一阶段数据软件阶段,在配置数据流时可以通过寄存器设定它的优先级别,可以设置为非常高、高、中和低四个级别。第二阶段数据硬件阶段,如果两个或两个以上数据流软件设置优先级一样,则它们优先级取决于数据流编号,编号越低优先级越高,比如数据流2优先级高于数据流3。 (3)FIFO

LRU 缓存置换算法

流过昼夜 提交于 2020-03-06 18:18:12
1.LRU 1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。 1.2. 实现 最常见的实现是使用一个链表保存缓存数据,详细算法实现如下: 1. 新数据插入到链表头部; 2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部; 3. 当链表满的时候,将链表尾部的数据丢弃。 1.3. 分析 【命中率】 当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重。 【复杂度】 实现简单。 【代价】 命中时需要遍历链表,找到命中的数据块索引,然后需要将数据移到头部。 2. LRU-K 2.1. 原理 LRU-K中的K代表最近使用的次数,因此LRU可以认为是LRU-1。LRU-K的主要目的是为了解决LRU算法“缓存污染”的问题,其核心思想是将“最近使用过1次”的判断标准扩展为“最近使用过K次”。 2.2. 实现 相比LRU,LRU-K需要多维护一个队列,用于记录所有缓存数据被访问的历史。只有当数据的访问次数达到K次的时候,才将数据放入缓存。当需要淘汰数据时,LRU-K会淘汰第K次访问时间距当前时间最大的数据。详细实现如下: 1. 数据第一次被访问,加入到访问历史列表; 2.

STL-栈&队列FIFO,FILO

陌路散爱 提交于 2020-03-05 10:12:52
# include <iostream> # include <cstdio> # include <string> # include <queue> # include <stack> # include <algorithm> # include <cmath> # include <list> # include <cstdlib> # include <cstring> using namespace std ; int main ( ) { int t ; cin >> t ; while ( t -- ) { int n ; cin >> n ; string s1 , s2 ; cin >> s1 ; if ( s1 == "FIFO" ) { queue < int > qu ; while ( n -- ) { cin >> s2 ; if ( s2 == "IN" ) { int num ; cin >> num ; qu . push ( num ) ; } else { if ( qu . empty ( ) ) { cout << "None" << endl ; } else { cout << qu . front ( ) << endl ; qu . pop ( ) ; } } } } else { stack < int > st ; while

nc 命令详解

折月煮酒 提交于 2020-02-28 15:04:43
英文原文: Linux Netcat command – The swiss army knife of networking netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。使用netcat命令所能完成的事情令人惊讶。 netcat所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后所能做的事就看你的想像力了。你能建立一个服务器,传输文件,与朋友聊天,传输流媒体或者用它作为其它协议的独立客户端。 下面是一些使用netcat的例子. [A(172.31.100.7) B(172.31.100.23)] Linux netcat 命令实例: 1,端口扫描 端口扫描经常被系统管理员和黑客用来发现在一些机器上开放的端口,帮助他们识别系统中的漏洞。 $nc -z -v -n 172.31.100.7 21-25 可以运行在TCP或者UDP模式,默认是TCP,-u参数调整为udp. z 参数告诉netcat使用0 IO,连接成功后立即关闭连接, 不进行数据交换(谢谢@jxing 指点) v 参数指使用冗余选项(译者注:即详细输出) n 参数告诉netcat 不要使用DNS反向查询IP地址的域名 这个命令会打印21到25 所有开放的端口。Banner是一个文本

【实验】模拟FIFO网络打印机

放肆的年华 提交于 2020-02-22 13:51:27
Experiment 2 Printer Simulation: FIFO(4 hours) Prerequisites: Students should have mastered the following prerequisite skills. Inheritance - Declaring and defining derived classes Queues - Programming queue structure Goals: This assignment is designed to reinforce the student’s understanding of queues. Outcomes: Students successfully completing this assignment would master the following outcomes. Program a queue data structure and use it in creating a simulation Use inheritance appropriately to create a specialized version of an existing class Background From store-and-forward queues in

VCS_lab3_DVE的使用

荒凉一梦 提交于 2020-02-17 06:02:27
一.目的:使用DVE GUI调试现有的Verilog设计。 代码:fifo.v // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CDANOTE Verilog Synchronous FIFO // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ module fifo (clk, rstp, src_in, dst_in, data_in, writep, readp, src_out, dst_out, data_out, emptyp, fullp); input clk; input rstp; input [7:0] src_in; input [7:0] dst_in; input [31:0] data_in; input readp; input writep; output [7:0] src_out; output [7:0] dst_out; output [31:0] data_out; output emptyp; output fullp; // Defines sizes in terms of bits. // parameter DEPTH = 2, FULL = (1<<3

FIFO深度计算

£可爱£侵袭症+ 提交于 2020-02-16 02:51:37
数字IC设计中我们经常会遇到这种场景,工作在不同时钟域的两个模块,它们之间需要进行数据传递,为了避免数据丢失,我们会使用到FIFO。当读数据的速率小于写数据的速率时,我们就不得不将那些还没有被读走的数据缓存下来,那么我们需要开多大的空间去缓存这些数据呢?缓存开大了会浪费资源,开小了会丢失数据,如何去计算最小FIFO深度是我们讨论的重点。 数据突发长度(burst length) 在讲解如何去计算FIFO深度之前,我们来理解一个术语burst length,如果你已经了解了可以跳过。要理解数据的突发长度,首先我们来考虑一种场景,假如模块A不间断的往FIFO中写数据,模块B同样不间断的从FIFO中读数据,不同的是模块A写数据的时钟频率要大于模块B读数据的时钟频率,那么在一段时间内总是有一些数据没来得及被读走,如果系统一直在工作,那么那些没有被读走的数据会越累积越多,那么FIFO的深度需要是无穷大的,因此 只有在突发数据传输过程中讨论FIFO深度才是有意义的 。也就是说我们一次传递一包数据完成后再去传递下一包数据,我们把一段时间内传递的数据个数称为 burst length 。在维基百科中, burst transmission 是这样解释的:In telecommunication, a burst transmission or data burst is the broadcast