IT学习篇之操作系统

来源:互联网 发布:计算分组数据的标准差 编辑:程序博客网 时间:2024/05/16 10:38

1. 进程的有哪几种状态,状态转换图,及导致转换的事件。
   基本状态:ready(就绪),running(运行),wait(等待).      
(1) 就绪→执行  处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成执行状态。   
(2) 执行→就绪  处于执行状态的进程在其执行过程中,因分配给它的一个时间片已用完而不得不让出处理机,于是进程从执行状态
转变成就绪状态。   
(3) 执行→阻塞  正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。   
(4) 阻塞→就绪  处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。
2. 进程与线程的区别。   
简而言之,一个程序至少有一个进程,一个进程至少有一个线程。
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。


进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
3. 进程通信的几种方式。
进程间通信IPC------Inter-Process Communication
由于内存管理的一些机制,导致两个进程间并不能直接的进行通信(在独立的用户空间),因此我们需要利用一些介质来完成两个进程之间的通信。以下是常用的进程间通信方式。
# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
# 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
# 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
# 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
# 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号,两配合使用,来实现进程间的同步和通信。

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

4. 线程同步几种方式。(一定要会写生产者、消费者问题,完全消化理解)

1、 临界区(CCriticalSection)  当多个线程访问一个独占性共享资源时,可以使用临界区对象。拥有临界区的线程可以访问被保

护起来的资源或代码段,其他线程若想访问,则被挂起,直到拥有临界区的线程放弃临界区为止。

具体应用方式: 

 1、 定义临界区
对象CcriticalSection g_CriticalSection;  2、 在访问共享资源(代码或变量)之前,先获得临界区对象,
g_CriticalSection.Lock(); 3、 访问共享资源后,则放弃临界区对象,g_CriticalSection.Unlock();    

2、 事件
(CEvent)  事件机制,则允许一个线程在处理完一个任务后,主动唤醒另外一个线程执行任务。比如在某些网络应用程序中,一个线程如A负责侦听通信端口,另外一个线程B负责更新用户数据,利用事件机制,则线程A可以通知线程B何时更新用户数据。每个Cevent对象可以有两种状态:有信号状态和无信号状态。Cevent类对象有两种类型:人工事件和自动事件。 自动事件对象,在被至少一个线程释放后自动返回到无信号状态;  人工事件对象,获得信号后,释放可利用线程,但直到调用成员函数ReSet()才将其设置为无信号状态。在创建Cevent对象时,默认创建的是自动事件。

 3、 互斥量(CMutex)  互斥对象和临界区对象非常相似,只是其允许在进程间使用,而临界区只限制与同一进程的各个线程之间使用,  但是更节省资源,更有效率。

 4、 信号量(CSemphore) 
当需要一个计数器来限制可以使用某共享资源的线程数目时,可以使用“信号量”对象。CSemaphore类对象保存了对当前访问某一个指定资源的线程的计数值,该计数值是当前还可以使用该资源的线程数目。如果这个计数达到了零,则所有对这个CSemaphore类对象所控制的资源的访问尝试都被放入到一个队列中等待,直到超时或计数值不为零为止。 CSemaphore 类的构造函数原型及参数说明
如下:
5. 线程的实现方式. (也就是用户线程与内核线程的区别)
KST 
对于一切的进程,无论是系统进程还是用户进程,进程的创建和撤销,以及I/O操作都是利用系统调用进入到内核,由内核处理完成,所以说在KST下,所有进程都是在操作系统内核的支持下运行的,是与内核紧密相关的。
内核空间实现还为每个内核支持线程设置了一个线程控制快,内核是根据该控制快而感知某个线程是否存在,并加以控制。
优点: ? 
 在多处理器上,内核可以调用同一进程中的多个线程同时工作; ? 如果一个进程中的一个线程阻塞了,其他线程仍然可以得到运行;  

缺点:对于用户线程的切换代价太大,在同一个线程中,从一个线程切换到另一个线程时,需要从用户态,进入到内核态并且由
内核切换。因为线程调度和管理在内核实现。  ? 
ULT  用户进程ULT仅存在于用户空间中。对于这种线程的创建、撤销、线程之间的同步和通信等功能,都无需系统调用来实现。对于


同一进程的线程之间切换仍然是不需要内核支持的。所以呢,内核也会是完全不会知道用户级线程的存在。  但是有一点必须注意:

设置了用户级线程的系统,其调度荏苒是以进程为单位进行的哦。 
优点:线程切换不需要转换到内核空间,节省了宝贵的内核空间; 调度算法可以是进程专用,由用户程序进行指定;用户级线程实现和操作系统无关; 

