【Android】linux

android系统就是跑在linux上的系统。Linux层里面包含系统和硬件驱动等一些本地代码的环境。

linux的目录

  1. mount:
    用于查看哪个模块输入只读,一般显示为:
powershell 复制代码
[root@localhost ~]# mount
/dev/cciss/c0d0p2 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/cciss/c0d0p7 on /home type ext3 (rw)
/dev/cciss/c0d0p6 on /var type ext3 (rw)
/dev/cciss/c0d0p3 on /usr type ext3 (rw)
/dev/cciss/c0d0p1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/dm-0 on /home/book/upload/BookFile1 type ext3 (rw)
/dev/dm-1 on /home/book/upload/BookFile2 type ext3 (rw)
/dev/dm-2 on /backup type ext3 (rw)
/dev/dm-3 on /home/book/upload/BookFile3 type ext3 (ro)

如果发现有ro,就重新mount,或者umount以后再remount

  1. umount /dev/dm-3

    如果发现有提示"device is busy",找到是什么进程使得他busy
    fuser -m /mnt/data 将会显示使用这个模块的pid
    fuser -mk /mnt/data 将会直接kill那个pid

    然后重新mount即可。还有一种方法是直接remount,
    mount -o rw,remount /mnt/data

  2. 如何查看cpu占用状态?

    要查看CPU占用状态,可以使用以下命令:

  • top命令:在终端输入"top"命令,可以查看当前系统的进程信息和CPU占用情况。可以按"q"键退出。

  • htop命令:htop是top的升级版,可以在终端输入"htop"命令来查看CPU占用状态和进程信息。可以按"q"键退出。

  • ps命令:在终端输入"ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head"命令,可以查看当前运行的进程中CPU占用率最高的前几个进程。

  • mpstat命令:在终端输入"mpstat -P ALL"命令,可以查看每个CPU核心的使用情况。

  • sar命令:在终端输入"sar -u"命令,可以查看系统整体CPU使用率情况,也可以使用"sar -P ALL"查看每个CPU核心的使用情况。

注意:以上命令需要在终端中执行。在Android设备上,可以使用adb shell命令进入设备终端执行相应的命令。

  1. linux内核的启动过程
    有些设备需要解锁system分区

    在调试过程中,需要单独的替换某一个分区,可以通过 update 工具来替换,可以替换

    的分区有 bootloader,logo,recovery ,system,vendor 等

  2. Linux查看命令行历史命令记录(默认1000条命令历史操作记录)
    history
    history -w history.txt

Cache

Cache是集成在CPU内部的极高速缓存。一般来讲,它的访问速度几乎可以媲美CPU。CPU在访问Cache的时候几乎不会浪费多少时间,不过,速度的提升是用容量为代价的,容量很小。

为什么需要Cache ?当CPU访问内存的时候,并不是立刻就能访问到它想访问的内存,而是有个"WaitState"的过程。那么,把常用的数据放在Cache中,CPU在访问的时候直接访问Cache就行了,不用耗费时间去访问内存了。

在读内存的时候,CPU先读Cache,看看有没有想要的数据的"副本",有的话直接读取,没有的话在去读内存。写内存时,CPU先将数据写在Cache中,Cache写满后更新到内存中,同时清空Cache。

RAM

RAM(Random Access Memory)随机存储器。内容可按需随意存取,且存取的速度与存储单元的位置无关,掉电丢数据。

按照存储信息的不同,分为静态堆积存储器(Static RAM,SRAM)和动态随机存储器(Danamic RAM,DRAM)。

SRAM 不需要刷新电路既能保存数据;DRAM每隔一段时间,需要刷新充电一次,否则内部的数据会消失。

SRAM具有较高性能,但是集成度低,既相同容量的DRAM内存可设计成较小的体积,而SRAM却需要很大的体积,且功耗较高。

SRAM速度非常快,是目前读写最快的存储设备了,而且不需要刷新。缺点是价格比较贵,所以只在要求很苛刻的地方使用,比如CPU的一级缓存,二级缓存。

DRAM保留数据的时间很短,速度也比SRAM慢,不过还是比任何的ROM都要快,价格上比SRAM便宜很多,计算机内存就是DRAM的。

ROM

ROM(Read-Only Memory)只读存储器,是一种只能读出事先存储的数据的固态半导体存储器 ,掉电不丢数据。ROM也有很多种,PROM是可编程的ROM,PROM和EPROM(可擦除可编程ROM)两者区别是:PROM是一次性的,也就是软件烧录后,就无法修改了,这是早期产品了,现在已经不可能使用了;而EPROM是通过紫外线的照射擦除原先的程序,是一种通用的存储器。

还有一种EEPROM是通过电子擦除,价格很高,写入时间很长。手机软件一般放在EEPROM中。

Flash

闪存,是一种长寿命的非易失性(在断电情况下不丢数据)的存储器,数据删除不是以单个字节为单位而是以固定的区块为单位(注意:NOR Flash为字节存储),区块一般为256K到20MB。

Flash主要有两种:NOR Flash 和 NAND Flash。

任务Flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除操作。NAND Flash擦除十分简单,而NOR Flash则要求在进行擦除前要将目标块内所有的位都写1。

