操作系统学习笔记

目录

一、什么是操作系统

 二、系统调度(进程和线程)

1.引起进程调度的原因有以下几类

 2.进程的上下文切换

3.进程的状态:

 4.创建进程的流程

 5.进程调度的算法

三、进程间如何通信

1.管道

 2.共享内存

3.信号量

 4.消息队列

5.Socket

四、内存管理

1.什么是内存

2.逻辑地址 物理地址 线性地址 相对地址 绝对地址

3.为什么要内存管理?什么是虚拟内存?

4.什么是缓存

5.缓存替换算法


一、什么是操作系统

1.是管理计算机硬件和软件资源的计算机程序

2.五大功能:

(1)处理机管理(cpu)

(2)进程管理

(3)内存管理

(4)设备管理

(5)文件系统管理

 二、系统调度(进程和线程)

1.引起进程调度的原因有以下几类

(1)正在执行的进程执行完毕

(2)正在执行的进程调用阻塞原语将自己阻塞,进入睡眠

(3)调用P原语,资源不足而阻塞;调用V原语,激活等待的线程

(4)分时系统中,当前进程的时间片用完

(5)就绪队列中出现优先级更高的进程

 2.进程的上下文切换

(1)概念:

将cup状态从一个进程切换到另一个进程,其实就是运行环境的切换

(2)状态

【1】进程运行时:其硬件状态保存在CPU寄存器中

【2】进程不运行时:寄存器的值保存在进程控制块中,当操作系统要运行一个新的进程时,将进程控制块中相关值送到对应的寄存器中。

注:

1.进程的内存布局:代码段、数据段、堆、栈、寄存器

2.寄存器有:程序计数器、程序状态寄存器、栈指针、通用寄存器等

3.进程的状态:

(1)就绪状态:除cpu以外所有资源准备完毕,只要获得处理机就能立即执行。

-》在一个系统中,可以有多个进程同时处于就绪状态,通常把他们排成一个就绪队列

(2)执行状态:进程已获处理机并正在执行

-》单处理机系统只能有一个进程处于执行状态

(3)阻塞状态 :进程因某事件(如请求I/O,申请缓存空间等)而暂停执行的状态,即进程执行受到阻塞的状态

-》通常阻塞状态的进程排成一个阻塞队列

(4)挂起状态:待补充

-》在某些操作系统中存在挂起状态

 4.创建进程的流程

1.分配初始化PCB( Process Control Block)

2.初始化寄存器

3.拷贝、初始化内存页表

4.从硬盘拷贝程序到内存

5.将进程添加到就绪队列中

6.线程调度时选择该进程,并切换到用户态执行

 5.进程调度的算法

1.先来先服务(FCFS):
-》算法简单,对长作业有利,对短作业不利

2.时间片轮转:

(1)系统将所有就绪进程排成一个队列

(2)按照先来先服务从前往后执行

(3)但每个进程仅能运行一个用户设定的时间片大小(如100ms)

(4)时间到则停止执行,并将未执行完的进程放到队列尾部等待下次执行

注:如果时间片大于所有进程执行时间,那么时间片轮转==先来先服务

-》时间片大小对系统性能影响很大,要选择合适大小 

3.短作业优先:总是调度当前执行时间最短的进程

 -》对长作业不利,甚至由于总是调用短进程,导致长进程始终无法执行

-》不能保证紧迫作业及时处理

-》作业长短只是根据用户提供的估计时间而定,调度不一定准确

4.优先级调度:

(1)非剥夺式

更为重要的进程进入就绪队列,会让当前进程执行完才把处理机交给更重要的。

(2)剥夺式

更为重要的进程进入就绪队列,则立即暂停正在运行的进程,将处理机交给重要的。

5.多级反馈队列调度

(1)设置多个就绪队列,优先级从1~n逐渐降低

(2)每个队列的时间片不同,下一级是上一级的2倍长

(3)进程进入内存按照FCFS进入第一级就绪队列尾部,直到轮到他

(4)若该进程可以在规定时间片处理完成,则可以撤离。若无法完成,则进入第二级队列尾部

(5)再按照FCFS原则将第一级队列执行完,才去执行第二级队列。

(6)再次遇到该进程,同样是能执行完可撤离,不能执行完进入下一级队列尾部,依次类推

注:如果处理机在处理第i级队列进程时,出现优先级较高的队列进程,则会抢占当前处理机,并叭正在运行进程放到第i级队列的末尾。

-》优势如下

1.终端型作业:短作业优先

2.短作业:周转时间短

3.长作业:经过前面几个队列会得到部分执行,不会长期得不到处理

 

三、进程间如何通信

1.管道

(1)无名管道

管道通常指无名管道, 它会创建两个文件描述符:fd[0]为读文件描述符,fd[1]为写文件描述符

特点:

-》半双工:数据只能在一个方向上流动

-》只能用于具有亲缘关系的进程间通信

-》可以看成是一种特殊文件(对于它的读写也可以使用普通的read、write等函数),但是它不是普通文件,不属于任何文件系统,并且只存在于内存中

