[个人笔记] 操作系统

本文深入介绍了操作系统的核心概念,包括操作系统的基本特征、进程的定义与状态、进程间的通信方式、线程的特性以及CPU调度策略。详细阐述了死锁的四个必要条件和解决方法,并探讨了内存分配的策略与碎片问题。此外,还讨论了磁盘调度算法,如FCFS、SCAN等。
摘要由CSDN通过智能技术生成

1.简介

1.1 什么是操作系统

  1. 操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的程序,是计算机系统的内核与基石;
  2. 操作系统本质上是运行在计算机上的软件程序 ;
  3. 操作系统为用户提供一个与系统交互的操作界面 ;
  4. 操作系统分内核与外壳(我们可以把外壳理解成围绕着内核的应用程序,而内核就是能操作硬件的程序)。

1.2 操作系统的基本特征

并发
共享
虚拟:通过某种技术,将一个物理实体变成若干个逻辑上的对应物。在os中利用虚拟技术实现了虚拟处理器,虚拟存储器和虚拟设备,从而使得进程能够更方便的共享系统资源
异步:进程以不可预知的速度向前推进,但是程序的执行结果是可以再现的

2.进程

进程的定义
进程是一个具有独立功能程序在一定数据集合上运行的一个过程,是系统进行资源分配和调度的一个独立单位
进程的特征:动态,并发,独立,异步
进程实体(进程映像)包括了程序段,相关的数据段还有PCB三个部分
PCB (进程控制块)
包含处理机状态,进程标识符,进程调度信息,进程控制信息
处理机执行状态

  1. 系统态(管态,内核态):具有比较高的特权,能够执行一切指令,访问所有的寄存器和存储区
  2. 用户态(目态):具有比较低的特权的执行状态,仅仅能够执行规定的指令,访问指定的寄存器和存储区
    一般情况下,应用程序只能在用户态运行,不能去执行os指令访问os区域,可以防止应用程序对os的破坏
    进程间通信
    共享存储器系统(共享数据结构(类似缓存)和共享存储区)
    管道通信系统:一个共享文件用来连接读进程和写进程
    消息传递系统:消息队列
    客户机服务器系统
    套接字。远程方法调用,远程过程调用
    线程
    在引入线程之后,线程就是调度和分派资源的基本单位,是能独立运行的基本单位
    在线程进行切换的时候,仅需要保存和设置少量寄存器内容,切换代价低于进程
    同一进程内的线程切换和不同进程内的线程切换之间的区别
    进程间同步
    信号量和管程
    临界区问题
    进程同步机制规则
    空闲让进:没有进程在临界区的时候,允许一个请求进入临界区的进程立即进入自己的临界区
    忙则等待
    有限等待:对要求访问临界资源的进程,应该要保证在有限时间内能够进入自己的临界区,避免进入死等状态
    让权等待:当进程不能够进入自己的临界区的时候,应立即释放处理机,避免进程陷入忙等
    进程和线程
    进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发;
    线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的 实时性,实现进程内部的并发;
    一个程序至少有一个进程,一个进程至少有一个线程,线程依赖于进程而存在;
    进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存。
    并发和并行的区别
    并行是真的同时进行,并发是通过分配时间片流转的方式,看起来是同时进行的,实际上它是单线程。

3.CPU调度

3.1 调度的层次

高级调度:长调度/作业调度,对象是作业
低级调度:进程调度,短程调度,对象是内核级线程
中极调度:内存调度,目的是提高内存利用率和系统吞吐量

3.2 调度准则

资源利用率 cpu利用率=cpu有效利用率/cpu有效利用率+cpu空闲等待时间
公平性 各进程获得合理的cpu时间,不会发生进程饥饿现象
平衡性 系统中各个设备都处于忙碌状态
策略强制执行 某些必须执行的工作,必须予以执行

3.3 调度算法

3.3.1 作业调度(也可以用在进程调度)

