面试整理-计算机操作系统部分

本文详细梳理了计算机操作系统面试的重点,涵盖了进程和线程的关系与区别、死锁的必要条件及处理策略、内存管理的页存储、段存储和段页存储方式,以及进程的几种状态。同时,讨论了进程同步的多种机制、虚拟内存的概念以及虚拟地址、逻辑地址、线性地址和物理地址的区别。此外,还介绍了缓冲区溢出的危害和原因,以及操作系统中的进程调度策略,如FCFS、SJF、优先级调度和时间片轮转等。
摘要由CSDN通过智能技术生成

目录

1、计算机操作系统学习笔记

1、进程和线程的关系和区别。

2、死锁的必要条件,怎么处理死锁。

3、内存管理方式:段存储、页存储和段页存储。

4、进程的几种状态。

5、IPC几种通信方式。

6、线程同步方式。

7、什么是虚拟内存。

8、虚拟地址、逻辑地址、线性地址和物理地址的区别。

9、什么是缓冲区溢出?有什么危害?其原因是什么?

10、操作系统中的进程调度策略有哪些?

11、进程同步有哪几种机制?

12、OS的特性与功能。

13、进程间的两种相互制约关系。


1、计算机操作系统学习笔记

1、进程和线程的关系和区别。

定义:

进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

线程:进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

关系:

一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。

区别:

  1. 进程是资源分配的最小单位,线程是程序执行的最小单位。
  2. 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
  3. 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
  4. 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

2、死锁的必要条件,怎么处理死锁。

死锁的四大必要条件:

1、互斥条件

进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。

2、请求和保持条件

进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。

3、不剥夺条件

进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。

4、环路等待条件

在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源,也就是若干进程之间形成一种头尾相接的循环等待资源关系。

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

处理死锁的策略:

  1. 忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。
  2. 监测死锁并且恢复
  3. 仔细地对资源动态分配,以避免死锁。
  4. 通过破除死锁四个必要条件,以防止死锁产生。

 预防死锁的方法:

1、破除“互斥”条件:

就是在系统里取消互斥。若资源不被一个进程独占使用,那么死锁是肯定不会发生的。但一般来说在所列的四个条件中,“互斥”条件是无法破坏的。因此,在死锁预防里主要是破坏其他几个必要条件,而不去涉及破坏“互斥”条件。

2、破除“占有并等待”条件:

就是在系统中不允许进程在已获得某种资源的情况下,申请其他资源。即要想出一个办法,阻止进程在持有资源的同时申请其他资源。

方法一:创建进程时,要求它申请所需的全部资源,系统或满足其所有要求,或什么也不给它。这是所谓的 “ 一次性分配”方案。

方法二:要求每个进程提出新的资源申请前,释放它所占有的资源。这样,一个进程在需要资源S时,须先把它先前占有的资源R释放掉,然后才能提出对S的申请,即使它可能很快又要用到资源R。

3、破除“不可抢占”条件:

破坏“不可抢占”条件就是允许对资源实行抢夺。

方法一:如果占有某些资源的一个进程进行进一步资源请求被拒绝,则该进程必须释放它最初占的资源,如果有必要,可再次请求这些资源和另外的资源。

方法二:如果一个进程请求当前被另一个进程占有的一个资源,则操作系统可以抢占另一个进程,要求它释放资源。只有在任意两个进程的优先级都不相同的条件下,方法二才能预防死锁。

4、破除“循环等待”条件:

破坏“循环等待”条件的一种方法,是将系统中的所有资源统一编号,进程可在任何时刻提出资源申请,但所有申请必须按照资源的编号顺序(升序)提出。这样做就能保证系统不出现死锁。

死锁的解除:

  1. 资源剥夺法。挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但应防止被挂起的进程长时间得不到资源,而处于资源匮乏的状态。
  2. 撤销进程法。强制撤销部分、甚至全部死锁进程并剥夺这些进程的资源。撤销的原则可以按进程优先级和撤销进程代价的高低进行。
  3. 进程回退法。让一(多)个进程回退到足以回避死锁的地步,进程回退时自愿释放资源而不是被剥夺。要求系统保持进程的历史信息,设置还原点。

(1)安全序列:

安全序列{P1,P2,...,Pn}是这样组成的:若对于每一个进程Pi,它需要的附加资源可以被系统中当前可用资源加上所有进程Pj当前占有资源之和所满足,则{P1,P2,...,Pn}为一个安全序列,这时系统处于安全状态,不会进入死锁状态。

(2)银行家算法:

银行家算法是从当前状态出发,逐个按安全序列检查各客户谁能完成其工作,然后假定其完成工作且归还全部贷款,再进而检查下一个能完成工作的客户,......。如果所有客户都能完成工作,则找到一个安全序列,银行家才是安全的。

3、内存管理方式:段存储、页存储和段页存储。

(1)页存储

基本概念:

页式存储管理将程序逻辑地址空间划分为固定大小的页(page),而物理内存划分为同样大小的页框(page frame)。为方便地址转换,页面大小应是2的整数幂。每一个作业有一个页表,用来记录各个页在内存中所对应的块(页框)。

优点是没有外碎片,每个内碎片不超过页的大小。

缺点是程序全部装入内存,要求有相应的硬件支持。例如地址变换机构缺页中断的产生和选择淘汰页面等都要求有相应的硬件支持。这增加了机器成本,增加了系统开销。

地址结构:

地址结构包含两部分:前一部分为页号P,后一部分为页内偏移量W。其中页号与页内偏移量所占多少位,与页面的大小和主存的最大容量有关。

每页大小为4KB,主存大学为4GB。则地址长度为32 位,其中0~11位为页内地址,即:12~31位为页号,地址空间最多允许有2^20页。

地址变换机制:

上面介绍的地址变换过程可知,若

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值