嵌入式基础知识(3)——操作系统

1、虚拟地址转换到物理地址

       第一种:base+bound技术,进程通过寄存器base和bound来转换内存,不能保证安全性,程序的不同内存需要连续,不能保证安全性,程序的不同内存区需要连续,不能动态管理。段技术:硬件为每个进程分配一组base和bound控制虚拟地址空间的一部分内存,称为段。每一段的虚拟地址空间是连续的,转换得到物理地址空间也是连续的,每个段之间不需要连续。这个技术可以很好的管理不同内存区,但是对于长度掌控的管理开销比较大,寻找一段长度合适的物理地址需要额外开销。页技术:将虚拟内存空间和物理内存空间皆划分为大小相同的页面,例如4kb、8kb和16kb等。并将页作为内存空间的最小分配单元,一个程序的一个页面(虚拟页面)可以存放在任何一个物理页面中。一个程序发出的虚拟地址由虚拟页面号和页内偏移值两部分组成,利用多级快表TLB可以提高虚拟转移物理地址的效率。

2、进程A执行,发生1一个中断,中断发了一个信号,会让更高优先级的进程B执行,这时候中断结束,应该返回进程A还是进程B。

    返回进程A。操作系统中中断优先级高于普通的进程,中断发生时,将保活进程A的现场并进入中断上下文,此时进程A依然是执行态:中断结束后,操作系统将恢复到A的现场并执行剩下的时间片,进程B的优先级虽然高,但需要等待A执行结束后下次调度时才可以执行。

3、如果两个进程,都要去调用一个设备驱动,设备驱动里面定义的变量在那个态?如果进程A访问并改变了这个变量并改变了这个量,那么进程B在访问,读到的值是改变后的值?

      驱动程序中的变量是在内核态中,因为操作系统只有内核态才能访问到硬件设备,驱动程序从内核态才能访问到硬件设备,驱动程序从内核态向用户态输出API以便调用和间接访问硬件设备,进程B访问的是改变后的量,只有在没有考虑并发编程的驱动程序才可能发生数据的不一致性,内核驱动程序将会被一个或者多个进程访问,对于共享的变量,需要加入互斥锁、自旋锁、信号量或者原子操作等同步技术保证数据的一致性。

4、两个进程的内核空间关系。

      用户空间中,每个进程的用户空间是相互独立的,互不相干。内核空间中,不同进程的内核之间是不共享的。之所以使用进程的内核栈而不是用户栈,是避免用户态下进程被抢占改变内核奔溃,因此每个进程在内核中有一个独立的内核栈。

5、驱动程序里面,如果有一个buffer,在不同的场景下需要定义不同大小。

     可以预编译一个结构体,包括长度变量和一个指针,长度标志由ioctl从应用程序输入,并动态申请和释放内存。也可以模块加载时预先申请不同大小的缓存,另一种办法是动态检测程序所需的缓存数量,采用多级缓存的方式,根据所需传递数据的大小动态申请分布式缓存。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值