操作系统面试题-5

常考面试题

  1. 一个线程占多大内存?⭐⭐⭐

    一个linux的线程大概占8M内存。

    linux的栈是通过缺页来分配内存的,不是所有栈地址空间都分配了内存。因此,8M是最大消耗,实际的内存消耗只会略大于实际需要的内存(内部损耗,每个在4k以内)。

  2. 32位系统能访问4GB以上的内存吗?⭐⭐⭐

    正常情况下是不可以的。原因是计算机使用二进制,每位数只有0或1两个状态,32位正好是2的32次方,正好是4G,所以大于4G就没办法表示了,而在32位的系统中,因其它原因还需要占用一部分空间,所以内存只能识别3G多。要使用4G以上就只能换64位的操作系统了。

    但是使用PAE技术就可以实现 32位系统能访问4GB以上的内存。

    Physical Address Extension(PAE)技术最初是为了弥补32位地址在PC服务器应用上的不足而推出的。我们知道,传统的IA32架构只有32位地址总线,只能让系统容纳不超过4GB的内存,这么大的内存,对于普通的桌面应用应该说是足够用了。可是,对于服务器应用来说,还是显得不足,因为服务器上可能承载了很多同时运行的应用。PAE技术将地址扩展到了36位,这样,系统就能够容纳2^36=64GB的内存。

  3. 说说进程、线程、协程是什么,区别是什么?⭐⭐⭐⭐⭐

    1. 进程:程序是指令、数据及其组织形式的描述,而进程则是程序的运行实例,包括程序计数器、寄存器和变量的当前值。
    2. 线程:微进程,一个进程里更小粒度的执行单元。一个进程里包含多个线程并发执行任务。
    3. 协程:协程是微线程,在子程序内部执行,可在子程序内部中断,转而执行别的子程序,在适当的时候再返回来接着执行。

    区别

    1. 线程与进程的区别

      (1)一个线程从属于一个进程;一个进程可以包含多个线程。

      (2)一个线程意外死亡,可能导致进程挂掉;一个进程挂掉,不会影响其他进程。

      (3)进程是系统资源调度的最小单位;线程CPU调度的最小单位。

      (4)进程系统开销显著大于线程开销;线程需要的系统资源更少。

      (5)进程在执行时拥有独立的内存单元,多个线程共享进程的内存,如代码段、数据段、扩展段;但每个线程拥有自己的栈段和寄存器组。

      (6)进程切换时需要刷新TLB并获取新的地址空间,然后切换硬件上下文和内核栈,线程切换时只需要切换硬件上下文和内核栈。

      (7)通信方式不一样。

      (8)进程适应于多核、多机分布;线程适用于多核

    2. 线程与协程的区别:

      (1)协程执行效率极高。协程直接操作栈基本没有内核切换的开销,所以上下文的切换非常快,切换开销比线程更小。

      (2)协程不需要多线程的锁机制,因为多个协程从属于一个线程,不存在同时写变量冲突,效率比线程高。

      (3)一个线程可以有多个协程。

  4. 互斥量能不能在进程中使用?⭐⭐⭐⭐⭐

    不同的进程之间,存在资源竞争或并发使用的问题,所以需要互斥量

    进程中也需要互斥量,因为一个进程中可以包含多个线程,线程与线程之间需要通过互斥的手段进行同步,避免导致共享数据修改引起冲突。可以使用互斥锁,属于互斥量的一种。

  5. 协程是轻量级线程,轻量级表现在哪里?⭐⭐⭐⭐⭐

    1. 协程调用跟切换比线程效率高:协程执行效率极高。协程不需要多线程的锁机制,可以不加锁的访问全局变量,所以上下文的切换非常快。

    2. 协程占用内存少:执行协程只需要极少的栈内存(大概是4~5KB),而默认情况下,线程栈的大小为1MB。

    3. 切换开销更少:协程直接操作栈基本没有内核切换的开销,所以切换开销比线程少。

  6. 说说线程间通信的方式有哪些?⭐⭐⭐⭐⭐

    线程间的通信方式包括互斥量、信号量、条件变量、读写锁

    1. 互斥量:采用互斥对象机制,只有拥有互斥对象的线程才可以访问。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。
    2. 信号量:计数器,允许多个线程同时访问同一个资源。
    3. 条件变量:通过条件变量通知操作的方式来保持多线程同步。
    4. 读写锁:读写锁与互斥量类似。但互斥量要么是锁住状态,要么就是不加锁状态。读写锁一次只允许一个线程写,但允许一次多个线程读,这样效率就比互斥锁要高。
  7. 说说线程同步方式有哪些?⭐⭐⭐⭐⭐

    线程间的同步方式

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

<p> - 本专刊适合于C/C++已经入门的学生或人士,有一定的编程基础。 - 本专刊适合于互联网C++软件开发、嵌入式软件求职的学生或人士。 - 本专刊囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构等一系列知识点的讲解,并且最后总结出了高频面试考点(附有答案)共近400道,知识点讲解全面。不仅如此,教程还讲解了简历制作、笔试面试准备、面试技巧等内容。 </p> <p> <br /> </p>

全部评论
这里一个每添加一个线程,进程的额外开销是线程的调用栈的大小,这个是可以修改的,我的ubuntu 20.04是8M,具体多大根据系统和设定来看的,线程调用栈大小查询命令 ulimit -s
2 回复 分享
发布于 2021-04-20 00:13
如果是CPU密集型应用,则线程池大小设置为:CPU数目+1 如果是IO密集型应用,则线程池大小设置为:2*CPU数目+1 最佳线程数目 = (线程等待时间与线程CPU时间之比 + 1)* CPU数目 上面的CPU数目 应该是 CPU核心数目把?
点赞 回复 分享
发布于 2023-09-03 12:56 浙江
4,豆芽哥你表示的意思应该是协程和进程都需要互斥量是吗,如果是的话那你第一句是说进程也需要互斥量,这里表述是不是就有问题
点赞 回复 分享
发布于 2023-05-15 15:51 韩国
有个错误:一个线程挂掉,进程不一定挂掉,今天面试被面试官教育了
点赞 回复 分享
发布于 2022-09-19 12:39 湖南

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务