嵌入式面试题收集五

信号量实现的底层原理,可不可以用一个全局变量代替信号的计数值

在这里插入图片描述
.

任务在内存中的组织形式

TCB任务控制块:用来记录任务的堆栈指针、任务当前状态、任务的优先级等一些与任务属性相关的数据结构表。任务控制块相当于任务的 “身份证”,TCB记录着任务的重要信息。对于系统内核而言,各个任务就是通过任务控制块链接成一个表
.

任务抢占的底层实现

通过一个抢占式任务调度器来实现,在这种调度方式中,系统总是选择优先级最高的任务进行调度,并且 一旦高优先级的任务准备就绪之后,它就会马上被调度而不等待低优先级的任务主动放弃 CPU,高优先级的任务抢占了低优先级任务的 CPU 使用权,这就是抢占
.

谈谈你对虚拟内存的理解

与虚拟内存密切相关的一个概念是物理内存而发展虚拟内存的必要性也是由直接使用物理内存的局限性所决定的 , 先不谈物理内存的有限性,假设物理内存无限大, 所有的程序都可以分配到属于自己的专属内存空间,但是我们限制不了一个程序对另一个程序的访问,如果碰到恶意修改数据的程序,就会导致被修改数据程序的崩溃,这是最不能忍受的事情, 其次,就是,如果程序直接跑在物理内存上,也是就说,我们每次运行程序,就得指定具体物理空间,这是很麻烦的事情,通过引入这虚拟内存就可以解决这两个问题,我们通过给程序分配虚拟内存,然后通过地址映射,与物理内存建立联系,我们只需要在地址映射的过程加入限制条件,就可以起到很好的隔离作用,也就是解决了第一个问题, 使用虚拟地址,程序将不在管具体物理内存分配的问题,这些工作将由地址映射来做,这也就解决了第二个问题
最后,取消假设,内存不可能无限大,在没有使用分页技术前,如果物理空间空闲内存不足以满足某个程序运行所需要的内存,就需要,将其他程序的数据先放入磁盘,需要时在读回,这样会产生大量的磁盘访问,极大的降低了效率
事实上 , 根据程序的局部性原理,当一个程序在运行时,在某个时间段内,它只是频繁地用到了一小部分数据,也就是说,程序的很多数据其实在一个时间段内都是不会被用到的。于是人们很自然地想到了更小粒度的内存分割和映射的方法,使程序的局部性原理得到充分的利用,大大的提高了内存的使用率,这种方法就是分页
.
.

内核程序中申请内存和应用程序时内存申请的区别

内核中申请内存空间的函数有kmalloc, kzalloc, vmalloc 。 应用程序申请内存用的函数是 malloc

区别 :

(1)kmalloc/kzalloc(kzalloc分配内存空间会有一个初始化清零的操作直接分配连续的物理地址(虚拟地址也是连续的)

(2)vmalloc分配连续的虚拟地址,但物理地址不一定连续。分配时实际分配了物理内存,不过这个物理内存页面是在公共的页表进行了映射,并没有在本进程的页表进行映射,当访问这段内存时,触发do_page_fault异常(缺页中断)才完成页表的同步工作。

(4)malloc是用户空间申请内存的方法,分配连续的虚拟地址,物理地址一般不会连续。在分配时并没有做实际物理页的分配动作,实际分配物理页的动作是在do_page_fault异常(缺页中断)处理中完成的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值