操作系统比较重要的知识点
1、进程与线程之间的区别
(1)进程是拥有资源的最小单位;线程是拥有调度的最小单位;
(2)进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵
(3)线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
(4)线程之间通信更方便,同一个进程下,线程共享全局变量,静态变量等数据,进程之间的通信需要以通信的方式(IPC)进行;
(5)僵尸进程与守护进程
1)僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。
2)守护进程是一个在后台运行并且不受任何终端控制的进程,生存周期比较长。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。他们常常在系统引导装入时启动,在系统关闭时终止。比喻Linux在启动时需要启动很多系统服务, 它们向本地和网络用户提供了Linux 的系统功能接口, 直接面向应用程序和用户。提供这些服务的程序是由运行在后台的守护进程来执行的
2、为什么进程上下文切换比线程上下文切换代价高
(1)切换页目录以使用新的地址空间
(2)切换内核栈和硬件上下文。对于linux来说,
线程和进程的最大区别就在于地址空间,对于线程切换,(1)是不需要做的,(2)是进程和线程切换都要做的。线程上下文切换和进程上下问切换一个最主要的区别是线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。
3、进程之间的通信方式
(1)低级通信方式:PV操作,一种实现进程互斥与同步的有效方法。PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思。
(2)高级通信方式:指以较高的效率传输大量数据的通信方式。高级通信方式主要有以下三类:
1)共享空间:用户进程空间一般都是独立的,进程运行期间一般不能访问其他进程的空间,要想让两个用户进程共享空间,必须通过特殊的系统调用来实现,而进程内的线程是自然共享进程空间的。故在通信进程之间存在一块可以直接访问的共享存储空间,通过对该共享空间进行读/写操作实现信息交换。
2)消息传递:如通信的进程之间不存在可以直接访问的共享空间,则必须利用操作系统提供的消息传递方法实现进程间的通信。
a、直接通信方式:发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从该消息缓冲队列上取得消息。
b、间接通信方式(信箱通信方式):发送进程把消息发送到一个中间实体(我们称之为信箱),接收进程从信箱中取得消息。
3)管道通信:用于连接一个读进程和一个写进程以实现它们之间的通信的一个共享文件,管道是一种文件,与一般文件稍有不同,其可以克服使用文件进行通信的两个问题:管道可以看成是共享存储空间的进化版
3、段页存储管理
(1)分页存储管理,分段存储管理,段页式存储管理
1)分页存储管理:用户程序的逻辑地址空间被划分为若干个固定大小的地址空间,称为“页”,内存物理地址空间也分成相对应的若干个物理块,页和块的大小相等,可将用户程序的任一页放在任一块中,实现离散分配 。有效提高内存利用率。
2)分段存储管理:将用户程序空间分成若干个大小不等的段 ,每段可以定义一组相对完整的逻辑信息。 存储分配时,以段为单位 ,段与段在内存中可以不相邻接,也实现了离散分配。能反映程序的逻辑结构,便于段的共享与保护。
3)段页式存储管理:程序的 地址空间首先被分成若干个逻辑分段 ,每段都有自己的段号,然后再将 每段分成若干个大小相等的页 ,对于主存空间也分层若干个大小相等的页,主存的分配以页为单位。
(2)分页存储管理和分段存储管理的区别:
1)页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率。段则是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。
2)页的大小固定且由系统决定;而段的长度却不固定,决定于用户所编写的程序。
3)页的地址空间是一维的,程序员只需利用一个记忆符,即可表示一个地址;而分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
4、分页置换算法
1)最佳置换算法:最佳置换算法所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。但无法预知进程在内存哪个页面是未来最长时间内不再被访问的,因而该算法无法实现。
2)先进先出(FIFO)页面置换算法:优先淘汰最早进入内存的页面,亦即在内存中驻留时间最久的页面。
3)最近最久未使用(LRU)置换算法:选择最近最长时间未访问过的页面予以淘汰,它认为过去一段时间内未访问过的页面,在最近的将来可能也不会被访问。