嵌入式学习-01

1.大小端模式

1.1 大端模式

大端模式,就是数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中。地址由小到大,而数据由高位向低位放;

1.2 小端模式

小端模式,就是数据的低位,放在内存的低地址,数据的高位,放在内存的高地址中。

1.3 举例说明

例如0x1234,在大端模式下,在CPU内存中的存放方式如下:

内存地址0x40000x4001
存放内容0x120x34

而在小端模式下:

内存地址0x40000x4001
存放内容0x340x12

1.4 为什么会有大小端模式?

因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是C语言中除了8bit的char之外,还有16bit的short,32bit的long。对于16位,32位的CPU,必然存在多个字节安排的问题。

x86为小端模式,很多DSM,ARM都为小端模式,C51为大端模式。

1.5 如何判断大小端模式及C语言实现

联合体Union的存放顺序是所有成员都从低地址开始存放,可以利用该特性,来判断CPU对内存采用大端模式还是小端模式。代码如下:

int checkCPU(){
 union w{
    int a;
    char b;
    }c;
 c.a = 1;
 return(c.b);   
}

因为是从低地址开始存放,这样我们可以确定低地址存放的数据的地位还是数据的高位。

如果存放数据的高位,那么c.b 为 0,即为大端模式。

如果存放数据的低位,那么c.b 为 1, 即为小端模式。

2.死锁

2.1 死锁定义:

多个进程在 运行过程中因为争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法向前推进。

2.1 产生条件:

1. 互斥条件:进程对所分配的资源进行排他性使用,即在一段时间内某资源和只能由一个进程占用。如果此时还有其他进程请求该资源,则请求者只能等待,直到占有该资源的进程用毕释放。

2. 请求和保持条件: 指某个进行已经保持了至少一个资源,但又提出了其他的资源请求,但该资源被其他进程所占用。此时请求进程阻塞,但又不释放它所持有的其他资源。

3. 不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺。

4. 环路等待条件

3 时间片

时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。

4 堆和栈

4.1 栈

在C语言中,局部变量回存储在栈中。

栈是一种后入先出队列,在操作系统中,栈被用来保存一个函数调用所需要维护的信息,称为现场保护,需要保存的现场信息包括:ebp是栈底指针,esp是栈顶指针。

1. 函数的返回地址,参数

2. 临时变量

3. 上下文:寄存器

          

 举例:

1.当主函数中执行调用函数时先把参数自右向左压栈,比如changenumber(num1, num2);

先将num2入栈,再将num1入栈

2. 将主函数中当前指令的下一条指令入栈,即为保存将要执行的被调函数执行结束的下一条指令。

3. 开始执行被调函数,先保存旧地址old ebp, 和寄存器中的重要数据。将Num1和num2的值复制一份保存在被调函数的空间中,其空间顺序为num2, num1.

当被调函数执行结束,将old ebp读回寄存器,然后从return address开始执行,原来的ebp称为新的esp。

函数的返回值如何存储?

存储在eax寄存器中,然后调用方读取eax。若大于4个字节的返回值,则通过eax存储一个指针,实际内容存储在栈的其他位置。

4.2 堆

堆用于动态内存的分配,c语言中常用malloc/free进行申请和释放。

一般由程序眼分配释放,若程序员不释放,程序结束可由OS回收,每个进程,内核都维护着一个brk变量指向栈顶。

堆内存被一个进程中所有的线程所共享。但每个线程都有自己的独有堆栈。

4.3 进程和线程占有的资源对比: 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值