内存映射

EF-运行原理

匿名 (未验证) 提交于 2019-12-02 23:56:01
一、什么是 EF ?    实体架构( Entity Framework )是微软以来 ADO.Net 为基础开发出来的对象关系映射( ORM )解决方案,它解决了对象持久化问题,将程序员从编写麻烦的 SQL 语句中解放出来。 优点:    支持多种数据库(Microsoft SQL Server、Oracle和DB2等);    强劲的映射引擎,能很好地支持存储过程;    提供Visual Studio集成工具,进行可视化操作;    能够与ASP.NET、WPF、WCF、WCF Data Services进行很好的集成。 二、 ORM 常见ORM框架:      ORM不是产品,是框架的总称,面向对象的程序设计语言到关系数据库的映射。   使程序员既可以利用面向对象语言的简单易用性,又可以利用关系数据库的技术优势来实现应用程序的增删改查操作。     1. NHibernate:Hibernate在.NET平台下的版本     2. iBatis.NET:iBatis在.NET平台的实现     3.Linq to SQL(微软不再更新):.NET针对SQL server的ORM框架     4.ADO.NET Entity Framework:微软在.NET4.0推出的领域驱动开发模型。 注意:ADO.NET Entity Framework是微软以ADO

Ubuntu 18.04 搭建 配置 nfs服务器

匿名 (未验证) 提交于 2019-12-02 23:47:01
什么是NFS? NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。 通过nfs,我们可以实现不同设备下文件的访问。(尤其是跨设备拷贝大型文件的时候) 注:通过nfs还能实现从uboot直接读取远程文件系统 搭建好了NFS服务器以后,其他的设备就可以通过网络对服务器的nfs进行挂载并访问。 NFS的安装与配置 安装 sudo apt-get install nfs-kernel-server -y 增加配置 sudo vim /etc/exports 增加策略,每个策略一行 设定格式如下: 例如: /nfs *(rw,sync,no_root_squash) ------------------------------------------------------- ------------------------------------------------------ 启动 service nfs-kernel-server restart (启动之前要确保对应的文件夹是存在的,否则会出现'Job for * canceled.') ֹͣ service nfs

内存映射

匿名 (未验证) 提交于 2019-12-02 23:43:01
内存映射文件和传统的I/o过程的区别 传统IO:块设备文件,磁盘文件 系统调用->页高速缓存->分配新页->磁盘->页高速缓存->用户进程空间的缓冲区 系统调用 read(),write() 系统调用read()将阻塞调用进程,知道数据被拷贝进用户态地址空间。规范模式但wirte()不同,它在数据被拷贝到页高速缓存(延迟写)后马上结束。同步模式完全写入磁盘 内存映射模式: mmap()将文件映射到内存中,文件就称为RAM中的一个字节数组,应用程序就可以直接访问数组元素,而不需用系统调用read(),write()或lseek() 可执行文件的加载 写页表->缺页异常->页高速缓存->新分配页->磁盘I/O->页高速缓存->更新页表项指向页高速缓存地址。 相关系统调用 以加载可执行文件的方式读文件,少了一次数据的拷贝。 页高速缓存: 内核缓冲区在linux下的实现: 历史: 旧版本页高速缓存和缓冲区高速缓存,前者用来存放访问磁盘文件内容时生成的磁盘数据项,后者把通过文件系统访问的块的内容保留在内存中。 后来,由于效率原因,不在单独分配块缓冲区,相反把它们存放在叫做“缓冲区页”的专门页中,而缓冲区页保存在页高速缓存中。 引用《深入理解linux内核》: 1.页高速缓存是Linux内核所使用的主要磁盘高速缓存,在绝大多数情况下,内核在读写磁盘时都应用页高速缓存

面试官都会问的Mybatis面试题

匿名 (未验证) 提交于 2019-12-02 23:35:02
1、什么是Mybatis? 1、Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。 2、MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 3、通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。(从执行sql到返回result的过程)。 2、Mybaits的优点: 1、基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。 2、与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接; 3、很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。 4

IPC之mmap共享映射区

匿名 (未验证) 提交于 2019-12-02 23:34:01
版权声明:wangdassye https://blog.csdn.net/weixin_43136315/article/details/90513411 mmap 共享内存(Shared Memory):映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问 优点 : 缺点 : 相关函数 创建映射区函数 void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset); 释放映射区 int munmap(void *addr, size_t length); 写端 # include <stdio.h> # include <unistd.h> # include <sys/types.h> # include <sys/stat.h> # include <fcntl.h> # include <sys/mman.h> # include <string.h> typedef struct _student { int sid ; char sname [ 20 ] ; } student ; int main ( int argc , char * argv [ ] ) { if ( argc != 2 ) { printf ( "./a.out

(转载)/dev/mem可没那么简单

匿名 (未验证) 提交于 2019-12-02 22:56:40
remap_pfn_range()校验漏洞的利用过程中,熟悉Linux内核地址空间布局非常重要,这篇文章帮助理解这个问题。 参考CVE-2013-2506的PoC:https://github.com/hiikezoe/libfb_mem_exploit 参考材料: http://unix.stackexchange.com/questions/5124/what-does-the-virtual-kernel-memory-layout-in-dmesg-imply?noredirect=1&lq=1 http://unix.stackexchange.com/questions/4929/what-are-high-memory-and-low-memory-on-linux?rq=1 http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/ http://unix.stackexchange.com/questions/218507/kernel-address-space-layout http://www.cnblogs.com/bizhu/archive/2012/10/09/2717303.html PoC中的kernel_phys_address是由读取/proc/iomem设备得到

