抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

n个进程互斥,留坑

禁用中断

进入临界区以后禁用中断,离开临界区以后开启中断
一但禁用了中断,整个系统都停止,可能导致饥饿,要是临界区有个死循环就完蛋,多个CPU无法解决问题。

# CPU调度 # 调度指标 CPU使用率(CPU忙状态所占的时间比例),吞吐量(单位时间内完成的进程数量),周转时间(一个进程从初始化到结束,花费的所有时间), 等待时间(进程在就绪队列中等待的总时间), 响应时间(一个请求从提交到产生相应所花费的时间) # FCFS first come first served 先来先服务 # SPN Shortest Process Next 短进程优先 (抢占或者不抢占) 导致长任务饥饿 # HRRN Highest Response Ratio Next 最高响应比优先,等待时间/执行时间 不可抢占,关注等待,防止无期限推迟。

线程管理

线程控制块 TCB

类似PCB

线程优点

一个进程可以同时存在多个线程,各个线程之间可以并发执行,各个线程之间可以恭喜那个地址空间和文件资源。

线程缺点

一个线程崩溃会导致所属进程的所有线程崩溃。

进程与线程

进程是资源分配单位,线程是CPU调度单位
进程拥有完整的资源平台,线程只独享其中的寄存器和栈
线程也有就绪阻塞执行三种状态和状态转化关系
线程能减少并发执行的时间和空间开销,线程创建终止块,切换快,共享资源可直接进行不依赖内核通信。

用户线程和内核线程

用户线程操作系统看不到,内核线程操作系统看得到

用户线程

线程的创建终止同步和调度都是线程库实现的。TCB在进程内部

用户线程的缺点

当一个线程阻塞以后,整个进程都阻塞了,因为操作系统看不到用户心线程,只能看到进程。

进程管理

进程的组成

代码+数据+程序计数器中的值,堆和栈,一组资源(打开的文件)

进程的特点

动态创建,并发或者并行,独立(执行的正确性不受其他进程影响)

进程控制块(PCB)

操作系统为每个进程维护了一个进程控制块,用来保存与该进程有关的各种状态信息。是进程存在的唯一标示。
包含了进程标识信息(父进程,用户标识), 处理器状态信息保存区(用户可见寄存器,PC寄存器,程序状态字,栈指针), 进程控制信息(调度和状态信息、进程键通讯信息,储存管理信息,进程所用资源信息,数据结构连接信息)
PCB的组织方式: 链表或者索引表

进程的创建的时机

系统初始化, 用户的请求,进程的请求

页面置换算法

当缺页中断发生的时候,需要做交换,我们需要尽量减少交换的次数。

最优页面置换算法

将等待下一层的访问时间最长的那个页面置换出去,这个算法不可能实现,但是可作为评价其他算法的标准

先进先出页面置换算法

维护一个队列,FIFO即可
性能很差,被调出的页面可能是要经常访问的页面

最近最久未使用算法 LRU

这个算法基于空间局部性
维护一个页面链表,将刚刚使用过的页面作为首节点,那么缺页中断的时候淘汰链表尾部即可

虚拟内存

覆盖技术

把一些不会相互调用的函数分配到相同的地址空间,当需要调用的时候覆盖内存就可以了。
需要程序员来设计,费时费力,模块的覆盖是时间换空间

交换技术

让暂时不运行的程序交换到磁盘中,当使用的时候换回内存。
只在内存不够的时候交换,磁盘的交换区的空间必须足够大,换出然后换入的时候物理内存不一定一样了,但是我们可以用虚地址解决这个问题。

虚存技术

像覆盖技术一样不把程序所有的内容都放入内存,想交换技术那样,只对进程的部分内容进行交换,

非连续内存分配

优点: 一个程序的物理空间是非连续的,更好的内存利用,允许共享代码与数据(共享库等),支持动态加载和动态链接

分段机制

程序等栈段、堆段、数据段、等等分散到多个物理空间,

硬件堆分段寻址方案

段号+偏移量,高位为段号,低位为偏移量,用段表来映射,段表中存了起始地址和长度信息,CPU可以在访问前做安全检测,

分页机制

让段的长度固定,就成了分页机制。

页帧

物理内存被分割为大小相等的帧

页表

dirtybit+residentbit+clockbit+页帧号

分页机制的性能

访问一个内存单元需要两次访问: 页表+数据
页表太大怎么办,多个程序多个页表,更大了,这个不能放到cpu,放到内存又会很慢

CPU内存

CPU-L1cache-L2cache-memery-disk

逻辑地址空间

抽象、隔离、保护、共享、虚拟化(临时放入disk)

内存管理

程序重定向,分段,分页,虚拟内存,按需分叶虚拟内存

地址空间和地址生成

C程序用变量表示地址,汇编还是用符号,机器码就开始使用逻辑地址了,CPU的MMU中有一段区域来映射逻辑地址到物理地址

约束程序的内存

程序只可以访问他自己的内存,当他访问其他地方的时候,操作系统应该使用安全检测

内存碎片

外部碎片,是分配单元之间的内存碎片
内部碎片,已经分配给了应用程序,但是应用程序没法使用它

连续内存分配

程序启动的时候要分配,运行的时候要分配

操作系统的启动

DISK中放操作系统,BIOS是基本的IO系统,检测外设,Bootloader能够加载OS,BIOS从CS段寄存器;IP指令寄存器开始执行,然后BIOS会POST(加电自检),然后BIOS找到bootloader加载Bootloader,并传递控制权,然后Bootloader找到OS,读到内存吧控制权交给OS

操作系统的中断、系统调用、异常

系统调用是应用程序主动想操作系统发出服务请求,
异常是来源于不良的应用程序的非法指令
中断是来自不同硬件设备到额计时器和网络的中断
我们不能让应用程序直接访问外设,这不安全,另外OS可以提供更好的借口,通用可移植

中断处理

保存现场、查表、中断处理、清楚中断标志、恢复现场

操作系统是什么

是一个控制软件,能管理应用程序,为应用程序提供服务,杀死应用程序,能够分配资源,能够管理外部设备,承上启下,硬件之上,应用程序之下,

Kernel

CPU调度,物理内存管理,虚拟内存管理,文件系统管理,中断处理和设备驱动

Kernel特征

并发,共享(1在一个时间点,只有一个程序能够访问2同时访问),虚拟(利用多到程序设计技术,让每个用户都觉得有一个计算机为他服务),异步(程序走走停停,而不是一直走)