OS知识点总结

转自:https://blog.csdn.net/csdn_chai/article/details/78002202

1.什么是操作系统?

OS是用户与硬件之间的接口,管理计算机的软件和硬件资源。

2.计算机的硬件包括:CPU、输入输出设备、存储器、总线等。

3.什么是进程?什么是线程?

进程是资源分配的独立单位,进程有独立的地址空间。是程序的一次执行,包含代码和数据。

线程是CPU调度的基本单位,线程使用父进程的数据空间,调度线程比调度进程更快,开销更小。

*资源分配中的资源是指:CPU时间、 存储器、文件和IO设备。

4.进程和线程的区别,相比进程,线程有哪些好处?

 线程切换开销小。(我能想到的就这么多,具体是指哪些开销呢?我不知道)

 区别:

1)一个进程可以有多个线程,多个线程可以并发。

2)进程和线程是不同的资源管理方式,进程拥有独立的地址空间,线程没有,同一进程的线程共享数据

3)线程不占用系统资源,调度线程比调度进程开销小。

4)对于要求同时进行并且共享变量,只能使用多线程。

5.进程间通信的方式?

Linux和windows都有的通信方式:管道、socket、共享内存、消息。

但是具体都是怎么操作的呢?不知道

 

6.线程同步?进程同步?是什么?方式有哪些?

线程同步是指多线程通过特定的方式来控制线程之间的执行顺序(同步)。

1)互斥量。只能有一个线程访问公共资源,拥有互斥对象才能访问公共资源,保证公共资源不会被多个线程同时访问。

2)信号量。保证了访问公共资源的最大的线程个数。

3)临界区,同时只能由一个线程进入临界区,互斥访问。

//进程同步:信号量、管程、分布式系统。

7.那么什么是临界区呢?

临界区就是每个进程中访问临界资源的那段代码,不能多个进程同时进入。

1)如果一个进程进入了临界区,那么其他进程等待;

2)如果当前进程不能进入临界区,那么就要释放CPU资源。

3)进入临界区的进程有访问控制时间,以便其他进程进入。

比如访问打印机的代码,

实现临界区:软件实现,中断屏蔽,硬件指令法。

8.进程有几种状态?及其之间的转换?

就绪:进程已经获得了除CPU以外的所有资源,正在等待CPU调度。

运行:获得了CPU资源。

阻塞:进程等待某些条件,在某些条件达成前无法执行。

需要注意的是:运行到就绪状态转换是超时、时间片用完。

 9.进程创建的过程

1. 给进程分类一个唯一的标识符

2.给进程分配存储空间

3.初始化进程控制块PCB(PCB见下)

4.放入队列,等待CPU资源。

11.进程调度的几种算法?

1)时间片轮转调度:给每个进程固定的时间片来执行,按照顺序,时间片使用完了之后就执行下一个。属于抢占式调度,平均等待时间较长,而且上下文切换频繁,

2)先来先服务:属于非抢占调度,实现简单,但是对短作业不利。

3)多级反馈队列调度:多个优先级队列,根据优先级的降低时间片长度增加,先执行优先级高的,每个队列内部使用时间片轮转,如果没在当前时间片内执行完,那么就放到下一优先级队列的队尾;高优先级队列为空时,去执行低优先级队列内容。

12.进程调度和线程调度

两者均有3种状态,当线程进行系统调用时会阻塞进程,但是线程还是处于运行态,不会阻塞。

 用户级线程和内核级线程不太懂欸。

 

13.什么是死锁?

在两个以上的并发进程中,每个进程都保持某种资源,并且申请其他进程所占用的资源,而且又有循环等待,无法推进。

条件:互斥、循环等待(若干进程首尾相连形成环等待关系)、非剥夺(无法在进程结束前剥夺对资源的占有)、请求与保持(一个进程请求资源时,不释放自己占有的资源)

如何解决死锁?

1)死锁预防。

破坏后三个条件:

a.破坏循环等待,就是不让申请资源形成环路。对资源排序,进程如果申请到了R资源,那么下次只能申请排在R后面的,不能申排在其前面的,定制一个规则。

b.破坏非剥夺。当无法得到自己申请的资源时,先释放自己的资源,等需要时再申请。

c.破坏请求与保持条件,在程序运行前,必须申请所有需要的资源。(感觉b和c有点像啊!)