ORM:对象关系映射

匿名 (未验证) 提交于 2019-12-02 22:51:30
定义:面向对象和关系型数据库的一种映射,通过操作对象的方式操作数据 对应关系: 类对应数据表 对象对应数据行(记录) 属性对应字段 导入:from app01 import models 查: models.Publisher.objects.all() 查询所有的数据,queryset:对象列表 models.Publisher.objects.get(name='xxxx') 对象,获取一个对象(有且唯一),获取不到或者获取到多个对象会报错 models.Publisher.objects.filter(name='xxxx') 获取满足条件的所有的对象,queryset:对象列表 增: models.Publisher.objects.create(name='xxx') 新插入数据库的对象 obj = models.Publisher(name='xxx') 存在在内存中的对象 obj.save() 提交到数据库中,新增 删: obj = models.Publisher.objects.get(pk=1) obj.delete() obj_list = models.Publisher.objects.filter(pk=1) obj_list.delete() 改: obj = models.Publisher.objects.get(pk=1) obj.name =

Linux 字符设备驱动―― ioremap() 函数解析

匿名 (未验证) 提交于 2019-12-02 21:59:42
一、 ioremap() 函数基础概念 几乎每一种外设都是通过读写设备上的相关寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: a -- I/O 映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU通过专门的I/O指令(如X86的IN和OUT指令)来访问这一空间中的地址单元。 b -- 内存映射方式(Memory-mapped) RISC指令系统的CPU(如ARM、PowerPC等)通常只实现一个物理地址空间,外设I/O端口成为内存的一部分。此时,CPU可以象访问一个内存单元那样访问外设I/O端口,而不需要设立专门的外设I/O指令。 但是,这两者在硬件实现上的差异对于软件来说是完全透明的,驱动程序开发人员可以将内存映射方式的I/O端口和外设内存统一看作是"I/O内存"资源。 一般来说,在系统运行时,外设的I/O内存资源的物理地址是已知的,由硬件的设计决定。但是CPU通常并没有为这些已知的外设I/O内存资源的物理地址预定义虚拟地址范围,驱动程序并不能直接通过物理地址访问I/O内存资源, 而必须将它们映射到核心虚地址空间内(通过页表),然后才能根据映射所得到的核心虚地址范围

MIT-6.828 Lab2实验报告

匿名 (未验证) 提交于 2019-12-02 21:53:52
tags:mit-6.828 os 本文主要介绍lab2,讲的是操作系统内存管理,从内容上分为三部分: 第一部分讲的是物理内存管理,要进行内存管理首先需要知道哪些物理内存是空闲的,哪些是被使用的。还需要实现一些函数对这些物理内存进行管理。 第二部分讲的是虚拟内存。一个虚拟地址如何被映射到物理地址,将实现一些函数来操作页目录和页表从而达到映射的目的。 第三部分讲的是内核的地址空间。将结合第一部分和第二部分的成果,来对内核地址空间进行映射。 Part 1: Physical Page Management 通过lab1可以总结出如下的物理内存分布图: 大致上可以分为三部分: 0x00000~0xA0000:这部分叫做basemem,是可用的。 接着是0xA0000~0x100000:这部分叫做IO Hole,不可用。 再接着就是0x100000以上的部分:这部分叫做extmem,可用。 kern/pmap.c中的i386_detect_memory()统计有多少可用的物理内存,将总共的可用物理内存页数保存到全局变量npages中,basemem部分可用的物理内存页数保存到npages_basemem中。 Exercise 1: 需要我们写一个物理内存页的allocator。要求实现kern/pmap.c文件中的boot_alloc(),mem_init(),page_init()

HashMap和HashTable有什么不同?

匿名 (未验证) 提交于 2019-12-02 21:53:52
这是我见过最详细区别分析了!!! JDK每一版本都在改进。本文讨论的HashMap和HashTable基于JDK 1.7.0_67。源码见 这里 HashTable产生于JDK 1.1,而HashMap产生于JDK 1.2。从时间的维度上来看,HashMap要比HashTable出现得晚一些。 以下是HashTable的作者: 以下代码及注释来自java.util.HashTable * @author Arthur van Hoff * @author Josh Bloch * @author Neal Gafter 以下是HashMap的作者: 以下代码及注释来自java.util.HashMap * @author Doug Lea * @author Josh Bloch * @author Arthur van Hoff * @author Neal Gafter 可以看到HashMap的作者多了大神Doug Lea。不了解Doug Lea的,可以看 这里 。 HashMap和HashTable都是基于哈希表来实现键值映射的工具类。讨论他们的不同,我们首先来看一下他们暴露在外的API有什么不同。 3.1 Public Method 下面两张图,我画出了HashMap和HashTable的类继承体系,并列出了这两个类的可供外部调用的公开方法。 从图中可以看出