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

 1、自旋锁和信号量在互斥使用时需要注意的问题,在中断服务程序里面的互斥如何使用自旋锁和信号量

       自旋锁会一直自旋等待,不会休眠:而信号量是等待信号来唤醒进程,进程会睡眠。使用时注意希望长等待不吃系统资源时使用信号量,反过来短期的等待使用自旋锁,但会增加系统开销,中断后不可以使用信号量,因为中断不能睡眠。

2、异步IO和同步IO的区别

      同步和异步来自于Linux内核态和用户态的切换,通常IO包括网络IO和来自设备/文件的IO,完成IO操作分两步,发起请求和执行。当请求被阻塞时,为同步IO,否则为异步IO。同步IO进程需要等待IO执行完毕,而异步IO在IO执行时,进程可以继续执行,不陷入阻塞。

3、Linux中断的原理和开发方法

      Linux中断处理过程分为两部分:上半部:上半部就是中断处理函数。将处理过程比较快、不会占用很长的处理就可以放在上半部完成。如果中断过程比较耗时,那就将比较耗时的代码提取出来,交给下半部去执行,这样中断函数就会快进快出。一般来说,不希望被其他中断打断、对时间敏感、和硬件有关的任务建议放在中断上半部。

4、进程的几个状态和转换条件

    进程状态包括就绪态,运行态,阻塞态,新建态和退出态。进程首次创建并未参与调度为新建态,从新建态做好准备(初始化成功)等待调度为就绪态,内核(cpu)调度此进程,此进程就从就绪态转为运行态,进程执行完内核分配的时间片后,就又会从运行态转为就绪态,等待内核的调度,如果进程在执行过程中需要等待外部条件(例如IO)才能执行,则进程从运行态转为阻塞态,当需要的外部条件满足时,进程就会从阻塞态转为就绪态,当进程终止或者异常,进程进入退出态。

5、MMU和TLB的理解

    MMU是内存管理单元,他负责处理中央处理器(CPU)的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制,在简单的计算机体系结构中,负责总线的仲裁以及存储体切换。TLB传输后备缓冲器是一个内存管理单元用于改进虚拟地址到物理地址的转换速度的缓存,TLB是一个小的、虚拟寻址的缓存,其中每一行都保存着由单个的PTE组成的块,TLB专门用来缓存内存中的页表项一般放在MMU中,TLB包括一个页面的相关信息(有效位、虚拟页号、修改位、物理页帧号等)。一般处理器访问虚拟地址时,会先在TLB中查询。如果TLB没有,则访问页表,如果TLB中有,则直接从TLB中获取物理地址。

 补充上一章的一点知识:

应用程序申请内存函数:void *malloc(unsigned int size);或者用c++的newl来创建。

kmalloc()函数:void *kmalloc(size_t size,gfp_t flags);

kzalloc()函数:tatic inline void *kzalloc(size_t size,gfp_t flags);

vmalloc()函数:vavoid *vmalloc(unsigned long size);

你可能感兴趣的:(嵌入式知识,linux)