2)死锁避免

没有采取上边三个措施预防,而是在资源动态分配的过程中,防止系统进入不安全状态。

代表算法:银行家算法。

寻找安全的进程序列,安全才分配资源。

对每个进程查看现在资源能否满足 其所需资源,如果可以,那么就分配,并且现有资源要变为现在有的资源数+已经分配进程的资源。

再对下一个进程进行同样的判定。看是否存在安全序列,如果存在才分配资源。

//没复习之前看见这两个感觉都是一样的,并且根本就不知道其中指的内容是什么。

死锁检测与解除:

资源分配图(其实看见资源分配图已经不知道是什么了)

转自:https://blog.csdn.net/ai977313677/article/details/72780203

有边和节点,边表示对资源的申请和占有,点表示进程,是有向图。

如果图中存在环路,那么可能存在死锁;如果图中不存在环路,那么肯定不存在死锁。

14.线程/进程同步和PV操作

//不知道这个会不会考到啊,但是好像什么都不记得了,还是复习一下吧!

-读者-写者问题

-哲学家就餐问题

1)读者写者问题

读文件时其他进程也可以读;写文件时,其他进程不能读也不能写。

读者优先

将所有读者读完,才允许写者进来,会导致写者饥饿。

怎么实现呢?

这个就说的很好,有三个变量,因为readercount是一个全局的,那么它需要有个锁来保持它的更新统一。

当有读者时,读者数量++,如果是第一个读者,那么就P读写文件的互斥量;如果最后一个读者已经读完,那么就V互斥量,允许写者写了。

写者优先

 那么就让写者一直进来,对写者进行计数,如果是第一个写者,那么就将读取的锁P,如果是最后一个写者,那么就将读取的锁V;读者的代码是不变的。

 总之就是对读者写者分别计数,第一个和最后一个的情况要做P和V的操作。

 2)哲学家就餐问题

每次最多只允许4位哲学家拿左筷子,这样就可以允许有一位哲学家就餐,就餐完之后放下筷子,。 

16.什么是物理内存?虚拟内存?

转自:https://blog.csdn.net/li187li/article/details/52802127 

物理内存是实际的内存,在CPU中指的是寻址空间的大小,比如有20根总线,那么寻址空间就是1MB,32位内存寻址就是4GB。

那么为什么需要虚拟内存呢?

因为物理内存大小是有限的,如果现在运行的一个进程需要的内存可能是大于物理内存的,那么就不能所有的数据都加载到物理内存中,那么剩下的部分就需要先放到磁盘中,等需要时再调入内存,所以虚拟内存是进程运行时所用的内存空间的总和,并且有一部分是不在物理内存当中的

什么是虚拟内存地址和物理内存地址呢?

计算机内存是分页的,有一个页表,映射虚拟内存页到磁盘,操作系统有页面失效功能,操作系统找到一个最少使用的页帧,并且将其写入磁盘,将需要访问的页调入内存,并且修改页表项的映射,保证了所有的虚拟页都会被调度。这就是处理虚拟内存到物理内存的步骤。

转自:http://www.cnblogs.com/dyllove98/archive/2013/06/12/3132940.html

在每个进程创建加载时,内核只是为进程创建了虚拟内存的布局,初始化PCB中的相关链表,建立起虚拟内存和磁盘的映射关系,并不需要立即把进程的程序和数据拷贝到物理内存中,等运行到对应的程序时,才通过缺页中断调入内存。

虚拟空间都被映射到了磁盘空间中,由页表映射到磁盘文件中,当访问到某个位置的时候,通过页表项判断是否在内存中,如果不是则缺页中断或会发生页面替换

17.内存分区

四种:固定分区(内部碎片)、动态分区、分页、分段。

动态分区:最佳适配、首次适配、下次适配(从上次放置的位置开始选择一个满足大小的空闲块)

分页和分段的区别:

页表项映射到内存块中,每次CPU存取一个数据,都要两次访存,一次是访问页表,一次是访问实际物理地址,可以增加一个快表,

页面置换算法包括:NRU最近未使用、FIFO先进先出、尔二次机会等。

分段:

posted @ 2018-09-15 18:31  lypbendlf  阅读(414)  评论(0编辑  收藏  举报