美文网首页
操作系统精华

操作系统精华

作者: voidFan | 来源:发表于2020-12-21 07:58 被阅读0次

    1、并发与并行

    并发可能多个任务交替执行。并行是同时执行

    2、用户态和内核态

    • 当一个进程在执行用户自己的代码时处于用户态,(特权级最低3级)。
    • 内核运行,特权级最高为0级。
    • 3G~4G为内核地址空间。
    • 用户态-->>内核态:系统调用、异常、外围设备的中断。

    3、liunx软链接和硬链接。

    • 硬链接:实际为文件建一个别名
    • ls -i 查看两个文件时,inode号是同一个。
    • ls -al 查看硬链接和原文件的文件类型
    • ls -ai 显示文件的硬链接数量
    • 硬链接只能用于文件,不能用于目录;
    • 软链接可以为目录建链接。
    • 软链接:建立一个指向,即链接文件内的内容是指向原文件的指针,它是两个文件。
    1. 文件A硬链接文件B、删除B后,A依然存在且可用。<随变删--指向同一个inode>
    2. 文件A软链接文件B、删除B后,A存在但不可用。

    4、死锁发生的条件,如何解决死锁

    • 互斥条件、
    • 请求保持、
    • 不可剥夺条件、
    • 循环等待条件。

    5、如何设计server,使其能够接收接收多个客户端的请求。

    多线程、io多路复用、线程池
    

    6、多线程与多进程之间的通信。

    • IPC进程间的通信:
    • a、进程间相互独立。内部资源(变量),别的进程不可见。
    • b、由内核提供一份公共资源,让多个进程可以看见。
    • c、条件:独立性、为了相互通信有共享资源。共享资源由操作系统内核实现。
      进程创建:
      fork() 进程,通过pid分辨父子进程getpid(), getppid()返回父进程的pid。
      fork()创建的子进程是完全复制父进程的资源。实际开发中,fork出来的子进程一般会执行exec()方法调用其它程序。父进程执行顺序无法确定时,如果父进程先结束;子进程会被init进程接管,成为孤儿进程(很多应用利用这点创建守护进程)。
      vfork()创建子进程,会阻塞父进程优先执行完。(共享父进程的资源)
      exec函数族:传入可执行文件或路径
    • a、execl、execlp、execlpe
    • b、execv、execvp、execvpe

    L:list,arg参数是一个序列
    V:vector,arg参数是一个数组,并且最后一个元素为null
    P:系统环境变量PATH

    7、多线程的互斥与同步

    互斥:两个线程不能同时访问公共资源的问题。
    同步:A线程要等到B线程完成某一操作后再继续。
    互斥锁(同步):mutex,是一种简单的加锁的方法,用来控制对共享资源的访问,互斥锁有两种操作。lock和unlock
    特点:原子性(os保证)、唯一性(只能一个线程锁定一个互斥量)、非繁忙等待(A线程先锁定一个互斥量,B线程再去锁定,则B挂起直到A释放后B唤醒再锁定)。
    条件变量(同步):自动阻塞一个线程,等待某条件发生为止,与互斥锁同时使用。可以睡眠等待某种条件出现。
    实现:利用线程间共享的全局变量进行同步的一种机制。
    原理:条件的检测是在互斥锁的保护下进行的。线程在改变状态前必须首先锁住互斥量。
    流程:初始化、等待条件成立、激活条件变量、清除条件变量
    读写锁(同步):

    进程、线程、协程的区别?

    进程:资源分配的最小单元,有独立的代码和数据空间。
    线程:任务调度和执行的基本单元。
    协程:用户态级的轻量级线程,相当于一个特殊的函数。一个物理线程可以拥有多个协程。
    2、进程间通信方式?<信号、信号量、管道、Socket、共存内存、消息队列>
    3、多线程同步方法? <互斥锁mutex、条件变量、信息量、读写锁rwlock>
    4、死锁、如何解决死锁?
    5、五种IO模型?阻塞IO、非阻塞IO、IO多路复用、信号驱动IO、异步IO。
    6、Linux虚拟内存地址空间的原理?虚拟内存的作用?虚拟内存和物理内存怎么对应?
    7、操作系统中进程的常见状态转换?
    8、程序在操作系统的内存布局?
    9、进程状态转换图,动态就绪,静态就绪,动态阻塞,静态阻塞?
    10、软链接和硬链接区别?
    11、问什么是大端小端以及如何判断大端小端?
    12、请你回答一下静态变量什么时候初始化?
    13、用户态和内核态区别?
    14、系统调用是什么,你用过哪些系统调用,和库函数有什么区别?
    15、请你说一说操作系统中的缺页中断
    16、请你回答一下fork和vfork的区别
    17、请问如何修改文件最大句柄数?
    18、请你说一说操作系统中的页表寻址
    19、请问单核机器上写多线程程序,是否需要考虑加锁,为什么?
    20、请问线程需要保存哪些上下文,SP、PC、EAX这些寄存器是干嘛用的
    21、请你说一说线程间的同步方式,最好说出具体的系统调用
    22、游戏服务器应该为每个用户开辟一个线程还是一个进程,为什么?
    23、请你说一说OS缺页置换算法
    24、请你说一说操作系统中的结构体对齐,字节对齐
    25、请你说一下虚拟内存置换的方式
    26、A a = new A; a->i = 10;在内核中的内存分配上发生了什么?
    27、给你一个类,里面有static,virtual,之类的,来说一说这个类的内存分布
    28、请问如何设计server,使得能够接收多个客户端的请求
    29、死循环+来连接时新建线程的方法效率有点低,怎么改进?
    30、请问怎么唤醒被阻塞的socket线程?
    31、请问怎样确定当前线程是繁忙还是阻塞?
    32、空闲的进程和阻塞的进程状态会不会在唤醒的时候误判?
    33、请问就绪状态的进程在等待什么?
    34、两个进程访问临界区资源,会不会出现都获得自旋锁的情况?
    35、假设临界区资源释放,如何保证只让一个线程获得临界区资源而不是都获得?
    36、系统调用是什么,你用过哪些系统调用,和库函数有什么区别?
    37、请你来说一说用户态到内核态的转化原理
    38、请你说一下源码到可执行文件的过程
    39、请你来说一下微内核与宏内核
    40、请你说一下僵尸进程
    41、请你说一说异步编程的事件循环
    42、请你回答一下操作系统为什么要分内核态和用户态
    43、请你回答一下为什么要有page cache,操作系统怎么设计的page cache
    44、server端监听端口,但还没有客户端连接进来,此时进程处于什么状态?
    45、请问如何设计server,使得能够接收多个客户端的请求
    46、死循环+来连接时新建线程的方法效率有点低,怎么改进?
    47、两个进程访问临界区资源,会不会出现都获得自旋锁的情况?
    48、假设临界区资源释放,如何保证只让一个线程获得临界区资源而不是都获得?
    49、请问怎么实现线程池

    相关文章

      网友评论

          本文标题:操作系统精华

          本文链接:https://www.haomeiwen.com/subject/yvnlnktx.html