操作系统之常考面试题
目录:
- 操作系统概述
- 进程的描述与控制
- 存储器管理
- 处理调度与死锁
注:在牛客上复习java摘录的,便于自己复习。
地址连接:https://www.nowcoder.com/tutorial/94/a9220944ad014f55be4015c19247af91
1. 操作系统概述
-
谈谈,64位和32位的区别?
参考回答:
操作系统只是硬件和应用软件中间的一个平台。32位操作系统针对的32位的CPU设计。64位操作系统针对的64位的CPU设计。 -
谈谈,CentOS 和 Linux的关系?
参考答案:
CentOS是Linux众多得发行版本之一,linux有三大发行版本(:Slackware、debian、redhat),而Redhat有收费的商业版和免费的开源版,商业版的业内称之为RHEL系列,CentOS是来自于依照开放源代码规定而公布的源代码重新编译而成。可以用CentOS替代商业版的RHEL使用。两者的不同,CentOS不包含封闭源代码软件,是免费的。
2. 进程的描述与控制
-
请解释一下,LINUX下的线程,GDI类
参考回答:
LINUX实现的就是基于核心轻量级进程的”一对一”线程模型,一个线程实体对应一个核心轻量级进程,而线程之间的管理在核外函数库中实现。GDI类为图像设备编程接口类库。
2. 进程和线程的区别是什么?(重点)
- 进程是资源分配的最小单位,线程是程序执行的最小单位。
- 开销方面:每个进程独有独立的代码和数据空间,程序之间的切换会有较大的开销;线程可以看做是轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。
- 所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)
- 内存分配:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而已,除CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程之间只能共享资源。
- 包含关系:一个进程可以有多个线程,线程是进程的一部分,所以线程也被称为轻量级进程。
3. 谈一谈,系统线程数量上限是多少?
参考回答:
Linux 系统中单个进程的最大线程数有其最大的限制 PTHREAD_THREADS_MAX。
这个限制可以在/usr/include/bits/local_lim.h中查看 ,对 linuxthreads 这个值一般是 1024,对于 nptl 则没有硬性的限制,仅仅受限于系统的资源。
这个系统的资源主要就是线程的 stack 所占用的内存,用 ulimit -s 可以查看默认的线程栈大小,一般情况下,这个值是8M=8192KB。
(普通用户最大线程数为1024,root用户没有限制)
-
请问,如何杀死一个进程?
参考回答:
Kill pid
3. 存储器管理
-
你怎么理解操作系统里的内存碎片,有什么解决办法?
参考回答:
内存碎片分为:内部碎片和外部碎片。内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间;
内部碎片是处于区域内部或页面内部的存储块。占有这些区域或页面的进程并不使用这个存储块。而在进程占有这块存储块时,系统无法利用它。直到进程释放它,或进程结束时,系统才有可能利用这个存储块。
单道连续分配只有内部碎片。多道固定连续分配既有内部碎片,又有外部碎片。
外部碎片指的是还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域。
外部碎片是出于任何已分配区域或页面外部的空闲存储块。这些存储块的总和可以满足当前申请的长度要求,但是由于它们的地址不连续或其他原因,使得系统无法满足当前申请。
使用伙伴系统算法。
-
介绍一下,什么是页式存储?
参考回答:
主存被等分成大小相等的片,称为主存块,又称为实页。
当一个用户程序装入内存时,以页面为单位进行分配。页面的大小是为2n ,通常为1KB、2KB、2n KB等
4. 处理调度与死锁
-
请谈一谈,系统如何提高并发性?
考察:操作系统综合性参考回答:
1、提高CPU并发计算能力
(1)多进程&多线程
(2)减少进程切换,使用线程,考虑进程绑定CPU
(3)减少使用不必要的锁,考虑无锁编程
(4)考虑进程优先级
(5)关注系统负载2、改进I/O模型
(1)DMA技术
(2)异步I/O
(3)改进多路I/O就绪通知策略,epoll
(4)Sendfile
(5)内存映射
(6)直接I/O
2. 请谈一谈,什么情况下会发生死锁?解决死锁的策略有哪些?(重点)
-
什么是死锁?
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 -
死锁的四个必要条件
互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
不剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。 -
处理死锁的策略
1.死锁预防。如进程需要的所有资源,在一开始就全部申请好得到之后再开始执行。
2.死锁避免。如进程每次申请申请资源的时候,根据一定的算法(银行家算法),去看该请求可不可能造成死锁,如果可能,就不给它分配该资源。
3.死锁处理。破坏四个必要条件的其中一个,比如kill掉一个进程。
4.死锁忽略。