- 博客(96)
- 资源 (16)
- 收藏
- 关注
转载 深入PCI与PCIe之二:软件篇
原文链接:https://zhuanlan.zhihu.com/p/26244141我们前一篇文章(深入PCI与PCIe之一:硬件篇 - 知乎专栏)介绍了PCI和PCIe的硬件部分。本篇主要介绍PCI和PCIe的软件界面和UEFI对PCI的支持。PCI/PCIe软件界面1。配置空间PCI spec规定了PCI设备必须提供的单独地址空间:配置空间(configuration spac...
2020-02-22 18:24:42
846
转载 深入PCI与PCIe之一:硬件篇
PCI总线和设备树是X86硬件体系内很重要的组成部分,几乎所有的外围硬件都以这样或那样的形式连接到PCI设备树上。虽然Intel为了方便各种IP的接入而提出IOSF总线,但是其主体接口(primary interface)还依然是PCIe形式。我们下面分成两部分介绍PCI和他的继承者PCIe(PCI express):第一部分是历史沿革和硬件架构;第二部分是软件界面和UEFI中的PCI/PCe。...
2020-02-22 17:50:40
1253
转载 性能提升和 CoreLink CCI-500 简介
原文地址:Extended System Coherency - Part 3 – Increasing Performance and Introducing CoreLink CCI-500原作者:neilparris在本周,我们宣布推出旨在增强高端移动体验的全新IP套件。此套件的核心是ARM CoreLink CCI-500缓存一致性互联,它以率先获得市场成功的上一代互联为...
2019-04-09 13:56:39
4500
转载 实施、big.LITTLE、GPU 计算和企业级应用
原文地址:Extended System Coherency - Part 2 - Implementation, big.LITTLE, GPU Compute and Enterprise原作者:neilparris本文是关于硬件一致性系列博文中的第二篇。在第一篇博文中,我介绍了缓存一致性的基本信息:缓存一致性基本信息此部分探讨硬件缓存一致性的实施和用例。另有一个详述Co...
2019-04-09 11:50:15
487
转载 缓存一致性基本信息
原文地址:Extended System Coherency - Part 1 - Cache Coherency Fundamentals原作者:neilparris简介TechCon 2013的主题是“智能互联”,而在许多方面,硬件系统一致性是SoC中智能互联的一个重要部分。我在今年的演讲“移动等平台的扩展系统一致性”中介绍了缓存一致性的基本信息,探讨了相关实施,也研究了一些...
2019-04-09 11:43:10
407
转载 arm-trusted-firmware (ATF介绍)
1. 大致描述ATF提供了安全世界的参考实现软件[ARMv8-A],包括执行的[Secure Monitor] [TEE-SMC]异常级别 3(EL3)。它实现了各种 ARM 接口标准,如电源状态协调接口([PSCI]),可信板启动要求(TBBR,ARM DEN0006C-1)和[SMC 呼叫公约] [SMCCC]。尽可能代码旨在重用或移植到其他 ARMv8-A 型号和硬件平台。2. ...
2019-04-04 09:50:51
4430
转载 MBIST:用于嵌入式存储器的可测试设计技术
MBIST:用于嵌入式存储器的可测试设计技术 作者:牛风举,DFT应用工程师 明导(上海)电子科技有限公司 术可以自动实现存储器单元或阵列的RTL级内建自测试电路,MBIST的EDA工具支持多种测试算法的自动实现,可针对一个或多个内嵌存储器自动创建BIST逻辑,并完成BIST逻辑与存储器的连接,此外MBIST结构中还可包括故障自动诊断功能,方便了故障定位和开发针对性测试向量...
2018-10-22 15:00:09
1431
转载 PKI系统深入介绍
公钥基础设施(Public Key Infrastructure,简称PKI)是目前网络安全建设的基础与核心,是电子商务安全实施的基本保障,因此,对PKI技术的研究和开发成为目前信息安全领域的热点。本文对PKI技术进行了全面的分析和总结,其中包括PKI组成、证书认证机构CA、PKI应用、应用编程接口和PKI标准等,并对CA的开发做了简要分析。本文对PKI,特别是CA的开发、应用和普及具有一定的促进...
2018-10-18 17:49:16
707
转载 错误注入攻击总结(Fault Injection Attack)
1. 什么叫错误注入攻击错误注入攻击,指在密码芯片设备中通过在密码算法中引入错误,导致密码设备产生错误结果,对错误结果进行分析从而得到密钥。它比差分能量攻击(DPA,DifferentialPower Analysis)、简单能量攻击(SPA,SimplePower Analysis)、电磁分析攻击(EMA,ElectromagneticAnalysis)都更强大。攻击没有防护的RSA...
2018-10-18 16:17:05
6102
1
转载 TEE+SE、移动KEY等五种移动安全解决方案对比分析
来源:《中国信息安全》 作者:马存庆 刘宗斌 荆继武 2017/9/28 9:56:55 ■ 中国科学院数据与通信保护研究教育中心 马存庆 刘宗斌 荆继武 随着移动智能设备的快速普及,移动应用全方位地改变着网民的生活习惯,对人们的通信、社交、娱乐和购物等各方面产生重要影响。近年来,各类移动应用的用户规模和使用率均保持快速增长,电子商务类应用和娱乐类应用表现尤为突出,...
2018-10-17 15:33:39
4862
转载 GIC通用中断控制器
1. GIC简介操作系统中,中断是很重要的组成部分。有了中断系统才可以不用一直轮询(polling)是否有事件发生,系统效率才得以提高。一般在系统中,中断控制分为三个部分:模块、中断控制器和处理器。其中模块通常由寄存器控制是否使能中断和中断触发条件等;中断控制器可以管理中断的优先级等,而处理器则由寄存器设置用来响应中断。1.1 GIC结构作为 ARM 系统中通用中断控制器的是 GIC(...
2018-07-24 10:47:07
13136
转载 程序在内存中运行的奥秘
内存管理是操作系统的核心功能,无论对于开发者还是系统管理员内存管理的重要性都是不言而喻的。我会在接下来的几篇文章通过计算机的实际运行过程谈谈内存管理,当然在必要的时候我也会从底层原理去阐释这个问题。我们提到的概念是不局限于平台特性的通用概念,不过为了阐述这些概念我们选取的实例大多来源于Linux和基于x86架构的32位Windows操作系统。这篇文章,我们首先来看看程序是如何使用内存的。 ...
2018-07-24 08:41:45
1358
转载 堆、栈的地址高低? 栈的增长方向?
作者:RednaxelaFX链接:https://www.zhihu.com/question/36103513/answer/66101372来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 进程地址空间的分布取决于操作系统,栈向什么方向增长取决于操作系统与CPU的组合。不要把别的操作系统的实现方式套用到Windows上。x86硬件直接支持的栈确实...
2018-07-24 08:38:28
11112
转载 GCC 中的编译器堆栈保护技术
以堆栈溢出为代表的缓冲区溢出已成为最为普遍的安全漏洞。由此引发的安全问题比比皆是。早在 1988 年,美国康奈尔大学的计算机科学系研究生莫里斯 (Morris) 利用 UNIX fingered 程序的溢出漏洞,写了一段恶意程序并传播到其他机器上,结果造成 6000 台 Internet 上的服务器瘫痪,占当时总数的 10%。各种操作系统上出现的溢出漏洞也数不胜数。为了尽可能避免缓冲区溢出漏洞被攻...
2018-07-24 08:02:04
350
转载 行为级和RTL级的区别
转载自http://hi.baidu.com/renmeman/item/5bd83496e3fc816bf14215dbRTL级,register transfer level,指的是用寄存器这一级别的描述方式来描述电路的数据流方式;而Behavior级指的是仅仅描述电路的功能而可以采用任何verilog语法的描述方式。鉴于这个区别,RTL级描述的目标就是可综合,而行为级描述的目标就是实现特
2017-11-30 09:05:33
14907
转载 trust zone之我见
老板交待任务,这个星期我都在研究trust zone的东东,之前有看过代码,但没有深入了解!好吧,这次看来我要跟它杠上了。网上有很多资料,但很多讲得太抽象,至少对门外汉来说有些难以理解,我估计有些文单可能翻译过来的吧,有些拗口。在介绍trust zone之前!我们来看两个字,慢慢引导大家trust zone与之前的安全方式有何不同?
2016-12-19 21:41:37
650
转载 MMU和cache学习
本文转自:http://blog.youkuaiyun.com/chinesedragon2010/article/details/59223241. MMUMMU:memory management unit,称为内存管理单元,或者是存储器管理单元,MMU是硬件设备,它被保存在主存(main memory)的两级也表控制,并且是由协处理器CP15的寄存器1的M位来决定是enable
2016-11-18 21:15:28
412
原创 接口和抽象类有什么区别
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。 1.类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定,微软的自定义接口总是后带able字段,证明其是表述一类类“我能做。。。”.抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中. 2.接口基本上不具备
2016-08-19 09:34:55
327
原创 指针函数与函数指针的区别
1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。 当一个函数声明其返回值
2016-08-19 09:13:13
303
转载 常见排序算法小结
排序算法经过了很长时间的演变,产生了很多种不同的方法。对于初学者来说,对它们进行整理便于理解记忆显得很重要。每种算法都有它特定的使用场合,很难通用。因此,我们很有必要对所有常见的排序算法进行归纳。 我不喜欢死记硬背,我更偏向于弄清来龙去脉,理解性地记忆。比如下面这张图,我们将围绕这张图来思考几个问题。 上面的这张图来自一个PPT。它概括了数据结构中的所有常见
2016-08-14 12:43:45
349
转载 C++中的覆盖和隐藏
C++中的覆盖和隐藏,是个令人头疼的问题,下面写几点自己的认识。首先,参考c++高质量编程指南,给出覆盖的特征:覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。再给出隐藏的特征:“隐藏”是指派生类的函数屏蔽了与其同名的基类
2016-08-13 21:46:23
809
原创 new/delete和malloc/free的区别
一,malloc/free: void*malloc(size_t size):该函数分配了size个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。malloc 返回值的类型是void*,所以函数本身并不知道要申请的内存用来存储什么类型的数据。在调用malloc时一般需要显式地进行类型转换,将void * 转换成所需要的指针类型。
2016-08-13 21:45:12
275
转载 MMU、Cache、TLB 的作用
VM通过页表转换成PM,MMU、Cache、TLB在转换过程中发挥作用:(1)PTE和PA都在Cache或者Memory中:(2)将Cache和Memory拆开描述,PTE和PA是否在Cache中命中:(3)PTE在Cache或Memory中,但是PA不在Cache或Memory中,只能访问Disk:(
2016-08-13 21:43:12
1577
转载 linux内存映射
内存管理分为对连续物理内存区管理和非连续内存区管理,本文主要讲解连续的物理内存区管理的技术中所涉及到的内核线性地址空间映射的相关知识。涉及到的东西有:页框,管理区(高端内存,低端内存),高端内存映射等,这些知识是掌握伙伴系统算法和slab分配器的基础。一、页框 页框为物理内存分配的基本单元,现代32位计算机一般设置为4KB(见上文计算机内存寻址)。内核必须记录每个页框的当前
2016-08-13 21:42:03
505
转载 指针和引用的区别
C++中有几种复合类型,这里介绍引用和指针的区别 引用其实就是变量的别名,并且引用底层就用指针实现的,只不过引用跟初始化的变量已经绑定了,在作用域中不能再改变引用绑定的实体了。现按条列出指针和引用的区别: 1.引用是变量的别名,在定义的时候必须进行初始化,而指针可以先定义,再进行赋值int i,&j = i;int &j; //错误!必须初始化!int *j = &i;i
2016-08-13 21:40:23
295
转载 C++处理字符串的方法——字符串类与字符串变量
一、字符数组 C语言中可以设置一个二维数组,例如str[3][30],大小为3x30,即有3行30列,每一行可以容纳30个字符,可以把str[0],str[1],str[2]看做三个一维字符数组,它们各自有30个元素。 例如:有三个字符串,要求找出其中最大者(要求用函数调用)#include #include using namespace std;int main(){
2016-08-13 21:37:38
1682
转载 C++中关于指针的理解
一、指针 1. 指针的值是一个地址,通过间接寻址运算符*来区分地址与指针所指地址保存的值区分开。 一个变量的地址称为该变量的指针。 如果有一个变量是用来专门存放另一变量地址(即指针)的,则称它为指针变量。 要区分指针和指针变量!!! *实际上是运算符重载(C++中提及),表示指向。 例如: int *p,i; p = &i; p的值是i的地址,*p的值为i的值。
2016-08-13 21:36:47
910
转载 C++中自增自减运算符疑惑大全
一、有关前置与后置的区别#include using namespace std;int main(){ int i = 0,j; cout "对运算符优先级进行检验" << endl; cout "i = 0" "-i++\t=\t" << -i++ << endl; cout "i\t=\t" << i << endl; i = 0;
2016-08-13 21:35:32
887
转载 linux进程地址空间--vma的基本操作
在32位的系统上,线性地址空间可达到4GB,这4GB一般按照3:1的比例进行分配,也就是说用户进程享有前3GB线性地址空间,而内核独享最后1GB线性地址空间。由于虚拟内存的引入,每个进程都可拥有3GB的虚拟内存,并且用户进程之间的地址空间是互不可见、互不影响的,也就是说即使两个进程对同一个地址进行操作,也不会产生问题。在前面介绍的一些分配内存的途径中,无论是伙伴系统中分配页的函数,还是slab分配
2016-08-13 21:34:37
1536
转载 Linux内核中的内存管理浅谈 .
1。基本框架(此处主要谈页式内存管理)4G是一个比较敏感的字眼,早些日子,大多数机器(或者说操作系统)支持的内存上限都是这个数字。为什么呢?之所以说是早些日子,因为现在64位的计算机已经很多了,而对于32位的计算机而言,页式管理是这么进行的,逻辑地址格式如下:0 -11位:页内偏移OFFSET12-21位:页面表偏移PT22-31位:页面目录偏移PGD
2016-08-13 21:33:24
655
转载 如何在LINUX中获取进程中某个虚拟地址所在物理内存地址
/**伪代码,示例*32位地址,三级映射(没有pud_t),页面大小4KB*/unsigned long addr = 0x12345678;//要找的虚拟地址,用户空间所访问的地址unsigned long real_addr = 0x00;//要输出的地址struct task_struct *cur_task = get_current();//获取当前进程控制块
2016-08-13 21:31:38
2360
转载 Linux 虚拟内存和物理内存的理解
首先,让我们看下虚拟内存: 第一层理解1. 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构 2. 一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间,哪些数据在哪里,都由进程控制表中的task_struct记录,task_struct中记录中一条链表,记录中内存
2016-08-13 21:30:33
404
原创 内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理]
一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放4.另外还有一个专门放常量的地方。- 程序结束释放
2016-08-13 21:28:01
502
原创 C/C++ sort函数的用法
sort函数的用法做ACM题的时候,排序是一种经常要用到的操作。如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错。STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n)。使用这个函数,需要包含头文件。 这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,
2016-08-13 21:21:35
1329
原创 C++中 string 的用法大全
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。 首先,为了在我们的程序中使用string
2016-08-13 21:20:38
742
原创 C语言printf函数输出表达式中的计算顺序
Turbo C,VC++6.0都是按从右到左进行计算的,但注意自增和自减运算。 看下面一个例子:#include main(){ int i=8; printf%d, %d, %d, %dn",i,--i,i,i--); } 运行结果:7, 7, 8, 8为什么会有这样的结果呢?这就涉及到自增、自减运算符的问题了。++i i自增1后再参
2016-08-13 21:19:16
4762
原创 深入分析C++引用
背景在 c/c++ 中,访问一个变量只能通过两种方式被访问,传递,或者查询。这两种方式是:1. 通过值 访问 / 传递变量2. 通过地址 访问 / 传递变量 – 这种方法就是指针 除此之外没有第三种访问和传递变量值的方法。引用变量也就是个指针变量,它也拥有内存空间。最关键的是引用是一种会被编译器自动解引用的指针。很难相信么?让我们来看看吧。。。下面是一
2016-08-13 21:18:08
228
转载 Linux内存管理原理
1. 虚拟地址、物理地址、逻辑地址、线性地址 虚拟地址又叫线性地址。linux没有采用分段机制,所以逻辑地址和虚拟地址(线性地址)(在用户态,内核态逻辑地址专指下文说的线性偏移前的地址)是一个概念。物理地址自不必提。内核的虚拟地址和物理地址,大部分只差一个线性偏移量。用户空间的虚拟地址和物理地址则采用了多级页表进行映射,但仍称之为线性地址。2. DMA/HIGH_MEM/NROMA
2016-08-13 21:11:44
331
原创 Linux内核缺页
整个缺页异常的处理过程非常复杂,我们这里只简单介绍一下缺页涉及到的内核函数。 当CPU产生一个异常时,将会跳转到异常处理的整个处理流程中。对于缺页异常,CPU将跳转到page_fault异常处理程序中,该异常处理程序会调用do_page_fault()函数,该函数通过读取CR2寄存器获得引起缺页的线性地址,通过各种条件判断以便确定一个合适的方案来处理这个异常。
2016-08-13 19:07:02
816
原创 Linux程序加载过程
一个进程在内存中主要占用了以下几个部分,分别是代码段、数据段、BSS,栈,堆,等参数。其中,代码、数据、BSS的内容是可执行文件中对应的内容,加载程序并不是把它们的内容从可执行程序中填充到内存中,而是将它们的信息(基地址、长度等)更新到进程控制块(task_struct)中,当CPU第 一次实际寻址执行的时候,就会引起缺页中断,操作系统再将实际的内容从可执行文件中复制内容到物理内存中。
2016-08-13 16:56:11
4216
GMT 0011-2012 可信计算 可信密码支撑平台功能与接口规范.pdf
2020-07-03
画图工具visio_2013
2019-06-12
信息安全技术 信息系统安全等级保护基本要求
2017-10-17
信息安全等级保护管理办法
2017-10-17
SOC设计UML手册
2015-05-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人