(2)命名管道

FIFO是一种文件类型,同时具有管道的特性。在数据读出时,FIFO管道中同时清除数据,且“先进先出”。

特点:

-》FIFO可以在无关进程之间交换数据

-》FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统

 2.共享内存

(1)概念:指两个或多个进程共享一个给定的存储区

(2)特点:

-》最快:是最快的一种IPC(inter-Process Communication),因为进程是直接对内存进行存取

-》同步:由于多个进程同时进行操作,所以需要进行同步

-》结合:信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问

3.信号量

(1)概念:它是一个计数器,用于实现进程间的互斥同步

(2)特点:

-》信号量用于进程间同步,若要在进程间传递数据需要结合共享内存

-》信号量基于操作系统的P、V操作,程序对信号量的操作都是原子操作

-》每次对信号量的P、V操作可以加减任意正整数(而不是加1减1)

-》支持信号量组

 4.消息队列

(1)概念:是消息的连接表,存放在内核中。一个消息队列由一个标识符(队列ID)唯一标识。

(2)特点:

-》面向记录:其中的消息具有特定的格式以及特定的优先级

-》独立于发送和接收进程:进程终止时,消息队列及其内容不会被删除

-》支持消息随机查询:不仅支持先进先出读取,并且支持类型读取

5.Socket

更为一般的进程间通信机制,可以用于不同机器之间的进程间通信

四、死锁

  1. 概念
    两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
  2. 死锁产生的原因
    (1)因竞争资源发生死锁
    现象:系统中供多个进程共享的资源的数目不足以满足全部进程的需要时,就会引起对诸资源的竞争而发生死锁现象
    (2)进程推进顺序不当发生死锁
  3. 死锁产生的四个必要条件(有一个条件不成立,则不会产生死锁)
    (1)互斥条件:一个资源一次只能被一个进程使用
    (2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得资源保持不放
    (3)不剥夺条件:进程获得的资源,在未完全使用完之前,不能强行剥夺
    (4)循环等待条件:若干进程之间形成一种头尾相接的环形等待资源关系
  4. 处理死锁的方法
    只要上述一个条件不成立,就不会产生死锁,所以解决死锁的基本方法有:预防死锁、避免死锁、检测死锁、解除死锁。
    (1)预防死锁(破坏四个必要条件)
    资源一次性分配:(破坏请求和保持条件)
    可剥夺资源:即当某进程新的资源未满足时,释放已占有的资源(破坏不可剥夺条件)
    资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)
    (2)避免死锁(银行家算法):
    预防死锁的几种策略,会严重地损害系统性能。因此在避免死锁时,要施加较弱的限制,从而获得较满意的系统性能。由于在避免死锁的策略中,允许进程动态地申请资源。因而,系统在进行资源分配之前预先计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。其中最具有代表性的避免死锁算法是银行家算法。
    (3)检测死锁解除死锁
    通过将资源分配图简化的方法来检测系统状态S是否为死锁状态。
    当发现有进程死锁后,便应立即把它从死锁状态中解脱出来,常采用的方法有:
    剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态。
    撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态消除为止。
    (4)放任不管
    大多数操作系统都采取这种方法,由于死锁发生的概率比较小,所以当发生时候让应用程序去解决就行了,例如通过重启来解决

五、内存管理

1.什么是内存

内存是用来存放数据的硬件

程序执行前都是先放在内存中才能被CPU执行

2.逻辑地址 物理地址 线性地址 相对地址 绝对地址

(1)逻辑地址:是指由程序产生的与段相关的偏移地址,它是相对于当前进程数据段的地址。

(2)线性地址:是逻辑地址到物理地址的中间层。

程序经过编译后产生逻辑地址,或者说段中的偏移地址,再加上基地址就生成了一个线性地址。

若启用了分页机制,则线性地址会再次转换产生一个物理地址,若没有启用分页,则线性地址直接就是物理地址。

(3)物理地址:是指出现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终地址。

若启用分页机制,则线性地址会使用页目录和页表中的项转换为物理地址。

若没有启用,则线性地址直接就是物理地址。

-》相对地址又称为逻辑地址,绝对地址又称为物理地址

3.为什么要内存管理?什么是虚拟内存?

1.为什么要进行内存管理?

(1).为什么要进行内存管理:
因为内存是稀缺资源,容量很少
引入虚拟内存技术,现在的内存管理不是对物理地址的管理,而是对虚拟地址的管理;

(2).如何管理虚拟内存空间:
通过MMU(内存管理单元)的地址转换机制,完成虚拟空间到地址空间的映射;

(3).虚拟内存的思想
虚拟内存的思想是允许程序占用的空间超过内存的大小,把程序划分为大小固定的页,由操作系统根据程序运行的位置把正在执行的页面调入内存,其他程序依旧存储在硬盘上,也叫写时复制;操作系统根据内存配置决定一次加载多少页面到内存;
 

