题目一:进程和线程区别?
1.进程是资源分配的基本单位,也是调度运行的基本单位;线程是调度的基本单位。
2.进程有独立的虚拟地址空间。父子进程共享文件表,但不共享用户地址空间。
*优点:一个进程崩溃后不会对其他进程产生影响。
*缺点:进程间共享数据变得困难,必须使用显式的IPC机制。
*进程虚拟地址空间包括:代码段、堆栈段(临时数据:如函数参数、返回地址和局部变量)、数据段(包括全局变量)、堆(动态分配的内存)等等。
3.线程运行在进程的上下文中,所有运行在一个进程内的线程共享该进程的整个虚拟地址空间:代码、数据、堆、共享库和打开文件。
*每个线程有自己的线程上下文:一个线程ID、栈、栈指针、程序计数器、通用目的的寄存器和条件吗。
4.创建、切换和终止开销小:线程的上下文比进程的上下文小很多,所以线程的创建、上下文切换和终止要比进程快很多。
*线程间共享数据容易,因为多个线程共享进程地址空间,但需要同步。
5.补充程序和进程区别(选自操作系统概念第7版):
*程序本身不是进程,程序只是被动实体,如存储在磁盘上的一系列指令的文件内容(常被成为可执行文件)
*进程是活动实体,它有一个程序计数器来表示下一个要执行的命令和相关资源集合。
*当一个可执行文件被装入内存时,一个程序才成为进程。
*虽然多个进程可以与统一程序相关,但是它们被当做两个独立的执行序列,都是独立的进程,虽然文本段相同,但是数据段、堆、堆栈段都不同。
题目二:进程间通信方式?
1.管道
2.消息队列
3.共享内存
4.套接字
5.信号量
6.信号:异步通信方式,软件层次上对中断机制的一种模拟。
题目三:进程的组成部分和状态?
(一)进程的组成部分:进程控制块、程序段和数据段。
(二)进程的状态(注意状态之间切换条件):
1.三种基本状态:运行态、就绪态、阻塞态。
2.挂起状态(从内存换出到磁盘):当内存中的所有进程都处于阻塞态,OS把被阻塞的进程换出到磁盘中的“挂起队列”(将进程置于挂起态,并将它转移到磁盘),内存中释放的空间可被调入的另一个进程使用。取哪个进程到内存执行的选择:新创建的进程或调入一个以前被挂起的进程(倾向于这个,不会增加系统的负载)。
3.新建态和终止态。
题目四:死锁的条件和预防?
一 死锁的充分必要条件:
*互斥:一次只有一个进程可以使用一个资源。
*占有且等待:当一个进程等待其他进程时,继续占有已经分配的资源。
*不可抢占:不能强行抢占进程已占有的资源。
*环路等待:存在一个封闭的进程链,使每个进程至少占有此链中下一个进程所需要的一个资源。
前三个是死锁的必要条件,第四个是前三个条件的潜在结果。
二 处理死锁的基本方法:
*死锁预防:通过设置某些限制条件,去破坏死锁的四个条件中的一个或几个条件,来预防发生死锁。但由于所施加的限制条件往往太严格,因而导致系统资源利用率和系统吞吐量降低。
*死锁避免:允许前三个必要条件,但通过明智的选择,确保永远不会到达死锁点,因此死锁避免比死锁预防允许更多的并发。(例如银行家算法)。
*死锁检测:不须实现采取任何限制性措施,而是允许系统在运行过程发生死锁,但可通过系统设置的检测机构及时检测出死锁的发生,并精确地确定于死锁相关的进程和资源,然后采取适当的措施,从系统中将已发生的死锁清除掉。
*死锁解除:与死锁检测相配套的一种措施。当检测到系统中已发生死锁,需将进程从死锁状态中解脱出来。常用方法:撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程。
题目五:内存管理技术有哪些?
1.固定分区(连续分区):将内存用户空间划分为多个固定大小的静态分区,进程被装入大于或等于自身大小的分区。
*分区的大小可以是长度都相等;或者不等,分为多个较小分区、适量中等分区,少量较大分区。
*优点:实现简单,开销小。
*缺点:有内部碎片,内存使用不充分;活动进程的最大数目是固定的。
2.动态分区(连续分区):分区是动态创建的,每个进程可以被装入与自身大小相等的分区中。
*优点:没有内部碎片;可以充分使用内存。
*缺点:有外部碎片,由于需要压缩外部碎片,处理器利用率低。
3.简单分页:内存被划分为许多大小相等的页框;每个进程被划分成许多大小与页框大小相等的页;要装入进程,需要把进程的所有页都装入内存中不一定连续的某些页框中。
*优点:没有外部碎片。
*缺点:有少量内部碎片。
4.简单分段(段的大小不固定):每个进程被划分成许多段;要装入进程需要把进程包含的所有段都装入内存中不一定连续的某些动态分区中。
*优点:没有内部碎片,相对于动态分区,提高了内存利用率,减少了开销。
*缺点:存在外部碎片。
5.虚拟内存分页:除了不需要把进程的所有页都装入内存之外,与简单分页一样;非驻留页在以后需要时调入内存。
*优点:没有外部碎片;巨大的虚拟地址空间。
*缺点:复杂的内存管理开销。
6.虚拟内存分段:除了不需要把进程的所有段都装入内存之外,与简单分段一样;非驻留段在以后需要时调入内存。
*优点:没有外部碎片;巨大的虚拟地址空间;支持共享和保护。
*缺点:复杂的内存管理开销。
题目六:分页与分段相同点和区别?
一 相同点:两者都采用离散分配方式,且都需要地址映射机构来实现地址变换。
二 不同点:
(1)页时信息的物理单位,分页是为实现离散分配方式,以消减内存的外部碎片,提高内存利用率,也就是说分页仅仅是由于系统管理的需要而不是用户的需要;段则是信息的逻辑单位,它含有一组其意义相对完整的信息,分段的目的是更好的满足用户的需要。
(2)页的大小固定且由系统决定,在系统中只有一种大小的页面;而段的长度不固定,决定于用户编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。
(3)段的优点:
*信息共享和信息保护:信息共享和信息保护都是以信息的逻辑单位为基础。
*等等。
题目七:页面置换算法有哪几种?
(1)最佳置换算法(OPT):选择置换下次访问距离当前时间最长的那些页。
*该算法导致最少的缺页中断,但由于无法预知一个进程在内存的若干个页面哪个是未来最长时间不再被访问的,因而该算法无法实现,但是可以作为一种标准来衡量其他置换算法。
(2)最近最久未使用算法(LRU:Least Recently Used):置换内存中上次使用距离当前最远的页。
*LRU策略性能接近于OPT,但比较难实现(需要系统较多硬件支持,需要大量开销)。
(3)FIFO策略:淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
*该算法实现简单,但性能相对较差。
(4)时钟策略(Clock置换算法):
1.简单的Clock置换算法(使用位):给每一个页框关联一个附加位,称为使用位。当某一页首次装入内存中,将该页框的使用位设为1;当该页随后被访问到时,它的使用位也为1。页面置换算法中,用于置换的候选页框集合被看做一个循环缓冲区,并且有一个指针与之关联。
*过程:
~当需要置换一页时,系统扫描缓冲区,以查找使用位被置为0的一页框。当遇到使用位为1的页框时,操作系统就将该位重新设置为0。
~如果所有页框使用位都为1时,则指针在缓冲区中循环一周,把所有使用位都置0,并且停留在最初位置,置换该页框中的页。
2.改进的Clock置换算法(使用位+修改位):将一个页面换出时,如果该页已被修改过,便须将该页重新写回到磁盘上;如果该页未被修改,则不必将它拷回磁盘。在改进的的Clock置换算法中,除要考虑页面的使用情况,还需考虑置换代价。选择页面换出时,既要是未使用过的页面,又要是未被修改过的页面,把同时满足这两个条件的页面作为首选淘汰页面。