core,host,device

  1. 线程池的实现步骤

    线程池是一种常见的多线程并发处理模型,它可以有效地管理和控制多线程的执行,提高系统的性能和稳定性。线程池的实现步骤通常包括以下几个方面:

    创建线程池对象:线程池通常由一个线程池对象来管理,可以通过调用线程池类的构造函数来创建线程池对象。

    初始化线程池参数:在创建线程池对象之后,需要设置线程池的各项参数,包括线程池中线程的数量、任务队列的容量、线程池中线程的命名前缀、拒绝策略等。

    创建任务队列:任务队列用来存储待执行的任务,可以采用阻塞队列或非阻塞队列的方式实现。

    创建工作线程:在线程池初始化完成后,需要创建指定数量的工作线程,并将它们添加到线程池中。

    执行任务:当有任务提交到线程池时,线程池会将任务添加到任务队列中,等待工作线程来执行。

    执行拒绝策略:当任务队列已满且线程池中的所有线程都处于忙碌状态时,新提交的任务将无法被执行,这时就需要采取拒绝策略来处理。

    关闭线程池:当线程池不再需要使用时,需要将线程池中的所有工作线程停止,并释放线程池占用的资源。

    总的来说,线程池的实现步骤可以根据具体的应用场景和需求进行灵活调整,以达到最优的效果和性能。

  2. 有哪些线程同步的方法

    在多线程编程中,为了避免竞态条件和死锁等问题,通常需要使用线程同步方法来协调不同线程之间的操作。常见的线程同步方法包括:

    锁机制:包括互斥锁(Mutex)、读写锁(Reader-Writer Lock)、自旋锁(Spinlock)等,用于保证临界区代码的互斥执行,从而避免竞态条件。

    条件变量(Condition Variable):用于线程之间的通信和协调,例如等待某个事件的发生、唤醒等待的线程等。

    信号量(Semaphore):用于限制并发访问某个资源的线程数目,避免资源竞争。

    屏障(Barrier):用于控制多个线程在某个点上的同步,例如所有线程必须在该点执行完成后才能继续执行。

    原子操作(Atomic Operation):一些特殊的操作,例如比较交换、自增等,可以保证在并发环境下的原子性,从而避免竞态条件。

    读写锁(Reader-Writer Lock):一种特殊的锁,用于优化读操作与写操作的竞争,可以提高并发性能

    需要根据具体场景和需求选择合适的线程同步方法,避免出现竞态条件和死锁等问题,提高多线程程序的稳定性和性能。

  3. 什么是C++中的智能指针,shard_ptr是线程安全的吗,为什么不保证线程安全

    C++中的智能指针是一种用于自动管理内存的指针,可以防止内存泄漏和野指针的问题。智能指针是一个类对象,它封装了一个原始指针,并在析构时自动释放所持有的内存。 C++标准库提供了两种智能指针:std::unique_ptr和std::shared_ptr。

    std::shared_ptr是一种智能指针,可以在多个地方共享同一块内存,通过计数器来跟踪内存块的引用次数。当最后一个引用被销毁时,计数器将变为零,内存块将被释放。由于使用引用计数,因此std::shared_ptr是线程安全的。

    但是需要注意的是,即使std::shared_ptr是线程安全的,也并不保证使用它的代码是线程安全的。例如,如果多个线程访问相同的std::shared_ptr对象,但没有使用任何同步机制来保护这些访问,那么就可能会出现数据竞争和不一致的状态。因此,尽管std::shared_ptr本身是线程安全的,但使用它时需要注意线程安全问题。

  4. 运行一个.exe程序的详细流程可以分为以下步骤:

加载程序文件:操作系统将程序文件从磁盘中加载到内存中,创建一个进程并分配空间给程序。

解析导入表:程序中包含了很多函数调用,这些函数可能是由其他程序提供的。操作系统需要解析这些函数的入口地址,将这些入口地址填入程序的导入表中。

分配内存空间:程序在运行时需要使用内存空间,操作系统需要分配内存空间给程序,并将分配的地址返回给程序。

初始化程序:操作系统会执行程序的初始化代码,包括对全局变量和静态变量进行初始化。

执行程序:操作系统从程序的入口地址开始执行程序。

加载依赖的动态链接库:程序中可能依赖其他的动态链接库,操作系统需要加载这些动态链接库。

进程结束:程序执行完毕或者异常终止后,操作系统会释放程序占用的内存空间,并将进程退出。

相关推荐
m0_74823933几秒前
【PHP】部署和发布PHP网站到IIS服务器
android·服务器·php
海域云赵从友10 分钟前
香港 GPU 服务器托管引领 AI 创新,助力 AI 发展
运维·服务器·人工智能
费曼乐园27 分钟前
Zookeeper下面的conf目录下面的zoo.cfg
linux·分布式·zookeeper
小林爱28 分钟前
【Compose multiplatform教程14】【组件】LazyColumn组件
android·前端·kotlin·android studio·框架·多平台
网安kk43 分钟前
2025年三个月自学手册 网络安全(黑客技术)
linux·网络·python·安全·web安全·网络安全·密码学
网络安全(华哥)1 小时前
linux 网络安全不完全笔记
linux·笔记·web安全
牧杉-惊蛰1 小时前
html转PDF
android·pdf
有Li1 小时前
AutoFOX:一种冠状动脉X线造影与OCT的自动化跨模态3D融合框架|文献速递-视觉大模型医疗图像应用
运维·3d·自动化
BuluAI2 小时前
Lazydocker:高效便捷的Docker管理工具
运维·docker·容器
it's all you6 小时前
CentOS设置静态IP教程(2024年12月20日)
linux·tcp/ip·centos