个人扎记

广交天下好友:

www.lfsblack.com  IT幽灵界


操作系统原理中的作业、进程、线程、管程的定义

作业:     用户在一次解题或一个事务处理过程中要求计算机系统所做工作的集合。它包括用户程序、所需数据及控制命令等。作业是由一系列有序的步骤组成的

进程:    一个程序在一个数据集合上的一次运行过程。所以一个程序在不同数据集合上运行,乃至一个程序在同样的数据集合上的多次允许都是不同的进程

线程:    线程是进程中的一个实体,是被系统独立调度和执行的基本单位
管程:    管程实际上是定义了一个数据结构和在该数据结构上的能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据



进程间通信如何实现?

现在最常用的进程间通信方式有   信号、信号量、消息队列、共享内存
所谓进程通信,就是不同进程之间进行一些“接触”。这些接触有简单,也有复杂。机制不同,负责度也不一样。
通信是一个广义上的意义,不仅仅指传递一些信息。
信号和信号量不同的,它们虽然都可用来实现同步和互斥,但信号是使用信号处理器来进行的,信号量是通过
P,V操作来实现的。消息队列是比较高级的一种进程间通信方法,因为它真的可以在进程间传送信息
一个消息队列可以被多个进程所共享;如果一个进程的消息太多,一个消息队列放不下,也可以多于一个消息
队列


死锁deadlocks是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种相互等待的现象,若无外力
作用,它们都将无法推进下去,此时称为系统处于死锁状态或系统产生了死锁
产生死锁的4个必要条件:
1,互斥条件:一个资源每次只能被一个进程使用
2,请求与保持条件:一个进程因请求资源而阻塞时,对已获得资源保持不放
3,不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺
4,循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系

这4个条件是死锁的必要条件,只要死锁发生,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁

死锁的解除与预防方法如下:
理解了死锁的原因,尤其是产生死锁的4个必要条件,就可以最大可能地避免、预防和解除死锁。所以,在系统设
计、进程调度等方面注意如何不让4个必要体条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资
源。此外,也要防止进程在处于等待状态的情况下占用资源,在系统运行过程中,对进程发出的每一个能够满足的
资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统可能发生死锁,则不予分配,否则予以
分配。因此,对资源的分配要给予合理的规划
根据产生死锁的4个必要条件,只要使其中之一不能成立,死锁就不会出现。为此,可以采取下列3种预防措施:
1,采用资源静态分配策略,破坏“部分分配”条件
2,允许进程剥夺使用其他进程占有的资源,从而破坏“不可剥夺”条件
3,采用资源有序分配法,破坏“环路”条件

注意:互斥条件无法被破坏
死锁的避免不严格的限制死锁的必要条件的存在,而是系统在系统运行过程中小心的避免死锁的最终发生。避免死锁算法中最具有代表性的算法是Dijkstra E.W
提出的银行家算法,该算法需要检查申请者对资源的最大需求量,如果系统现存的各类资源可以满足申请者的请求,就满足申请者请求。这样申请者就很快完成其
计算,然后释放它占用的资源,从而保证了系统中所有进程都能完成,可以避免死锁的发生


进程和线程的差别

进程是程序的一次执行。线程可以理解为进程中执行的一段程序片段。在一个多任务环境中下面的概念可以区分:
进程间是独立的,这表现在内存空间、上下文环境;线程运行在进程空间内。一般来讲(不使用特殊技术),进程无法突破进程边界存取其他进程内的存储空间
而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间
同一进程中的两端代码不能够同时执行,除非引入线程
线程属于进程的,当进程退出时该进程所产生的线程都会被强制退出并清除。线程占用的资源要少于进程所占用的资源。
进程和线程都可以有优先级

PE文件被称为可移植的执行体是Protable Execute的全称,常见的PE文件有exe,dll,ocx,sys,com

Windows平台的大多数程序都使用各种动态链接库(DLL)来避免重复实现功能,操作系统为每个程序加载若干个DLL,具体由程序的类型决定。当程序不指定
DLL的绝对位置时,将是使用默认的搜索顺序来找到它。默认情况下,操作系统所使用的搜索顺序为:
1,内存,2,KnownDlls  3,清单与.local 4,应用程序目录 5,当前工作目录 6,系统目录  7,路径变量

