分页

操作系统篇-浅析分页机制

末鹿安然 提交于 2020-01-11 02:31:16
|| 版权声明:本文为博主原创文章,未经博主允许不得转载。   一、前言   在我们进行程序开发的时候,一般情况下,是不需要管理内存的,也不需要操心内存够不够用,其实,这就是分页机制给我们带来的好处。它是实现虚拟存储的关键,位于线性地址与物理地址之间,在使用这种内存分页管理方法时,每个执行中的进程(任务)可以使用比实际内存容量大得多的连续地址空间。而且当系统内存实际上被分成很多凌乱的块时,它可以建立一个大而连续的内存空间的映象,好让程序不用操心和管理这些分散的内存块。分页机制增强了分段机制的性能。页地址变换是建立在段变换基础之上的。因为,段管理机制对于Intel处理器来说是最基本的,任何时候都无法关闭。所以即使启用了页管理功能,分段机制依然是起作用的,段部件也依然工作。    二、页表结构   那么到底如何使用分页机制呢?通过 设置cr0的PG位 可以开启分页机制。页大小是4K,并且是4K对齐的。线性地址通过分页机制转换成物理地址的时候,可能某些线性地址是无效的。如果某个线性地址对应的页不存在,那么访问的时候将产生一个异常。    两级页表结构   内存分页管理的基本原理是将整个主内存区域划分成 4096 字节为一页的内存页面。程序申请使用内存时,就以内存页为单位进行分配。上面提到了线性地址经过分页机制的转换变成物理地址,但是没有提到如何转换。其实是通过两个表,一个是页目录表PDE

PA3.2

十年热恋 提交于 2020-01-11 01:50:04
写在前面的话 如果您对该系列感兴趣的话,推荐您先看一下南京大学的计算机组成原理实验(也就是PA)的讲义,然后再来看这篇文章可能有更多地收获。如果您是要完成该作业的学生,我推荐你先看讲义,或者好好听老师的讲课,然后自己独立完成这个作业,但是如果你没有听懂,或者你无论如何也无法理解讲义上面的字,又或者说对讲义上面的某点知识某个问题不了解而又觉得太简单不好意思问老师,那么您可能会从这篇文章里面获得一些你需要的信息。本篇文章将会包括笔者自己做PA的所有经过,希望你并不将该文章当成抄袭的根源,而是成为你思考的源泉。 现在已经到了PA3的 最后 阶段,经过了PA0的搭建环境、PA1简单的功能函数实现、PA2的机器指令的模拟实现,现在我们已经基本上拥有进行更高级操作的环境,所以这个阶段更关注的是系统层面的实现。 我们已经实现了最困难的部分,也就是PA3.1运行仙剑奇侠传的部分,现在要做的是在分页机制上面运行仙剑奇侠传,让我们的NEMU系统同时支持多个程序运行 PA系列传送门 PA0: https://blog.csdn.net/qq_41983842/article/details/88921427 PA1.1: https://blog.csdn.net/qq_41983842/article/details/88934779 PA1.2: https://blog.csdn.net/qq

oracle如何实现去重和分页

