操作系统知识汇总

一、总述
操作系统基本功能:

  1. 进程管理:进程控制、进程同步、死锁处理、处理机调度等。
  2. 内存管理:内存分配、地址分配、内存保护与共享、虚拟内存等
  3. 文件管理:文件存储空间管理、目录管理、文件读写管理和保护等
  4. 设备管理:缓冲管理、设备分配、设备处理、虚拟设备等

二、进程管理

2.1进程和线程

1.进程:进程是资源分配的基本单位,用来管理资源(CPU,内存,网络,文件等资源)。
进程控制块(PCB)是描述进程的基本信息和运行状态,所谓进程的创建和删除,都是对PCB的操作。
PCB如下图:
在这里插入图片描述
进程状态:包括:新的、就绪、运行、堵塞等
程序计数器:计数器表示进程将要执行的下个指令的地址
CPU寄存器:包括累加器AD,堆栈指针、通用寄存器等。发生中断时,这些状态信息与程序计数器一起需要保存,以便进程以后能够正确地继续执行。
CPU调度信息:进程优先级、调度队列的指针和其他调度参数。
内存管理信息:根据操作系统使用的内存系统,可以包括基地址和页表或段表
总之,可以说PCB是一个信息仓库,随着进程的不同而不同。

2.线程:线程是CPU独立调度的基本单位,是程序执行的最小单位。一个进程可以由多个线程,并且多个线程共享进程资源,每个线程有自己的堆栈和局部变量(虽然说线程是拥有自己的堆栈,但地址也是在进程的堆栈地址中,是使用mmap系统调用分配,位置是在堆栈中间,并且与栈stack保持相对位置,故线程栈会与进程堆争抢空间)
在这里插入图片描述
3.进程和线程的区别:
(一)资源方面的区别
进程拥有资源,而线程不拥有资源,线程可以访问隶属进程的资源。
(二)系统开销方面的区别
进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。
而线程是共享进程中的数据,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小,同时创建一个线程的开销要比进程小得多。
(三)通信方面的区别
线程之间的通信更加方便,同一进程下的线程是共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式进行(IPC)进行。
(四)进程间联系与线程间联系的区别
线程间:一个线程死掉之后,不会对其他进程造成影响。
线程间:同一个进程之间的线程,如果一个线程死掉之后,则整个进程就会死掉。

2.2进程状态的切换(生命周期)

**·**就绪状态:等待被调度
**·**运行状态:占用CPU正在运行
**·**阻塞状态:等待资源
注意:
**·**只有就绪态和运行态可以相互转换,其他的都是单向转换。
**·**就绪状态的进程通过调度算法从而获得CPU时间,转为运行状态;而运行状态的进程,在分配给他的CPU时间片用完之后就会转为就绪状态,等待下一次调度。
**·**阻塞状态:缺少需要的资源而从由运行状态转换而来,但是该资源不包括CPU时间,缺少CPU时间会从运行状态转换为就绪状态。
**·**进程只能自己阻塞自己,因为只有进程自身才知道何时需要等待某种时间的发生。

2.3进程调度算法

不同环境的调度算法目标不同因此需要针对不同环境来讨论调度算法。

1.批处理系统
1.1先来先服务FCFS:顾名思义,按照请求的顺序进行调度,有利于长作业,不利于短作业。
1.2短作业优先SJF:按照估计运行时间最短的顺序进行调度,长作业有可能饿死…
1.3最短剩余时间优先:按照估计剩余时间最短的顺序进行调度。

2.交互式系统(Win,linux,Dos)
1.时间片轮转
设定一个队列,逐个对队列中的进程分配一定大小的CPU时间片段。(缺点:大作业所需调度次数太多)
2.优先级调度:
根据进程的优先级高低进行调度。并且进程优先级的大小 = (等待时间 + 进程运行所需时间) / 进程运行所需时间
3.多级反馈队列(是上述两种调度算法的结合):
设定多级队列,CPU时间片段可以是:1,2,4,8…等,
并且CPU时间片段较小的队列中的进程优先级较大,每次小的CPU时间片队列中的进程运行完,如果进程没有完成,则被打入下一个级别的队列中,等待被分配CPU。故只有当小的时间片队列中的进程全部完成之后,才能够继续给下一级别的队列进程进行分配。

2.4进程同步

1.临界区对临界资源进行访问的那段代码成为临界区
若有多个进程可访问同一全局变量,则需要加访问变量所,来保证进程同步。

2.4进程通信

进程同步与进程通信容易混淆,他们的区别在于:
· 进程同步:控制多个进程按一定顺序执行
· 进程通信:进程间传输信息
进程通信时一种手段,而进程同步是一种目的。也可以说,为了能够达到进程同步的目的,需要让进程进行通信,传输一些进程同步所需要的信息。

