IT综合面试题大全

2018-11-17 21:45

操作系统、计算机网络、设计模

一:操作系统

1. 进程的有哪几种状态,状态转换图,及导致转换的事件。

状态:绪(Ready)状态 进程已获得除处理机外的所需资源,等待分配处理机资源,只要分配到CPU就可执行。在某一时刻,可能有若干个进程处于该状态。 2)运行状态 占用处理机资源运行,处于此状态的进程的数目小于等于CPU的数目。 3)阻塞状态 由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。该事件发生前即使把处理机分配给该进程,也无法运行。

转换解释:从状态转换图中,存在四种状态转换。当进程调度程序从就绪队列中选取一个进程投入运行时引起转换1;正在执行的进程如因时间片用完而被暂停执行就会引起转换2;正在执行的进程因等待的事件尚未发生而无法执行(如进程请求完成I/O)则会引去转换3;当进程等待的事件发生时(如I/O完成)则会引起转换4。

事件:就绪队列非空,则一个进程的转换3会立即引去另一个进程的转换1。这是因为一个进程发生转换3意味着正在执行的进程由执行状态变为阻塞状态,这时处理机空闲,进程调度程序必然会从就绪队列中选取一个进程并将它投入运行,因此只要就绪队列非空,一个进程的转换3能立即引起一个进程的转换1。 2. 进程与线程的区别。

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行 3. 进程通信的几种方式。

管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主

要作为进程间以及同一进程内不同线程之间的同步手段。

消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。

套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

4. 线程同步几种方式。(一定要会写生产者、消费者问题,完全消化理解) 临界区(CCriticalSection):通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 事件(CEvent):为协调共同对一个共享资源的单独访问而设计的。 互斥量(CMutex):为控制一个具有有限数量用户资源而设计。 信号量(CSemaphore):用来通知线程有一些事件已发生,从而启动后继任务的开始。 5. 线程的实现方式. (也就是用户线程与内核线程的区别)

根据操作系统内核是否对线程可感知,可以把线程分为内核线程和用户线程。

内核线程建立和销毁都是由操作系统负责、通过系统调用完成的,操作系统在调度时,参考各进程内的线程运行情况做出调度决定,如果一个进程中没有就绪态的线程,那么这个进程也不会被调度占用CPU。

和内核线程相对应的是用户线程,用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,用户进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。用户线程多见于一些历史悠久的操作系统,例如Unix操作系统,不需要用户态/核心态切换,速度快,操作系统内核不知道多线程的存在,因此一个线程阻塞将使得整个进程(包括它的所有线程)阻塞。由于这里的处理器时间片分配是以进程为基本单位,所以每个线程执行的时间相对减少为了在操作系统中加入线程支持,采用了在用户空间增加运行库来实现线程,这些运行库被称为“线程包”,用户线程是不能被操作系统所感知的。 引入用户线程,具体而言,有以下四个方面的优势: (1)可以在不支持线程的操作系统中实现。

(2)创建和销毁线程、线程切换代价等线程管理的代价比内核线程少得多。 (3)允许每个进程定制自己的调度算法,线程管理比较灵活。 (4)线程能够利用的表空间和堆栈空间比内核级线程多。 用户线程的缺点主要有以下两点:

(1)同一进程中只能同时有一个线程在运行,如果有一个线程使用了系统调用而阻塞,那么整个进程都会被挂起。

(2)页面失效也会产生类似的问题。

内核线程的优缺点刚好跟用户线程相反。实际上,操作系统可以使用混合的方式来实现线程。

6. 用户态和核心态的区别、7.用户栈和内核栈的区别。

当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进

程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程的内核态。因为中断处理程序将使用当前进程的内核栈。这与处于内核态的进程的状态有些类似。

用户态切换到内核态的3种方式:系统调用、异常、外围设备中断。 8.内存池、进程池、线程池。(c++程序员必须掌握) 自定义内存池的思想通过这个\池\字表露无疑,应用程序可以通过系统的内存分配调用预先一次性申请适当大小的内存作为一个内存池,之后应用程序自己对内存的分配和释放则可以通过这个内存池来完成。只有当内存池大小需要动态扩展时,才需要再调用系统的内存分配函数,其他时间对内存的一切操作都在应用程序的掌控之中。 应用程序自定义的内存池根据不同的适用场景又有不同的类型。 从线程安全的角度来分,内存池可以分为单线程内存池和多线程内存池。单线程内存池整个生命周期只被一个线程使用,因而不需要考虑互斥访问的问题;多线程内存池有可能被多个线程共享,因此则需要在每次分配和释放内存时加锁。相对而言,单线程内存池性能更高,而多线程内存池适用范围更广。