一曲冷凌霜 提交于 2020-01-10 20:08:24
一:oracle实现去重: user数据表: 分两步:1.查询重复数据 2.删除重复数据 1.查询重复数据: 在oracle中实现查询重复数据,可以借助于rowid这个伪列。oracle中每个表物理上都存在一个rowid的列,这个列 是每行数据在oracle中唯一标识,每个表的主键可以保证数据在本表中不重复,rowid可以保证该条数据在数据库 中的所有表中都不重复。 --查询重复数据 用户名和密码都相同的数据叫重复数据 select u1.*,rowid from users u1 where exists ( select 1 from users u2 where u1.username=u2.username and u1.password=u2.password and u1.rowid>u2.rowid ); --删除重复数据 delete from users u1 where exists ( select 1 from users u2 where u1.username=u2.username and u1.password=u2.password and u1.rowid>u2.rowid ); 例:把用户表的主键id加上,去重重复数据,只要用户名相同,就认为这条数据重复了。 delete from users u1 where exists ( select

stream分页

佐手、 提交于 2020-01-10 19:31:59
List<AccessAreaVo> areaVo = vos.stream() .skip(pageable.getPageSize() * (pageable.getPageNumber() - 1)) .limit(pageable.getPageSize()).collect(Collectors.toList()); 来源: https://www.cnblogs.com/liubaihui/p/12177624.html

mybatis逻辑分页与物理分页

谁说我不能喝 提交于 2020-01-10 03:37:39
最近在搭建springboot框架的时候,构建ORM的时候,选择mybatis的时候,我们一般时候用: 1.mybatis自带的分页RowBounds; 2.mybatis插件或者直接书写sql进行分页; (1).通过自己的封装SQL根据beginNum(开始条数)和endNum(需要的条数)来进行分页 (2).PageHelper分页插件 --> mybatis自带分页RowBounds: //逻辑分页 Java: RowBounds rb=new RowBounds(offset, limit); //offset(从多少条开始);limit(获取多少条) SqlSession sqlSession=sqlSessionFactory.openSession();//sqlSessionFactory通过读取mybatis配置文件的输入流然后通过new SqlSeesionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));最终得到SqlSessionFactory; List<Student> studentlist=sqlSession.selectList("xx.xx.Mapper.findStudent",null,rb);/

LODOP中ADD_PRINT_TABLE、HTM、HTML表格自动分页测试

独自空忆成欢 提交于 2020-01-10 03:25:13
LODOP中超文本超过打印项高度会自动分页,那么对于超大行,该行处在分页高度位置会怎样呢? 本文用来测试一下三个语句对html中table中超大行在分页高度位置的处理。 测试结果: ADD_PRINT_TABLE 特点:不切行,只能输出一个table,嵌套复杂等表格不行。 当某一行高超过打印项高度时,不会按照打印项高度分页,不切行,而是输出整个行,行跨页隐藏后面的内容,不会分到下一页。 如图-----达到了纸张的最下方,下面既没有表格线,后面的内容也没有分到下一页, 该超大行后面的内容相当于不打印隐藏了 。 ADD_PRINT_HTM特点:切行没切字,补充了表格线,该超大行分页后成了多行。 如图-----基本按照打印设计打印项高度分页,只是打印设计里高度在最后一句,打印设计设计的高度是稍稍小于该文字的,但是ADD_PRINT_HTM没有切字,而是把最后一行字显示全了,并且该大行分页后补全了表格线,本来是两行三列的表格,补完横线后,看起来是两行变成了四行,切行的都补了线。 ADD_PRINT_HTML特点:切行切字,不补表格线,类似截图,把内容当图截了。 如图-----完全按照打印设计的打印项高度分页,连字都切了,表格线没补,类似图片截成几块。 测试代码: <head> <meta http-equiv="Content-Type" content="text/html;

浅谈MyBatis-Plus学习之插件扩展

≯℡__Kan透↙ 提交于 2020-01-09 22:44:53
一、Mybatis插件机制 mybatis通过插件(Interceptor)对相关目标对象(四大对象)进行动态代理,完成相关数据的变更,从而提供更多功能。 在这里不介绍其内部实现,仅仅介绍MP所提供的相关插件。 二、MP插件介绍 2.1、分页插件 好像MP已经在BaseMapper中提供了相关分页方法selectPage,为什么还要使用分页插件呢? 这是因为selectPage通过ibatis的RowBounds进行分页, 也就是在内存中进行分页 ,所以不推荐 而分页插件的使用,是在相关的查询语句后面添加Limit关键字,从而实现物理分页 applicationContext.xml <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="configLocation" value="classpath:mybatis-config.xml" /> <property name="typeAliasesPackage" value="cn.hjj.mp.entity"></property>

Java Web----Java Web的数据库操作(三)

蓝咒 提交于 2020-01-09 18:35:59
Java Web的数据库操作 前面介绍了JDBC技术和JDBC API及API的使用示例,下面详细介绍JDBC在Web中的应用。 Java Web----Java Web 的数据库操作(一 ) Java Web----Java Web 的数据库操作( 二) 四、JDBC在Java Web中的应用 通常情况下,Web程序操作数据库都是通过JDBC实现,即使目前数据库方面的开源框架有许多,但其底层实现都离不开JDBC API。 1、开发模式 在Java Web开发中使用JDBC,应遵循MVC的设计思想,从而使Web程序拥有一定的健壮性、可扩展性。每个Java Web程序员都应该深谙MVC的设计思想,下面对其简单介绍。 MVC(Model-View-Controller)是一种设计理念,该理念将软件分成3层结构,分别为模型层、视图层和控制层。 模型层泛指程序中的业务逻辑,用于处理真正的业务操作; 视图层是指程序与用户交互的界面,对用户呈现出视图,但不包括业务逻辑; 控制层是对用户各种请求的分发处理,将制定的请求分配给制定的业务逻辑进行处理。 JDBC应用于Java Web开发中,处于MVC中的模型层位置,如图所示: 客户端通过JSP页面与程序进行交互,对于数据的增、删、改、查请求由Servlet对其进行分发处理,如Servlet接收到添加数据请求,就会分发给增加数据的JavaBean对象

Lodop打印控件 超文本自动分页

醉酒当歌 提交于 2020-01-09 04:16:42
Lodop打印控件打印html超文本,通常传入一个超文本内容可能会超过纸张,如果要拆分每页显示哪些然后手动分页比较麻烦,Lodop中的超文本都有自动分页的特点。 自动分页的依据: 1.超文本超过设置的打印项高度自动分页 (打印项高度) 2.超文本超过纸张自动分页 (纸张高度) 超文本分页,有两种可能,1.超过设置的打印项高度 2.打印项超过纸张高度 刚接触Lodop的新手有时会奇怪,一页下面还有很多空白 怎么就分页了呢?这是由于超文本打印项高度设定小了的缘故,本博文的(图2)专门介绍什么是打印项高度,以及如何调整打印项高度。 打印项高度: 在打印设计选中某个打印项,打印项周围出现蓝色的圆点,拖动圆点可以把打印项宽或高增大或减小,蓝色圆点围起来的区域就是打印项的宽高组成的区域,这个区域的高度就是打印项的高度。 改变打印项宽高值方法: 1.在打印设计里选中打印项,拖动蓝色圆点,增大或缩小宽高。 2.通过打印设计上方工具栏里的文本框和小三角,增大或减少宽高的值。 (调整后预览看看效果,不满意再调整,直到调整看起来分页高度合适,生成代码) 3.直接在语句里调整打印项高度值,例如ADD_PRINT_HTM的第3个参数是宽,第4个参数是高,第4个参数也就是打印项的高度值。 简短问答: 超文本打印项自动分页 超文本超过设置的打印项高度就会自动分页,可通过调整超文本打印项的高度

MyBatis:简单物理分页实现(Plugin)

荒凉一梦 提交于 2020-01-08 19:58:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、必要性 首先,介绍一下使用自定义拦截器来进行物理分页的必要性。我们知道MyBatis中的SqlSession接口中提供一个带分页功能的方法: public interface SqlSession extends Closeable { <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds); // .... } 使用该方法,我们在查询时可以通过为selectList(..)方法提供一个RowBounds参数,来使该语句带有分页功能,举个例如,假设我需要取出查询记录的前三条记录,可以这样: // 获取sqlSession的步骤略,statement略,mapper中的映射语句为 select * from users List<User> list = sqlSession.selectList(statement, null, new RowBounds(0,3)); 这时我们获取到的记录就是查询记录的前三条记录(select * from users的查询结果) 这时我们会有个疑问,既然MyBatis已经为我们提供了分页的处理类,为何我们还要再重复造轮子(再手动写一个拦截器)呢?