操作系统

1.用户态和内核态

  • 内核态:操作系统管理程序运行的状态,执行的是特权指令(特权指令是只只能由操作系统执行的指令,包括启动I/O设备、设置时钟、控制中断屏蔽位、清内存等)
  • 用户态:用户程序运行时的状态,处于第三级特权,执行的是非特权指令

用户态到内核态的转换主要是通过:系统调用,异常,中断
内核态到用户态的转换主要是通过:设置程序状态字程序状态字又称PSW,主要用来控制指令执行顺序并保留和指示与程序有关的系统状态,实现程序状态的保护和恢复

2.中断

中断是指CPU对系统中或系统外发生异步事件的响应,异步事件是指无一定时序关系的随机发生事件,CPU暂停正在执行的程序,保留现场后自动去执行相应事件的处理程序,处理完成后返回断点,继续执行被打断的程序。中断是由与现行指令无关的中断信号触发的,且中断的发生与CPU处在用户模式或内核模式无关,在两条机器指令之间才可响应中断,一般来说,中断处理程序所提供的服务不是当前进程所需的

中断分为强迫性中断和自愿性中断

  • 强迫性中断是正在运行的程序所不期望的,由于某种硬件故障或外部请求引起的中断
  • 自愿性中断是用户在程序中有意识安排的中断

3.进程

进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配、调度和保护的独立单位,进程具有以下基本特征:

  • 动态性:因创建而产生,由调度而执行,因得不到资源而暂停执行,最后由撤销而消亡
  • 并发性:指多个进程实体同时存在于内存中,能在一段时间内同时运行
  • 独立性:进程是一个能独立运行的基本单位,也是系统进行资源分配和调度的基本单位
  • 制约性:进程间由于对资源的争用而相互制约
  • 异步性:进程按各自独立的、不可预期的速度向前推进
  • 结构性:进程包含了数据集合和其上运行的程序,进程由三要素组成:程序、数据和进程控制块

4.进程和程序的区别

  • 进程更能真实的描述并发,而程序不能
  • 进程是由程序和数据和进程控制块组成的
  • 程序是静态的,而进程是动态的
  • 进程有生命周期,而程序是相对长久的
  • 一个程序可以对应多个进程,一个进程也可以对应多个程序
  • 进程具有创建其他进程的功能,而程序没有

5.进程控制块

进程控制块(PCB)是操作系统为了管理进程设置的一个专门的数据结构用它来记录进程的外部特征,描述进程的运动变化过程,PCB处于核心段,用户进程不能直接访问,修改自己的PCB

6.进程上下文

进程运行时操作系统需要为其设置相应的运行环境,把进程物理实体和支持进程运行的环境合称为进程上下文,即进程上下文包括进程本身和运行环境,是对进程执行活动全过程的静态描述,是由进程的用户地址空间内容、硬件寄存器内容以及与该进程相关的核心数据组成

7.进程的创建:

从技术上看,新进程的创建都是由于一个已经存在的进程执行了一个用于创建进程的系统调用而创建的,四种主要事件会导致进程的创建:

  • 系统初始化
  • 正在运行的程序执行了创建进程的系统调用
  • 用户请求创建一个新的进程
  • 一个批作业的初始化

在windows中,一个win32函数调用CreateProcess负责进程的创建和把正确的程序装入新的进程中;而在Unix系统中,只有一个系统调用可以用来创建进程:fork

8.进程的终止

进程的终止通常由下列条件引起:

  • 正常退出(自愿的)
  • 出错退出(自愿的)
  • 严重错误(非自愿的)
  • 被其他进程杀死(非自愿的)

