zoukankan      html  css  js  c++  java
  • 华为内部面试题库(8)

    1、内核中有可能造成并发执行的原因(多选):(参考:Linux内核设计与实现,第二版,第8章)

    A、中断

    B、软中断和tasklet

    C、工作队列(注意工作队列、软中断和tasklet的原理)

    D、睡眠以及与用户空间同步

    E、内核抢占

    F、对称多处理

    答案:ABDEF

    试题解析:在一台运行 Linux 的计算机中,CPU 在任何时候只会有如下四种状态(OS可见):

    1 在处理一个硬中断(如中断上半部)。

    2 在处理一个中断下半部,如 softirqtasklet bh

    3 运行于内核态,但有进程上下文,即与一个进程相关。

    4 运行一个用户态进程。

    其中1,2,3运行于内核空间,分别可以被其上状态抢占;

    Linux内核是一个可抢占的内核,因此高优先级可抢占低优先级任务;

    多处理器,两个或者多个处理器同时执行代码

    因此ABDEF正确。

    工作队列、软中断和tasklet都是实现中断下半部的机制,但是工作队列是在每个CPU上起一个内核线程,执行工作队列里面的任务,因此工作队列本身不会造成并发执行。

     

    2、单处理器系统中,如果中断中不对共享数据访问,可以通过以下方式避免并发访问数据(多选):(参考:Linux内核设计与实现,第二版,第8章)

    A、关中断

    B、禁止调度

    C、禁止内核抢占且不请求重新调度

    D、使用spinlock对共享数据进行保护

    答案:ABC

    试题解析:单核情况下,进程只有在系统调用或者中断的情况下才会发生切换。只要保证在临界区不引用系统调用,禁止中断的情况下,可以保证互斥。

    单核系统中,spinlock替换为空,spinlock是针对多核并发。

     

    3、多处理系统中,下面解决并发数据访问的方式,错误的是(单选):(参考:Linux内核设计与实现,第二版,第9章)

    A、关中断

    B、原子操作

    C、自旋锁

    D、信号量

    答案:A

    试题解析:多核情况下,由于代码可以在多核上并发执行,因此在关闭本地CPU的中断情况下,无法保证并发的执行。

     

    4、关于原子操作的使用,错误的是(单选):(参考:Linux内核设计与实现,第二版,第9章)

    A、原子操作需要硬件支持(如原子性指令),操作系统本身无法单独实现

    BLinux内核中提供了两组原子操作接口整数操作以及bit操作

    C、对局部变量进行原子性操作是有意义的

    D、不同的硬件体系架构,原子性操作实现并不相同

    答案:C

    试题解析:对于局部变量的原子操作没有任何意义,因为局部变量是放在线程的栈中,而每个线程都有自己私有的栈,不存在并发的问题。

     

    5、关于自旋锁的使用,错误的是(单选):(参考:Linux内核设计与实现,第二版,第9章)

    A、不同的体系架构,自旋锁的实现方式不一样

    B、递归使用自旋锁会导致死锁

    C、使用自旋锁之前需要进行初始化,不能在没加锁的情况下进行开锁操作,内核中有配置选项对以上情况进行检测

    D、中断无法打断自旋锁保护的区域,在使用自旋锁时,不用考虑中断的情况

    答案:D

    试题解析:自旋锁会禁止抢占,但在没有关中断的情况下,可以被中断打断,为考虑中断等情况,内核中提供四种spinlock,分别为:

    spin_lock()

           使用广泛,用于无中断竞争的场景下;

    spin_lock_irq()

           保护的临界区会被中断打断,并在中断中访问临界区;该锁unlock时会打开之前关闭的中断,所以慎用;

    spin_lock_irqsave()

           保护中断也会访问的临界区,但在获取锁时会把之前的中断状态保存起来,释放锁的时候写回,因此没有spin_lock_irq()的问题。内核中驱动程序使用较多。

    spin_lock_bh()

           与下半部配合使用时,需要禁止下半部执行,用于中断下半部访问临界区的场景下。

  • 相关阅读:
    Google基本利用
    sqlmap
    kali中wireshark打开后错误
    Python Flask Jinja2模板引擎
    Python Flask学习
    Python 豆瓣日记爬取
    Python 函数装饰器
    Python 生成器
    ss源码学习--从协议建立到完成一次代理请求
    ss源码学习--工作流程
  • 原文地址:https://www.cnblogs.com/wangfengju/p/6173051.html
Copyright © 2011-2022 走看看