从内存池可分配内存单元大小来分,可以分为固定内存池和可变内存池。所谓固定内存池是指应用程序每次从内存池中分配出来的内存单元大小事先已经确定,是固定不变的;而可变内存池则每次分配的内存单元大小可以按需变化,应用范围更广,而性能比固定内存池要低。

9. 死锁的概念,导致死锁的原因.

死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等竺的进程称为死锁进程.

原因:系统资源不足、进程运行推进的顺序不合适、资源分配不当等。 10. 导致死锁的四个必要条件。

(1) 互斥条件:一个资源每次只能被一个进程使用。

(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 (3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 11. 处理死锁的四个方式。

1)忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,(鸵鸟策略) 2)检测死锁并且恢复。(检测与解除策略) 3)仔细地对资源进行动态分配,以避免死锁。(避免策略) 4)通过破除死锁四个必要条件之一,来防止死锁产生。(预防策略) 12. 预防死锁的方法、避免死锁的方法。

通过破除死锁四个必要条件之一,来预防死锁产生,有两种方法,一种是当其申请的资源得不到满足时,也必须放弃其原先占有的资源;另一种方法是只适用于申请资源的进程优先级比占有该资源的进程优先级高时,如果一个进程申请的资源被其它进程占用,而申请进程的优先级较高,那么它可以强迫占有资源的进程放弃。 仔细地对资源进行动态分配,以避免死锁。

13. 进程调度算法。(周转时间 = 程序结束时间 -- 开始服务时间、带权周转时间= 周转时间 / 要求服务时间)???

14. Windows内存管理的方式(块式、页式、段式、段页式). 内存管理是操作系统中的重要部分,两三句话恐怕谁也说不清楚吧~~我先说个大概,希望能够抛砖引玉吧 当程序运行时需要从内存中读出这段程序的代码。代码的位置必须在物理内存中才能被运行,由于现在的操作系统中有非常多的程序运行着,内存中不能够完全放下,所以引出了虚拟内存的概念。把哪些不常用的程序片断就放入虚拟内存,当需要用到它的时候在load入主存(物理内存)中。这个就是内存管理所要做的事。内存管理还有另外一件事需要做:计算程序片段在主存中的物理位置,以便CPU调度。 内存管理有块式管理,页式管理,段式和段页式管理。现在常用段页式管理。

块式管理:把主存分为一大块、一大块的,当所需的程序片断不在主存时就分配一块主存空间,把程序片断load入主存,就算所需的程序片度只有几个字节也只能把这一块分配给它。这样会造成很大的浪费,平均浪费了50%的内存空间,但是易于管理。

页式管理:把主存分为一页一页的,每一页的空间要比一块一块的空间小很多,显然这种方法的空间利用率要比块式管理高很多。

段式管理:把主存分为一段一段的,每一段的空间又要比一页一页的空间小很多,这种方法在空间利用率上又比页式管理高很多,但是也有另外一个缺点。一个程序片断可能会被分为几十段,这样很多时间就会被浪费在计算每一段的物理地址上(计算机最耗时间的大家都知道是I/O吧)。

段页式管理:结合了段式管理和页式管理的优点。把主存分为若干页,每一页又分为若干段。

15. 内存连续分配方式采用的几种算法及各自优劣。

1) 单一连续分配 是一种最简单的存储管理方式,其优点是软件处理简单,最大缺点是存储器不能充分利用。多用于单用户微机操作系统中。

2) 动态分区分配 是多道程序环境下各种存储管理方式中最简单的一种。它将内存划分成若干个分区,在每个分区中按照连续分配方式分配给一个作业。分区形式: a) 固定分区分配:指内存在处理作业前已被划分成若干个大小不等的分区,存储管理程序根据每个作业步的最大存储量分配一个足够大的分区给它。当找不到一个足够大的分区时,则通知作业调度挑选另一作业,这种方式分配和回收内存简单,但内存利用不充分,会产生―碎片‖空间。b) 可变分区分配:指内存事先并未被分区,只有当作业进入内存时,才根据作业的大小建立分区。其特点是分区的个数和大小都是可变的,但需要建立分配区表和空白区表,且表的长度是不固定的。