9.操作系统中进程调度策略

  • 先来先服务调度算法(FCFS):先来先服务算法是最简单的调度算法,处于就绪态的进程按先后顺序链入到就绪队列中,而先来先服务调度算法按照就绪进程进入就绪队列的先后次序选择当前最先进入就绪队列的进程来执行,FCFS调度算法采用的是不可抢占的调度方式,一旦一个进程占有处理器,就一直运行下去,直到该进程完成其工作,或因等待某一事件而不能继续执行,才释放处理器。FCFS算法有利于时间长的进程,不利于时间短的进程,有利于CPU繁忙的进程,不利于I/O繁忙的进程
  • 短作业优先(SJF):对预先执行时间最短的作业优先执行,它即可采用可抢占式,也可以采用不可抢占调度方式,可抢占的段进程优先调度算法通常也叫最短剩余时间优先(SRTF)调度算法
  • HRN算法:HRN算法是介于FCFS和SJF之间的一种方法,HRN算法调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行,HRN响应比R=1+作业等待时间/作业处理时间
  • HPF算法:基于优先数的调度算法,优先数有两种:用户规定优先数(外部优先数)和系统计算优先数(内部优先数)
  • 时间片轮转算法(RR):系统将所有的就绪进程按照先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。

10.有了进程,为什么还需要线程

进程可以使多个程序能并发执行,以提高资源的利用率和系统的吞吐量,但是进程还具有一些缺点:

  • 进程在同一时间只能干一件事
  • 进程在执行的过程中如果阻塞,整个进程就会挂起,即使进程中有些工作不依赖于等待的资源

当我们引入线程时,因为一个进程中的多个线程,它们之间使用相同的地址空间,而且线程间彼此切换所需的时间也远远小于进程间切换所需要的时间,减少性能的消耗

11.为什么进程之间需要通信

  • 一个进程需要将它的数据发送给另外一个进程
  • 多个进程之间共享同样的资源
  • 一个进程需要向另外一个或一组进程发送消息,通知它们发生了某种事件
  • 有些进程希望完全控制另外一个进程的执行

12.进程间通信的几种方式

匿名管道

管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有血缘关系(指父子进程关系)的进程间使用

有名管道

有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间通信

信号量

信号量本质上是一个计数器,可以用来控制多个进程对共享资源的访问,它通常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源,因此主要作为进程间以及同一进程内不同线程之间的同步手段

消息队列

消息队列是由消息组成的链表,存放在内核中

信号

信号是一种比较复杂的通信方式,用于通知接收进程某一事件已经发生

共享内存

共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问

套接字

12.1.线程间通信的方式

  • 临界区:系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源
  • 互斥量(synchronized/Lock):采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限
  • 信号量:它允许多个线程在同一时刻去访问同一资源,但一般需要限制同一时刻访问资源的最大线程数目
  • 事件(wait/notify):通过通知操作的方式来保持多线程同步

13.用户线程和内核线程的区别

根据操作系统内核是否对线程可感知,可以把线程分为内核线程和用户线程

  • 内核线程内核线程建立和销毁都是操作系统负责、通过系统调用完成的,内核维护进程及线程上下文信息以及线程切换,一个内核线程由于I/O操作而阻塞,不会影响其他线程的运行
  • 用户线程用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心

14.顺序程序与并发进程

顺序环境是指在计算机系统中只有一个程序在运行,这个程序独占系统中所有的资源,顺序程序具有以下特征:

  • 程序执行具有顺序性
  • 程序执行具有封闭性,独占资源,执行过程中不受外界影响
  • 程序执行结果具有确定性

而并发进程运行于并发环境中,在一定时间内物理机器有两个或者两个以上的程序同处于开始运行但尚未结束的状态,并且次序不是事先确定的,并发进程具有以下特征:

  • 程序结果的不可再现性,并发程序执行的结果与执行的相对速度有关,是不确定的
  • 在并发环境下程序的执行是间断性的,处于一种“执行——暂停——执行”的状态
  • 资源共享,系统中的资源被多个进程使用
  • 独立性和制约性

14.进程的同步与互斥

进程同步是指系统中多个进程中发生的事件存在某种时序关系,需要相互合作,共同完成一项任务。进程的同步主要源于进程合作,是进程间共同完成一项任务时直接发生相互作用的关系,为进程之间的直接制约关系
进程的互斥源于资源共享,系统中的某些资源一次只允许一个进程使用,称这样的资源为临界资源,由于各进程要求共享资源,而有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥。进程的互斥为间接制约关系

15.临界区相关

系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或者共享变量在进程中涉及临界资源的程序段叫临界区,或称为互斥区
使用临界区一般应该遵循以下的原则:

  • 有空让进:当无进程在互斥区时,任何有权使用互斥区的进程可进入
  • 无空等待:不允许两个以上的进程同时进入互斥区
  • 有限等待:任何进入互斥区的要求应在有限的时间得到满足
  • 让权等待:处于等待状态的进程应放弃占用CPU,以使其他进程有机会得到CPU的使用权

