操作系统学习笔记

1、操作系统的定义:操作系统是一个大型的程序系统 ,它是计算机硬件上的第一层软件。他用于软硬件资源的分配管理,控制协调并发活动。抽象硬件,为用户提供友好的接口,为开发人员提供良好的工作环境。

 

2、操作系统的作用:1)进程线程管理,也称cpu管理 2)存储管理  3)设备管理 4)软件资源管理

3、操作系统的特点:并发 、共享、不确定性

并发和并行:十分相似,都是描述程序同时性行为,区别在并行是指不同的程序同时运行在不同的硬件上,程序之间并无联系。并发类似马拉松,大家共用一个跑道,并行类似百米跨栏,个人有个人的跑道

4、中断、异常、系统调用

1)中断:硬件设备对操作系统内核发出处理请求后。内核的处理活动。 例:键盘输入一个字符,但是cpu在处理其他的事,此时就会发生中断

2)异常:非法指令导致的当前指令执行失败,内核的处理活动。例:除零、或者访问了一个不存在的内存

3)系统调用:应用程序主动向操作系统发出服务请求。例:记事本需要读取磁盘文件

 

5、进程和线程

进程:正在运行中的程序。具有完整功能的一段程序在一段指令集上的一次运行过程,是一个动态的概念,具有生命周期

线程:

进程基本状态模型:进程的基本状态模型有三个阶段 创建 》就绪》运行》等待 进程创建初始化需要的资源,比如内存,创建完成进入就绪队列,进入调度器调度,因为操作系统的进程调度是非公平的,除非此进程的优先级较高,否则只能听天由命的被随机调度。一旦被调用,进入运行态。拥有CPU的使用权。正在运行的进程如果再等待一个资源,就会进入等待状态,放弃CPU的使用权。当等待的资源到来,由等待进入就绪态,再次进入就绪队列,开始竞争CPU。如果时间片用完还未运行完成,再次进入就绪态循环。如果运行完成,释放资源,关闭进程。

 

进程的创建:一般的进程都是由父进程创建的, 父进程调用fock方法,将自己复制一份,此时子进程和父进程除了PID不同其他的都一样,然后再经过一次系统调用,复写子进程,此时子进程才算真正的被创建,子进程的代码和进程调度块里面的内容和父进程已经无关。但是这里子进程的创建明显有两个重复的复制步骤,所以现代的操作系统都经过了优化,windows只经过第一次复制,uniux采取懒复制,什么时候真正运行进程才进行复制。系统的第一个进程是由操作系统纯代码实现实现的。

 

进程的调度:多进程并发执行就必然要考虑进程之间如何分配CPU,单CPU要考虑如何调度进程,多CPU不仅要考虑进程的调度,还要考虑空闲CPU的分配。

进程的调度除了要考虑CPU和进程的挑选,还要考虑进程调度的时机,这里又分为非抢占式系统和抢占式系统,前者的调度很简单,因为非抢占式系统的CPU智能由进程自己放弃,操作系统无法强制停止一个进程,所以只需要一个就绪队列,线程一个一个执行即可,抢占式系统比较复杂,调度时机的选择也需要考虑很多因素,下文介绍。

进程调度准则:进程调度需要考虑cpu使用率、吞吐量、周转时间、等待时间、响应时间等等。不同情况的侧重点不同,使用时就需要权衡

进程调度算法:

  • 先来先服务算法:优点是简单,缺点是时间波动大,如果排在一个时间比较长的进程后面需要等待很长时间
  • 短进程优先算法:优点是周转时间比其他算法都短,坏处是导致饥饿,执行时间比较长的进程可能一直不会执行。可抢占,于是就有了一个剩余最短时间优先原则
  • 最高响应比优先算法:基于短进程优先的更改进,可抢占,根据优先级调度,某个进程等待的时间越长优先级越高
  • 时间片轮转算法:时间分为时间片,一个时间片用完按照先来先服务算法,切换到下一个就绪进程,难点是确定时间片的大小,时间片太大会退化为先来先服务算法,时间片太小上下文切换的开销回很大,优点是很稳定
  • 多级队列调度算法:就绪队列按照不同的要求分成若干子队列,不同的需求队列采用不同的算法

进程的通讯:进程的通讯包括直接通讯和间接通讯,直接通讯是两个进程之间建立一个管道,直接进行消息传递,间接通讯是进程将消息传递给操作系统,再由操作系统传递信息。

  • 信号:类似与中断的一种快速响应机制,比如ctrl + c能强制停止程序。优点是传输的数据量小,反应迅速,缺点也是传输的数据量小而单一,使用范围很有限
  • 管道:进程间基于内存文件的通信机制,是一种间接通讯,通讯时先创建一个管道,一个进程往管道里写文件,另一个进程从管道里读文件,两个进程是相互透明的。ls | grep xxx
  • 消息队列:由操作系统维护的以字节序列为基础的间接通讯机制,消息队列独立于创建它的内存,不会因为创建进程死了就不存在。优点是传输的信息量大
  • 共享内存:将同一物理地址的内存映射到若干进程的内存地址空间。不同进程的物理内存是独立的,需要考虑如何共享。优点是速度最快,没有系统调用过程,缺点是不提供同步机制

