Android通过命令启动APP的方法

1.首先手动启动APP,然后执行命令“adb shell dumpsys window | findstr mCurrentFocus”获取当前APP的activity 2. 执行命令adb shell am start-activity -S -W + "package name/a...

2019-06-13 19:59:25

阅读数 169

评论数 0

kernel-4.9内存回收核心流程

以32位系统为例 内存分配流程调用流程: alloc_pages() -->alloc_pages_node() -->__alloc_pages_node() -->__alloc_pages() -->__alloc_...

2019-04-14 17:55:36

阅读数 108

评论数 0

#pragma once与 #ifndef的区别

为了避免同一个文件被include多次 1#ifndef方式 2#pragma once方式 在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ .....

2019-04-09 23:46:04

阅读数 24

评论数 0

cgroup之memory cgroup(二)

memory cgroup起作用主要是限制各个进程使用内存大小,当其值超越限制值时会发生oom,讲当前进程清理掉。 memcg oom的主要运行流程如下: 首先进程在申请内存时会进行try_charge操作,此时会进行oom检测,如果是oom,则会把当前的memcg赋值给进程的memcg_in...

2019-04-09 17:05:53

阅读数 136

评论数 2

cgroup之 memory cgroup(一)

如前文所述,memcg的整体框架如下: 对于memcg,作为一个cgroup的subsystem,它遵循hierarchy的所有规则,另外,对于hierarchy中cgroup的层级对memcg管理规则的影响,主要分两方面: 1、 如果不启用hierarchy,即mem_cgroup-&a...

2019-04-09 15:36:42

阅读数 118

评论数 0

Android中cgroup文件系统的mount流程

我们知道Android起来之后cgroup的各个子系统的文件夹都放在dev目录下,例如: /dev/memcg/ /dev/cpuctrl/ /dev/cpuset/ /dev/acct/ /dev/blkio/ 以上这些文件夹都是在初始化时候在init.rc中进行mount的,代码目...

2019-04-08 22:43:10

阅读数 44

评论数 0

Linux cgroup的整体框架

最近因为项目原因,发现对于cgroup的知识严重匮乏,所以恶补了一下cgroup的相关知识。 cgroup指对进程进行分组,然后控制让他们的cpu,io以及memory的使用,和系统的性能息息相关。 一、首先是cgroup的整体框架图: 以上框图可以看出以下几点: 1. cgroup的...

2019-04-08 18:39:11

阅读数 72

评论数 0

内存回收中fastpath和kswapd以及direct reclaim的差异

fastpath、kswapd和direct reclaim都会扫描zone,且最后调用的函数都一样,那么他们有什么区别呢? fastpath和slowpath的区别在于,fastpath要求zone的unmapped file page必须大于zone规定的min_unmapped_pages...

2018-12-26 21:00:33

阅读数 296

评论数 0

内存回收的关键函数以及其功能

zone_wartermark_ok()主要用来判断当前zone的free pages个数是否大于参数的watermark的值,且当前zone存在连续的内存块满足内存分配时的2^order个页数,order为函数参数指定。 balance_pgdat():函数会先通过zone_balanced(...

2018-12-18 23:01:36

阅读数 123

评论数 0

Binder驱动介绍

看到一篇不错的关于binder驱动介绍的文章,转载一下,原文链接: https://www.jianshu.com/p/b826cbf3cb8d Binder驱动是Android专用的一个驱动程序,保持了和一般Linux驱动一样框架。Binder驱动不涉及任何外设,本质上只操作内存,负责将数据...

2018-11-27 21:40:56

阅读数 56

评论数 0

schedule_timeout

fastcall signed long __sched schedule_timeout(signed long timeout) {     struct timer_list timer;     unsigned long expire;     switch (timeout)    ...

2018-09-26 14:32:57

阅读数 177

评论数 0

page的几个比较中重要的flag

_count:表示内核引用该页面的次数,当_count为0时表示该页面为空闲或者即将被释放,当count大于0时表示该页面正在被使用,暂时不会被释放。 _mapcount:表示该页面被进程映射的个数,即已经映射了多少个pte页表。_mapcount为-1表示没有pte映射页面中去,_mapcou...

2018-09-11 20:31:22

阅读数 104

评论数 0

RMAP反向映射

看了一下关于RMAP的东西,感觉看的云里雾里,现在简单总结下RMAP的作用: 产生背景: 我们知道一个page可以被多个进程的多个虚拟地址映射到,但是如果需要从page找到所有映射这个page的虚拟地址需要同时访问系统当前所有进程的进程空间的VMA,从中去寻找是否有虚拟地址映射到了此页面,对于...

2018-09-07 17:06:04

阅读数 269

评论数 0

DDR3 内存带宽计算

内存带宽计算公式:带宽=内存核心频率×内存总线位数×倍增系数。      先容我从DDR的技术说起,DDR采用时钟脉冲上升、下降沿各传一次数据,1个时钟信号可以传输2倍于SDRAM的数据,所以又称为双倍速率SDRAM。它的倍增系数就是2。     DDR2仍然采用时钟脉冲上升、下降支各传一次数...

2018-09-07 15:05:12

阅读数 1818

评论数 0

do_swap_page函数

前面已经讲过,当pte所对应的page不在内存中,且pte对应的内容不为0时,表示此时pte的内容所对应的页面在swap空间中,缺页异常时会通过do_swap_page()函数来分配页面: static int do_swap_page(struct mm_struct *mm, struct...

2018-09-06 01:44:16

阅读数 398

评论数 0

缺页异常的几种情况处理机制简介

匿名页面: do_anonymous_page(): static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long address, pte_t *page_tab...

2018-09-05 23:18:36

阅读数 838

评论数 0

页面锁

lock_page 可以占用这个页面,这样其他进程要使用这个页时只能在睡眠中等待 static inline void lock_page(struct page *page) { #这里提示在使用lock_page这个函数时会等待 might_sleep(); #检查是否可以锁定这个pa...

2018-09-05 18:41:37

阅读数 156

评论数 0

线程被IO卡住的原因之一

在内存trace中经常遇到线程uninterruptable sleep,而打出来的trace可以看到是如下: wait_on_page_bit_killable+0xb0/0xcc __lock_page_or_retry+0xb8/0xf4 filemap_fault+0x4cc/0x630...

2018-09-05 17:45:51

阅读数 1500

评论数 0

缺页异常详解

首先明确下什么是缺页异常,CPU通过地址总线可以访问连接在地址总线上的所有外设,包括物理内存、IO设备等等,但从CPU发出的访问地址并非是这些外设在地址总线上的物理地址,而是一个虚拟地址,由MMU将虚拟地址转换成物理地址再从地址总线上发出,MMU上的这种虚拟地址和物理地址的转换关系是需要创建的,并...

2018-09-04 20:22:20

阅读数 85

评论数 0

handle_mm_fault执行流程

__handle_mm_fault() handle_pte_fault()

2018-09-04 15:23:36

阅读数 244

评论数 0

提示
确定要删除当前文章?
取消 删除