16.预防死锁的动态方法——银行家算法

  • 银行家有一笔周转资金
  • 客户要求分期贷款,如果客户能够得到各期贷款,就一定能够归还贷款,否则就一定不能归还贷款
  • 银行家采用的具体方法是看他是否有足够的剩余资金满足某一个需求的客户,如此反复下去
  • 如果所有的投资最终都被收回,则该状态是安全的,最初的请求可以被批准

我们可以把操作系统看成是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。

  • 当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按照当前的申请量分配资源,否则就推迟
  • 若进程在执行过程中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量,若超过则拒绝分配资源,若没有超过则再测试系统现存的资源是否能满足所需的资源数,若能满足则分配资源

17.页式存储管理和段式存储管理

在页式存储管理中

  • 页框:将内存空间划分为大小相等的若干存储区域,每个区域称为一块,该区域又称页框,从0开始连续编号,将物理内存划分为页框的特点是:分页是为了管理,物理内存中并没有按用户作业分区的概念,分页仅仅是为了信息管理构造用,为了提高工作效率,用户不可见
  • 页面:将程序逻辑地址空间按照页框的大小划分为若干片,每一片称为一个页面,从0开始连续编号
  • 页表:关于页面和页框的对应关系
页号页框号
1
2
  • 请求表:用来确定进程的地址空间的各页在内存中的实际位置,请求表中存放着进程号,和对应的页表起始地址以及该进程对应的页表长度
关于页面和页框的区别:

一个页面指的是一系列地址空间和包含于其中的数据;分页单元认为所有的内存被分成固定长度的页框,每个页框可以包含一页,也就是说一个页框的长度和一页的长度是相同的。
页框是物理内存中的一部分,是一个实际的存储区域,页只是一个数据块,可以存放在页框中

页式地址转换

在这里插入图片描述
从分区存储管理到页式存储管理,主要是为了提高内存的利用率。段式存储管理主要是为了满足用户在编程和使用上多方面的要求而引入的另一种离散式存储管理方式,包括以下要求:

  • 方便用户编程:用户希望按照程序模块来划分段,并按段来 分配内存
  • 分段共享:能实现以信息逻辑单位为基础的分段式共享方式,而在页式系统中每一页只是存放信息的物理单位,不便实现信息共享
  • 分段保护:能实现多道程序环境下,内存中以信息的逻辑单位为基础的保护
  • 动态链接:即在作业运行之前,并不把几个目标程序段链接起来,而是先将主程序所对应的目标程序装入内存中并启动运行,当运行过程中需要调用某段时,才将该段调入到内存中
  • 动态增长

段式管理基本原理:

  • 段式存储管理将进程对应程序和数据按照其本身的特性分成若干段,每个段定义了一组有意义的逻辑信息单位,如主程序段、子程序段、数据段和工作区等,每个段都从0开始编址,段长度由相应逻辑信息单位的长度决定。段与段之间的地址不一定连续,而段内地址是连续的。
  • 进程的地址空间,由于分成多个段,标识进程的地址时,要同时给出段名和段内地址。段式管理以段为单位分配内存,通过地址映射机构把段式地址转换为内存物理地址
  • 段号之间无顺序关系(这里我的理解是:对于页式存储管理来说,页号是按照页框大小来划分的,那么页与页之间的逻辑地址是存在顺序关系的,因为页号大小固定,而对于段式存储管理,虽然段号之间连续,但是段与段之间的逻辑地址并不连续)每段定义的是一组逻辑上完整的程序或者数据,每段都是首地址为0、连续的一维线性空间
  • 段式存储管理的优点在于没有内碎片,通过紧凑处理还可消除外碎片,便于实现内存共享和保护,并可针对不同类型的段采用不同的保护机制和共享机制
段式地址转换

段表类似于页表,每个段在表中占有一条表项,用于记录该段在内存中的起始地址和段长度,段表存放在一组寄存器中

段号段始址段长度
0
1
2
3

段式地址转换如下:
在这里插入图片描述

段式和页式的区别

