操作系统重要知识点
一、什么是操作系统?
操作系统是管理计算机硬件和软件资源的程序,是计算机的基石。
操作系统本质上是一个运行在计算机上的软件程序,屏蔽了硬件层的复杂性。
二、什么是系统调用?
首先来了解一下用户态和内核态
用户态运行的进程可以直接读取用户程序的数据。
内核态:可以简单地理解内核态运行的进程或程序几乎可以访问计算机的任何资源,不受限制。
那到底什么是系统调用呢?
我们运行的程序基本都是运行在用户态,我们需要调用操作系统提供内核态级别的子功能,这就是需要系统调用。
比如
等,都必须通过系统调用方式先向操作系统提出服务请求,并由操作系统代为完成。
三、进程和线程
1、进程和线程的区别
1.进程是操作系统资源分配的基本单位,而线程是任务调度执行的基本单位。
2.一个进程可以有多个线程。
3.进程拥有资源,而线程不拥有系统资源,但是可以访问隶属于进程的资源。
4.进程的切换比线程的切换大是因为进程切换时要切换页表,所以伴随着页调度。
2、进程间的通信方式有哪几种?
1.管道通信
2.信号量
3.消息队列
4.共享内存
5.套接字
3、操作系统中进程的调度算法有哪些?
-
先到先服务 -
短作业优先 -
时间片轮转 -
多级反馈队列 -
优先级调度
4、什么是死锁?
两个或者两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象。
4.1产生死锁地四个必要条件
互斥、请求保持、不可抢占、循环等待四个条件同时成立。
4.2解决死锁的方法
死锁的预防:
破坏死锁四大必要条件,但是会导致低效的进程运行和资源使用率。
比较常用的是破坏请求保持和循环等待
请求保持:每次进程执行前就申请到他所需要的全部资源,严重的降低了资源的利用率。
循环等待:将资源分成多个层次,一个进程得到某一层次的资源后,才能申请较高层次的资源。当一个进程要释放资源,必须先释放较高层次的资源,
死锁避免(银行家算法):
将系统的状态分为安全状态和不安全状态,每次申请资源前先测试系统状态,若把系统资源分配给申请者就会产生死锁,就拒绝分配,否则接收请求,并为它分配资源。
死锁的检测:
操作系统中的每一刻的系统状态都可以用进程-资源分配图来表示,进程-资源分配图是描述进程和资源申请及分配关系的一种有向图,可用于检测系统是否处于死锁状态。
可出现一下三种状态:
- 如果进程-资源分配图中无环路,则此时系统没有发生死锁
- 如果进程-资源分配图中有环路,且每个资源类仅有一个资源,则系统中已经发生了死锁。
- 如果进程-资源分配图中有环路,且涉及到的资源类有多个资源,此时系统未必会发生死锁。如果能在进程-资源分配图中找出一个 既不阻塞又非独立的进程 ,该进程能够在有限的时间内归还占有的资源,也就是把边给消除掉了,重复此过程,直到能在有限的时间内 消除所有的边 ,则不会发生死锁,否则会发生死锁。(消除边的过程类似于 拓扑排序)
*死锁的解除:
常用的接触死锁的方法有以下四种:
- 结束所有进程的执行,重新启动操作系统 :这种方法简单,但以前所在的工作全部作废,损失很大。
- 撤销涉及死锁的所有进程,解除死锁后继续运行 :这种方法能彻底打破死锁的循环等待条件,但将付出很大代价,例如有些进程可能已经计算了很长时间,由于被撤销而使产生的部分结果也被消除了,再重新执行时还要再次进行计算。
- 逐个撤销涉及死锁的进程,回收其资源直至死锁解除。
- 抢占资源 :从涉及死锁的一个或几个进程中抢占资源,把夺得的资源再分配给涉及死锁的进程直至死锁解除。
四、内存管理
1、常见的几种内存管理机制
- 块式管理 : 远古时代的计算机操系统的内存管理方式。将内存分为几个固定大小的块,每个块中只包含一个进程。如果程序运行需要内存的话,操作系统就分配给它一块,如果程序运行只需要很小的空间的话,分配的这块内存很大一部分几乎被浪费了。这些在每个块中未被利用的空间,我们称之为碎片。(容易产生内存碎片)
- 页式管理 :把主存分为大小相等且固定的一页一页的形式,页较小,相对相比于块式管理的划分力度更大,提高了内存利用率,减少了碎片。页式管理通过页表对应逻辑地址和物理地址。
- 段式管理 : 页式管理虽然提高了内存利用率,但是页式管理其中的页实际并无任何实际意义。 段式管理把主存分为一段段的,段是有实际意义的,每个段定义了一组逻辑信息,例如,有主程序段 MAIN、子程序段 X、数据段 D 及栈段 S 等。 段式管理通过段表对应逻辑地址和物理地址。
- **段页式管理:**结合了段式管理和页式管理的优点简单来说段页式管理机制就是把主存先分成若干段,每个段又分成若干页,也就是说 段页式管理机制 中段与段之间以及段的内部的都是离散的。
分页机制和分段机制有哪些共同点和区别?
- 共同点
- 分页机制和分段机制都是为了提高内存利用率,减少内存碎片。
- 页和段都是离散存储的,所以两者都是离散分配内存的方式。但是,每个页和段中的内存是连续的。
- 区别
- 页的大小是固定的,由操作系统决定;而段的大小不固定,取决于我们当前运行的程序。
- 分页仅仅是为了满足操作系统内存管理的需求,而段是逻辑信息的单位,在程序中可以体现为代码段,数据段,能够更好满足用户的需要。
2、CPU寻址
使用虚拟寻址,CPU 需要将虚拟地址翻译成物理地址,这样才能访问到真实的物理内存
3、为什么要有虚拟地址空间呢?
先从没有虚拟地址空间的时候说起吧!没有虚拟地址空间的时候,程序都是直接访问和操作的都是物理内存 。但是这样有什么问题呢?
1.用户程序可以访问任意内存,寻址内存的每个字节,这样就很容易(有意或者无意)破坏操作系统,造成操作系统崩溃。
2.想要同时运行多个程序特别困难,容易造成一个应用修改了一个地址,另一个应用覆盖了这个修改。
隔了这么久复习一下感觉就是不一样,最后送各位一句话,“温故而知新,可以为师矣”。
|