笔试——紫光展锐

原文链接:https://blog.csdn.net/weixin_42881419/article/details/104377941

1、启动地址

ARM无论从何种设备启动都是从0地址开始运行的;
powerPC通常是0x100或者0xFFF00100
8086CPU上电复位后,执行的第一条指令的地址是FFFF0H

2、内核的工作模式

1、用户模式(user):正常程序执行模式;
2、快速中断模式(FIQ):高优先级的中断产生会进入该种模式,用于高速通道传输;
3、外部中断模式(IRQ):低优先级中断产生会进入该模式,用于普通的中断处理;
4、特权模式(Supervisor):复位和软中断指令会进入该模式;
5、数据访问中止模式(Abort):当存储异常时会进入该模式;
6、未定义指令中止模式(Undefined):执行未定义指令会进入该模式;
7、系统模式(System):用于运行特权级操作系统任务;
8、监控模式(Monitor):可以在安全模式和非安全模式之间切换;

3、Kernel锁机制

锁是内核中使用最频繁,最基础的设施之一,在内核的各个模块中被大量使用。锁的本质是在并发过程中保证资源的互斥使用。Linux内核提供了多种锁,应用的场合也各不相同,主要包括:原子操作,信号量,读写锁,自旋锁,以及RCU锁机制等。

Linux的内核锁主要是自旋锁和信号量。

自旋锁(spin_lock)

自旋锁是内核中最基础的锁机制。自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元持有,调用者就一直循环在那里看是否该自旋锁的持有者已经释放了锁,"自旋"一词就是因此而得名。自旋锁适用于锁使用者保持锁时间比较短的情况。

信号量(semaphore/mutex)

信号量semaphore是一种睡眠锁,实现对多个同类资源的互斥访问,如果资源个数降为1个,就是互斥锁mutex。信号量实现原理如下:初始有n个同类资源,当某个线程获取(down操作)资源时,资源个数-1。当所有资源被分配完,此时当前线程被挂起在等待队列上,直到某个线程释放了(up操作)资源后,唤醒在等待队列上的线程重新获取资源。

4、iqr中断过程

CPSR:当前程序状态寄存器
SPSR:程序状态备份寄存器
R13:栈指针寄存器
R14:连接寄存器
R15:程序计数器

5、内存

已知设置MMU设置DD地址空间的页表属性是Nomal & Write-thorough。开启MMU并使能Cache后,往DDR空间写数据,会只写入DDR。

(1)内存又可以叫做主存。

是CPU能直接寻址的存储空间,由半导体器件制成。内存的特点是访问数据的速率快。当CPU采用高速缓存时,它的写内存操作有两种模式:

  • 穿透模式:每次写时,直接将数据写回内存中,效率相对较低;
  • 回写模式:写的时候先写入高速缓存cache,然后由高速缓存的硬件在周转使用缓冲线时自动写入内存,或者由软件主动地“冲刷”有关的缓冲线。
(2)MMU内存管理单元

它是中央处理器中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。

  • 原理:虚拟地址根据页表基地址寄存器找到页表,通过虚拟地址对应的部分找到条目。根据本身的不同设置决定是否需要寻找第二页表或者直接得出物理地址。

功能:对于程序而言,为了将程序分割成一张张的卡片(页面),然后再运行的时候将需要的部分嵌入到物理内存的卡槽(页框)里面。MMU就是为了完成操作系统的这个功能而设计的。MMU可以在被初始化后,形成的一个个虚拟地址对应到物理地址,将一张张的卡片分别映射到相应的物理内存中。举个例子:在linux中的每个进程都维护着自己的页表,在切换进程上下文的时候须要将页表首地址也记录下来( 即记录页表基地址寄存器的值,再将要被切换到的进程的页表基地址还原到这个寄存器中 )。这个时候不同进程的同一个虚拟地址都会对应着不同的页表项,从而对应着不同的物理地址了。

(3)DDR

双倍速率同步动态随机存储器,是内存的其中一种。

(4)SDRAM

(同步动态随机存储器)在一个时钟周期内只传输一次数据,它是在时钟的上升期进行数据传输;
而DDR内存则是一个时钟周期内传输两次数据,它能够在时钟的上升期和下降期各传输一次数据,因此称为双倍速率同步动态随机存储器。