搜索定位DLL的例子:
进程当前工作目录  --->  包含EXE文件的目录  --->  Windows系统目录  --->  Windows目录  --->  列在Path环境变量中的一系列目录


DLL文件是什么?有几种调用方式?
DLL文件(Dynamic Linkable Library 动态链接库),是一种不能单独运行的文件,它允许程序共享执行特殊任务所必需的代码和其他资源。比较大的
应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。可能存在一些模块的功能较为通用,在构造其他
软件系统时仍会被调用。在构造软件系统时,如果将所有的源代码都静态编译到整个应用程序EXE文件中,会产生一下问题:
一个是增加了应用程序的大小,会占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费
另一个是,在编写大的EXE程序时,在每次修改重建时都必须调整编译所以的源代码,增加了编译过程的复杂度,也不利于阶段性单元测试
一般来说,DLL是一种磁盘文件,以.dll、.DRV、.FON、.SYS和许多以.EXE为扩展名的系统文件都可以是DLL。它由全局数据、服务函数和资源组成,在运行
时被加载到调用进程的虚拟空间中,成为调用进程的一部分。如果与其他DLL之间没有冲突,该文件通常映射到进程虚拟空间的统一地址上。DLL模块中包含各种
导出函数,用于向外界提供服务。DLL可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序是相同的堆栈模式。
一个DLL在内存中只有一个实例,DLL实现了代码封装性,DLL的编制与具体的编程语言及编译器有关
调用方式有以下两种:
1,静态调用方式:由编译器系统完成对DLL的加载和应用程序结束时DLL卸载的编码(如还有其他程序使用该DLL,则Windows对DLL的应用记录减1,直到所有
相关程序都结束对该DLL的使用时才释放它,此方式简单实用,但不够灵活,只能满足一般要求)
2,动态调用方式:由编程者用API函数加载和卸载DLL来达到调用DLL的目地,使用上较复杂,但能更加有效的使用内存,是编制大型应用程序的重要方式

正因为DLL有占用内存小,好编辑等特点,所有很多电脑病毒都是DLL格式文件。但不能单独运行。动态链接库通常不能直接运行,也不能接收小心。他们是
一些独立的文件,其中包含能被可执行程序或其他DLL调用来完成某项工作的函数。只有在其他模块调用动态链接库中的函数时,它才发挥作用

垃圾回收的优点和原理
java语言中一个显著的特点就是引入了垃圾回收机制,使C++程序员最头疼的内存管理的问题迎刃而解,它使得java程序员在编写程序的时候不再需要考虑
内存管理。由于有垃圾回收机制,java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄漏,有效的使用可以
使用的内存。垃圾回收器通常作为一个单独的低级别的线程运行,在不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序
员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制又分复制垃圾回收、标记垃圾回收和增量垃圾回收3种


CPU中的缓存和操作系统中的缓存分别是什么

快表----Cache在OS中的典型范例
在操作系统中,为提供系统的存取速度,在地址映射机制中增加了一个小容器的联想寄存器(相联存储器),即快表。用来存放当前访问最频繁的少数活动页面
的页号。当用户需要存取数据时,根据数据所在的逻辑页号在快表中找到其对应的内存块号,再联系页内地址,形成物理地址。如果在快表中没有相应的逻辑页号
则地址映射仍可以通过内存中的页表进行,得到空闲块号后必须将该块号填入快表的空闲块中。如果快表中没有空闲块,则根据淘汰算法淘汰某一行,再填入新的
页号和块号
快表查找内存块的物理地址消耗的时间大大降低了,使得系统效率得到了极大的提高。

高速缓冲存储器(Cache) ---- Cache在CPU中运用的典型范例
CPU执行的速度越来越快,系统构架越来越先进,而主存的结构和存取速度改进则较慢,因此,高速缓存技术越来越重要
高速缓冲存储器(Cache)是位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在Cache中的数据是内存中的一小部分,但这一小部分是段时间
内CPU即将访问的。当CPU调用大量数据时,就可避开内存直接从Cache中调用,从而加快读取速度。由此可见,在CPU加入Cache是一种高效的解决方案,这样整个
内存储器(Cache+内存)就变成了既有Cache的高速度又有内存的大容量的存储系统了。Cache对CPU性能的影响很大,这主要是由CPU的数据交换顺序和CPU与Cache
间的带宽引起的


你可能感兴趣的:(面试,dll,cache,算法,数据结构,存储)