进程通信分为:直接通信和间接通信;
直接通信:
发送进程直接把消息发送给接受进程,把消息挂在接受进程的消息缓冲队列上,接受进程从消息缓冲队列中取得消息。
间接通信:
间接通信方式是指进程之间的通信需要通过作为共享数据结构的实体。该实体用来暂存发送进程发给目标进程的消息。(类似:电子邮件系统)

2.5进程操作

Linux进程结构可有三部分组成:
· 代码段(程序)
· 数据段(数据)
· 堆栈段(控制块PCB)
一般程序转换为进程,分为以下几个步骤:
1.内核将程序读入内存,为程序分配内存空间
2.内核为该进程分配进程标识符PID和其他所需资源
3.内核为进程保存PID及相应的状态信息,把进程放到运行队列中等待执行,程序转换为进城后可以被操作系统的调度程序调度执行了。

2.5进程死锁

造成死锁的原因:对于资源A和资源B,进程a占用了资源A,进程b占用了资源B,进程a等待进程b释放资源B,而进程b也在等待进程a释放资源A,因为造成死锁。
死锁的必要条件
· 互斥:每个资源都是互斥访问的,要么已经被占用,要么就是可用
· 占有和等待:当进程a获得了某些资源后,可以再请求新的资源
· 不可抢占:已经分配过的资源,不能够被其他进程抢占
· 循环等待:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源

死锁的处理方法
1.鸵鸟策略:目前操作系统采用的方法:处理死锁的方法就是忽略死锁,死锁情况发生后,由用户自己解决。
2.检测死锁并恢复
3.对资源进行动态分配
4.破环死锁四个条件之一,来防止死锁产生

“死锁避免:著名的银行家算法”

三.内存管理

3.1.虚拟内存
虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。

3.2.分页系统地址映射
· 内存管理单元(MMU):管理着地址空间和物理内存的转换。
· 页表:页和页框的映射表。(在虚拟地址的页数到物理内存页数的一个映射表)

3.3 页面置换算法
1.最佳置换算法:所选择的被换出的页面是引用序列中最长时间不再被访问,来保证最低的缺页率
2.最近最久未使用(LRU算法)
3.最近未使用(NRU算法):每个页面有两个状态位:R与M,当页面被访问时设置R=1,当页面被修改设置时设置M=1,其中R位会被定时修改位0。NRU算法优先换出R=0,M=1的页面。
4.先进先出

3.3 分段
虚拟内存采用的是分页技术,也就是将地址空间划分成固定大小的页,每一页再与物理内存进行映射。
若,一个编译器在编译过程中建立了多个表,并且有若干个表是动态增长的,如果使用分页系统的一维地址空间,动态增长的特点会产生表与表之间的覆盖问题。
分段的做法是把每个表分成段,一个段构成一个独立的地址空间。每个段的长度可以不同,并且可以动态增长。

3.4 段页式
程序的地址空间划分为多个拥有独立地址空间的段,每个段上的地址空间划分成大小相同的页,这样既拥有分段系统的共享和保护,又拥有分页系统的虚拟内存功能。

3.5 段页式
· 对程序员的透明性:分页透明,但是分段需要程序员显示划分每个段。
· 地址空间的维度:分页式一维地址空间,分段式二维的。
· 大小是否可以改变:页的大小不可变,段的大小可以动态改变
· 出现的原因:分页主要用于实现虚拟内存,从而获得更大的地址空间。分段主要为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护。

四.设备管理

4.1 磁盘结构
· 盘面:一个磁盘有多个盘面。
· 磁道:盘面上的圆形带状区域,一个盘面可以有多个磁道。
· 扇区:磁道上的一个弧段,一个磁道可以有多个扇区,它是最小的物理存储单位,主要有512bytes和4K两种
· 磁头:与盘面非常接近,能够将盘面上的磁场转换为电信号(读),或者将电信号转换为盘面的磁场(写);
· 制动手臂:用于在磁道之间移动磁头。
· 主轴:使整个盘面转动。

4.2 磁盘调度算法

读写一个磁盘块的时间的影响因素有:
· 旋转时间(主轴旋转磁盘,使得磁头移动到适当的扇区上)
· 寻道时间(制动手臂移动,使得磁头移动到适当的磁道上)
· 实际的数据传输时间
其中,寻道时间最长,因此磁盘调度的主要目标是使磁盘的平均寻道时间最短。

对于很多进程需要访问不同的硬盘存储区域,所以对待处理队列中所有进程所需的访问,有如下磁盘调度:
1.先来先服务:按照磁盘请求的顺序进行调度
2.最短寻道时间优先:优先调度与当前磁头所在磁道距离最近的磁道。
缺点:会出现饥饿现象:磁头可能会一直在一个区域来回寻道。
3.电梯算法:按照一个规定的方向进行磁盘调度

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值