- Linux内核源码分析之setup_arch (三)
JiauZhang
linuxlinux嵌入式操作系统
1.前言在Linux内核源码分析之setup_arch(二)中介绍了当前启动阶段的内存分配函数memblock_alloc,该内存分配函数在本篇将要介绍paging_init中用于页表和内存的分配,paging_init函数大致流程如下图所示。2.paging_init2.1build_mem_type_table该函数根据具体的CPU架构对静态定义的mem_types数组中定义的属性进行调整。2
- Linux内存管理(十一):paging_init 详解
私房菜
Linux内存管理linuxpaging_initmemblockmap_kernelmap_mem
源码基于:Kernel5.4约定:芯片架构:ARM64CONFIG_ARM64_VA_BITS:39CONFIG_ARM64_PAGE_SHIFT:120.前言从memblock初始化一文中得知在paging_init()调用之前,存放KernelImage和DTB两端物理内存区域可以访问(相应的页表已经建立好)。在memblock初始化之后,物理内存已经添加到系统,但是这部分的物理内存到虚拟内存
- linux的start函数,介绍Linux内核函数Start_kernel()的功能
天猪飞翔
linux的start函数
Start_kernel()中调用了一系列初始化函数,以完成kernel本身的设置。这些动作有的是公共的,有的则是需要配置的才会执行的。在start_kernel()函数中,输出Linux版本信息(printk(linux_banner))设置与体系结构相关的环境(setup_arch())页表结构初始化(paging_init())使用"arch/alpha/kernel/entry.S"中的入
- Linux内存管理(七):fixmap详解
私房菜
Linux内存管理linuxfixmapearly_fixmap___pgd_populate
源码基于:Linux5.4约定:芯片架构:ARM64CONFIG_ARM64_VA_BITS:39CONFIG_ARM64_PAGE_SHIFT:120.前言内核启动首先会进入汇编阶段,mmu已经启动(也就是说,当前SOC只能使用虚拟地址访问RAM),paging_init还没有完成调用,在内核启动过程需要访问某些特定的内核模块(例如dtb)时,就需要将虚拟地址和物理地址进行映射。这就是fixma
- linux3.10 paging_init页表初始化详解
oqqYuJi12345678
内存管理linux内存管理内存初始化paging_init页表初始化
arm架构的32位linux系统上面,使用到了两种形式的页表映射,段映射和分页映射。系统早期的页表映射都采用静态映射的方式,即对于要映射的某块物理内存,指定其映射的虚拟地址。在uboot刚跳转到linux时候,先采用了段映射的方式,在arch/arm/kernel/head.S中可以看到源码://页表目录的物理地址起始地址放在代码段向下偏移页目录大小PG_DIR_SIZE的位置.macropgtb
- linux 内存管理 - paging_init 函数
Decload
kernel
源码为2.6.37内核,x86_64架构,内存模型为SparseMemorypaging_init函数在setup_arch函数中被调用,用于初始化所有节点的pg_data_t结构,以及节点对应的管理区zone结构,和page结构。调用的大致过程为:start_kernel()-->setup_arch()-->paging_init()-->free_area_init_nodes()-->fr
- 内存初始化代码分析(三):创建系统内存地址映射
aa图图aa
linux内核
一、前言经过内存初始化代码分析(一)和内存初始化代码分析(二)的过渡,我们终于来到了内存初始化的核心部分:paging_init。当然本文不能全部解析完该函数(那需要的篇幅太长了),我们只关注创建系统内存地址映射这部分代码实现,也就是解析paging_init中的map_mem函数。同样的,我们选择的是4.4.6的内核代码,体系结构相关的代码来自ARM64。二、准备阶段在进入实际的代码分析之前,我
- Linux 内存管理(3)paging_init(1)
firefox_1980
AndroidKernel
1paging_init的主要工作如名字所说的,paging_init要进行页面管理初始化。众所周知,BuddySystem是采用页管理的。include/linux/mm_types.h41structpage{42/*Firstdoublewordblock*/43unsignedlongflags;/*Atomicflags,somepossibly44*updatedasynchronou
- arm-linux内存页表创建
FSak47
水滴石穿
linux的内存(正式)页表是在内核代码执行到start_kernel函数后执行paging_init函数建立的,这里要注意一个事情就是说,这里paging_init函数可以正常创建内存页表的条件有两个:1、meminfo已初始化:即初始化物理内存各个node的各个bank,一般对于小型arm嵌入式设备,不涉及多个内存就是一个node和一个bank;这部分初始化是在paging_init函数前面的
- Linux中的内存分配和释放之free_area_init_node()函数分析
satanwxd
linux内存管理
在对free_area_init_node()函数分析之前,我们也要看看它的源头,这个函数的调用过程如下start_kernel()->paging_init()->free_area_init_node(),我们来看看在调用这个函数之前,在paging_init()前面的语句做了些什么。/**initialisethezoneswithineachnode*/for(node=0;nodebda
- linux内存管理笔记(十八)----bootmem内存分配器
奇小葩
内存管理
前面章节我们介绍了memblock,其作用内核启动初期,常用的内存分配器还未被初始化而不能使用,在此期间memblock是一种用于内存管理区域的方法。然后调用page_init来完成系统分页机制的初始化工作,建立页表,从而内核可以完成虚拟地址到物理地址的映射关系,本章主要是分析bootmem_init的流程。1.bootm初始化arm架构下,在setup_arch中通过paging_init函数初
- 内存管理(六):系统映射
念念有余
Linux内存管理
通过memblock已经有了内存布局的信息,接下来就要完成内存的映射。映射的过程位于paging_init函数中1./*2.*paging_init()setsupthepagetables,initialisesthezonememory3.*mapsandsetsupthezeropage.4.*/5.void__initpaging_init(void)6.{7.phys_addr_tpgd
- 浅析linux内核内存管理之最终内核页表
白水煮鸡蛋
浅析linux内核内存管理之最终内核页表在系统初始化的时候进行了最终内核映射,主要在paging_init函数中:[html]viewplaincopy499void__initpaging_init(void)500{501#ifdefCONFIG_X86_PAE502set_nx();503if(nx_enabled)504printk("NX(ExecuteDisable)protectio
- linux 内核 内存管理 初始化 页表
lukuen
LinuxKernellinuxtablelinux内核x86structure工作
linux内核在启动分页机制时就已经有了一个可用的页表,这个最初的页表是手工创建了,而且仅有为数不多的几个页面,进入start_kernel()以后需要把原来的页表完善一下,具体工作在start_kernel()-->setup_arch()-->paging_init()函数中。paing_init()函数定义在arch/x86/mm/init_32.c中。void__initpaging_in
- arm-linux内存管理学习笔记(3)-页表前戏
kerneler_
linuxkernel
start_kernel之前的汇编代码建立了内核临时页表,完成了内核区域的静态线性映射,保证内核可以在舒适的虚拟地址空间(运行地址和链接地址一致)运行。进入start_kernel之后就要准备建立完整的页表映射,这部分工作是在paging_init中完成。不过在建立完整页表映射之前还需要进行一些准备工作,本文来分析下。为了简化整个代码流程,便于分析,我的设备内核配置为不使用高端内存,不配置CONF
- 【原创】(三)Linux paging_init解析
LoyenWang
背景Readthefuckingsourcecode!--By鲁迅Apictureisworthathousandwords.--By高尔基说明:Kernel版本:4.14ARM64处理器,Contex-A53,双核使用工具:SourceInsight3.5,Visio1.介绍从(二)Linux物理内存初始化中,可知在paging_init调用之前,存放KernelImage和DTB的两段物理内存
- paging_init
paging
paging_init() setup.S->start_kernel(void) -> setup_arch -> paging_init() (1) 接下来是paging_init,调用下面的pagetable_init,初始化页表然后重新加 载cr3,flush tlb,然后使用kmap_init为km
- 3.4.2 特定于体系结构的设置 (五):冷热缓存的初始化
xiangpingli
这里讨论冷热缓存相关的数据结构的初始化,以及用于控制缓存填充行为的“水印”的计算。Zone_pcp_init负责初始化该缓存,该函数由free_area_init_nodes调用。start_kernel->setup_arch ->machine_specific_memory_setup ->setup_memory ->paging_init -> free_area_init
- 3.4.2 特定于体系结构的设置 (三):分页机制的初始化
xiangpingli
3. 分页机制的初始化paging_init负责建立只能用于内核的页表,用户空间无法访问。这对管理普通应用程序和内核访问内存的方式,有深远影响。在IA-32系统上内核通常将总的4GB可用虚拟地址空间按3:1划分。低端3GB用于用户态应用程序,而高端1GB则专用于内核。尽管在分配内核的虚拟地址空间时,当前系统上下文是不相干的,但每个进程都有自身特定的地址空间。这些划分重要的目的是:A. 在用户应用程
- 3.4.2 特定于体系结构的设置 (二):内存初始化步骤
xiangpingli
初始化步骤在内核已经载入内存、而初始化的汇编程序部分已经执行完毕后,内核必须执行哪些特定于系统的步骤呢?图3-12给出了各个操作的代码流程图。 start_kernel->setup_arch ->machine_specific_memory_setup ->setup_memory ->paging_init -> free_area_init ->free_area_i
- Linux内核源码学习之 内核页表打印
aganlengzi
linux内存linux内核
本学期Linux内核实验最后是打印内核页表,线性地址----物理地址我看到这个实验题目的时候想到的就是这个init函数(因为这部分当时就是我讲的^_^),这个函数是初始化linux内核页表的,也就是将32位系统中3G以上的896M线性地址映射到物理地址的0-896M,在其调用者paging_init函数中还处理了其他的情况,比如固定映射之类的。那属于高端内存映射那一块的内容,目前我们先看一下如何将
- linux-3.2.36内核启动3-setup_arch中的内存初始化2(arm平台 分析建立页表)
Tommy_wxie
又是一个国庆七天假,之前有很多打算可是到最后,只有linux愿意陪我。介绍pageing_init之前,我们了解几个定义pte_t页表项pmd_t页中间目录项pud_t页上级目录pgd_t页全局目录项我的arm平台#definePMD_SHIFT 21#definePGDIR_SHIFT 21 下面这个函数paging_init每个平台实现不一
- linux-3.2.36内核启动2-setup_arch中的内存初始化1(arm平台 分析高端内存和初始化memblock)
Tommy_wxie
上一篇微博留下了这几个函数,现在我们来分析它们 sanity_check_meminfo(); arm_memblock_init(&meminfo,mdesc); paging_init(mdesc); request_standard_resources(mdesc); 在上一微博有展现根据启动参数初始化meminfo,记录了物理内存的开始和大小
- linux-3.2.36内核启动3-setup_arch中的内存初始化2(arm平台 分析建立页表)
xxxxxlllllxl
内存ARMlinux内核
又是一个国庆七天假,之前有很多打算可是到最后,只有linux愿意陪我。介绍pageing_init之前,我们了解几个定义pte_t页表项pmd_t页中间目录项pud_t页上级目录pgd_t页全局目录项我的arm平台#definePMD_SHIFT 21#definePGDIR_SHIFT 21 下面这个函数paging_init每个平台实现不一
- linux-3.2.36内核启动2-setup_arch中的内存初始化1(arm平台 分析高端内存和初始化memblock)
xxxxxlllllxl
内存ARMlinux内核
上一篇微博留下了这几个函数,现在我们来分析它们 sanity_check_meminfo(); arm_memblock_init(&meminfo,mdesc); paging_init(mdesc); request_standard_resources(mdesc); 在上一微博有展现根据启动参数初始化meminfo,记录了物理内存的开始和大小
- 内存_页的初始化
u011553162
linux的内存(正式)页表是在内核代码执行到start_kernel函数后执行paging_init函数建立的,这里要注意一个事情就是说,这里paging_init函数可以正常创建内存页表的条件有两个:1、 meminfo已初始化:即初始化物理内存各个node的各个bank,一般对于小型arm嵌入式设备,不涉及多个内存就是一个node和一个bank;这部分初始化是在p
- arm-linux内存页表创建
u010246947
内核arm-linux内存页表创建
linux的内存(正式)页表是在内核代码执行到start_kernel函数后执行paging_init函数建立的,这里要注意一个事情就是说,这里paging_init函数可以正常创建内存页表的条件有两个:1、 meminfo已初始化:即初始化物理内存各个node的各个bank,一般对于小型arm嵌入式设备,不涉及多个内存就是一个node和一个bank;这部分初始化是在pag
- ARM Linux (S3C6410架构/2.6.35内核)的内存映射(二)
michael2012z
linuxit内存映射
本文讲述Linux系统启动过程中内核空间的映射。Linux系统内核启动过程中,会在start_kernel()-> setup_arch()->paging_init()函数中建立页表,下面详细记录一下其中每一个重要的步骤。(下面演示的代码经过删减)先看函数prepare_page_table()[c]staticinlinevoidprepare_page_table(void){unsigne
- ARM linux 建立页表过程
kickxxx
paging_init用来建立页表,初始化zone的memorymapvoid*zero_page;
sort(&meminfo.bank,meminfo.nr_banks,sizeof(meminfo.bank[0]),meminfo_cmp,NULL);
build_mem_type_table();
sanity_check_meminfo();
prepare_page_table()
- kernel 启动过程之三, start_kernel()函数 概叙!init/main.c .
sanchuyayun
核心数据结构初始化--内核引导第一部分 start_kernel()中调用了一系列初始化函数,以完成kernel本身的设置。这些动作有的是公共的,有的则是需要配置的才会执行的。在start_kernel()函数中, 输出Linux版本信息(printk(linux_banner))设置与体系结构相关的环境(setup_arch())页表结构初始化(paging_init())使用"arch/alp
- java短路运算符和逻辑运算符的区别
3213213333332132
java基础
/*
* 逻辑运算符——不论是什么条件都要执行左右两边代码
* 短路运算符——我认为在底层就是利用物理电路的“并联”和“串联”实现的
* 原理很简单,并联电路代表短路或(||),串联电路代表短路与(&&)。
*
* 并联电路两个开关只要有一个开关闭合,电路就会通。
* 类似于短路或(||),只要有其中一个为true(开关闭合)是
- Java异常那些不得不说的事
白糖_
javaexception
一、在finally块中做数据回收操作
比如数据库连接都是很宝贵的,所以最好在finally中关闭连接。
JDBCAgent jdbc = new JDBCAgent();
try{
jdbc.excute("select * from ctp_log");
}catch(SQLException e){
...
}finally{
jdbc.close();
- utf-8与utf-8(无BOM)的区别
dcj3sjt126com
PHP
BOM——Byte Order Mark,就是字节序标记 在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输 字符"ZERO WIDTH NO-BREAK SPACE"。这样如
- JAVA Annotation之定义篇
周凡杨
java注解annotation入门注释
Annotation: 译为注释或注解
An annotation, in the Java computer programming language, is a form of syntactic metadata that can be added to Java source code. Classes, methods, variables, pa
- tomcat的多域名、虚拟主机配置
g21121
tomcat
众所周知apache可以配置多域名和虚拟主机,而且配置起来比较简单,但是项目用到的是tomcat,配来配去总是不成功。查了些资料才总算可以,下面就跟大家分享下经验。
很多朋友搜索的内容基本是告诉我们这么配置:
在Engine标签下增面积Host标签,如下:
<Host name="www.site1.com" appBase="webapps"
- Linux SSH 错误解析(Capistrano 的cap 访问错误 Permission )
510888780
linuxcapistrano
1.ssh -v hdfs@192.168.18.133 出现
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
错误
运行状况如下:
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuratio
- log4j的用法
Harry642
javalog4j
一、前言: log4j 是一个开放源码项目,是广泛使用的以Java编写的日志记录包。由于log4j出色的表现, 当时在log4j完成时,log4j开发组织曾建议sun在jdk1.4中用log4j取代jdk1.4 的日志工具类,但当时jdk1.4已接近完成,所以sun拒绝使用log4j,当在java开发中
- mysql、sqlserver、oracle分页,java分页统一接口实现
aijuans
oraclejave
定义:pageStart 起始页,pageEnd 终止页,pageSize页面容量
oracle分页:
select * from ( select mytable.*,rownum num from (实际传的SQL) where rownum<=pageEnd) where num>=pageStart
sqlServer分页:
- Hessian 简单例子
antlove
javaWebservicehessian
hello.hessian.MyCar.java
package hessian.pojo;
import java.io.Serializable;
public class MyCar implements Serializable {
private static final long serialVersionUID = 473690540190845543
- 数据库对象的同义词和序列
百合不是茶
sql序列同义词ORACLE权限
回顾简单的数据库权限等命令;
解锁用户和锁定用户
alter user scott account lock/unlock;
//system下查看系统中的用户
select * dba_users;
//创建用户名和密码
create user wj identified by wj;
identified by
//授予连接权和建表权
grant connect to
- 使用Powermock和mockito测试静态方法
bijian1013
持续集成单元测试mockitoPowermock
实例:
package com.bijian.study;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import org.junit.Before;
import org.junit.Test;
import or
- 精通Oracle10编程SQL(6)访问ORACLE
bijian1013
oracle数据库plsql
/*
*访问ORACLE
*/
--检索单行数据
--使用标量变量接收数据
DECLARE
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
BEGIN
select ename,sal into v_ename,v_sal
from emp where empno=&no;
dbms_output.pu
- 【Nginx四】Nginx作为HTTP负载均衡服务器
bit1129
nginx
Nginx的另一个常用的功能是作为负载均衡服务器。一个典型的web应用系统,通过负载均衡服务器,可以使得应用有多台后端服务器来响应客户端的请求。一个应用配置多台后端服务器,可以带来很多好处:
负载均衡的好处
增加可用资源
增加吞吐量
加快响应速度,降低延时
出错的重试验机制
Nginx主要支持三种均衡算法:
round-robin
l
- jquery-validation备忘
白糖_
jquerycssF#Firebug
留点学习jquery validation总结的代码:
function checkForm(){
validator = $("#commentForm").validate({// #formId为需要进行验证的表单ID
errorElement :"span",// 使用"div"标签标记错误, 默认:&
- solr限制admin界面访问(端口限制和http授权限制)
ronin47
限定Ip访问
solr的管理界面可以帮助我们做很多事情,但是把solr程序放到公网之后就要限制对admin的访问了。
可以通过tomcat的http基本授权来做限制,也可以通过iptables防火墙来限制。
我们先看如何通过tomcat配置http授权限制。
第一步: 在tomcat的conf/tomcat-users.xml文件中添加管理用户,比如:
<userusername="ad
- 多线程-用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1
bylijinnan
java多线程
public class IncDecThread {
private int j=10;
/*
* 题目:用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1
* 两个问题:
* 1、线程同步--synchronized
* 2、线程之间如何共享同一个j变量--内部类
*/
public static
- 买房历程
cfyme
2015-06-21: 万科未来城,看房子
2015-06-26: 办理贷款手续,贷款73万,贷款利率5.65=5.3675
2015-06-27: 房子首付,签完合同
2015-06-28,央行宣布降息 0.25,就2天的时间差啊,没赶上。
首付,老婆找他的小姐妹接了5万,另外几个朋友借了1-
- [军事与科技]制造大型太空战舰的前奏
comsci
制造
天气热了........空调和电扇要准备好..........
最近,世界形势日趋复杂化,战争的阴影开始覆盖全世界..........
所以,我们不得不关
- dateformat
dai_lm
DateFormat
"Symbol Meaning Presentation Ex."
"------ ------- ------------ ----"
"G era designator (Text) AD"
"y year
- Hadoop如何实现关联计算
datamachine
mapreducehadoop关联计算
选择Hadoop,低成本和高扩展性是主要原因,但但它的开发效率实在无法让人满意。
以关联计算为例。
假设:HDFS上有2个文件,分别是客户信息和订单信息,customerID是它们之间的关联字段。如何进行关联计算,以便将客户名称添加到订单列表中?
&nbs
- 用户模型中修改用户信息时,密码是如何处理的
dcj3sjt126com
yii
当我添加或修改用户记录的时候对于处理确认密码我遇到了一些麻烦,所有我想分享一下我是怎么处理的。
场景是使用的基本的那些(系统自带),你需要有一个数据表(user)并且表中有一个密码字段(password),它使用 sha1、md5或其他加密方式加密用户密码。
面是它的工作流程: 当创建用户的时候密码需要加密并且保存,但当修改用户记录时如果使用同样的场景我们最终就会把用户加密过的密码再次加密,这
- 中文 iOS/Mac 开发博客列表
dcj3sjt126com
Blog
本博客列表会不断更新维护,如果有推荐的博客,请到此处提交博客信息。
本博客列表涉及的文章内容支持 定制化Google搜索,特别感谢 JeOam 提供并帮助更新。
本博客列表也提供同步更新的OPML文件(下载OPML文件),可供导入到例如feedly等第三方定阅工具中,特别感谢 lcepy 提供自动转换脚本。这里有导入教程。
- js去除空格,去除左右两端的空格
蕃薯耀
去除左右两端的空格js去掉所有空格js去除空格
js去除空格,去除左右两端的空格
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g
- SpringMVC4零配置--web.xml
hanqunfeng
springmvc4
servlet3.0+规范后,允许servlet,filter,listener不必声明在web.xml中,而是以硬编码的方式存在,实现容器的零配置。
ServletContainerInitializer:启动容器时负责加载相关配置
package javax.servlet;
import java.util.Set;
public interface ServletContainer
- 《开源框架那些事儿21》:巧借力与借巧力
j2eetop
框架UI
同样做前端UI,为什么有人花了一点力气,就可以做好?而有的人费尽全力,仍然错误百出?我们可以先看看几个故事。
故事1:巧借力,乌鸦也可以吃核桃
有一个盛产核桃的村子,每年秋末冬初,成群的乌鸦总会来到这里,到果园里捡拾那些被果农们遗落的核桃。
核桃仁虽然美味,但是外壳那么坚硬,乌鸦怎么才能吃到呢?原来乌鸦先把核桃叼起,然后飞到高高的树枝上,再将核桃摔下去,核桃落到坚硬的地面上,被撞破了,于是,
- JQuery EasyUI 验证扩展
可怜的猫
jqueryeasyui验证
最近项目中用到了前端框架-- EasyUI,在做校验的时候会涉及到很多需要自定义的内容,现把常用的验证方式总结出来,留待后用。
以下内容只需要在公用js中添加即可。
使用类似于如下:
<input class="easyui-textbox" name="mobile" id="mobile&
- 架构师之httpurlconnection----------读取和发送(流读取效率通用类)
nannan408
1.前言.
如题.
2.代码.
/*
* Copyright (c) 2015, S.F. Express Inc. All rights reserved.
*/
package com.test.test.test.send;
import java.io.IOException;
import java.io.InputStream
- Jquery性能优化
r361251
JavaScriptjquery
一、注意定义jQuery变量的时候添加var关键字
这个不仅仅是jQuery,所有javascript开发过程中,都需要注意,请一定不要定义成如下:
$loading = $('#loading'); //这个是全局定义,不知道哪里位置倒霉引用了相同的变量名,就会郁闷至死的
二、请使用一个var来定义变量
如果你使用多个变量的话,请如下方式定义:
. 代码如下:
var page
- 在eclipse项目中使用maven管理依赖
tjj006
eclipsemaven
概览:
如何导入maven项目至eclipse中
建立自有Maven Java类库服务器
建立符合maven代码库标准的自定义类库
Maven在管理Java类库方面有巨大的优势,像白衣所说就是非常“环保”。
我们平时用IDE开发都是把所需要的类库一股脑的全丢到项目目录下,然后全部添加到ide的构建路径中,如果用了SVN/CVS,这样会很容易就 把
- 中国天气网省市级联页面
x125858805
级联
1、页面及级联js
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&l