(5)DRAM,SDRAM和SRAM

SRAM不需要刷新电路即能保存它内部存储的数据。
而DRAM(Dynamic Random Access Memory)每隔一段时间,要刷新充电一次,否则内部的数据即会消失。

6、汇编

str r1,[r2] ; 将r1中的值存到r2所指定的地址中
str r1,[r2,#4] ;将r1中的值存到r2+4所指定的地址中
str r1,[r2],#4 ;将r1中的值存到r2所指定的地址中, 同时r2=r2+4

ARM WFI和WFE指令

WFI(Wait for interrupt)和WFE(Wait for event)是两个让ARM核进入low-power standby模式的指令。

不同点

  • 对WFI来说,执行WFI指令后,ARM core会立即进入low-power standby state,直到有WFI Wakeup events发生。
  • 执行WFE指令后,根据Event Register(一个单bit的寄存器,每个PE一个)的状态,有两种情况:如果Event Register为1,该指令会把它清零,然后执行完成(不会standby);如果Event Register为0,和WFI类似,进入low-power standby state,直到有WFE Wakeup events发生。

ARM 使用什么技术来支持内存越界访问检测

Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。

Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的malloc和free或者 C++中的new和 delete。使用Valgrind的工具包,你可以自动的检测许多内存管理和线程的bug,避免花费太多的时间在bug寻找上,使得你的程序更加稳固。

一个典型的Linux C程序内存空间由如下几部分组成:

代码段(.text)。这里存放的是CPU要执行的指令。代码段是可共享的,相同的代码在内存中只会有一个拷贝,同时这个段是只读的,防止程序由于错误而修改自身的指令。
初始化数据段(.data)。这里存放的是程序中需要明确赋初始值的变量,例如位于所有函数之外的全局变量:int val=“100”。需要强调的是,以上两段都是位于程序的可执行文件中,内核在调用exec函数启动该程序时从源程序文件中读入。
未初始化数据段(.bss)。位于这一段中的数据,内核在执行该程序前,将其初始化为0或者null。例如出现在任何函数之外的全局变量:int sum;
堆(Heap)。这个段用于在程序中进行动态内存申请,例如经常用到的malloc,new系列函数就是从这个段中申请内存。
栈(Stack)。函数中的局部变量以及在函数调用过程中产生的临时变量都保存在此段中。

内存颗粒

很多时候,常听人们说到“内存颗粒”,其实这是港台地区对内存芯片的一种称呼(仅对内存),其他的芯片,港台则称为“晶片”,

在 芯片的内部,内存的数据是以位(bit)为单位写入一张大的矩阵中,每个单元我们称为CELL,只要指定一个行(Row),再指定一个列 (Column),就可以准确地定位到某个CELL,这就是内存芯片寻址的基本原理。这个阵列我们就称为内存芯片的BANK,也称之为逻辑 BANK(Logical BANK)。

内存芯片的容量是一般以bit为单位的。

GCC编译环境

少优化->多优化:
O0 -->> O1 -->> O2 -->> O3
-O0表示没有优化,-O1为缺省值,-O3优化级别最高

-O1:优化会消耗少多的编译时间,它主要对代码的分支,常量以及表达式等进行优化。
-O2:会尝试更多的寄存器级的优化以及指令级的优化,它会在编译期间占用更多的内存和编译时间。
-O3: 在O2的基础上进行更多的优化。
-Os:相当于-O2.5。是使用了所有-O2的优化选项,但又不缩减代码尺寸的方法。

-c 只编译并生成目标文件。
-E 只运行 C 预编译器。
-g 生成调试信息。GNU 调试器可利用该信息。

磁盘分区表

GPT:GUID磁盘分区表(GUID[globally unique identifier] Partition Table,缩写:GPT)。其含义为“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准。使用GUID分区表的磁盘称为GPT磁盘

MBR:Master Boot Record,即硬盘主引导记录分区表,只支持容量在 2.1TB 以下的硬盘,超过2.1TB的硬盘只能管理2.1TB,最多只支持4个主分区或三个主分区和一个扩展分区,扩展分区下可以有多个逻辑分区。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值