操作系统笔、面试题整理

来源:互联网 发布:dfu刷机会清空数据吗 编辑:程序博客网 时间:2024/06/01 09:17

面试中关于操作系统常用的题:

-----------------------------------------------------------------华丽的分割线----------------------------------------------------------------------

1.请描述进程和线程的差别

答案:

进程是程序的一次执行。线程可以理解为进程中执行的一段程序片段。在一个多任务环境下面的概念可以帮助我们理解两者间的差别。

进程间是独立的,这表现在内存空间、上下文环境上;线程运行在进程空间内。一般来讲(不使用特殊技术),进程无法突破进程边界存取其他进程内的存储空间;

而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间。

同一进程中的两段代码不能够同时执行,除非引入线程。

线程是属于进程的。当进程退出时该进程所产生的线程都会被强制退出并清除。线程占用的资源要少于进程所占用的资源。进程和线程都可以有优先级。

-----------------------------------------------------------------华丽的分割线----------------------------------------------------------------------

2.windows用来定位DLL的搜索路径(笔试中的选择题)

答案:Window平台的大多数程序都使用各种动态链接库(DLL)来避免重复实现功能。操作系统为每个程序加载若干

个DLL,具体由程序的类型决定。当程序不指定DLL的绝对位置时,将使用默认的搜索顺序来找到它。默认情况下,

操作系统所使用的搜索顺序为:

(1)内存 (2)KnownDLLs  (3)清单与.local (4)应用程序目录 (5)当前工作目录 (6)系统目录 (&)路径变量

由于《程序猿面试宝典》上这道题的解释与答案不一致,可以肯定的是他上面提供的答案是错误的。

上网查了一下,网上给出的答案:

通过隐式和显示链接,Windows首先搜索“已知DLL”,如Kernel32.dll和User32.dll。

WIndows然后按如下顺序搜索DLL:

1.当前进程的可执行模块所在的目录

2.当前(工作)目录

3.Windows系统目录。GetSystemDirectory函数检索此目录的路径。

4.Windows目录。GetWindowsDirectory函数检索此目录的路径。

5.PATH环境变量中列出的目录。

基本与《宝典》上的解释一致。

-----------------------------------------------------------------华丽的分割线----------------------------------------------------------------------

3.DLL文件是什么?它有几种调用方式?

答案:DLL文件(动态链接库文件)是一种不能单独运行的文件,它允许程序共享执行特殊任务所必须的代码和其他

资源。比较大的应用程序都有很多模块组成,这些模块分别完成相对独立的功能。它们彼此协作来完成整个软件系统

的工作。可能存在一些模块的功能较为通用,在构造其他软件系统时仍会被使用。在构造软件系统时,如果将所有模

块的源代码都静态编译到整个应用程序EXE文件中吗,会产生一些问题:一个是增加了应用程序的大小,会占用更多

的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费;另一个是,在编写大的EXE程序时,在

每次修改重建时都必须调整编译所有源代码,增加了编译过程的复杂性,也不利于阶段性的单元测试。

一般来说,DLL是一种磁盘文件,以.dll、.DRV、.FON、.SYS和许多以.EXE为扩展名的系统文件都可以是

DLL。它由全局数据、服务函数和资源组成,在运行时系统加载到调用进程的虚拟空间中,成为调用进程的一部分。

如果与其他DLL之间没有冲突,该文件通常映射到进程虚拟空间的同一地址上。DLL模块中包含各种导出函数,用

于向外界提供服务。DLL可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序是相同的堆栈模式;

一个DLL在内存中只有一个实例;DLL实现了代码的封装性;DLL的编制与具体的编程语言及编译器无关。


调用方式有以下两种:

1)静态调用方式:由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码,此方式简单实用,但不够灵活

,只能满足一般要求。

2)动态调用方式:是由编程者用API函数加载和卸载DLL来达到调用DLL的目的,使用上较为复杂,但能更加有效地

使用内存,是编制大型应用程序时的重要方式。

正因为DLL有占用内存小,好编辑等特点,所有有很多电脑病毒都是DLL格式文件。但不能单独运行。动态链接库

通常都不能直接运行吗,也不能接受消息。它们是一些独立的文件,其中包含能被可执行程序或其他DLL调用来

完成某项工作的函数。只有在其他模块调用动态链接库中的函数时,它才发挥作用。

-----------------------------------------------------------------华丽的分割线----------------------------------------------------------------------

4.内存管理

面试例题1:垃圾回收的优点和原理是什么?并考虑两种回收机制。

答案:Java语言中一个显著的特点就是引入了垃圾回收机制,使C++程序猿最头疼的内存管理的问题引刃而解,它使

得Java程序猿在编写程序时候不需要考虑内存管理。由于有垃圾回收机制,Java中的对象不再有“作用域”的概念,只

有对象的引用才有“作用域”。垃圾回收可以有效地防止内存泄露,在不可预知的情况下对内存堆中已经死亡的或者长

时间没有使用的对象进行清除和回收,程序猿不能实时地调用垃圾回收器对某个对象或所有对象进行垃圾回收。

回收机制有分代复制垃圾回收、标记垃圾回收和增量垃圾回收3种。

ps:其实我对具体的回收机制没有怎么了解过,感兴趣的推荐《深入理解Java虚拟机》这本书。


面试例题2:介绍一下“快表”和Cache

答案:1、快表--Cache在OS中运动的典型范例

在操作系统中,为提高系统的存取速度,在地址映机制中增加一个小容量的联想寄存器(相联寄存器),即快

表,用来存放当前访问最频繁的少数活动页面的页号。当某用户需要存取数据时,根据数据所在的逻辑页号在快表

中找到其对应的内存块号,再联系页内地址,形成物理地址。如果在快表中没有相应的逻辑页号,则地址映射仍可以

通过内存中的页表进行,得到空闲块号后须将该块号填入快表的空闲块中。如果快表中没有空闲块,则根据淘汰算法

淘汰某一行,再填入新的页号和块号。

快表查找内存的物理地址消耗的时间大大降低了,使得系统效率得到了极大的提高。

例如,Linux使用页面Cache的目的是加快对磁盘上文件的访问。内存映射文件以每次一页的方式读出并将

     这些页面存储在页面Cache中。

2.高速缓冲存储器(Cache) --Cache在CPU中运用的典型范例

CPU的执行速度越来越快,系统架构越来越先进,而主存的结构和存取速度改进则较慢,因此,高速缓存技术将

越来越重要。

高速缓冲存储器(Cache)是位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在Cache中

的数据是内存中的一小部分。但这一小部分是短时间内CPU即将访问的。当CPU调用大量数据时,就可避开内存直接

从Cache中调用,从而加快读取速度。由此可见,在CPU中加入Cache是一种高效的解决方案,这样整个内存储器(

Cache+内存)就编程了既有Cache的高速度又有内存的大熔炉的存储系统了。Cache对CPU性能的影响很大,这主要

是由CPU的数据交换顺序和CPU与Cache间的带宽引起的。


-----------------------------------------------------------------华丽的分割线----------------------------------------------------------------------


持续更新中。。。

0 0