缺点: 系统调用阻塞,同一进程中一个线程阻塞和整个进程都阻塞了。 一个进程只能在一个cpu上获得执行。
6. 用户态和核心态的区别。
特权级的不同,即权力的不同。运行在用户态下的程序不能直接访问操作系统内核数据结构和程序,比如上面例子中的testfork()就不能直接调用 sys_fork(),因为前者是工作在用户态,属于用户态程序,而sys_fork()是工作在内核态,属于内核态程序。 
7. 用户栈和内核栈的区别。
8. 内存池、进程池、线程池。(c++程序员必须掌握)
   内存池  平常我们使用new、malloc在堆区申请一块内存,但由于每次申请的内存大小不一样就会产生很多内存碎片,造成不好管
理与浪费的情况  内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内
存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做的一个显著优点是尽量避免了内存碎片,使
得内存分配效率得到提升。 
进程池&&线程池  这两个问题有一定的相似度,在面向对象程序编程中,对象的创建与析构都是一个较为复杂的过程,较费时间,所
以为了提高程序的运行效率尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。  所以我们可以创建一个进
程池(线程池),预先放一些进程(线程)进去,要用的时候就直接调用,用完之后再把进程归还给进程池,省下创建删除进程的时间,
不过当然就需要额外的开销了。     
利用线程池与进程池可以是管理进程与线程的工作交给系统管理,不需要程序员对立面
的线程、进程进行管理
9. 死锁的概念,导致死锁的原因.
   (1) 因为系统资源不足。  (2) 进程运行推进的顺序不合适。 (3) 资源分配不当等。
10. 导致死锁的四个必要条件。
    (1) 互斥条件:一个资源每次只能被一个进程使用。  (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 

(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 (4) 循环等待条件:若干进程之间形成一
种头尾相接的循环等待资源关系。

11. 处理死锁的四个方式。
    1、撤消陷于死锁的全部进程;  2、逐个撤消陷于死锁的进程,直到死锁不存在;  3、从陷于死锁的进程中逐个强迫放弃所占
用的资源,直至死锁消失。  4、从另外一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死锁状态

12. 预防死锁的方法、避免死锁的方法。
    1.忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就
把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。 2.检测死锁并且恢复。  3.仔细地对资源进行动
态分配,以避免死锁。   4.通过破除死锁四个必要条件之一,来防止死锁产生。
13. 进程调度算法。(周转时间 =  程序结束时间 -- 开始服务时间、带权周转时间=  周转时间 /  要求服务时间)
14. Windows内存管理的方式(块式、页式、段式、段页式).
    块式管理:把主存分为一大块、一大块的,当所需的程序片断不在主存时就分配一块主存空间,把程 序片断load入主存,就算
所需的程序片度只有几个字节也只能把这一块分配给它。这样会造成很大的浪费,平均浪费了50%的内存空间,但时易于管理。  页
式管理:把主存分为一页一页的,每一页的空间要比一块一块的空间小很多,显然这种方法的空间利用率要比块式管理高很多。  段
式管理:把主存分为一段一段的,每一段的空间又要比一页一页的空间小很多,这种方法在空间利用率上又比页式管理高很多,但是
也有另外一个缺点。一个程序片断可能会被分为几十段,这样很多时间就会被浪费在计算每一段的物理地址上(计算机最耗时间的大
家都知道是I/O吧)。 段页式管理:结合了段式管理和页式管理的优点。把主存分为若干页,每一页又分为若干段。好处就很明显,
不用我多说了吧。
15. 内存连续分配方式采用的几种算法及各自优劣。
    1、单一连续分配 2、固定分区分配  3 、动态分区分配 常见内存分配算法及优缺点如下:

(1)首次适应算法。使用该算法进行内存分配时,从空闲分区链首开始查找,直至找到一个能满足其大小要求的空闲分区为止。然后再按照作业的大小,从该分区中划出一块内存分配给请求者,余下的空闲分区仍留在空闲分区链中。     该算法倾向于使用内存中低地址部分的空闲分区,在高地址部分的空闲分区很少被利用,从而保留了高地址部分的大空闲区。显然为以后到达的大作业分配大的内 存空间创造了条件。缺点在于低址部分不断被划分,留下许多难以利用、很小的空闲区,而每次查找又都从低址部分开始,这无疑会增加查找的开销。     

(2)循环首次适应算法。该算法是由首次适应算法演变而成的。在为进程分配内存空间时,不再每次从链首开始查找,而是从上次
找到的空闲分区开始查找,直至 找到一个能满足要求的空闲分区,并从中划出一块来分给作业。该算法能使空闲中的内存分区分布
得更加均匀,但将会缺乏大的空闲分区。

(3)最佳适应算法。该算法总是把既能满足要求,又是最小的空闲分区分配给作业。 为了加速查找,该算法要求将所有的空闲区按其大小排序后,以递增顺序形成一个空白链。这样每次找到的第一个满足要求的空闲区,必然是最优的。孤立地看, 该算法似乎是最优的,但事实上并不一定。因为每次分配后剩余的空间一定是最小的,在存储器中将留下许多难以利用的小空闲区。同时每次分配后必须重新排序, 这也带来了一定的开销。

(4)最差适应算法。最差适应算法中,该算法按大小递减的顺序形成空闲区链,分配时直接从空闲区链的第一个空闲分区中 分配(不能满足需要则不分配)。很显然,如果第一个空闲分区不能满足,那么再没有空闲分区能满足需要。这种分配方法初看起来不太合理,但它也有很强的直观 吸引力:在大空闲区中放入程后,剩下的空闲区常常也很大,于是还能装下一个较大的新程序。    最坏适应算法与最佳适应算法的排序正好相反,它的队列指针总是指向最大的空闲区,在进行分配时,总是从最大的空闲区开始查寻。    该算法克服了最佳适应算法留下的许多小的碎片的不足,但保留大的空闲区的可能性减小了,而且空闲区回收也和最佳适应算法一样复杂。

16. 动态链接及静态链接.
动态库:  1.共享:多个应用程序可以使用同一个动态库,启动多个应用程序的时候,只需要将动态库加载到内存一次即可;  2.开发模块好:要求设计者对功能划分的比较好。  静态库:代码的装载速度快,执行速度也比较快,因为编译时它只会把你需要的那部分链接进去,应用程序相对比较大。但是如果多个应用程序使用的话,会被装载多次,浪费内存。

17. 基本分页、请求分页储存管理方式。
(1) 基本思想  (2) 存储管理使用的数据结构(空闲空间管理的/作业占用空间管理的) (3) 逻辑地址的格式,地址变换的时间(动态/静态)、方法 (4) 存储分配和存储回收过程  (5) 是否能实现虚拟存储;如果能,如何实现 
(6) 其他特点:是否存在碎片问题(原因);是否能实现存储保护(如何实现)等 
18. 基本分段、请求分段储存管理方式。
19. 分段分页方式的比较各自优缺点。
分页和分段系统有许多相似之处。比如,两者都采用离散分配方式,且都要通过地址映射机构来实现地址变换。但在概念上两者完全不同,主要表现在下述三个方面。  

(1) 页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的
利用率。或者说,分页仅仅是由于系统管理的需要而不是用户的需要。段则是信息的逻辑单位,它含有一组其意义相对完整的信息。
分段的目的是为了能更好地满足用户的需要。  

(2) 页的大小固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而在系统中只能有一种大小的页面;而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。  

(3) 分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址;而分段的作业地址空间则是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
20. 几种页面置换算法,会算所需换页数。(LRU用程序如何实现?)
    1)最佳置换算法(OPT)(理想置换算法 2)先进先出置换算法(FIFO) 3)最近最久未使用(LRU)算法  4)Clock置换算法