2. 虚拟内存
为了更好的管理内存资源,虚拟内存必须为每个进程提供一个大的(确保进程可以顺利的运行),一致的(我们应该对需要进行运行的进程一视同仁)和私有的(确保不同的进程不会意外的写进另外一个进程的存储空间造成错误)存储空间。

  1. 虚拟内存的作用与缺点
    好处:
    (1) 扩大地址空间。无论段式虚存,还是页式虚存,或是段页式虚存,寻址空间都比实存大。
    (2)内存保护。每个进程运行在各自的虚拟内存地址空间,互相不能干扰对方。另外,虚存还对特定的内存地址提供写保护,可以防止代码或数据被恶意篡改。
    (3)公平分配内存。采用了虚存之后,每个进程都相当于有同样大小的虚存空间。
    (4)当进程需要通信时,可采用虚存共享的方式实现。
  2. 不过,使用虚存也是有代价的,主要表现在以下几个方面:
    (1)建立数据结构占用内存
    (2)虚拟地址到物理地址的转换增加指令执行时间
    (3)页面的换入换出需要磁盘I/O消耗时间
    (4)页中存储不满会浪费内存

4.什么是缓存

概念:是CPU中的一部分,它存在于CPU中

目的:为了解决CPU速度和内存速度的差异

操作:内存中被CPU访问最频繁的数据和指令被复制到CPU缓存中,这样再次使用这些数据时,CPU就可以直接去更快的缓存中取用。

不足:缓存空间小,存放数据有限,因此要经常按照一定的算法来更换

5.缓存替换算法

(1)随机算法(RAND)

概念:使用随机数发生器产生一个要替换的块号,并将该块替换出去。

特点:

-》简单、易于实现

-》没有利用上层存储器的历时信息,没有根访存的局部性原理,不能提高Cache的命中率

(2)先进先出算法(FIFO)

概念:将最先进入Cache的信息块替换出去。

特点:

-》比较容易实现,系统开销小

-》利用了主存的历史信息,但不能正确反映程序局部性原理

-》因为并不能说最先进入就不经常使用,无法提高Cache的命中率

(3)最近最少使用算法(LRU)

概念:将近期最少使用的Cache中的信息块替换出去

特点:

-》比FIFO要好,但不能保证过去不常用将来也不常用

-》需要随时记录Cache中各个块的使用情况,系统开销大,通常需要对每一块设置一个计数器模块

(4)最优替换算法(OPT)Optimal replacement

概念:使用OPT需要先执行一次程序,统计Cache的替换情况作为先验信息。再次执行时就可以用最有效的方式替换,达到最优目的。

前面介绍的几种算法主要以历史信息为依据,但过去页面的调度情况和将来未必相同。

最好的算法应该是选择最久不被访问的页面作为被替换的页面,他就是最优替换算法。

特点:

-》OPT是一种理想化的算法,先执行一遍不现实

-》经常将这种算法用作评价其他替换算法好坏的标准

(5)最少使用算法(LFU)Least Frequently Used

概念:选择最少访问的页面作为被替换的页面

特点:

-》较为合理:利用了页面调度情况的历史信息和程序的局部性,

-》实现起来非常困难:需要为每个页面设置一个很长的计数器

 

分页的问题及解决方案:

页表会很大,页表放置就成了问题
地址是32位的(4G),页面尺寸通常是4K的,因此会产生2^20个页面(4M)的内存。假设并发10个进程,需要40M内存。

-》分析:实际上大部分逻辑地址根本不会用到
-》解决尝试一:只存在用到的逻辑页

由于需要多次访问内存,会降低CPU运行效率,没有直接使用连续地址的偏移一次完成的快。
所以必须连续存放,不能只存放用到的逻辑页

-》解决尝试二:多级页表

多级页表的问题

-》多级页表时间问题的解决:快表

快表是CPU中的寄存器,运行速度非常快,但是存储的内容非常少,每次只能存储最近看过的页表。
通过物理电路可以一次比对,取出当前页号,并定位到物理地址。
如果快表查不到,则只能去多级页表中查找。

快表+多级页表

空间占用少、时间使用少。

-》关键点:TLB的命中率必须要高

1.表尽可能大


 

 

段页结合的实际内存管理

1.虚拟内存

2.具体如何工作?

-》存储时:一个应用程序有一个代码段,首先在虚拟地址中割出一个区域给这个代码段,然后操作系统在虚拟区中的段打成一片片的页,再和页关联在一起。

-》使用时:先用段号+偏移找到虚拟地址,再使用页号+偏移地址找到物理地址,并将其发送到地址总线上进行使用。

 

内存的换入换出

1.虚拟地址(4G),物理地址(1G)
如何使用1G的内存,给用户制造出一种4G的感觉呢?

换入:

用户的代码段是存储在磁盘上的,从磁盘上将需要使用的虚拟内存换入

如果需要使用3G部分的代码段的时候,先将1G部分的换出,再将其换入

具体步骤:请求调页

使用段表和页表查找,发现缺页,则中断。
操作系统去磁盘中读取并换入


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IMUHERO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值