还有其他种类的通信机制:信号量、有名管道、高级管道、套接字。(一共8种)

 

操作系统内存分配

概述:操作系统的存储位置分为cpu寄存器、内存和外存,三者访问速度差距很大,为了协调好三者的关系,操作系统必须采用一定的内存分配策略。操作系统对内存的管理的最终目的是提升系统效率,包括时间效率和空间利用率。方便存储空间的管理。使内存空间虚拟化,抽象化,方便程序的编写。

连续内存分配:

  1. 早期的操作系统的内存分配是连续而且固定位置的,编写程序的时候需要使用内存的时候直接写出物理内存地址。而且程序拥有的内存空间是写死的,比如早期的功能手机,除了系统自带软件不能安装其他软件,因为系统一开始就把哪些程序运行时拥有哪些空间分配好了,而且不能变动。
  2. 后来操作系统可以动态的分配内存,即程序运行前,自己所拥有的空间是不知道的,使用内存必须申请,如果系统拥有足够的空间,就把空余的空间分配给程序使用。这里又分为静态分配和动态分配
    •   静态分配:程序申请内存,操作系统分配给他一整块内存空间。无论这块内存空间是否被用完,都不会再给其他程序使用,除非它被释放
    •   动态分配:程序申请内存,操作系统按照程序的需求分配对应大小的空间,基本没有多余的空间。这种分配方式需要记录已分配空间和空闲空间。并且进行碎片的分配和整理,有助提高内存的利用率

连续内存分配最大的弊端就是会产生大量的空间浪费。静态分配不必说,动态分配一样会有大量的碎片空间无法得到充分利用。

非连续内存分配:

非连续内存分配原理是把内存空间逻辑上分成一个个小的内存块,操作系统建立一个逻辑内存地址-物理内存地址的映射表。程序申请的是逻辑内存地址。非连续内存分配可以极大的提升内存利用率,但是管理起来很有挑战性,首要的问题就是每一个内存块应该被分成多大,内存块过大利用率就会下降,内存块太小,管理开销就会很大,所以两者之间需要有一个平衡

 

 

虚拟存储

概念:把一部分不是紧要的代码,数据等放入外存中,当需要时再加载到内存,扩展内存的逻辑空间。

覆盖技术:把程序划分为相对独立的模块,同时把代码和数据分为必要部分和可选部分,必要部分的代码和数据常驻内存,可选部分的数据只在需要的时候加载到内存,并且,可选部分一般时使用同一块内存区域,相互覆盖。所以,可选部分的代码不允许有调用的关系

覆盖技术牺牲了一部分运行效率换区更大的内存空间,实现了逻辑上可用的内存空间比实际内存空间大。缺点是编程的难度增加了,程序员需要确定哪些模块是可选的,哪些模块可以相互覆盖。

交换技术:当一个程序准备加载到内存时候发现计算机的内存不够用了,原因是其他进程占用了大量的内存空间,理论上说最后这个程序试无法加载到内存的, 但是实际上并不是所有的程序当前都是必须执行的,这样我们就可以把那些当前不是很紧急的进程放到外存中,腾出一定的空间给新程序使用。交换技术的调度单位是进程,可以由操作系统实现。

可以看出,覆盖技术和交换技术实现的原理是一样的,但是讨论的情况却不一样,覆盖技术针对同一个程序,交换技术讨论的是多个程序。

 

局部性原理:

局部性原理是程序运行的一般特征,分为三类:时间局部性,空间局部性,分支局部性

时间局部性:一条指令的连续几次执行,和一段数据的连续几次访问一般集中在一段时间

空间局部性:当前指令和附近几条指令,当前访问的数据和邻近的几条数据一般集中存储在一段内存空间

分支局部性:一条跳转指令的连续两次执行一般跳转到同一块内存区域

局部性原理可以被利用与虚拟内存,可以极大的提升内存替换的合理性。

 

 

缺页异常:

1、使用虚拟内存,程序加载时优先加载必须的代码,可选代码和数据需要的时候才被加载,操作系统到内存中寻找数据。

2、当数据不存在时,就出现了缺页异常。

3、程序把缺页异常交给操作系统的异常处理机制,操作系统根据程序需要的数据的逻辑内存地址到磁盘中寻找到需要的数据。

4、操作系统到内存中找到一个空页,将磁盘的数据加载到空白页,再次触发程序。

 

置换算法:当以上的第四步出现内存中不存在空页,就需要把内存中不太重要的数据转存到外存,再将需要的数据从外存中复制进来,此时就需要置换算法

目标:尽可能减少页面调入调出的次数

算法:

最优算法:预测每个页面未来的访问情况,把未来最长时间不会被访问的的页面置换掉。实际无法实现,但是可以作为其他算法性能的评判标准

先进先出算法:替换在内存驻留时间最长的页面。算法有缺陷,最差效率极差,很少单独使用。

最近最久未使用算法:替换离当期时间最远的那个页面。近似最优算法

LRU算法:维护一个链表,首节点是最近被访问的页面,尾节点是最久未访问的页面,每次访问一个页面之后就将其换到首节点。每次替换都替换尾节点。缺点是内存消耗大

 

转载于:https://www.cnblogs.com/fanjie/p/7202627.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值