3) 可重定位分区分配 为使各分区中的用户程序能移到内存的一端,使碎片集中于另一端成为一个大分区,在程序执行过程中,需对作业移动过程中的与地址有关项进行调整。这种分配方法的优点是清除碎片,更大程度地利用内存空间,但必须硬件的支持,且要花费时间。 16. 动态链接及静态链接.

静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接 库。静态链接库与静态链接库调用规则总体比较如下。 17. 基本分页、请求分页储存管理方式。 ?

18. 基本分段、请求分段储存管理方式。 ?

19. 分段分页方式的比较各自优缺点。

a) 页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要(也是对用户透明的)。段是信息的逻辑单位,它含有一组其意义相对完整的信息(比如数据段、代码段和堆栈段等)。分段的目的是为了能更好的满足用户的需要(用户也是可以使用的)。 20. 几种页面置换算法,会算所需换页数。(LRU用程序如何实现?) ?

21. 虚拟内存的定义及实现方式。

虚拟内存,它的作用与物理内存基本相似,但它是作为物理内存的―后备力量‖而存在的,也就是说,只有在物理内存已经不够使用的时候,它才会发挥作用。

改变页面文件位置的方法是:用鼠标右键点击―我的电脑‖,选择―属性→高级→性能设置→高级→更改虚拟内存‖,在驱动器栏里选择想要改变到的位置 22. 操作系统的四个特性。 并发性(concurrency):指在计算机系统中存在着许多并发执行的活动。对计算机系统 而言,并发是指宏观上看系统内有多道程序同时运行,微观上看是串行运行。因为在 大多数计算机系统中一般只有一个CPU,在任意时刻只能有一道程序占用CPU。 共享性(sharing):系统中各个并发活动要共享计算机系统中的各种软、硬件资源,因此操作系统必须解决在多道程序间合理地分配和使用资源问题。 虚拟性(virtual):虚拟是操作系统中的重要特征,所谓虚拟是指把物理上的一台设备 变成逻辑上的多台设备。例如,在操作系统中采用了spooling技术,可以利用快速、 大容量可共享的磁盘作为中介,模拟多个非共享的低速的输入输出设备,这样的设备 称为虚拟设备。 异步性:在多道程序环境下允许多个进程并发执行,但只有进程在获得所需的资源后方能执行。在单处理机环境下,由于系统中只有一台处理机,因而每次只允许一个进程执行,其余进程只能等待。 23. DMA。

DMA方式,Direct Memory Access,也称为成组数据传送方式,有时也称为直接内存操 24. Spooling。

脱机输入和脱机输出

在多道环境下,可以用OS的一道管理程序实现从I/O设备输入数据并存放到磁盘上,模拟脱机输入;用OS的另一道管理程序将磁盘上的数据输出到I/O设备上,模拟脱机输出;这种假脱机I/O操作称为Spooling技术。

Spooling是一种虚拟设备技术、一种资源转换技术。 25. 外存分配的几种方式,及各种优劣。

连续分配:为每一个文件分配一组相邻接的盘块;物理上形成了顺序文件结构;外存上会出现― 碎片‖ ,用― 紧凑‖ 的方法解决。优缺点:顺序(批量)访问容易、速度快;要求有连续的存储空间(有时需要作紧凑处理)、必须事先知道文件的长度。

链接分配:离散分配方式。优缺点:消除了―碎片‖,有利于文件的增/删/改。隐式链接 在文件的每个目录项中,都含有指向链接文件第一盘块和最后一个盘块的指针,只适合于顺序访;显式链接,把用于链接文件各物理块的指针,显式地存放在内存的一张―链接表‖中。 索引分配:单级索引分配每个文件一个索引块(表);多级索引分配当文件较大,需要很多个索引块时,可以为各索引块建立一个索引表(块);混合索引分配方式。


IT综合面试题大全.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2013.4.10月考试课程及教材

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: