空间数据

STM32内部FLASH介绍

China☆狼群 提交于 2019-11-28 04:51:52
一、介绍 首先我们需要了解一个内存映射: stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同。 RAM起始地址是0x2000 0000,结束地址是0x2000 0000加上芯片的RAM大小。不同的芯片RAM也不同。 Flash中的内容一般用来存储代码和一些定义为const的数据,断电不丢失, RAM可以理解为内存,用来存储代码运行时的数据,变量等等。掉电数据丢失。 STM32将外设等都映射为地址的形式,对地址的操作就是对外设的操作。 stm32的外设地址从0x4000 0000开始,可以看到在库文件中,是通过基于0x4000 0000地址的偏移量来操作寄存器以及外设的。 一般情况下,程序文件是从 0x0800 0000 地址写入,这个是STM32开始执行的地方,0x0800 0004是STM32的中断向量表的起始地址。 在使用keil进行编写程序时,其编程地址的设置一般是这样的: 程序的写入地址从0x08000000(数好零的个数)开始的,其大小为0x80000也就是512K的空间,换句话说就是告诉编译器flash的空间是从0x08000000-0x08080000,RAM的地址从0x20000000开始,大小为0x10000也就是64K的RAM。这与STM32的内存地址映射关系是对应的

线程,进程,协程面试知识点

微笑、不失礼 提交于 2019-11-28 04:12:50
2. threading.local的作用? import threading # 创建全局ThreadLocal对象: localVal = threading.local() localVal.val = "Main-Thread" def process_student(): print( '%s (in %s)' % (localVal.val, threading.current_thread().name)) def process_thread(name): #赋值 localVal.val = name process_student() t1 = threading.Thread(target= process_thread, args=('One',), name='Thread-A') t2 = threading.Thread(target= process_thread, args=('Two',), name='Thread-B') t1.start() t2.start() t1.join() t2.join() print(localVal.val) #打印结果: ''' One (in Thread-A) Two (in Thread-B) Main-Thread ''' ''' threading。local()这个方法:用来保存一个全局变量

深入浅出计算机组成原理学习笔记:理解内存(下)-解析TLB和内存保护(第41讲)

倾然丶 夕夏残阳落幕 提交于 2019-11-28 03:51:27
一、引子 性能问题 机器指令里面的内存地址都是虚拟内存地址。程序里面的每一个进程,都有一个属于自己的虚拟内存地址空间。我们可以通过地址转换来获得最终的实际物理地址。 我们每一个指令都存放在内存里面,每一条数据都存放在内存里面。因此,“地址转换”是一个非常高频的动作, “地址转换”的性能就变得至关重要了。这就是我们今天要讲的 第一个问题,也就是 性能问题 安全问题 因为我们的指令、数据都存放在内存里面,这里就会遇到我们今天要谈的 第二个问题,也就是 内存安全问题。如果被人修改了内存里面的内容, 我们的CPU就可能会去执行我们计划之外的指令。这个指令可能是破坏我们服务器里面的数据,也可能是被人获取到服务器里面的敏感信息。 二、加速地址转换:TLB 1、多级页表存在的问题 多级页表虽然节约了我们的存储空间,但是却带来了时间上的开销,变成了一个“以时间换空间”的策略。原本我们进行一次地址转换,只需要访问一次内存就能找到物理页号, 算出物理内存地址。但是用了4级页表,我们就需要访问4次内存,才能找到物理页号。 2、“加个缓存”的办法呢? 程序所需要使用的指令,都顺序存放在虚拟内存里面。我们执行的指令,也是一条条顺序执行下去的。也就是说,我们对于指令地址的访问, 存在前面几讲所说的“空间局部性”和“时间局部性”,而需要访问的数据也是一样的。 我们连续执行了5条指令。因为内存地址都是连续的

云计算 大数据 人工智能

懵懂的女人 提交于 2019-11-28 03:08:23
一、 互联网行业及云计算 在互联网时代,技术是推动社会发展的驱动,云计算则是一个包罗万象的技术栈集合,通过网络提供IAAS、PAAS、SAAS等资源,涵盖从数据中心底层的硬件设置到最上层客户的应用。给我们工作生活提供服务! 1、互联网大事记 1936年 英国数学家A.M.Turing发明图灵机,为现代计算机硬件和软件做了理论上的准备。艾伦·麦席森·图灵(Alan Mathison Turing,1912年6月23日-1954年6月7日),英国数学家、 逻辑学家 ,被称为计算机科学之父, 人工智能 之父。 1945年 现代计算机之父: 冯·诺依曼 第一次提出 存储程序 计算机的概念,即“冯·诺依曼机器”。 1972年 Bell实验室的Dennis Ritchie开发出 C语言 1973年 法国Luminy-Marseilles 大学的Alain Colmerauer 开发了 Prolog语言 。 马丁·库珀发明手机,成为第一个使用移动电话的人。 1975年 比尔·盖茨 和保罗·艾伦为牛郎星开发了世界上第一套标准的微电脑软件Basic,并创办了Microsoft公司。 Xerox和 斯坦福大学 联合推出“ 以太网 ”(Ethernet)。该网络成为局域网的第一个工业标准产品。 1987年 中国第一封国际电子邮件发出,中国开启了互联网的大门。 1997年 IBM“深蓝”机上的国际象棋软件

【操作系统】 内存管理

假如想象 提交于 2019-11-28 01:05:27
内存管理概念 内存管理的功能有: 内存空间的分配与回收。由操作系统完成主存储器空间的分配和管理,提高编程效率。 地址转换。在多道程序环境下,程序中逻辑地址与内存中的物理地址不可能一致,因此存储管理必须提供存储变换功能,把逻辑地址转换成相应的物理地址。 内存空间的扩充。利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。 存储保护。保证各道作业在各自的存储空间内运行,互不干扰。 创建进程首先要将程序和数据装入内存。将用户源程序变为可在内存中执行的程序,通常需要以下几个步骤: 编译。由编译程序将用户源代码编译成若干目标模块。 链接。由链接程序将编译后形成的一组目标代码及所需的库函数链接在一起,形成一个完整的装入模块。 装入。由装入程序将装入模块装入内存运行。 程序的链接有以下三种方式: 静态链接。在程序运行前,先将各自目标模块及它们所需的库函数链接成一个完整的可执行程序,以后不再拆开。 装入时动态链接。将用户源程序编译后所得到的一组目标模块,在装入内存时,采用边装入边链接的方式。 运行时动态链接。对某些目标模块的链接,是在程序执行中需要该模块时才进行的。其优点是便于修改和更新,便于实现对目标模块的共享。 内存的装入模块在装入内存时,同样有以下三种方式: 绝对装入 。在编译时,若知道某个程序将驻留在内存的某个位置,则编译程序将产生绝对地址的目标代码。绝对装入程序按照装入模块中的地址

redis(一)redis内存模型

六眼飞鱼酱① 提交于 2019-11-27 23:55:15
本文转载自: https://www.cnblogs.com/kismetv/p/8654978.html#t1 redis内存统计 在客户端通过redis-cli连接服务器后(后面如无特殊说明,客户端一律使用redis-cli),通过info命令可以查看内存使用情况: 127.0.0.1:6379> info memory # Memory used_memory:2132344 used_memory_human:2.03M used_memory_rss:5607424 used_memory_rss_human:5.35M used_memory_peak:2275152 used_memory_peak_human:2.17M used_memory_peak_perc:93.72% used_memory_overhead:2075094 used_memory_startup:791264 used_memory_dataset:57250 used_memory_dataset_perc:4.27% allocator_allocated:2134144 allocator_active:2404352 allocator_resident:5029888 total_system_memory:1745100800 total_system_memory

Java容器(三)

邮差的信 提交于 2019-11-27 19:03:52
一,在Java中有普通集合、同步(线程安全)集合、并发集合。 普通集合通用性能最高,但是不保证多线程的安全性和并发的可靠性。 线程安全集合仅仅是给集合加了synchronized同步锁,严重牺牲了性能,而且对并发的效率就更低了。 并发集合则通过复杂的策略不仅保证了多线程的安全由提高了并发的效率 并发集合常见有ConcurrentHashMap、ConcurrentLinkedQueue、ConcurrentLinkedDeque,并发集合位于java.util.concurrent包下,是jdk1.5之后才有的 二,ConcurrentHashMap 是线程安全的 HashMap 的实现,默认构造同样有 initialCapacity 和 loadFactor 属性, 不过还多了一个 concurrencyLevel 属性,三属性默认值分别为 16、0.75 及 16。其内部使用锁分段技术,维持这锁 Segment 的数组,在 Segment 数组中又存放着 Entity[]数组,内部 hash 算法将数据较均匀分布在不同锁中。 put 操作: 并没有在此方法上加上 synchronized,首先对 key.hashcode 进行 hash 操作,得到 key 的 hash 值。 hash操作的算法和map也不同,根据此hash值计算并获取其对应的数组中的Segment对象

Linux内存简单汇总

我的未来我决定 提交于 2019-11-27 18:48:21
Linux内存主要用来存储系统和应用程序的指令,数据,缓存等 一,内存映射 1,内核给每个进程提供一个独立的虚拟机地址空间,并且这个地址空间是连续的 2,虚拟地址空间内部又被分为内核空间和用户空间 3,32位和64位系统的虚拟地址空间 32 位系统的内核空间占用 1G,位于最高处,剩下的 3G 是用户空间。而 64 位系统的内核空间和用户空间都是 128T,分别占据整个内存空间的最高和最低处,剩下的中间部分是未定义的 4,进程在用户态时,只能访问用户空间内存;只有进入内核态后,才可以访问内核空间内存 5,只有实际使用的虚拟内存才会被分配物理内存,通过内存映射来管理 6, 内存映射 ,就是将虚拟内存地址映射到物理内存地址。为了完成内存映射,内核为每个进程都维护了一张 表,记录虚拟地址与物理地址的映射关系 7, 页表 存储在内存管理单元 [MMU]( https://blog.csdn.net/u010442934/article/details/79900449 ) 中 8,进程访问虚拟地址在页表中查不到时,系统会产生一个 缺页异常 9,TLB(Translation Lookaside Buffer,转译后备缓冲器)会影响 CPU 的内存访问性能 ,TLB是MMU中页表的高速缓存,。于进程的虚拟地址空间是独立的,而 TLB 的访问速度又比 MMU 快得多,所以

20182301 2019-2020-1 《数据结构与面向对象程序设计》第7周学习总结

北城余情 提交于 2019-11-27 18:40:28
20182301 2019-2020-1 《数据结构与面向对象程序设计》第7周学习总结 教材学习内容总结 第十二章 算法效率:用更少的时间去做同等质量的事情 好算法的要求:正确性、可读性、健壮性、通用性、效率与储存空间需求 算法效率可以用问题大小(n)和及处理步骤来定义。增长函数表示问题大小与希望优化的值之间的关系,该函数表示算法的时间或空间利用率 复杂度(时间、空间) 图: 注意:若计算一个算法的阶,其中涉及函数调用时,要把函数里面的调用也算上。 第十四章 集合 集合是收集并组织其他对象的对象 集合定义了访问及管理称为集合元素的其他对象的一种具体方式 集合中的元素一般由加入集合的次序或元素之间某些固有的关系而组织 集合是隐藏其实现细节的一个抽象名称 数据结构是用来实现集合的基本程序设计结构 栈集合 栈以LIFO的方式处理元素——最后进入的元素最先离开 程序员应该选择与所需管理的数据的类型相匹配的结构 操作 描述 push 将元素添加到栈顶 pop 删除栈顶元素 peek 查看栈顶元素 isEmpty 是否为空 size 判定栈中元素 泛型 Java允许泛型来定义类 不允许泛型实例化 当需要Box时,可以用具体的类来取代T,从而实例化它 class Box<T> { //T类型对象的声明和操作代码 } Box<Widge> box1=new Box<Widege>; 栈的ADT

学习笔记4

余生长醉 提交于 2019-11-27 18:23:22
一 RAID 作用 提高IO能力 磁盘并行读写 提高耐用性 磁盘冗余来实现 RAID实现的方式 外接式磁盘阵列:通过扩展卡提供适配能力 内接式RAID:主板集成RAID控制器,安装OS前在BIOS里配置 软件RAID:通过OS实现 常用级别: RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD RAID-0: 读、写性能提升 可用空间:N*min(S1,S2,...) 无容错能力 最少磁盘数:2, 2+ RAID-1: 读性能提升、写性能略有下降 可用空间:1*min(S1,S2,...) 有冗余能力 最少磁盘数:2, 2N RAID-5: 读、写性能提升 可用空间:(N-1)*min(S1,S2,...) 有容错能力:允许最多1块磁盘损坏 最少磁盘数:3, 3+ RAID-10: 读、写性能提升 可用空间:N*min(S1,S2,...)/2 有容错能力:每组镜像最多只能坏一块 最少磁盘数:4, 4+ RAID-50 多块磁盘先实现RAID5,再组合成RAID0 JBOD:Just a Bunch Of Disks 功能:将多块磁盘的空间合并一个大的连续空间使用 可用空间:sum(S1,S2,...) 二 逻辑卷管理器LVM 逻辑卷:允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小 ,允许在多个物理设备间重新组织文件系统