FCFS:简单,易于实现,不利于短作业和I/O型作业的运行
SJF(short job first): 能够缩短作业的平均周转时间,但是不利于长作业和紧迫作业的运行
优先级调度算法(PSA)
高响应比优先调度算法(HRRN) 优先权=(等待时间+要求服务的时间)/要求服务时间;照顾到了短作业,同时长作业不会长期等待,但是计算过程增加了系统的开销

3.3.2 进程调度

进程调度的任务:
保存处理机的现场信息
按照某种算法选取进程
把处理器分配给进程
时间片轮转:简单,平均响应时间短,但是不利于紧急任务的执行
优先级调度
多队列调度算法
多级反馈队列

4 死锁

4.1 发生死锁的条件

互斥:资源的排他性使用
请求和保持:进程已经保持了至少一个资源,但是又提出了新的资源请求,而该资源已经被其他进程占有,此时请求进程被阻塞
不可抢占条件:进程已经获得的资源在未使用完之前不能被抢占,只能在进程使用完的时候才能释放
循环等待

4.2 死锁预防

破坏请求和保持
第一种协议:在进程开始运行之前一次性申请进程运行所需要的所有的资源
第二种协议:在进程开始的时候申请运行初期需要的资源,在运行的过程中逐步释放分配给自己的并且已经使用完毕的全部资源,然后再请求新的所需要的资源
破坏不可抢占条件
在一个进程新的资源请求不能够满足的时候,释放已经保持的所有的资源,带之后需要的时候再重新进程申请
实现复杂,代价大
破坏循环等待条件
对所有的资源进行一个排序,申请资源的时候需要按照这个顺序对资源进行申请使用
死锁避免
银行家算法

5 内存分配

5.1 分配方法

单一连续分配
固定分区分配 :分区大小相等,大小不相等
动态分区分配
基于顺序搜索分配算法:如果分割之后的剩余分区太小,那么不进行分割,直接将整个区域分配给他
首次适应FF,地址递增的顺序链接,找大小满足的地方放入
循环首次适应NF:和ff相比,出发点不一样,ff从首部开始,nf从上一次的位置的下一个空闲分区开始
最佳适应BF:按容量从小到大排序
最差适应WF
基于索引搜索的动态分区分配算法
会有外部碎片

5.2 碎片问题解决

分页存储
将进程的逻辑地址空间分若干个页,并对页进行编号;同时将内存的物理地址空间分成若干块(大小和页相同)
在进行资源分配的时候,以块为单位将进程中的若干页分别装入到多个可以不相邻的物理块中;
由于进程的最后一页经常装不满一块,所以就形成了不可利用的碎片(页内碎片)
分页地址中的地址结构 页号加页内偏移
在每一个进程中需要一个页面,使得进程能够找到每个页面对应的物理块
分段存储
段页式存储

5.3 页置换算法

最佳置换算法
在未来比较长的时间内不会再访问的页面 无法预知,理想状态下的算法
先进先出算法
最近最久未使用
最少使用置换
clock置换(又被称为最近未使用算法)
给每一个页设置一个访问位,再将内存中所有的页面都通过链接指针链接成为一个循环队列,在当前页被访问的时候,这个访问页被置1。在选择一个页淘汰的时候只检查访问位,如果是0,那么就换出,如果是1,那么就置为0,暂时不换出,然后检查下一个页面。
改进的clock置换算法
在上面的基础上增加一个标志位表示是否有对页面里面的内容进行修改
优先找没有被访问并且没有被修改的页面进行替换,然后是没有被访问但是被修改;如果都没有,那么把访问位都变成0,在进行重新的扫描;
他能够减少磁盘io操作的次数,但是需要进行多次的扫描

6 磁盘调度

FCFS 先来先服务
SSTF 最短寻道时间优先
SCAN 电梯算法 磁头双向移动
C-SCAN 磁头单向移动
LOOK 和C-LOOK 和上面的区别在于look算法不会扫描到最角上
Nstepscan 进行分组,各组之间使用FCFS,组内使用SCAN
FSCAN 对上面的简化,只维护两组,一个是当前有的请求队列,另一个是扫描期间新出现的请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值