操作系统面试题
不放过每一个知识点,尤其对容易混淆的东西要下更大工夫搞清楚,基础要牢固,小编整理了一些操作系统面试题给大家,希望对你有所帮助!
1. 进程和线程的区别。
进程(Process):是操作系统分配资源的单位
线程(Thread):是进程的一个实体,是CPU调度和分派的基本单位
进程在执行过程中拥有独立的内存单元,而多个线程共享内存。
同一进程内的线程间切换比进程间的切换要快,尤其是用户级线程间的切换。
2. 死锁的必要条件,怎么处理死锁。
死锁的必要条件:
互斥条件。某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有。
不可抢占条件。进程所获得的资源在未使用完毕之前,资源申请者不能强行地从资源占有者手中夺取资源,而只能由该资源的占有者进程自行释放。
占有且申请条件。进程至少已经占有一个资源,但又申请新的资源;由于该资源已被另外进程占有,此时该进程阻塞;但是,它在等待新资源之时,仍继续占用已占有的资源。
循环等待条件。存在一个进程等待序列{P1,P2,...,Pn},其中P1等待P2所占有的'某一资源,P2等待P3所占有的某一源,......,而Pn等待P1所占有的的某一资源,形成一个进程循环等待环。
解决死锁的方法:
死锁的预防:基本思想是要求进程申请资源时遵循某种协议,从而打破产生死锁的四个必要条件中的一个或几个,保证系统不会进入死锁状态
死锁的避免:不限制进程有关申请资源的命令,而是对进程所发出的每一个申请资源命令加以动态地检查(是否有发生死锁的可能性),并根据检查结果决定是否进行资源分配。这种方法的关键是确定资源分配的安全性。(安全序列、银行家算法、 虽然存在安全序列时一定不会有死锁发生,但是系统进入不安全状态(四个死锁的必要条件同时发生)也未必会产生死锁。当然,产生死锁后,系统一定处于不安全状态)。
死锁的检测与恢复
3. 内存管理方式:段存储,页存储,段页存储。
页存储:用户程序的地址空间被划分成若干固定大小的区域,称为“页”,相应地,内存空间分成若干个物理块,页和块的大小相等。可将用户程序的任一页放在内存的任一块中,实现了离散分配。
段存储:将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。
段页存储:分段式和分页式结合的存储组织方法,这样可充分利用分段管理和分页管理的优点。(1) 用分段方法来分配和管理虚拟存储器。程序的地址空间按逻辑单位分成基本独立的段,而每一段有自己的段名,再把每段分成固定大小的若干页。(2) 用分页方法来分配和管理实存。即把整个主存分成与上述页大小相等的存储块,可装入作业的任何一页。程序对内存的调入或调出是按页进行的,但它又可按段实现共享和保护。
4. 进程的几种状态。
5. IPC几种通信方式。
管道(pipe):管道包括三种:1)普通管道PIPE, 通常有种限制,一是半双工,只能单向传输;二是只能在父子进程间使用. 2)流管道s_pipe: 去除了第一种限制,可以双向传输. 3)命名管道:name_pipe, 去除了第二种限制,可以在许多并不相关的进程之间进行通讯.
信号量(semophore):信号量是一种计数器,可以控制进程间多个线程或者多个进程对资源的同步访问,它常实现为一种锁机制。实质上,信号量是一个被保护的变量,并且只能通过初始化和两个标准的原子操作(P/V)来访问。(P,V操作也常称为wait(s),signal(s))
信号(Signal):信号是Unix系统中使用的最古老的进程间通信的方法之一。操作系统通过信号来通知某一进程发生了某一种预定好的事件;接收到信号的进程可以选择不同的方式处理该信号,一是可以采用默认处理机制-进程中断或退出,一是忽略该信号,还有就是自定义该信号的处理函数,执行相应的动作。内核为进程生产信号,来响应不同的事件,这些事件就是信号源。信号源可以是:异常,其他进程,终端的中断(Ctrl-C,Ctrl+等),作业的控制(前台,后台进程的管理等),分配额问题(cpu超时或文件过大等),内核通知(例如I/O就绪等),报警(计时器)。
消息队列(Message Queue):消息队列就是消息的一个链表,它允许一个或者多个进程向它写消息,一个或多个进程向它读消息。Linux维护了一个消息队列向量表:msgque,来表示系统中所有的消息队列。消息队列克服了信号传递信息少,管道只能支持无格式字节流和缓冲区受限的缺点。
共享内存(shared memory):共享内存映射为一段可以被其他进程访问的内存。该共享内存由一个进程所创建,然后其他进程可以挂载到该共享内存中。共享内存是最快的IPC机制,但由于linux本身不能实现对其同步控制,需要用户程序进行并发访问控制,因此它一般结合了其他通信机制实现了进程间的通信,例如信号量。
套接字(socket):socket也是一种进程间的通信机制,不过它与其他通信方式主要的区别是:它可以实现不同主机间的进程通信。一个套接口可以看做是进程间通信的端点(endpoint),每个套接口的名字是唯一的;其他进程可以访问,连接和进行数据通信。
6. 什么是虚拟内存。
虚拟内存:逻辑上不分内外存,实现了逻辑上的“扩存”。
虚拟存储器具有请求调入、 置换功能,当所需要的页面不再内存中时,就要执行页面的请求调入算法。
7. 虚拟地址、逻辑地址、线性地址、物理地址的区别。
逻辑地址(虚拟地址):由程序产生的与段相关的偏移地址部分
线性地址:段中的偏移地址,加上相应段的基地址就生成了一个线性地址。如果启用了分页机制,那么线性地址可以再经变换以产生一个物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。
物理地址:在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址