精华内容
下载资源
问答
  • 关于启动子预测

    千次阅读 2020-05-08 13:25:38
    文章目录关于启动子预测工具promoterHunterPhagePromoterBacPPiPro54-PseKNC(2014发表)iPro70-PseKNC(2019发表)...启动子概念见维基百科,一个比较笼统的解释为转录起始的阶段,RNA聚合酶需要...

    关于启动子

    启动子概念见维基百科,一个比较笼统的解释为在转录起始的阶段,RNA聚合酶需要转录因子和启动子来保证其的稳定结合,然后形成bubble,开始转录。启动子定位于转录起始位点的上游不远处。其长度分布范围可以为100-1000bp。
    在原核生物中,启动子被RNA聚合酶或者α因子识别(其被结合在启动子附近的蛋白招募),原核生物比较特殊,RNA聚合酶的结合特异性是被α因子掌握的。该α因子与古细菌的转录因子β和真核生物的TFIIB是进化上同源的(TFIIB是一个通用型的转录因子,参与二类的RNA聚合酶的转录起始复合物的形成),表明真核生物和原核生物可能有一个共同的进化祖先,但是真核生物的进化更加高级。每一个原核生物的转录因子都包含一个全酶(酶分为全酶和结合酶两类),但是不同的细菌种类之间的全酶数目是不同的(种类只有几种:)。
    在真核生物钟,转录起始的过程比较复杂,需要多个转录因子参与,最后募集RNA聚合酶II到启动子附近。TFIIB是一个提供转录起始复合物形成的平台的通用转录因子,他能够辅助RNA聚合酶解链双链DNA,还可以辅助RNA聚合酶确定转录起始位点。
    启动子和其他的DNA元件可以协同发挥作用,比如增强子,沉默子,insulator等。

    预测工具

    promoterHunter

    网址:http://www.phisite.org/main/index.php?nav=tools&nav_sel=hunter,该工具是一个噬菌体数据库(phiSITE)的附属工具,该数据库收集了噬菌体的各种DNA功能原件以及其他信息。
    该预测工具书数据的格式为fasta,可以指定-10区域和-35区域的核苷酸Matrix(也就是不同的核苷酸在不同位置上的偏好信息)。此外还可以指定启动子区域的GC含量范围以及-10区域和-35区域之间的距离范围。输出的数据可以指定最好的N个结果。输出的示例结果如下,结果是按照打分的高低进行排序的。注意:该工具需要指定matrix,否则分析时总是会提示缓存为空。
    在这里插入图片描述

    PhagePromoter

    网址:https://galaxy.bio.di.uminho.pt/?tool_id=get_proms&version=0.1.0&__identifer=4u05obc3o5w,该工具使用机器学习算法来预测在噬菌体中的启动子的位置。它能够同时识别噬菌体和细菌的启动子序列。特别的是,该工具是以galaxy为载体的网页工具。galaxy可以本地化然后针对自己的需求进行任意的改装。但是该工具使用会略微复杂,需要在get_data—upload file模块中先上传文件,然后在Phage Annotation—Phage Promoter模块中选择刚才上传的文件对数据进行预测。
    另外还需要设置噬菌体家族,噬菌体物种等信息,还可以选择使用的算法(ANN/SVM两种算法)。我认为假如不了解的话不可以随便选择,因为机器学习训练使用的数据及不对应可能导致预测结果的误差。
    注:该工具似乎一次只可以分析一条fasta文件(python中的biopython脚本使用的是SearchIO.read而不是parse导致的),一次分析多条序列会导致错误出现。

    输出的示例结果如下:
    在这里插入图片描述

    BacPP

    网址:http://www.bacpp.bioinfoucs.com/home,该工具是一个σ特异的启动子预测工具。该工具主要是针对于大肠杆菌的细菌种类,预测的准确性分别为

    • sigma 24: 86.9%;
    • sigma 28: 92.8%;
    • sigma 32: 91.5%;
    • sigma 38: 89.3%;
    • sigma 54: 97.0%;
    • sigma 70: 83.6%.

    注:该工具需要注册,且注册工具做的确实很low。

    iPro54-PseKNC(2014发表)

    网址:http://lin-group.cn/server/iPro54-PseKNC
    针对于σ54因子的启动子预测,通过上传fasta文件或者粘贴fasta文件对序列进行分析,该工具将会对每一个位置都进行分析,阳性阴性都列出来,阳性的结果用红色标注出来了。并且结果里对序列没有用fasta的ID进行标注,只是利用1,2,3…标注出来了。

    iPro70-PseKNC(2019发表)

    网址:http://lin-group.cn/server/iPro70-PseZNC
    针对于σ70因子的启动子预测,该工具尽量在转录起始位点上游的100bp范围以内进行预测。通过上传fasta文件或者粘贴fasta文件对序列进行分析,该工具将会对每一个位置都进行分析,阳性阴性都列出来,阳性的结果用红色标注出来了。并且结果里对序列没有用fasta的ID进行标注,只是利用1,2,3…标注出来了。

    BDGP

    网址:http://www.fruitfly.org/seq_tools/promoter.html,该工具是一个网络工具,使用比较方便,可以粘贴一条序列或者多条fasta序列。同时可以选择真核和原核物种种类。该工具的训练集使用的是人和果蝇的数据,不知道是如何对原核生物的启动子进行预测的,可以作为一个选项。输出的结果是一个按照位置打分的。
    结果示例:
    在这里插入图片描述

    BPROM

    网址:http://www.softberry.com/berry.phtml?topic=bprom&group=programs&subgroup=gfindb,该工具主要是针对σ70因子进行预测。预测准确率号称80%以上。是一个简单地网页格式,输入数据可以粘贴fasta序列也可以上传fasta文件。
    示例结果如下:
    在这里插入图片描述
    注:上传了三条序列,仅显示了一条的结果,可能只能一次分析一条序列

    CNNPromoter_b

    网址:http://www.softberry.com/berry.phtml?topic=cnnpromoter_b&group=programs&subgroup=deeplearn,是一个简单地网页工具,输入数据可以粘贴fasta序列也可以上传fasta文件。工具分为两个模型:Escherichia coli(大肠杆菌)和Bacillus subtilis (芽孢杆菌) 。
    示例结果:
    在这里插入图片描述
    该工具同样是上传三条序列,仅获得了一条序列的结果。

    网址:http://genome2d.molgenrug.nl/g2d_pepper_promoters.php,一个简单地网页工具,直接粘贴fasta序列即可,该网页工具不可以处理太多数据,处理时间超过5分钟之后会终止。

    Promoter 2.0

    网址:http://www.cbs.dtu.dk/services/Promoter/
    这个网站引用的文章为1999年发表的,可以在线对启动子进行分析(只可以分析脊椎动物的启动子)。主要是针对于Pol III的启动子进行预测。

    Berkeley Drosophila Genome Project

    在线预测系统,可以选择对真核或者是原核的种类分别进行预测。输入格式为fasta文件(直接复制粘贴序列)。该工具可以设置数据的可靠度(0-1),根据该可靠度来对预测的启动子进行筛选。

    展开全文
  • 实际,DNA序列可以按六种框架阅读和翻译(每条链三种,对应六种不同的三联密码子)。 所以,我们说ORF只是理论的编码区,与真实的情景可能并不一样。 而CDS是检查cDNA后得到的编码组合序列,和实际情景比较...

    ORF和CDS的区别

    ORF的英文展开是open reading frame(开放阅读框)。

    CDS的英文展开是coding sequences (编码区)。

    CDS:DNA转录成mRNA,mRNA经剪接等加工后翻译出蛋白质,所谓CDS就是与蛋白质序列一 一对应的DNA序列,且该序列中间不含其它非该蛋白质对应的序列,不考虑mRNA加工等过程中的序列变化,总之,就是与蛋白质的密码子完全对应.

    ORF:理论上的氨基酸编码区,一般是在分析DNA核酸图谱中(主要是利用电脑程序)得到的。程序会自动在DNA序列中寻找启动因子(ATG或AUG),然后按每3个核酸一组,一直延伸寻找下去,直到碰到终止因子(TAA或TAG)。程序把这个区域当成ORF区,认为理论上可以编码一组氨基酸。

    但问题是,在一个整体核酸序列中寻找ATG并不靠谱。因为寻找到的ATG很可能是两个氨基酸编码片段的尾和头的混合体。比如AACGCATGCAGC.

    看上面这个小序列,如果以T为中心,会有三种编码组合的可能。即

    (1)ATG(T在中心)电脑程序发现的启动因子的组合

    (2)CAT(T在最右侧)

    (3)TGC(T在最左侧)本例中实际核酸编码的组合。

    这就是ORF三种框架的来源。实际上,DNA序列可以按六种框架阅读和翻译(每条链三种,对应六种不同的三联密码子)。

    所以,我们说ORF只是理论上的编码区,与真实的情景可能并不一样。

    而CDS是检查cDNA后得到的编码组合序列,和实际情景比较接近。

     

    启动子与起始密码子、终止子与终止密码子有何区别?   
    启动子与起始密码子、终止子与终止密码子看起来似乎差不多,实际上却是两组截然不同的概念,根本就没有共同点。

    简单地说,启动子和终止子都是一段特殊的DNA序列,属于基因的非编码区,分别位于编码区的上游和下游,负责调控基因的转录。而起始密码子和终止密码子都是mRNA上的三联体碱基序列,分别决定翻译的起始和终止。 
    启动子——DNA分子上能与RNA聚合酶结合并形成转录起始复合体的区域,在许多情况下,还包括促进这一过程的调节蛋白的结合位点。  

    强启动子(strong promoter),指对RNA聚合酶有很高亲和力的启动子,它能指导合成大量的mRNA。
    起始密码子——蛋白质翻译过程中被核糖体识别并与起始tRNA(原核生物为甲酰甲硫氨酸tRNA,真核生物是甲硫氨酸tRNA)结合而作为肽链起始合成的信使核糖核酸(mRNA)三联体碱基序列。大部分情况下为AUG,原核生物中有时为GUG等。  
    终止子——转录过程中能够终止RNA聚合酶转录的DNA序列。使RNA合成终止。
    终止密码子——蛋白质翻译过程中终止肽链合成的信使核糖核酸(mRNA)的三联体碱基序列。一般情况下为UAA、UAG和UGA,它们不编码氨基酸。

     

    转录因子:转录因子(transcription factor)是一群能与基因5`端上游特定序列专一性结合,从而保证目的基因以特定的强度在特定的时间与空间表达的蛋白质分子。

    转录因子的结合位点(transcription factor binding site,TFBS)是转录因子调节基因表达时,与基因模板链结合的区域。按照常识,转录因子(transcription factor,TF)的结合位点一般应该分布在基因的前端,但是,新的研究发现,人21和22号染色体上,只有22%的转录因子结合位点分布在蛋白编码基因的5'端。

     

    UTR(Untranslated Regions)即非翻译区,是信使RNA(mRNA)分子两端的非编码片段。

    5'-UTR从mRNA起点的甲基化鸟嘌呤核苷酸帽延伸至AUG起始密码子,3'-UTR从编码区末端的终止密码子延伸至多聚A尾巴(Poly-A)的前端。

     

    非编码区和编码区、启动子和终止子

     

    非编码区和编码区、启动子和终止子

     

    非编码区和编码区、启动子和终止子

     

    参考:

    非编码区和编码区、真核生物的启动子、终止子(好)

    启动子分析 -- 转录因子结合位点

    展开全文
  • 怎么选取U-Boot的版本呢?够用就行。 本文芯片选择S5PV210,U-Boot版本选择u-boot-2010.12版本。 U-Boot两个文件夹 U-Boot的源码文件中,先简单介绍两个目录: 目录U-boot/arch/arm/cpu/...

    U-Boot

    U-Boot的版本选择

    U-Boot的下载地址:/pub/u-boot的索引

    进入到U-Boot的下载页面,发现U-Boot的版本众多:

    那怎么选取U-Boot的版本呢?够用就行。

    本文芯片选择S5PV210,U-Boot版本选择u-boot-2012.10版本。

    U-Boot两个文件夹

    在U-Boot的源码文件中,先简单介绍两个目录:

    目录U-boot/arch/arm/cpu/armv7

    arch目录是ARM公司设计的内核代码,即CPU部分的代码。

    在这个目录下,start.S文件是整个U-Boot的入口。也就是说,整个U-Boot运行的第一句代码就是从start.s的第一句开始的

    目录U-boot/board/samsung

    board目录是三星等半导体公司设计的代码部分,主要是IIC、USB、串口等各种外设的代码。

    其中,goni的核心CPU正是S5PV210。

    U-Boot的start.S

    既然,start.S文件是整个U-Boot的入口,那么就从start.S开始。由于start.S的内容较长,接下来就将其分割开来进行解释。

    #include <asm-offsets.h>
    #include <config.h>
    #include <version.h>
    #include <asm/system.h>
    #include <linux/linkage.h>
    

    头文件部分,到哪里找这些头文件呢?

    两个目录下:U-boot/includeU-boot/arc/arm/include。为什么是这两个目录呢?因为在makefile的配置文件中指定了,之后讲解makefile的时候再进行讲解。接下来:

    .globl _start		//.globl指示告诉汇编器,_start是一个全局符号
    _start: b	reset				//跳转到reset符号处
    	ldr	pc, _undefined_instruction				//未定义指令异常
    	ldr	pc, _software_interrupt				//软中断,Linux系统调用
    	ldr	pc, _prefetch_abort					//预取址中止,取不到下一条指令
    	ldr	pc, _data_abort
    	ldr	pc, _not_used
    	ldr	pc, _irq						//中断
    	ldr	pc, _fiq						//快中断
    #ifdef CONFIG_SPL_BUILD
    _undefined_instruction: .word _undefined_instruction
    _software_interrupt:	.word _software_interrupt
    _prefetch_abort:	.word _prefetch_abort
    _data_abort:		.word _data_abort
    _not_used:		.word _not_used
    _irq:			.word _irq
    _fiq:			.word _fiq
    _pad:			.word 0x12345678 /* now 16*4=64 */
    #else
    _undefined_instruction: .word undefined_instruction
    _software_interrupt:	.word software_interrupt
    _prefetch_abort:	.word prefetch_abort
    _data_abort:		.word data_abort
    _not_used:		.word not_used
    _irq:			.word irq
    _fiq:			.word fiq
    _pad:			.word 0x12345678 /* now 16*4=64 */
    #endif	/* CONFIG_SPL_BUILD */
    
    .global _end_vect			//异常向量和处理部分结束
    _end_vect:
    
    	.balignl 16,0xdeadbeef			//下一句需要16字节对齐,若没有满,就将0xdeadbeef填入,直至对其
    

    .global声明_start为全局符号,_start就会被链接器链接到,也就是链接脚本中的入口地址了。之后是一系列ARM的异常向量表。8种异常分别占用4个字节,因此每种异常入口处都填写一条跳转指令,直接跳转到相应的异常处理函数中,reset异常是直接跳转到reset函数,其他7种异常是用ldr将处理函数入口地址加载到pc中

    再下面出现了CONFIG_SPL_BUILD是否被定义的判断。SPL是什么呢?

    这就牵扯到S5PV210的启动机制:

    可能直接看起来有些晦涩,这就和它的“前辈”S5C6410有些渊源了:

    S5C6410上电之后,会先启动片内iROM(芯片固化的启动程序)的程序,这部分程序主要完成初始化时钟、看门狗等外围器件,并将Booting Device的头4k的内容(BL1)加载到片内RAM中运行。BL1的任务是配置好SDRAM,再将BootLoader的大部分(BL2,200k)加载到SDRAM,最后将程序跳转到BL2进行运行。BL2的任务是将Booting Device中的操作系统镜像、根文件系统加载到SDRAM中,并跳转到OS的入口处

    这里解析一下:片内RAM、SDRAM、NOR FLASH、NAND FLASH:

    • 片内RAM,速度最快,CPU存取总线速度最快,静态存储器。但造价高而且是易失的(断电不保存数据),用于CPU数据指令暂存,位置在内核;SDRAM,属于动态RAM,位置在内核之外,甚至片外。速度比静态RAM慢,也是易失的,用于系统计算数据/指令存储。
    • NAND FLAHS、NOR FLASH等属于FLASH,断电可保存数据,用于存储程序代码和常量数据。两者的区别是:应用程序可以直接在NOR FLASH内运行,不必到RAM中运行,因此数据传输效率高(不需要传输),但是写入和擦除速度慢;NAND FLAHS存储密度高,并且写入和擦除的速度也很快,但不能直接运行应用程序。

    S5PV210相比较于S5C6410,片内RAM增加到了96k,这是一种好意,本想增加片内RAM可以直接一次性将BootLoader的BL1和BL2加载运行。但是奈何BootLoader还是太大了,96k还是不够的。

    但是U-Boot不买三星的账,就将U-Boot做成两个镜像,u-boot-spl.bin(16k)和u-boot.bin(200k)。两个镜像的启动方式和S5C6410的方式差不多,小的BootLoader配置好SDRAM,并加载大的BootLoader;大的BootLoader加载内核和根文件系统。

    这就是SPL的含义。

    也就是说,如果CONFIG_SPL_BUILD定义了,即处于BL1的阶段,此时发生_undefined_instruction(未定义指令异常),那么就将_undefined_instruction赋给pc,也就是跳转到_undefined_instruction本身,即死循环;如果CONFIG_SPL_BUILD没有定义,即处于BL2的阶段,此时发生_undefined_instruction(未定义指令异常),那么就将undefined_instruction赋给pc,也就是跳转到undefined_instruction的部分。

    接下来:

    /*************************************************************************
     *
     * Startup Code (reset vector)
     *
     * do important init only if we don't start from memory!
     * setup Memory and board specific bits prior to relocation.
     * relocate armboot to ram
     * setup stack
     *
     *************************************************************************/
    
    .globl _TEXT_BASE
    _TEXT_BASE:
    	.word	CONFIG_SYS_TEXT_BASE		//定义的宏,U-Boot被拷贝到SDRAM中的起始地址
    
    /*
     * 计算一些段的标号
     */
    .globl _bss_start_ofs
    _bss_start_ofs:
    	.word __bss_start - _start
    
    .global	_image_copy_end_ofs
    _image_copy_end_ofs:
    	.word 	__image_copy_end - _start
    
    .globl _bss_end_ofs
    _bss_end_ofs:
    	.word __bss_end__ - _start
    
    .globl _end_ofs
    _end_ofs:
    	.word _end - _start
    
    #ifdef CONFIG_USE_IRQ					//如果使用中断IRQ(肯定用到的)
    /* IRQ stack memory (calculated at run-time) */
    .globl IRQ_STACK_START					//表示堆栈指针开始的地方
    IRQ_STACK_START:
    	.word	0x0badc0de					//此时不知道堆栈在哪里,就放入没有意义的非法地址,运行时该值会被修改
    
    /* IRQ stack memory (calculated at run-time) */
    .globl FIQ_STACK_START
    FIQ_STACK_START:
    	.word 0x0badc0de
    #endif
    
    /* IRQ stack memory (calculated at run-time) + 8 bytes */
    .globl IRQ_STACK_START_IN
    IRQ_STACK_START_IN:
    	.word	0x0badc0de
    

    前面看了这么多,现在终于进入到了reset符号处了:

    reset:
    	bl	save_boot_params		//跳转到save_boot_params符号处
    	/*
    	 * set the cpu to SVC32 mode
    	 */
    	mrs	r0, cpsr				//将cpsr寄存器的值读到r0中
    	bic	r0, r0, #0x1f				//清除cpsr寄存器的M0~M4位
    	orr	r0, r0, #0xd3			//禁止IRQ,FIQ中断,并将处理器置于SVC模式
    	msr	cpsr,r0				//将r0的内容写入cpsr寄存器
    

    真正的初始化从这里开始了。其实在CPU一上电以后就是跳到这里执行的,更改处理器模式为SVC模式。这就需要查看ARMv7的芯片资料了:

    其中,M[4:0]是对处理器模式进行配置的位:

    也就是配置成10011。同理需要配置禁止IRQFIQ中断,即I、F位为1。这样算来,需要给的值为1101 0011,即0xD3。接着:

    /*
     * Setup vector:
     * (OMAP4 spl TEXT_BASE is not 32 byte aligned.
     * Continue to use ROM code vector only in OMAP4 spl)
     */
    #if !(defined(CONFIG_OMAP44XX) && defined(CONFIG_SPL_BUILD))		//不是OMAP44XX芯片,宏定义为真
    	/* Set V=0 in CP15 SCTRL register - for VBAR to point to vector */
    	mrc	p15, 0, r0, c1, c0, 0	@ Read CP15 SCTRL Register			//将SCTRL的值赋给r0(SCTRL的值通过0,c1,c0,0查表来确定)
    	bic	r0, #CR_V		@ V = 0
    	mcr	p15, 0, r0, c1, c0, 0	@ Write CP15 SCTRL Register			//将r0写到SCTRL里
    
    	/* Set vector address in CP15 VBAR register */
    	ldr	r0, =_start
    	mcr	p15, 0, r0, c12, c0, 0	@Set VBAR
    #endif
    

    这部分代码通过对协处理器CP15进行操作,设置了处理器的异常向量入口地址_start。这是因为ARM默认的异常向量表入口在0x0地址,然而S5PV210中0x0地址存放的是IROM,不可修改,自然不可能存放异常向量表,所以需要修改异常向量表入口,将它们映射到其他位置上去。

    通过设置CBAR寄存器的内容(_start的地址),一旦出现异常,就会到该寄存器填写的地址中去。

    到这里,先总结一下之前完成的内容,都是跟异常有关:

    • 初始化异常向量表
    • 设置CPU SVC模式,关中断
    • 配置CP15,设置异常向量入口

    接下去:

    	/* the mask ROM code should have PLL and others stable */
    #ifndef CONFIG_SKIP_LOWLEVEL_INIT
    	bl	cpu_init_cp15
    	bl	cpu_init_crit
    #endif
    

    这两句跳转都是比较重点的内容,需要进行分析:

    /*************************************************************************
     *
     * cpu_init_cp15
     *				//配置CP15,关闭的cache、MMU、TLBs。icache视情况
     * Setup CP15 registers (cache, MMU, TLBs). The I-cache is turned on unless
     * CONFIG_SYS_ICACHE_OFF is defined.
     *
     *************************************************************************/
    ENTRY(cpu_init_cp15)
    	/*
    	 * Invalidate L1 I/D
    	 */
    	mov	r0, #0			@ set up for MCR
    	mcr	p15, 0, r0, c8, c7, 0	@ invalidate TLBs			//失效TLBs
    	mcr	p15, 0, r0, c7, c5, 0	@ invalidate icache			//失效icache
    	mcr	p15, 0, r0, c7, c5, 6	@ invalidate BP array		//失效分支预测
    	mcr     p15, 0, r0, c7, c10, 4	@ DSB				//数据同步屏障
    	mcr     p15, 0, r0, c7, c5, 4	@ ISB				//指令同步屏障
    
    	/*
    	 * disable MMU stuff and caches
    	 */
    	mrc	p15, 0, r0, c1, c0, 0			//将SCTLR的值赋给r0
    	bic	r0, r0, #0x00002000	@ clear bits 13 (--V-)		//清零第13位,异常向量映射到0x00000000
    	bic	r0, r0, #0x00000007	@ clear bits 2:0 (-CAM)		//失效dcache,失效对齐检查,禁用MMU
    	orr	r0, r0, #0x00000002	@ set bit 1 (--A-) Align			//使能对齐检查模式
    	orr	r0, r0, #0x00000800	@ set bit 11 (Z---) BTB				//使能分支预测
    #ifdef CONFIG_SYS_ICACHE_OFF						//该宏被定义
    	bic	r0, r0, #0x00001000	@ clear bit 12 (I) I-cache	
    #else
    	orr	r0, r0, #0x00001000	@ set bit 12 (I) I-cache		//使能icache
    #endif
    	mcr	p15, 0, r0, c1, c0, 0			//将r0的值赋给SCTLR
    	mov	pc, lr			@ back to my caller					//子过程运行结束,跳转回去
    ENDPROC(cpu_init_cp15)
    

    cpu_init_cp15函数是通过配置CP15协处理器相关寄存器来进行一些设置。设置内容主要是失效TLBs(这与MMC有关,后面再讲)、失效icache、失效BP array

    什么是icache

    缓存(cache)是主存(DARAM)和CPU之间设置的一个高速的、容量相对较小的存储器,把正在执行的指令地址附近的一部分指令或数据从主存调入这个存储器,供CPU在一段时间内使用,以提高程序的运行速度

    出于对简化设计的考虑,也为了提高系统的性能,设计采用了指令Cache(icache)、数据Cache(dcache)分开的方式。在icache中存储有微处理器需要的指令,在微处理器的取指阶段,通过程序计数器PC提供给icache的地址,微处理器可以获取需要的指令;而dcache则是作为一个数据的存储,并提供对于Load/Store指令所要操作地址的数据,它地址则来自于ALU运算的结果。

    不理解的可以参考博文:cache为什么分为i-cache和d-cache以及Cache的层次设计

    什么是BP array

    BP,Branch Predictor,即分支预测。条件分支指令通常具有两路后续执行分支。即不采取跳转,顺序执行后面紧挨JMP的指令;以及采取跳转,到另一块程序内存去执行那里的指令。是否条件跳转,只有在该分支指令在指令流水线中通过了执行阶段才能确定。

    如果没有分支预测器,处理器将会等待分支指令通过了指令流水线的执行阶段,才把下一条指令送入流水线的第一个阶段——取指令阶段或者将后续流水线全部清空。这种技术叫做流水线停顿、流水线冒泡。

    什么是DSBISB

    • DMB:数据存储器隔离。DMB 指令保证:仅当所有在它前面的存储器访问操作都执行完毕后,才提交在它后面的存储器访问操作
    • DSB:数据同步隔离。比 DMB 严格:仅当所有在它前面的存储器访问操作都执行完毕后,才执行在它后面的指令(亦即任何指令都要等待存储器访问操作);
    • ISB:指令同步隔离。最严格:它会清洗流水线,以保证所有它前面的指令都执行完毕之后,才执行它后面的指令

    需要注意到,为什么U-Boot需要失效dcache、禁止MMU,却不失效icache

    Cache是CPU内部的缓存,它的作用是将常用的数据和指令放在CPU内部。Cache是通过CP15管理的,刚上电的时候,CPU还不能管理Cache。上电的时候icache可关闭,也可不关闭,但dcache一定要关闭,否则可能导致刚开始的代码里面,去取数据的时候,从dcache里面取,而这时候DARAM中数据还没有过来,导致数据预取异常 。而在使用MMU之前要进行一系列的初始化,并且过程比较复杂,并且U-Boot暂时用不到所以要关闭它。

    接下来:

    #ifndef CONFIG_SKIP_LOWLEVEL_INIT
    /*************************************************************************
     *
     * CPU_init_critical registers
     *
     * setup important registers
     * setup memory timing
     *
     *************************************************************************/
    ENTRY(cpu_init_crit)
    	/*
    	 * Jump to board specific initialization...
    	 * The Mask ROM will have already initialized
    	 * basic memory. Go here to bump up clock rate and handle
    	 * wake up conditions.
    	 */
    	b	lowlevel_init		@ go setup pll,mux,memory
    ENDPROC(cpu_init_crit)
    #endif
    

    这部分的内容,跳转到lowlevel_init符号处,这各部分是在另一个文件中定义的。后面的内容在下次博文中讲解。

    展开全文
  • 以太坊搭建自己的私有

    千次阅读 2018-03-26 17:32:43
    公有:世界任何一个人都可以参与的区块链。用户可以查看,可以发送交易,也可以参与保持数据一致性的运算等。 私有:完全的私有是指写权限是由一个人或一个单个组织控制的。私有的读权限是可以公开的...

      首先介绍一下什么是公有链和私有链

     

    公有链:世界上任何一个人都可以参与的区块链。用户可以查看,可以发送交易,也可以参与保持数据一致性的运算等。

    私有链:完全的私有链是指写权限是由一个人或一个单个组织控制的链。私有链的读权限是可以公开的或者是有限度的在一定范围公开的。比如私有链可以用在数据库的管理,公司内部的管理等。

    联盟链:联盟链是指,数据一致性的运算被预先设定好的几个节点共同控制的链。比如,有15家银行组成了一个财团链,在这个链上的每一个节点的每一次的操作都需要10个节点的共同签名才能被验证。这区快链上的读权限可能是公开的,也有可能是部分公开的。

     

    这genesis(创世)区块是区块链的起点,是它的第一块区块,0号区块,唯一一个没有前任的区块。这个协议确保了没有其他节点会和你的节点的区块链版本一致,除非它们的创世区块和你的一模一样。通过这种方法,你就可以创建任意多的私有区块链。

    如:CustomGenesis.json
    {

        "nonce": "0x0000000000000042",  

       "timestamp": "0x0",

     "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",

        "extraData": "0x0", 

        "gasLimit": "0x8000000",   

        "difficulty": "0x400",

     

    "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",

     

        "coinbase": "0x3333333333333333333333333333333333333333",  

       "alloc": {     }

    }

    Mix hash
    一个256位的哈希值,和nonce配合,一起用来证明在区块链上已经做了足够的计算量(工作证明)。这个nonce 和 mixhash 的组成,必须满足一个在黄皮书中所描述的数学上的条件,黄皮书 4.3.4。
    Nonce
    一个64位的哈希值,和mixhash配合,一起用来证明在区块链上已经做了足够的计算量(工作证明)
    Difficulty
    定义挖矿的目标,可以用上一个区块的难度值和时间戳计算出来,值越高,矿工越难挖到区块
    Alloc 预先填入一些钱包和余额
    Coinbase
    160位的钱包地址。在创世区块中可以被定义成任何的地址,因为当每挖到一个区块的时候,这个值会变成矿工的etherbase地址
    Timestamp  一个unix的time()函数的输出值,时间戳
    extraData  32字节长度,可以为私有链留下一些信息,如你的姓名等,用以证明这个私有链是你创建的

    gasLimit   当前链,一个区块所能消耗的gas上限

     

    创建私有链中用到的命令行参数

    --nodiscover
    添加这个参数,确保没有人能发现你的节点。不然的话,可能有人无意中会链接到你的私有区块链。

    --maxpeers 0

    使用maxpeers 0,如果你不希望其他人连接到您的测试链。当然,您也可以调整这个数,如果你知道有多少同伴会连接你的节点

    --rpc

    在你的节点上激活RPC接口。这参数在geth中默认启用。

    --rpcapi "db,eth,net,web3"

    这个命令描述哪些接口可以通过RPC来访问,默认情况下,geth开启的是web3接口。

    --rpcport "8080"

    将端口号设置成8000以上的任何一个你网络中打开的端口。默认是8080。

    --rpccorsdomain http://chriseth.github.io/browser-solidity/

    设置可以连接到你的节点的url地址,以执行RPC客户端的任务。最好不要使用通配符 * ,这样将允许任何url都可以链接到你的RPC实例。

    --datadir "/home/TestChain1"

    私有链的数据目录,确保与公共以太坊链的数据目录区分开来。

    --port "30303"

    这是“网络监听的端口”,您可以用它手动的和你的同伴相连。

    --identity "TestnetMainNode"

    为你的节点设置一个ID。用于和你们的一系列同伴进行区分。

     

    接下来来创建自己的私有链

    用cmd打开命令行

    创建上面的创世区块文件CustomGenesis.json,并把内容paste进去,如:

    然后创建自己的目录文件,如:F:\chains\TestChain3 ,然后需要在此文件里再创建一个chaindata的子文件夹,把创建的创世区块文件CustomGenesis.json放进去里面。然后在cmd指令中,输入

    geth --identity "mydev" --rpc --rpccorsdomain "*" --datadir "F:\chains\TestChain3\chaindata" --rpcapi "db,eth,net,web3,admin,miner,personal,rpc" --networkid 100 init "./CustomGenesis.json"

    或者我们可以创建一个init.bat文件,把上面的命令行语句放进去

    输入好后在命令行窗口上按回车运行,或者直接双击这个init.bat文件,私有链就创建了。

    然后,为了方便下次打开私有链,我们再创建一个start.bat文件,在里面输入

    然后我们双击运行,出现

    表示启动成功,然后运行我们的Mist客户端,出现

    注意右上角有个PRIVATE-NET的标志,表示是私有链,然后LAUNCH进去客户端,我们就进入私有链了。

    进去之后我们可以创建几个新账户,

    在 F:\chains\TestChain3\chaindata\keystore 上可以看到这些账户

    然后来挖一下矿,在上面运行start.bat后的命令行窗口(注意运行时不要关闭),输入miner.start(),其开始挖矿

    就表示开始挖到矿了,返回我们的Mist客户端,可以看到账户的以太币数量不断增加

    我们可以在这个创建的这些账户之间进行以太币交易操作,或者构建上一篇讲的多重钱包签名合约,但由于是在私有链上,所以要使交易运行完成,就要就是挖矿,将这些交易进行打包成区块加入到区块链上。

    大家可以操作玩玩,这主要是在一台主机上,下面再讨论一下如何在两台主机加入到同一私有链中,然后进行交易操作。

     

     

    展开全文
  • 私有和联盟的机会与挑战

    万次阅读 2019-05-10 10:59:02
    以太坊平台的构想最早是 2013 年 11 月提出来的,当时的目标是创建一个 更通用的区块链平台——通过工作量证明机制(或最终转换成权益证明机制)实 现了公共经济共识的概念,并将其与状态丰富的图灵完备虚拟机的抽象...
  • 以太坊平台评估 私有和联盟的机会与挑战 作者:Vitalik Buterin  翻译:万向区块链实验室/ChinaLedger 联盟  排版/校对:区块链铅笔(ChainB.com) (注:本文属于学习资料,请勿用于商业用途。转载请注明作者与...
  • 的基本挑战

    千次阅读 2019-05-12 08:02:36
    的基本挑战: Part 1 -图片来源:http://www.englishblog.com/2012/02/cartoon-murdoch-walking-on-thin-ice.html#.Wi17n7A-d24- 毫无疑问,区块链技术拥有巨大的潜力。 分布式的交易、市场预测,以及资产...
  • Spark Streaming应用启动过程分析

    千次阅读 2016-12-20 23:44:25
    本文为SparkStreaming源码... 调用StreamingContext.start方法后,进入JobScheduler.start方法中,各元素start方法的调用顺序如下:private var eventLoop : EventLoop[JobSchedulerEvent] = null val listenerBus
  • 2014年的618显得和以往任何店庆促销日都不同,不仅仅是因为电子商务本身中国不断飞速发展对京东系统带来的挑战,更为重要的是2014年5月22日刚走入美国纳斯达克殿堂的京东聚集了最耀眼的光芒,能不能保持这样的光芒...
  • 本文介绍arm核cpu裸机启动过程。cpu reset之后,pc会指向reset vector (地址位于0x00000000 or 0xFFFF0000),此时的代码需要做以下几件事情: 多核系统中,让非主要核睡眠。 初始化异常向量 初始化memory,包括...
  • 供应金融深度解析

    千次阅读 2017-11-10 15:29:26
    供应金融是基于真实的交易背景开展的金融活动,实质是帮助内成员盘活流动资产。国内供应金融业务倾向性:预付类>应收类>存货类。预付类产品改善了核心企业的财务报表,加速了资金回笼,并将企业间的商业信用...
  • 前面 美团配送自成立以来,业务经历了多次跨越式的发展。业务的飞速增长,对系统的整体架构和基础设施提出了越来越高的要求,同时也不断驱动着技术团队深刻理解业务、准确定位领域模型、高效支撑系统扩展。如何...
  • 组合栏:平板可以将状态栏和导航栏结合一起。 2.3通知 通知系统显示一些简要的信息,用户任何时候都可以从状态栏访问它们。它提供升级、提醒以及一些重要但不至于直接打断用户的信息。将状态栏...
  • 记一次DataNode慢启动问题

    千次阅读 2016-01-13 10:27:52
    前言最近一段时间,由于机房需要搬迁调整,我们hadoop集群所受到的影响机器无疑是数量最多的,如何能最优的使机器从1个机房搬到另1个机房之后,对集群的数据和上面跑的业务造成尽可能小的影响或者说几乎没有影响....
  • 行情显示,WKC自昨日0点、7点左右经历两次...根据“玩客日记”的统计:截止2018年05月10日19:00,我们总计抓取315988个克账户12840119次交易、218964035.63克余额的数据,占到迅雷公布的已经挖矿产出343911780...
  • 分布式系统调用监控

    千次阅读 2018-10-15 20:53:02
    下图是一个典型的业务场景,从前端发起一个请求,到最后的业务完成,需要经过很多环节,这些环节可能都是分布式服务的方式提供,部署不同的服务器进行。而这种复杂的分布式服务场景下,为了定位问题、性能瓶颈...
  • Chrome启动参数最全集合

    万次阅读 2019-03-07 17:54:22
    翻译来自谷歌自动翻译,如果说明不清楚,自行查询。 序号 条件 说明 ...已经观察到,当文件读取与具有相同/prefetch:#参数的3个进程启动一致时,Windows预取器开始进程启动时批量发出读取...
  • 读:当前,B2B在线供应金融逐渐成为撬动B2B交易的...此背景下,电商门户、互联网+智库——中国电子商务研究中心启动了——“中国B2B在线供应金融典型企业案例研究”,目前已有包括:钢银电商、五阿哥、摩贝、找油
  • WINCE6.0+S3C2443的启动过程---内核启动

    千次阅读 2010-11-08 08:28:00
    LoongEmbedded(kandi)时间:2010.11.07类别:WINCE操作系统********************************LoongEmbedded********************************WINCE6.0+S3C2443系统启动过程我们知道是NBOOT用来引导EBOOT,...
  • linux启动和grub修复

    千次阅读 2018-01-04 19:24:43
    CentOS 5和6的启动流程linux组成 linux:是有kernel和+rootfs (linux内核加应用程序) kernel :进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能 rootfs: 程序和glibc(库) 库:函数计划,function,调用...
  • 网络传送对象的字节序列 很多应用中,需要对某些对象进行序列化,让他们离开内存空间,入住到物理磁盘方便长期保存,比如session对象,当有大量用户并发访问的时候可能会出现10万个session对象,内存吃不消,...
  • linux内核启动过程分析

    千次阅读 2018-10-30 09:36:45
    kernel的Makefile比uboot的Makefile要复杂,这里不需要一行一行的详细分析,只需要关注配置编译过程需要用到的地方,其他的地方可以不管。 (1)Makefile开始定义了kernel的版本号,这个版本号很重要...
  • uboot启动流程和架构

    千次阅读 2017-02-01 15:52:04
    图中看到红色1,2,3,4,5,7,8,9的标号,下面分别说明每个过程: 1、启动入口: (1)确定链接脚本文件:根目录下Makefile下LDSCRIPT宏值,就是指定链接脚本(如:arch/arm/cpu/u-boot.lsds)路径的 (2)从...
  • 二、安装DBArtisan链接sybase数据库后,报缺少libct.dll和libcs.dll文件 Embarcadero DBArtisan就是统一的数据库管理工具,可以支持oracle,sybase,mssql,db2,informix等数据库,如果你经常操作多种数据库,哪么...
  • linux 系统启动过程分析

    千次阅读 2014-07-18 16:36:28
    Linux系统的一般启动过程通常划分为内核引导、内核启动和应用程序启动3个阶段,如下图所示(摘自:ARM 嵌入式LINUX系统 开发 8.2节) 第一阶段是目标板硬件初始化,解压内核映像,再跳转到内核映像入口。这...
  • 消息消费方式 Consumer分为两种,PullConsumer和PushConsumer。...PushConsumer,在启动后,Consumer客户端会主动循环发送Pull请求到broker,如果没有消息,broker会把请求放入等待队列,新消息...
  • pmon启动流程

    千次阅读 2012-12-25 11:57:04
    以龙芯2F CPU架构为研究背景,其基础分析了PMON的系统结构与工作流程,通过添加网络驱动程序,最终实现通过PMON加载Linux和VxWorks操作系统。进行必要的功能完善与性能优化,并经过严格的测试以排除可能存在的深...
  •  增加开机自启动的bin应用1.1 增加的源代码新建external\study,编译生成study,编译方式有两种(1) mmm external/study(2) make systemimage, device/qcom/common/base.mk下增加LIBCAMERA += study 1.2 ...
  • uboot的启动过程

    万次阅读 2007-12-11 10:47:00
    6.1.2 Bootloader的启动Linux系统是通过Bootloader引导启动的。一电,就要执行Bootloader来初始...比如,X86的复位向量高地址端,ARM处理器复位时从地址0x00000000取第一指令。嵌入式系统的开发板都要把板RO
  • 默认情况下,Windows 系统中启动一个进程会继承父进程的令牌。如果父进程是管理员权限,那么进程就是管理员权限;如果父进程是标准用户权限,那么进程也是标准用户权限。 我们也知道,可以使用一些方法为自己...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 134,693
精华内容 53,877
关键字:

启动子在那条链上