相同点:

  • 页式存储管理和段式存储管理的共同点体现在两者都是采用离散分配方式
  • 且都要通过地址映射机构来实现地址变换

不同点:

  • 页是信息的物理单位,页式管理是为了实现离散分配方式,以减少内存的外碎片,提高内存的利用率,或者说页式管理是出于系统管理的需要。 段是信息的逻辑单位,含有一组意义相对完整的信息,段式存储管理的目的是为了能更好的满足用户需要
  • 页的大小固定且由系统决定,逻辑地址由页号和页内地址组成,可由机器硬件实现。段长度不固定,取决于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分
  • 页式管理中,进程地址空间是一维的,是单一 的线性地址空间。而段式管理中,进程空间是二维的,编程人员在标识一个地址时,需要给出段名,又要给出段内地址

18.虚拟存储管理

分区存储管理、分页存储管理、分段存储管理都是实存策略,要求进程在开始运行之前,将进程对应的全部程序都装入到内存中。由于物理内存地容量是有限地,当用户程序所要求的内存空间超出内存总容量时,采用实存管理策略,程序将得不到执行,但实际上许多进程在运行时并非要用到其全部程序,因此一次性地全部装入是一种对内存资源地浪费。
虚拟存储技术提供了一种扩充存储容量的方法,从逻辑上扩充内存容量,使用户感觉可以运行任意大小的程序,虚拟存储技术就是基于程序运行的局部性规律:

  • 时间局部性:如果某条指令被执行或某个数据结构被访问,则在不久的一段时间内该指令可能再次执行,该数据结构可能再次被访问
  • 空间局部性:若某个存储的单元被访问,则在不久之后,其附近的存储单元也可能被访问
  • 顺序局部性:通常情况下,CPU跟踪程序的执行是按照内存中的连续地址进行的

虚拟存储器

虚拟存储器就是基于虚拟技术实现的,是由操作系统提供的一个假想的存储器,它不是实际的内存,而是操作系统对物理内存的逻辑扩充
虚拟存储器具有四个特征:

  • 离散性指内存分配采用离散分配方式
  • 虚拟性指从逻辑上扩充内存容量,使用户编程所用到的地址空间远远大于实际容量
  • 多次性多次性是指进程不是一次性装入内存的,而是被分成若干部分,分多次调入内存。即在进程开始运行前不必将进程全部装入,只需将当前要运行的那部分程序和数据装入内存,运行 到哪一部分就再分别将它装入或换入内存中
  • 对换性对换性是指系统允许进程的部分在运行过程中换入内存或换出到对换区

虚拟存储器的实现方法:

  • 请求页式存储管理
  • 请求段式存储管理
  • 请求段页式存储管理

请求页式存储管理

请求页式存储管理称为动态页式管理,是在页式存储管理的基础上发展来的,两种机制的基本思想一样,其主要的不同之处在于请求页式存储管理中,只有当前需要的一部分页面在内存中,而页式存储管理中,一个进程的所有页面全部在内存中
请求页式存储管理的页表如下:
在这里插入图片描述

页面置换算法
  1. 最佳置换算法(OPT):即选择永不使用的或者最长时间内不再被访问的页面进行置换,这是一种理想化 的算法,具有最好的性能,但实际上却难以实现
  2. 先进先出置换算法(FIFO):选择最先进入内存的页面进行置换,即选择在内存中驻留时间最长的页面进行淘汰,但该算法不符合程序运行局部性规律中的时间局部性(即某条指令被执行,则不久的将来会再次执行,某个数据块被访问,则在不久的将来将会被再次访问)
  3. 最近最久未使用置换算法(LRU):选择最近一段时间内最长时间没有被访问过的页面进行置换
  4. 时钟置换算法(Clock):也称最近未使用算法(NRU),是LRU和FIFO的折中算法,每页设置一位访问位,若某页被访问时,其访问位被置1。置换时首先检查访问位,如果是0,则选择将该页换出,如果是1,则重新将它复0,暂不换出而给该页第二次驻留内存的机会,再按照FIFO算法检查下一个页面。当检查到队列中的最后一个页面时,若其访问位仍为1,则再返回队首再去检查第一个页面。
  5. 最少使用算法(LFU):把当前为止被访问次数最少的页面淘汰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值