(LRU算法的近似实现) 5)最少使用(LFU)置换算法 6)工作集算法 7)工作集时钟算法  8)老化算法(非常类似LRU的有效算法
) 9)NRU(最近未使用)算法 10)第二次机会算法
21. 虚拟内存的定义及实现方式。
    虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存(例如RAM)的使用也更有效率。  

在Windows 9x时代,例如Windows 98,用于实现虚拟内存的文件存放在系统分区的根目录下。通常是系统分区根目录下的win386.swp(具有隐藏、系统属性)。有关虚拟内存设置则存放在系统目录中的system.ini中,其中形似“PagingDrive=C:\Win386.swp”的一行就是虚拟内存文件路径、文件名的设置。  在Windows NT系列中,例如Windows XP,用于实现虚拟内存的文件则以系统分区根目录下的页面文件 pagefile.sys(具有隐藏、系统属性)形式来保存。这些文件的大小——即pagefile.sys文件大小的默认值是物理内存的1.5倍。同时,页面文件可以设置一个比平常值大的最大值,当物理内存与页面文件皆不够用时,系统会自动生成temppf.sys(意为temporary pagefile,临时页面文件)进行补足,temppf.sys的大小在页面文件的大小和最大值之间。 在Linux操作系统支持两种形式的交换空间:交换分区和交换文件。 

交换分区:在磁盘中专门分出一个磁盘分区用于交换 

交换文件:创建一个文件用于交换 交换空间大小没有规定特定的值,如果物理内存较小(小于512M字节)时,一般设置为物理内存的1.5倍到2倍。

22. 操作系统的四个特性。
    并发性,共享性,虚拟性,异步性
23. DMA。
    DMA的英文拼写是“Direct Memory Access”,汉语的意思就是直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交
换模式。在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数据的传送,数据传送完毕再把信息反馈给CPU,这样就
很大程度上减轻了CPU资源占有率,可以大大节省系统资源。DMA模式又可以分为Single-Word DMA(单字节DMA)和Multi-Word DMA(
多字节DMA)两种,其中所能达到的最大传输速率也只有16.6MB/s。
24. Spooling。
SPOOLing(Simultaneous Peripheral Operation On-Line)技术,即外部设备联机并行操作,是为实现低速输入输出设备与高速的
主机之间的高效率数据交换而设计的。通常称为“假脱机技术”,又称为排队转储技术。
25. 外存分配的几种方式,及各种优劣。
    连续分配、链接分配和索引分

0 0
原创粉丝点击