EchoDemo's Blogs

操作系统问题整理

1、进程和线程

(1)线程是独立调度的基本单位,进程是拥有资源的基本单位。线程不拥有资源(减小了时空开销)。

(2)一个进程中可以包括多个线程,并且线程共享整个进程的资源(一般都要进行同步和互斥),一个进程至少包括一个线程。进程内的线程对于其他进程不可见。

(3)引入进程的目的是为了更好地使用多道程序并发执行,以提高资源利用率和系统吞吐量,增加并发程度。引入线程,则是为了减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能。

(4)进程间的通信(IPC)需要进程同步和互斥手段的辅助,以保证数据的一致性。而线程间可以直接读/写进程数据段来进行通信。

2、线程同步的几种方式

(1)临界区(CCriticalSection):当多个线程访问一个独占性共享资源时,可以使用临界区对象。拥有临界区的线程可以访问被保护起来的资源或代码段,其他线程若想访问,则被挂起,直到拥有临界区的线程放弃临界区为止。

(2)互斥量(CMutex):互斥量与临界区的行为完全相同,但是也有一定的区别:互斥量是内核对象,临界区是用户模式下的同步对象,执行速度快于内核对象。

(3)事件(CEvent):通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作。

(4)信号量(CSemphore):它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目

3、进程间通信(IPC)

(1)共享存储:在通信的进程间存在一块可直接访问的共享空间,通过对这片共享空间进行读/写操作实现进程间的通信。(常用到PV操作来进行同步和互斥)

(3)消息传递:进程通过系统提供的发送消息和接受消息两个原语进行数据交换。(有直接通信方式和间接通信方式)

(3)管道通信(通常指无名管道)是一种半双工的通信方式。它是指用于连接一个读进程和一个写进程以实现他们之间通信的共享文件。

4、缓冲区溢出

缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。会产生以下危害:程序崩溃,导致拒绝额服务;跳转并且执行一段恶意代码。造成缓冲区溢出的主要原因是程序中没有仔细检查用户输入。

5、死锁

在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗的讲就是两个或多个进程无限期的阻塞、相互等待的一种状态。死锁产生的四个条件如下(有一个条件不成立,则不会产生死锁)

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

(2)请求与保持条件:进程已经保持了至少一个资源,但又提出新的资源请求,而该资源被其他进程占用。

(3)不剥夺条件:进程获得的资源,在未使用完之前,不能被强行剥夺,只能主动释放。

(4)循环等待条件:存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被链中的下一个进程所请求。

解决死锁的基本方法:

(1)预防死锁:资源一次性分配(破坏请求和保持条件);可剥夺资源,即当某进程新的资源未满足时,释放已占有的资源(破坏不可剥夺条件);资源有序分配法,系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)

(2)避免死锁:系统在进行资源分配之前预先计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。其中最具有代表性的避免死锁算法是银行家算法。

(3)检测死锁:这种方法无须事先采取任何限性制措施,允许进程在运行过程中发生死锁。但可通过检测机构及时地检测出死锁的发生,然后采取适当的措施,把进程从死锁中解脱出来。

(4)解除死锁:当发现有进程死锁后,便应立即把它从死锁状态中解脱出来。剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态;撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态消除为止;所谓代价是指优先级、运行代价、进程的重要性和价值等。

6、进程的几种状态

(1)就绪状态:进程已获得除处理机以外的所需资源,等待分配处理机资源。

(2)运行状态:占用处理机资源运行,处于此状态的进程数小于等于CPU数。

(3)阻塞状态: 进程等待某种条件,在条件满足之前无法执行。

7、动态分区算法

(1)首次适应算法(FF):空闲分区以地址递增的次序链接,分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。该算法优先利用内存中低址空间,保留了高址空间,缺点是低址部分不断被划分,留下许多内存碎片。

(2)循环首次适应算法(NF):NF算法每次从上一次分配的地方继续分配,该算法需要一个起始查询的指针用于指示下一次查询的空间地址。缺点是:缺乏大的空间分区。

(3)最佳适应算法(BF):空闲分区以容量递增形成分区链,找到第一个能满足要求的空闲分区。缺点是:留下许多内存碎片。

(4)最坏适应算法(WF):空闲分区以容量递减形成分区链,找到第一个能满足要求的空闲分区。即总是挑选最大的空闲区域分配给作业使用。优点是不至于使空闲区间太小,产生碎片的可能性小,缺点是:缺乏大的空间分区

8、分页和分段的区别

(1)都采用离散分配方式,且都是通过地址映射机构来实现地址的转换。

(2)分页管理不会产生外部碎片,但产生内部碎片;分段管理不会产生内部碎片。

(3)页的大小固定且由系统决定,在采用分页存储管理方式中直接由硬件实现。而段的大小不固定,决定于用户所编写的程序。

(4)分页的地址空间是一维的,分段系统中是二维的。

9、虚拟存储器页面置换算法

(1)最佳置换算法(Optimal):淘汰的页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。

(2)先进先出算法(FIFO):总是最先淘汰最先进去的页面。缺点:通常程序调入内存的先后顺序和程序执行的先后顺序不一致,导致缺页率高。

(3)最近最久未使用(LEU):选择最近最长时间未访问过的页面予以淘汰。

(4)时钟置换算法(LFU):在每个页面设置一个移位寄存器记录该页面的访问频率,最近时期最少使用的页面被淘汰。

10、调度算法

(1)先来先服务调度算法(FCFS):每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它。

(2)短作业优先调度算法(SJF):对短作业(运行时间最短)优先调度的算法。

(3)优先级调度算法:每次从后备作业中选择优先级最高的作业,将其调入内存,分配必要的资源。

(4)高响应比优先调度算法:在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。

(5)时间片轮转调度算法:将系统中所有就绪进程按照先来先服务的原则,但仅能运行一个时间片。

(6)多级反馈队列调度算法(集合了前几种算法的优点):是时间片轮转调度算法和优先级调度算法的综合和发展。

🐶 您的支持将鼓励我继续创作 🐶
-------------本文结束感谢您的阅读-------------